summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author James Dong <jdong@google.com> 2010-12-02 15:01:46 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2010-12-02 15:01:46 -0800
commitded695bb30e9c88c48c37e6fa5736771c6011b3d (patch)
tree3560e79fa441d3fc801910c21bbb528b85b02c2d
parentf3332a1d874649dacc048e0e1fe3a2a034bb154c (diff)
parent6312dd6d2b19d158773d14ed8cefa3f20272d488 (diff)
Merge "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"
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.cpp12
-rw-r--r--media/libstagefright/codecs/avc/enc/AVCEncoder.cpp2
-rw-r--r--media/libstagefright/codecs/m4v_h263/enc/M4vH263Encoder.cpp2
3 files changed, 12 insertions, 4 deletions
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index d2dbf0d559af..cee92d27d9fd 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 e6a0976df1ad..e3292e63c679 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 c7a475b78505..15ed2193ae61 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));