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 | 6312dd6d2b19d158773d14ed8cefa3f20272d488 (patch) | |
tree | b846ffc38c8d582357836259cc154c923609e8a6 /media | |
parent | ac92fb05ff6fc4bccbfc65c9b123951ac4f8850e (diff) | |
download | frameworks_base-6312dd6d2b19d158773d14ed8cefa3f20272d488.zip frameworks_base-6312dd6d2b19d158773d14ed8cefa3f20272d488.tar.gz frameworks_base-6312dd6d2b19d158773d14ed8cefa3f20272d488.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)); |