Merge "EffectBundle: Check parameter and value size" into lmp-dev
diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h
index d5bd046..fceaa5a 100644
--- a/media/libstagefright/include/OMXNodeInstance.h
+++ b/media/libstagefright/include/OMXNodeInstance.h
@@ -157,8 +157,9 @@
     KeyedVector<OMX::buffer_id, OMX_BUFFERHEADERTYPE *> mBufferIDToBufferHeader;
     KeyedVector<OMX_BUFFERHEADERTYPE *, OMX::buffer_id> mBufferHeaderToBufferID;
 
-    // metadata mode tracking
+    // metadata and graphic buffer mode tracking
     bool mUsingMetadata[2];
+    bool mGraphicBufferEnabled[2];
 
     ~OMXNodeInstance();
 
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp
index 7345ced..a331ffa 100644
--- a/media/libstagefright/omx/OMXNodeInstance.cpp
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp
@@ -127,6 +127,8 @@
 {
     mUsingMetadata[0] = false;
     mUsingMetadata[1] = false;
+    mGraphicBufferEnabled[0] = false;
+    mGraphicBufferEnabled[1] = false;
     mIsSecure = AString(name).endsWith(".secure");
 }
 
@@ -441,10 +443,12 @@
     if (err != OMX_ErrorNone) {
         ALOGE("OMX_EnableAndroidNativeBuffers failed with error %d (0x%08x)",
                 err, err);
-
+        if (enable) {
+            mGraphicBufferEnabled[portIndex] = false;
+        }
         return UNKNOWN_ERROR;
     }
-
+    mGraphicBufferEnabled[portIndex] = enable;
     return OK;
 }
 
@@ -657,6 +661,12 @@
         return BAD_VALUE;
     }
 
+    if (!mUsingMetadata[portIndex] && mGraphicBufferEnabled[portIndex]) {
+        ALOGE("b/62948670");
+        android_errorWriteLog(0x534e4554, "62948670");
+        return INVALID_OPERATION;
+    }
+
     // metadata buffers are not connected cross process
     BufferMeta *buffer_meta;
     bool isMeta = mUsingMetadata[portIndex];
@@ -766,6 +776,12 @@
         OMX_U32 portIndex, const sp<GraphicBuffer>& graphicBuffer,
         OMX::buffer_id *buffer) {
     Mutex::Autolock autoLock(mLock);
+    if (!mGraphicBufferEnabled[portIndex] || mUsingMetadata[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;
@@ -927,6 +943,13 @@
         return BAD_VALUE;
     }
 
+    if (!mIsSecure) {
+        // This method is used only with secure codecs in this release.
+        ALOGE("b/63522818");
+        android_errorWriteLog(0x534e4554, "63522818");
+        return ERROR_UNSUPPORTED;
+    }
+
     BufferMeta *buffer_meta = new BufferMeta(size, portIndex);
 
     OMX_BUFFERHEADERTYPE *header;