mm-video: vdec: hevc: fix buffer state issue

When rejecting zero length buffer and the buffer
is not an EOS buffer, reset its state to be with
omx component.

Change-Id: I83feceef17a10654af0f976f5f2d86c9ed9095f4
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
index b1fd66c..265af45 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp
@@ -5526,8 +5526,8 @@
         return OMX_ErrorBadParameter;
     }
 
-    DEBUG_PRINT_LOW("[ETB] BHdr(%p) pBuf(%p) nTS(%lld) nFL(%lu)",
-        buffer, buffer->pBuffer, buffer->nTimeStamp, buffer->nFilledLen);
+    DEBUG_PRINT_LOW("[ETB] BHdr(%p) pBuf(%p) nTS(%lld) nFL(%lu) nFlags(%x)",
+        buffer, buffer->pBuffer, buffer->nTimeStamp, buffer->nFilledLen, buffer->nFlags);
     if (arbitrary_bytes)
     {
         post_event ((unsigned)hComp,(unsigned)buffer,
@@ -5834,9 +5834,10 @@
         return OMX_ErrorIncorrectStateOperation;
     }
 
-    if (buffer == NULL ||
-        ((buffer - client_buffers.get_il_buf_hdr()) >= (int)drv_ctx.op_buf.actualcount))
+    unsigned int nPortIndex = (unsigned int)(buffer - client_buffers.get_il_buf_hdr());
+    if (buffer == NULL || nPortIndex >= drv_ctx.op_buf.actualcount)
     {
+        DEBUG_PRINT_ERROR("ERROR:FTB invalid bufHdr %p, nPortIndex %u", buffer, nPortIndex);
         return OMX_ErrorBadParameter;
     }
 
@@ -5878,8 +5879,12 @@
 
     nPortIndex = buffer-((OMX_BUFFERHEADERTYPE *)client_buffers.get_il_buf_hdr());
 
-    if (bufferAdd == NULL || nPortIndex > drv_ctx.op_buf.actualcount)
+    if (bufferAdd == NULL || nPortIndex >= drv_ctx.op_buf.actualcount)
+    {
+        DEBUG_PRINT_ERROR("FTBProxy: bufhdr = %p, nPortIndex %u bufCount %u",
+             bufferAdd, nPortIndex, drv_ctx.op_buf.actualcount);
         return OMX_ErrorBadParameter;
+    }
 
     DEBUG_PRINT_LOW("FTBProxy: bufhdr = %p, bufhdr->pBuffer = %p",
         bufferAdd, bufferAdd->pBuffer);
@@ -6091,9 +6096,6 @@
     }
 #endif
 
-    DEBUG_PRINT_LOW("Calling VDEC_IOCTL_STOP_NEXT_MSG");
-    //(void)ioctl(drv_ctx.video_driver_fd, VDEC_IOCTL_STOP_NEXT_MSG,
-    // NULL);
     DEBUG_PRINT_HIGH("Close the driver instance");
 
 #ifdef INPUT_BUFFER_LOG
@@ -6526,8 +6528,8 @@
         buffer->nFlags &= ~OMX_BUFFERFLAG_DATACORRUPT;
     }
 
-    DEBUG_PRINT_LOW("fill_buffer_done: bufhdr = %p, bufhdr->pBuffer = %p idx %d, TS %lld",
-        buffer, buffer->pBuffer, buffer - m_out_mem_ptr, buffer->nTimeStamp );
+    DEBUG_PRINT_LOW("fill_buffer_done: bufhdr = %p, bufhdr->pBuffer = %p idx %d, TS %lld nFlags %x",
+        buffer, buffer->pBuffer, buffer - m_out_mem_ptr, buffer->nTimeStamp, buffer->nFlags );
     pending_output_buffers --;
 
     if (buffer->nFlags & OMX_BUFFERFLAG_EOS)
@@ -9140,6 +9142,9 @@
         ((buffer->nFlags & OMX_BUFFERFLAG_EOS) == 0))
     {
         DEBUG_PRINT_HIGH("return zero legth buffer");
+        pthread_mutex_lock(&m_lock);
+        m_interm_buf_state[nPortIndex] = WITH_SWVDEC;
+        pthread_mutex_unlock(&m_lock);
         post_event ((unsigned int)buffer,VDEC_S_SUCCESS,
             OMX_COMPONENT_GENERATE_EBD_SWVDEC);
         return OMX_ErrorNone;