summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/StagefrightRecorder.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-12-02 14:48:23 -0800
committerJames Dong <jdong@google.com>2010-12-02 14:50:07 -0800
commit1cc73922339a110d7ffc47e8842f958492dd85bf (patch)
treeebca916029b5e609bd1528d1b004c15fe8661fda /media/libmediaplayerservice/StagefrightRecorder.cpp
parent3bac12183aa69cc83e1d19b49d4b06a75318d694 (diff)
downloadframeworks_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/libmediaplayerservice/StagefrightRecorder.cpp')
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.cpp12
1 files changed, 10 insertions, 2 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;
}