diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index ef9d253c86..960120f49c 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -1310,7 +1310,7 @@ status_t ACodec::allocateOutputMetadataBuffers() { OMX_U32 bufferCount, bufferSize, minUndequeuedBuffers; status_t err = configureOutputBuffersFromNativeWindow( &bufferCount, &bufferSize, &minUndequeuedBuffers, - false /* preregister */); + mFlags & kFlagPreregisterMetadataBuffers /* preregister */); if (err != OK) return err; mNumUndequeuedBuffers = minUndequeuedBuffers; @@ -1896,6 +1896,19 @@ status_t ACodec::configureCodec( setPortMode(kPortIndexInput, IOMX::kPortModePresetByteBuffer); err = OK; // ignore error for now } + + OMX_INDEXTYPE index; + if (mOMXNode->getExtensionIndex( + "OMX.google.android.index.preregisterMetadataBuffers", &index) == OK) { + OMX_CONFIG_BOOLEANTYPE param; + InitOMXParams(¶m); + param.bEnabled = OMX_FALSE; + if (mOMXNode->getParameter(index, ¶m, sizeof(param)) == OK) { + if (param.bEnabled == OMX_TRUE) { + mFlags |= kFlagPreregisterMetadataBuffers; + } + } + } } if (haveNativeWindow) { sp nativeWindow = diff --git a/media/libstagefright/include/media/stagefright/ACodec.h b/media/libstagefright/include/media/stagefright/ACodec.h index 7754de447d..d56ec4f07a 100644 --- a/media/libstagefright/include/media/stagefright/ACodec.h +++ b/media/libstagefright/include/media/stagefright/ACodec.h @@ -158,6 +158,7 @@ private: kFlagIsSecure = 1, kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, kFlagIsGrallocUsageProtected = 4, + kFlagPreregisterMetadataBuffers = 8, }; enum {