diff options
| author | 2010-02-22 15:32:14 -0800 | |
|---|---|---|
| committer | 2010-02-22 15:32:14 -0800 | |
| commit | ab9985ed4c02ef70d4a48bf3bbeedc12d14928f3 (patch) | |
| tree | 3001336a1c2c247c9a33ea57bf4ffa9c7bd69802 | |
| parent | 33285c37abee6d95d0ac55cd7e9889cdc8d96d14 (diff) | |
| parent | b8de9578dcb672d92b407d7a24c77af13f85c353 (diff) | |
Merge "This hardware video decoder lies about its required input buffer sizes allocating 2.7 MB of memory instead of the required 176 KB... Added another quirk."
| -rw-r--r-- | include/media/stagefright/OMXCodec.h | 1 | ||||
| -rw-r--r-- | media/libstagefright/OMXCodec.cpp | 14 |
2 files changed, 13 insertions, 2 deletions
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index f8bc7ab0bfbb..974075d91e6e 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -96,6 +96,7 @@ private: kRequiresFlushBeforeShutdown = 64, kDefersOutputBufferAllocation = 128, kDecoderLiesAboutNumberOfChannels = 256, + kInputBufferSizesAreBogus = 512, }; struct BufferInfo { diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 6cf7cffd17f3..4075ec1b1377 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -298,6 +298,10 @@ uint32_t OMXCodec::getComponentQuirks(const char *componentName) { quirks |= kRequiresAllocateBufferOnOutputPorts; } + if (!strcmp(componentName, "OMX.TI.Video.Decoder")) { + quirks |= kInputBufferSizesAreBogus; + } + return quirks; } @@ -561,7 +565,8 @@ void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) { mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); CHECK_EQ(err, OK); - if (def.nBufferSize < size) { + if ((portIndex == kPortIndexInput && (mQuirks & kInputBufferSizesAreBogus)) + || (def.nBufferSize < size)) { def.nBufferSize = size; } @@ -574,7 +579,12 @@ void OMXCodec::setMinBufferSize(OMX_U32 portIndex, OMX_U32 size) { CHECK_EQ(err, OK); // Make sure the setting actually stuck. - CHECK(def.nBufferSize >= size); + if (portIndex == kPortIndexInput + && (mQuirks & kInputBufferSizesAreBogus)) { + CHECK_EQ(def.nBufferSize, size); + } else { + CHECK(def.nBufferSize >= size); + } } status_t OMXCodec::setVideoPortFormatType( |