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;