Track graphic buffer mode in OMXNodeInstance Test: CtsMediaTestCases & YT & Play Movies & Cast Bug: 62948670 Merged-In: Icbd9b767f1aef005819e680f77f4a05041988f34 Change-Id: Icbd9b767f1aef005819e680f77f4a05041988f34 (cherry picked from commit cb8c0cbe5625c709103c1e97581c809e72f5b1da)
diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index 94cf15a..dd396e8 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h
@@ -175,7 +175,7 @@ KeyedVector<OMX::buffer_id, OMX_BUFFERHEADERTYPE *> mBufferIDToBufferHeader; KeyedVector<OMX_BUFFERHEADERTYPE *, OMX::buffer_id> mBufferHeaderToBufferID; - // metadata and secure buffer type tracking + // metadata and secure buffer types and graphic buffer mode tracking MetadataBufferType mMetadataType[2]; enum SecureBufferType { kSecureBufferTypeUnknown, @@ -183,6 +183,7 @@ kSecureBufferTypeNativeHandle, }; SecureBufferType mSecureBufferType[2]; + bool mGraphicBufferEnabled[2]; // For debug support char *mName;
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 5af0e80..f3f53bd 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -226,6 +226,8 @@ mMetadataType[1] = kMetadataBufferTypeInvalid; mSecureBufferType[0] = kSecureBufferTypeUnknown; mSecureBufferType[1] = kSecureBufferTypeUnknown; + mGraphicBufferEnabled[0] = false; + mGraphicBufferEnabled[1] = false; mIsSecure = AString(name).endsWith(".secure"); } @@ -562,6 +564,12 @@ } else if (mSecureBufferType[portIndex] == kSecureBufferTypeUnknown) { mSecureBufferType[portIndex] = kSecureBufferTypeOpaque; } + } else { + if (err == OMX_ErrorNone) { + mGraphicBufferEnabled[portIndex] = enable; + } else if (enable) { + mGraphicBufferEnabled[portIndex] = false; + } } } else { CLOG_ERROR_IF(enable, getExtensionIndex, err, "%s", name); @@ -798,6 +806,13 @@ return BAD_VALUE; } + if (mMetadataType[portIndex] == kMetadataBufferTypeInvalid + && mGraphicBufferEnabled[portIndex]) { + ALOGE("b/62948670"); + android_errorWriteLog(0x534e4554, "62948670"); + return INVALID_OPERATION; + } + // metadata buffers are not connected cross process // use a backup buffer instead of the actual buffer BufferMeta *buffer_meta; @@ -916,6 +931,13 @@ return BAD_VALUE; } Mutex::Autolock autoLock(mLock); + if (!mGraphicBufferEnabled[portIndex] + || mMetadataType[portIndex] != kMetadataBufferTypeInvalid) { + // Report error if this is not in graphic buffer mode. + ALOGE("b/62948670"); + android_errorWriteLog(0x534e4554, "62948670"); + return INVALID_OPERATION; + } // See if the newer version of the extension is present. OMX_INDEXTYPE index;