mm-video: vidc: support extended index for Dynamic Buffer mode

Add support for Dynamic Buffer mode in omx component.

Change-Id: I5d95c739d97c1086cc23f4db2ad1979799e0dd72
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
index 1f9842d..3794ce9 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -3352,6 +3352,42 @@
                                      break;
 
                                  }
+        case OMX_QcomIndexParamVideoMetaBufferMode:
+        {
+            StoreMetaDataInBuffersParams *metabuffer =
+                (StoreMetaDataInBuffersParams *)paramData;
+            if (!metabuffer) {
+                DEBUG_PRINT_ERROR("Invalid param: %p", metabuffer);
+                eRet = OMX_ErrorBadParameter;
+                break;
+            }
+            if (metabuffer->nPortIndex == OMX_CORE_OUTPUT_PORT_INDEX) {
+                    //set property dynamic buffer mode to driver.
+                    struct v4l2_control control;
+                    struct v4l2_format fmt;
+                    control.id = V4L2_CID_MPEG_VIDC_VIDEO_ALLOC_MODE_OUTPUT;
+                    if (metabuffer->bStoreMetaData == true) {
+                        control.value = V4L2_MPEG_VIDC_VIDEO_DYNAMIC;
+                    } else {
+                        control.value = V4L2_MPEG_VIDC_VIDEO_STATIC;
+                    }
+                    int rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL,&control);
+                    if (!rc) {
+                        DEBUG_PRINT_HIGH(" %s buffer mode\n",
+                           (metabuffer->bStoreMetaData == true)? "Enabled dynamic" : "Disabled dynamic");
+                    } else {
+                        DEBUG_PRINT_ERROR("Failed to %s buffer mode\n",
+                           (metabuffer->bStoreMetaData == true)? "enable dynamic" : "disable dynamic");
+                        eRet = OMX_ErrorUnsupportedSetting;
+                    }
+                } else {
+                    DEBUG_PRINT_ERROR(
+                       "OMX_QcomIndexParamVideoMetaBufferMode not supported for port: %d\n",
+                       metabuffer->nPortIndex);
+                    eRet = OMX_ErrorUnsupportedSetting;
+                }
+                break;
+        }
         default: {
                  DEBUG_PRINT_ERROR("Setparameter: unknown param %d\n", paramIndex);
                  eRet = OMX_ErrorUnsupportedIndex;
@@ -3704,6 +3740,9 @@
         *indexType = (OMX_INDEXTYPE)OMX_GoogleAndroidIndexGetAndroidNativeBufferUsage;
     }
 #endif
+    else if (!strncmp(paramName, "OMX.google.android.index.storeMetaDataInBuffers", sizeof("OMX.google.android.index.storeMetaDataInBuffers") - 1)) {
+        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoMetaBufferMode;
+    }
     else {
         DEBUG_PRINT_ERROR("Extension: %s not implemented\n", paramName);
         return OMX_ErrorNotImplemented;