summaryrefslogtreecommitdiffstats
path: root/mm-video
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2013-07-09 06:12:38 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2013-07-09 06:12:38 -0700
commit5492b857536f10a7be6af49bd093bce615eec319 (patch)
tree55ec46e573f077c1ab52caa8997eab8988a417d3 /mm-video
parent087b70258b99cf7859aa9c7a86be92b9c5a423b1 (diff)
parent2be114ea62794efd795bf4cc7ef0098323f78c67 (diff)
downloadandroid_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.h1
-rw-r--r--mm-video/vidc/vdec/src/omx_vdec.cpp18
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)
{