mm-video: vidc: Reduce video playback startup latency

get_buffer_requirements is an expensive function and should
not be called too many times. This change reduces the calls
to get buffer requirements on driver.

Change-Id: I4cb1c7006afd0edc0ed76783df0a45b76bef5a79
diff --git a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
index 65a3934..bdc0f95 100644
--- a/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec_msm8974.cpp
@@ -564,7 +564,6 @@
   memset (&drv_ctx,0,sizeof(drv_ctx));
   memset (&h264_scratch,0,sizeof (OMX_BUFFERHEADERTYPE));
   memset (m_hwdevice_name,0,sizeof(m_hwdevice_name));
-  memset(&op_buf_rcnfg, 0 ,sizeof(vdec_allocatorproperty));
   memset(m_demux_offsets, 0, ( sizeof(OMX_U32) * 8192) );
   m_demux_entries = 0;
 #ifdef _ANDROID_ICS_
@@ -691,6 +690,18 @@
   DEBUG_PRINT_HIGH("Exit OMX vdec Destructor");
 }
 
+int release_buffers(omx_vdec* obj, enum vdec_buffer buffer_type) {
+	struct v4l2_requestbuffers bufreq;
+	int rc = 0;
+	if (buffer_type == VDEC_BUFFER_TYPE_OUTPUT){
+		bufreq.memory = V4L2_MEMORY_USERPTR;
+		bufreq.count = 0;
+		bufreq.type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+		rc = ioctl(obj->drv_ctx.video_driver_fd,VIDIOC_REQBUFS, &bufreq);
+	}
+	return rc;
+}
+
 /* ======================================================================
 FUNCTION
   omx_vdec::OMXCntrlProcessMsgCb
@@ -803,10 +814,11 @@
                 }
                 if (p2 == OMX_CORE_OUTPUT_PORT_INDEX && pThis->in_reconfig)
                 {
-                  pThis->op_buf_rcnfg.buffer_type = VDEC_BUFFER_TYPE_OUTPUT;
 				  OMX_ERRORTYPE eRet = OMX_ErrorNone;
 				  pThis->stream_off();
-				  OMX_ERRORTYPE eRet1 = pThis->get_buffer_req(&pThis->op_buf_rcnfg);
+				  if(release_buffers(pThis, VDEC_BUFFER_TYPE_OUTPUT))
+					  DEBUG_PRINT_HIGH("Failed to release output buffers\n");
+				  OMX_ERRORTYPE eRet1 = pThis->get_buffer_req(&pThis->drv_ctx.op_buf);
 				  pThis->in_reconfig = false;
                   if(eRet !=  OMX_ErrorNone)
                   {
@@ -7529,9 +7541,6 @@
     DEBUG_PRINT_LOW("GetBufReq IN: ActCnt(%d) Size(%d)",
     buffer_prop->actualcount, buffer_prop->buffer_size);
 	bufreq.memory = V4L2_MEMORY_USERPTR;
-	if(in_reconfig == true)
-	bufreq.count = 0;
-	else
 	bufreq.count = 2;
    if(buffer_prop->buffer_type == VDEC_BUFFER_TYPE_INPUT){
     bufreq.type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
@@ -7729,19 +7738,9 @@
   else if (1 == portDefn->nPortIndex)
   {
     portDefn->eDir =  OMX_DirOutput;
-    eRet=get_buffer_req(&drv_ctx.op_buf);
-    if (in_reconfig)
-    {
-      portDefn->nBufferCountActual = op_buf_rcnfg.actualcount;
-      portDefn->nBufferCountMin    = op_buf_rcnfg.mincount;
-      portDefn->nBufferSize        = op_buf_rcnfg.buffer_size;
-    }
-    else
-    {
-      portDefn->nBufferCountActual = drv_ctx.op_buf.actualcount;
-      portDefn->nBufferCountMin    = drv_ctx.op_buf.mincount;
-      portDefn->nBufferSize        = drv_ctx.op_buf.buffer_size;
-    }
+	portDefn->nBufferCountActual = drv_ctx.op_buf.actualcount;
+	portDefn->nBufferCountMin    = drv_ctx.op_buf.mincount;
+	portDefn->nBufferSize        = drv_ctx.op_buf.buffer_size;
     portDefn->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
     portDefn->bEnabled   = m_out_bEnabled;
     portDefn->bPopulated = m_out_bPopulated;