Track graphic buffer mode in OMXNodeInstance Test: CtsMediaTestCases & YT & Play Movies & Cast Bug: 62948670 Merged-In: Icbd9b767f1aef005819e680f77f4a05041988f34 Change-Id: Icbd9b767f1aef005819e680f77f4a05041988f34 (cherry picked from commit f630233ee42214b36e6862dc99114f2c2bdda018)
diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index 8e08d15..00c37e1 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h
@@ -143,7 +143,7 @@ bool mLegacyAdaptiveExperiment; IOMX::PortMode mPortMode[2]; - // metadata and secure buffer type tracking + // metadata and secure buffer types and graphic buffer mode tracking MetadataBufferType mMetadataType[2]; enum SecureBufferType { kSecureBufferTypeUnknown, @@ -151,6 +151,7 @@ kSecureBufferTypeNativeHandle, }; SecureBufferType mSecureBufferType[2]; + bool mGraphicBufferEnabled[2]; // Following are OMX parameters managed by us (instead of the component) // OMX_IndexParamMaxFrameDurationForBitrateControl
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index db99ef2..00b3c7b 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -363,6 +363,8 @@ mPortMode[1] = IOMX::kPortModePresetByteBuffer; mSecureBufferType[0] = kSecureBufferTypeUnknown; mSecureBufferType[1] = kSecureBufferTypeUnknown; + mGraphicBufferEnabled[0] = false; + mGraphicBufferEnabled[1] = false; mIsSecure = AString(name).endsWith(".secure"); mLegacyAdaptiveExperiment = ADebug::isExperimentEnabled("legacy-adaptive"); } @@ -796,6 +798,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); @@ -1055,11 +1063,18 @@ status_t OMXNodeInstance::useBuffer_l( OMX_U32 portIndex, const sp<IMemory> ¶ms, const sp<IHidlMemory> &hParams, IOMX::buffer_id *buffer) { + BufferMeta *buffer_meta; OMX_BUFFERHEADERTYPE *header; OMX_ERRORTYPE err = OMX_ErrorNone; bool isMetadata = mMetadataType[portIndex] != kMetadataBufferTypeInvalid; + if (!isMetadata && mGraphicBufferEnabled[portIndex]) { + ALOGE("b/62948670"); + android_errorWriteLog(0x534e4554, "62948670"); + return INVALID_OPERATION; + } + size_t paramsSize; void* paramsPointer; if (params != NULL && hParams != NULL) { @@ -1245,6 +1260,13 @@ portIndex, graphicBuffer, buffer); } + if (!mGraphicBufferEnabled[portIndex]) { + // 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; if (OMX_GetExtensionIndex(