diff options
author | Dongwon Kang <dwkang@google.com> | 2017-07-26 13:55:59 -0700 |
---|---|---|
committer | Ivan Kutepov <its.kutepov@gmail.com> | 2017-11-15 03:01:49 +0300 |
commit | 1a376db325f7c1c39ffb4dc02fe30829a8730d4a (patch) | |
tree | 0f46d7e50621e803c9fad62b8a921b38613a8f97 | |
parent | 54177aecdeed16731f10ad5047dae3334ad2c49b (diff) | |
download | frameworks_av-1a376db325f7c1c39ffb4dc02fe30829a8730d4a.tar.gz frameworks_av-1a376db325f7c1c39ffb4dc02fe30829a8730d4a.tar.bz2 frameworks_av-1a376db325f7c1c39ffb4dc02fe30829a8730d4a.zip |
Track graphic buffer mode in OMXNodeInstance
Test: CtsMediaTestCases & YT & Play Movies & Cast
Bug: 62948670
Merged-In: Icbd9b767f1aef005819e680f77f4a05041988f34
Change-Id: Icbd9b767f1aef005819e680f77f4a05041988f34
CVE-2017-0840
-rw-r--r-- | media/libstagefright/include/OMXNodeInstance.h | 1 | ||||
-rw-r--r-- | media/libstagefright/omx/OMXNodeInstance.cpp | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index 5ba0e8f862..466463b918 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h @@ -170,6 +170,7 @@ private: KeyedVector<OMX::buffer_id, OMX_BUFFERHEADERTYPE *> mBufferIDToBufferHeader; KeyedVector<OMX_BUFFERHEADERTYPE *, OMX::buffer_id> mBufferHeaderToBufferID; MetadataBufferType mMetadataType[2]; + bool mGraphicBufferEnabled[2]; // For debug support char *mName; diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 8d7ffb98ba..04d0b258aa 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -235,6 +235,8 @@ OMXNodeInstance::OMXNodeInstance( mDebugLevelBumpPendingBuffers[1] = 0; mMetadataType[0] = kMetadataBufferTypeInvalid; mMetadataType[1] = kMetadataBufferTypeInvalid; + mGraphicBufferEnabled[0] = false; + mGraphicBufferEnabled[1] = false; mIsSecure = AString(name).endsWith(".secure"); atomic_store(&mDying, false); } @@ -576,6 +578,11 @@ status_t OMXNodeInstance::enableGraphicBuffers( err = OMX_SetParameter(mHandle, index, ¶ms); CLOG_IF_ERROR(setParameter, err, "%s(%#x): %s:%u en=%d", name, index, portString(portIndex), portIndex, enable); + if (err == OMX_ErrorNone) { + mGraphicBufferEnabled[portIndex] = enable; + } else if (enable) { + mGraphicBufferEnabled[portIndex] = false; + } return StatusFromOMXError(err); } @@ -779,6 +786,13 @@ status_t OMXNodeInstance::useBuffer( 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 BufferMeta *buffer_meta; bool isMeta = mMetadataType[portIndex] != kMetadataBufferTypeInvalid; @@ -890,6 +904,14 @@ status_t OMXNodeInstance::useGraphicBuffer( OMX::buffer_id *buffer) { 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; if (OMX_GetExtensionIndex( |