summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDongwon Kang <dwkang@google.com>2017-07-26 13:55:59 -0700
committerIvan Kutepov <its.kutepov@gmail.com>2017-11-15 03:01:49 +0300
commit1a376db325f7c1c39ffb4dc02fe30829a8730d4a (patch)
tree0f46d7e50621e803c9fad62b8a921b38613a8f97
parent54177aecdeed16731f10ad5047dae3334ad2c49b (diff)
downloadframeworks_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.h1
-rw-r--r--media/libstagefright/omx/OMXNodeInstance.cpp22
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, &params);
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(