From 2b7bd2695cf8307a694ad0346025a02f094032ed Mon Sep 17 00:00:00 2001 From: Balamurugan Alagarsamy Date: Wed, 26 Nov 2014 22:57:56 +0530 Subject: mm-video-v4l2: vdec: skip fillbuffer in port reconfiguration Sometimes when port reconfiguration is under progress hybrid decoder calls fillbuffer when emptybuffer arrives which results in failures. Resolve the problem by skipping fillbufer in port reconfiguration. Change-Id: If900acbde8887d41134103b42f764d8018bd82e6 --- mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp') 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 96b8615f..bd9f191b 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 @@ -1013,6 +1013,7 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id) if (p2 == OMX_CORE_OUTPUT_PORT_INDEX && pThis->m_swvdec_mode == SWVDEC_MODE_DECODE_ONLY) { DEBUG_PRINT_LOW("send all interm buffers to dsp after port enabled"); + pThis->m_fill_internal_bufers = OMX_TRUE; pThis->fill_all_buffers_proxy_dsp(&pThis->m_cmp); } pThis->m_cb.EventHandler(&pThis->m_cmp, pThis->m_app_data,\ @@ -9904,6 +9905,7 @@ OMX_ERRORTYPE omx_vdec::fill_all_buffers_proxy_dsp(OMX_HANDLETYPE hComp) { DEBUG_PRINT_ERROR("fill_this_buffer_proxy_dsp failed for buff %d bufHdr %p pBuffer %p", idx, bufHdr, bufHdr->pBuffer); + pthread_mutex_unlock(&m_lock); break; } } @@ -10569,7 +10571,8 @@ bool omx_vdec::execute_output_flush_dsp() } } m_interm_flush_dsp_progress = false; - m_fill_internal_bufers = OMX_TRUE; + if (!in_reconfig) + m_fill_internal_bufers = OMX_TRUE; pthread_mutex_unlock(&m_lock); for (idx = 0; idx < (int)drv_ctx.interm_op_buf.actualcount; idx++) -- cgit v1.2.3 From 2d51b93b55c99bb8e9b35f7fd0ad1b8b6c96b23e Mon Sep 17 00:00:00 2001 From: Jia Meng Date: Thu, 10 Jul 2014 14:02:54 +0800 Subject: mm-video: vidc: add the log when returning error in ftb No detail error log printed in some places when returning error in fill_this_buffer. CRs-fixed: 691490 Change-Id: I3ec2570c25b1e49e6906909e7cadc33201290a24 --- mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'mm-video-v4l2/vidc/vdec/src/omx_vdec_hevc_swvdec.cpp') 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 96b8615f..a78b9cac 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 @@ -6233,6 +6233,7 @@ true/false OMX_ERRORTYPE omx_vdec::fill_this_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_IN OMX_BUFFERHEADERTYPE* buffer) { + unsigned int nPortIndex = (unsigned int)(buffer - client_buffers.get_il_buf_hdr()); if(m_state == OMX_StateInvalid) { DEBUG_PRINT_ERROR("FTB in Invalid State"); @@ -6245,7 +6246,6 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer(OMX_IN OMX_HANDLETYPE hComp, return OMX_ErrorIncorrectStateOperation; } - unsigned int nPortIndex = (unsigned int)(buffer - client_buffers.get_il_buf_hdr()); if (!buffer || !buffer->pBuffer || nPortIndex >= drv_ctx.op_buf.actualcount) { DEBUG_PRINT_ERROR("ERROR:FTB invalid bufHdr %p, nPortIndex %u", buffer, nPortIndex); @@ -9948,8 +9948,11 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy_dsp( nPortIndex = buffer-((OMX_BUFFERHEADERTYPE *)m_interm_mem_ptr); - if (bufferAdd == NULL || nPortIndex > drv_ctx.interm_op_buf.actualcount) + if (bufferAdd == NULL || nPortIndex > drv_ctx.interm_op_buf.actualcount) { + DEBUG_PRINT_ERROR("FTBProxyDSP: bufhdr = %p, nPortIndex %u bufCount %u", + bufferAdd, nPortIndex, drv_ctx.interm_op_buf.actualcount); return OMX_ErrorBadParameter; + } DEBUG_PRINT_LOW("fill_this_buffer_proxy_dsp: bufhdr = %p,pBuffer = %p, idx %d, state %d", bufferAdd, bufferAdd->pBuffer, nPortIndex, m_interm_buf_state[nPortIndex]); -- cgit v1.2.3