mm-video: vidc: Adds support for thumbnail mode decode.

Adds support for hardware thumbnail mode decoding by
setting sync frame mode to HW. This reduces the memory
requirements from HW.

Change-Id: I6dfc99137635fa24f8bd7daa663ab1d50f092bf0
Signed-off-by: Praneeth Paladugu <ppaladug@codeaurora.org>
diff --git a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
index 66ebd0b..9e43102 100644
--- a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -3294,7 +3294,8 @@
           }
 	  else if(!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vp8",OMX_MAX_STRINGNAME_SIZE))
           {
-            if(!strncmp((const char*)comp_role->cRole,"video_decoder.vp8",OMX_MAX_STRINGNAME_SIZE))
+            if(!strncmp((const char*)comp_role->cRole,"video_decoder.vp8",OMX_MAX_STRINGNAME_SIZE) ||
+               (!strncmp((const char*)comp_role->cRole,"video_decoder.vpx",OMX_MAX_STRINGNAME_SIZE)))
             {
               strlcpy((char*)m_cRole,"video_decoder.vp8",OMX_MAX_STRINGNAME_SIZE);
             }
@@ -3471,15 +3472,28 @@
       break;
     case OMX_QcomIndexParamVideoSyncFrameDecodingMode:
       {
-          DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamVideoSyncFrameDecodingMode");
-          DEBUG_PRINT_HIGH("set idr only decoding for thumbnail mode");
-          drv_ctx.idr_only_decoding = 1;
-          int rc; //= ioctl(drv_ctx.video_driver_fd,
-               //       VDEC_IOCTL_SET_IDR_ONLY_DECODING);
-          if(rc < 0) {
-              DEBUG_PRINT_ERROR("Failed to set IDR only decoding on driver.");
-              eRet = OMX_ErrorHardware;
-          }
+        DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamVideoSyncFrameDecodingMode");
+        DEBUG_PRINT_HIGH("set idr only decoding for thumbnail mode");
+        struct v4l2_control control;
+        int rc;
+        drv_ctx.idr_only_decoding = 1;
+        control.id = V4L2_CID_MPEG_VIDC_VIDEO_OUTPUT_ORDER;
+        control.value = V4L2_MPEG_VIDC_VIDEO_OUTPUT_ORDER_DECODE;
+        rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control);
+        if(rc)
+        {
+          DEBUG_PRINT_ERROR("\n Set picture order failed");
+          eRet = OMX_ErrorUnsupportedSetting;
+        } else {
+            control.id = V4L2_CID_MPEG_VIDC_VIDEO_SYNC_FRAME_DECODE;
+            control.value = V4L2_MPEG_VIDC_VIDEO_SYNC_FRAME_DECODE_ENABLE;
+            rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control);
+            if(rc)
+            {
+              DEBUG_PRINT_ERROR("\n Sync frame setting failed");
+              eRet = OMX_ErrorUnsupportedSetting;
+            }
+        }
       }
       break;
 
@@ -7677,7 +7691,7 @@
     DEBUG_PRINT_LOW("GetBufReq IN: ActCnt(%d) Size(%d)",
     buffer_prop->actualcount, buffer_prop->buffer_size);
 	bufreq.memory = V4L2_MEMORY_USERPTR;
-	bufreq.count = 2;
+	bufreq.count = 1;
    if(buffer_prop->buffer_type == VDEC_BUFFER_TYPE_INPUT){
     bufreq.type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
 	fmt.type =V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;