diff options
author | James Dong <jdong@google.com> | 2010-08-27 14:36:02 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-27 14:36:02 -0700 |
commit | b354e7916ee7b5fffb61c3ede30c3d3b0c26b475 (patch) | |
tree | e170362b78cf3062c133cadd7c841ad932c734e9 /media/libstagefright/OMXCodec.cpp | |
parent | 23f0d683c230aab3310ca244ff99e2130a770e93 (diff) | |
parent | 824c9ff4a55e86faae4f8f158977329909cbfaf6 (diff) | |
download | frameworks_av-b354e7916ee7b5fffb61c3ede30c3d3b0c26b475.zip frameworks_av-b354e7916ee7b5fffb61c3ede30c3d3b0c26b475.tar.gz frameworks_av-b354e7916ee7b5fffb61c3ede30c3d3b0c26b475.tar.bz2 |
am df8356ff: Merge "Workaround for a QCOM issue where the output buffer size advertised by the AVC encoder is occasionally too small." into gingerbread
Merge commit 'df8356ff9a2f1fab44bb3aea26c5da0a9f23a4ad' into gingerbread-plus-aosp
* commit 'df8356ff9a2f1fab44bb3aea26c5da0a9f23a4ad':
Workaround for a QCOM issue where the output buffer size advertised by the AVC encoder
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 4741b1d..165cec9 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -353,6 +353,15 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) { quirks |= kRequiresLoadedToIdleAfterAllocation; quirks |= kRequiresAllocateBufferOnInputPorts; quirks |= kRequiresAllocateBufferOnOutputPorts; + if (!strncmp(componentName, "OMX.qcom.video.encoder.avc", 26)) { + + // The AVC encoder advertises the size of output buffers + // based on the input video resolution and assumes + // the worst/least compression ratio is 0.5. It is found that + // sometimes, the output buffer size is larger than + // size advertised by the encoder. + quirks |= kRequiresLargerEncoderOutputBuffer; + } } if (!strncmp(componentName, "OMX.qcom.7x30.video.encoder.", 28)) { } @@ -906,6 +915,10 @@ void OMXCodec::setVideoInputFormat( video_def->nBitrate = bitRate; // Q16 format video_def->eCompressionFormat = compressionFormat; video_def->eColorFormat = OMX_COLOR_FormatUnused; + if (mQuirks & kRequiresLargerEncoderOutputBuffer) { + // Increases the output buffer size + def.nBufferSize = ((def.nBufferSize * 3) >> 1); + } err = mOMX->setParameter( mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); |