diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2013-07-09 06:12:38 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2013-07-09 06:12:38 -0700 |
commit | 5492b857536f10a7be6af49bd093bce615eec319 (patch) | |
tree | 55ec46e573f077c1ab52caa8997eab8988a417d3 /mm-video | |
parent | 087b70258b99cf7859aa9c7a86be92b9c5a423b1 (diff) | |
parent | 2be114ea62794efd795bf4cc7ef0098323f78c67 (diff) | |
download | android_hardware_qcom_media-5492b857536f10a7be6af49bd093bce615eec319.tar.gz android_hardware_qcom_media-5492b857536f10a7be6af49bd093bce615eec319.tar.bz2 android_hardware_qcom_media-5492b857536f10a7be6af49bd093bce615eec319.zip |
Merge "mm-video: Add data corrupt flag on output buffers when required"
Diffstat (limited to 'mm-video')
-rw-r--r-- | mm-video/vidc/vdec/inc/omx_vdec.h | 1 | ||||
-rw-r--r-- | mm-video/vidc/vdec/src/omx_vdec.cpp | 18 |
2 files changed, 19 insertions, 0 deletions
diff --git a/mm-video/vidc/vdec/inc/omx_vdec.h b/mm-video/vidc/vdec/inc/omx_vdec.h index 1fc76194..fa32b5e5 100644 --- a/mm-video/vidc/vdec/inc/omx_vdec.h +++ b/mm-video/vidc/vdec/inc/omx_vdec.h @@ -735,6 +735,7 @@ private: OMX_BOOL m_out_bPopulated; // encapsulate the waiting states. unsigned int m_flags; + OMX_BOOL m_out_sync_frm_received; #ifdef _ANDROID_ // Heap pointer to frame buffers diff --git a/mm-video/vidc/vdec/src/omx_vdec.cpp b/mm-video/vidc/vdec/src/omx_vdec.cpp index ac251e6b..efbea8ca 100644 --- a/mm-video/vidc/vdec/src/omx_vdec.cpp +++ b/mm-video/vidc/vdec/src/omx_vdec.cpp @@ -496,6 +496,7 @@ omx_vdec::omx_vdec(): m_state(OMX_StateInvalid), m_inp_bPopulated(OMX_FALSE), m_out_bPopulated(OMX_FALSE), m_flags(0), + m_out_sync_frm_received(OMX_FALSE), m_inp_bEnabled(OMX_TRUE), m_out_bEnabled(OMX_TRUE), m_platform_list(NULL), @@ -954,6 +955,7 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id) else { pThis->execute_output_flush(); + pThis->m_out_sync_frm_received = OMX_FALSE; if (pThis->m_cb.EventHandler) { if (p2 != VDEC_S_SUCCESS) @@ -1189,6 +1191,7 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id) } pThis->prev_ts = LLONG_MAX; pThis->rst_prev_ts = true; + pThis->m_out_sync_frm_received = OMX_FALSE; break; case OMX_COMPONENT_GENERATE_HARDWARE_ERROR: @@ -6715,6 +6718,7 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE * buffer) { OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pPMEMInfo = NULL; + struct vdec_output_frameinfo *ptr_respbuffer = NULL; if (!buffer || (buffer - m_out_mem_ptr) >= drv_ctx.op_buf.actualcount) { @@ -6757,6 +6761,20 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, "TS = %lld", buffer, buffer->pBuffer, buffer->nFlags, buffer->nTimeStamp); pending_output_buffers --; + ptr_respbuffer = (struct vdec_output_frameinfo *)buffer->pOutputPortPrivate; + if (!m_out_sync_frm_received) + { + if(buffer->nFlags & OMX_BUFFERFLAG_SYNCFRAME) + { + m_out_sync_frm_received = OMX_TRUE; + } + else if(ptr_respbuffer->pic_type==PICTURE_TYPE_P) + { + DEBUG_PRINT_HIGH("Sync frame not received, marking buffer " + "0x%x flags 0x%x as decode only", buffer->pBuffer, buffer->nFlags); + buffer->nFlags |= OMX_BUFFERFLAG_DATACORRUPT; + } + } if (buffer->nFlags & OMX_BUFFERFLAG_EOS) { |