diff options
author | James Dong <jdong@google.com> | 2010-12-02 14:48:23 -0800 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-12-02 14:50:07 -0800 |
commit | 1cc73922339a110d7ffc47e8842f958492dd85bf (patch) | |
tree | ebca916029b5e609bd1528d1b004c15fe8661fda /media | |
parent | 3bac12183aa69cc83e1d19b49d4b06a75318d694 (diff) | |
download | frameworks_av-1cc73922339a110d7ffc47e8842f958492dd85bf.zip frameworks_av-1cc73922339a110d7ffc47e8842f958492dd85bf.tar.gz frameworks_av-1cc73922339a110d7ffc47e8842f958492dd85bf.tar.bz2 |
If camera source uses the metadata, we must use HW encoder
Software video encoders are not able to deal with non-YUV metadata in the video buffer sent from camera
bug - 3242213
Change-Id: I97361ed88b2a687190e5129459011afff7f32c2d
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 12 | ||||
-rw-r--r-- | media/libstagefright/codecs/avc/enc/AVCEncoder.cpp | 2 | ||||
-rw-r--r-- | media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index d2dbf0d..cee92d2 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -1164,8 +1164,11 @@ status_t StagefrightRecorder::setupVideoEncoder( CHECK_EQ(client.connect(), OK); // Use software codec for time lapse - uint32_t encoder_flags = (mCaptureTimeLapse) ? OMXCodec::kPreferSoftwareCodecs : 0; - if (mIsMetaDataStoredInVideoBuffers) { + uint32_t encoder_flags = 0; + if (mCaptureTimeLapse) { + encoder_flags |= OMXCodec::kPreferSoftwareCodecs; + } else if (mIsMetaDataStoredInVideoBuffers) { + encoder_flags |= OMXCodec::kHardwareCodecsOnly; encoder_flags |= OMXCodec::kStoreMetaDataInVideoBuffers; } sp<MediaSource> encoder = OMXCodec::Create( @@ -1173,6 +1176,11 @@ status_t StagefrightRecorder::setupVideoEncoder( true /* createEncoder */, cameraSource, NULL, encoder_flags); if (encoder == NULL) { + LOGW("Failed to create the encoder"); + // When the encoder fails to be created, we need + // release the camera source due to the camera's lock + // and unlock mechanism. + cameraSource->stop(); return UNKNOWN_ERROR; } diff --git a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp index e6a0976..e3292e6 100644 --- a/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp +++ b/media/libstagefright/codecs/avc/enc/AVCEncoder.cpp @@ -178,7 +178,7 @@ AVCEncoder::AVCEncoder( mInputFrameData(NULL), mGroup(NULL) { - LOGV("Construct software AVCEncoder"); + LOGI("Construct software AVCEncoder"); mHandle = new tagAVCHandle; memset(mHandle, 0, sizeof(tagAVCHandle)); diff --git a/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp b/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp index c7a475b..15ed219 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp @@ -178,7 +178,7 @@ M4vH263Encoder::M4vH263Encoder( mInputFrameData(NULL), mGroup(NULL) { - LOGV("Construct software M4vH263Encoder"); + LOGI("Construct software M4vH263Encoder"); mHandle = new tagvideoEncControls; memset(mHandle, 0, sizeof(tagvideoEncControls)); |