mm-video-legacy: venc: do not send duplicate EBDs in case of an error
In case of an error pushing the input to device layer via
push_input_buffer, EBDs are signalled locally. Do not send
EBD again from the calling method as this will result in a
duplicate EBD.
Bug: 19013257
Change-Id: I7076ac55bffb5336c291b2f3af4bea8972adc76e
diff --git a/mm-video-legacy/vidc/venc/src/omx_video_base.cpp b/mm-video-legacy/vidc/venc/src/omx_video_base.cpp
index 818f919..adf782f 100644
--- a/mm-video-legacy/vidc/venc/src/omx_video_base.cpp
+++ b/mm-video-legacy/vidc/venc/src/omx_video_base.cpp
@@ -4057,7 +4057,7 @@
pending_input_buffers--;
- if(mUseProxyColorFormat && (buffer_index < m_sInPortDef.nBufferCountActual)) {
+ if(mUseProxyColorFormat && ((OMX_U32)buffer_index < m_sInPortDef.nBufferCountActual)) {
if(!pdest_frame) {
pdest_frame = buffer;
DEBUG_PRINT_LOW("\n empty_buffer_done pdest_frame address is %p",pdest_frame);
@@ -4067,6 +4067,7 @@
DEBUG_PRINT_LOW("\n empty_buffer_done insert address is %p",buffer);
if (!m_opq_pmem_q.insert_entry((unsigned int)buffer, 0, 0)) {
DEBUG_PRINT_ERROR("\n empty_buffer_done: pmem queue is full");
+ m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
return OMX_ErrorBadParameter;
}
}
@@ -4590,14 +4591,11 @@
ret = push_input_buffer(hComp);
} else {
if (!m_opq_meta_q.insert_entry((unsigned)buffer,0,0)) {
+ m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
DEBUG_PRINT_ERROR("\nERROR: ETBProxy: Queue is full");
ret = OMX_ErrorBadParameter;
}
}
- if(ret != OMX_ErrorNone) {
- m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
- DEBUG_PRINT_LOW("\nERROR: ETBOpaque failed:");
- }
return ret;
}
OMX_ERRORTYPE omx_video::queue_meta_buffer(OMX_HANDLETYPE hComp,
@@ -4629,6 +4627,9 @@
m_opq_meta_q.pop_entry(&address,&p2,&id);
psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
}
+ } else {
+ // there has been an error and source frame has been scheduled for an EBD
+ psource_frame = NULL;
}
return ret;
}
@@ -4716,6 +4717,9 @@
pdest_frame = (OMX_BUFFERHEADERTYPE* ) address;
DEBUG_PRINT_LOW("\n pdest_frame pop address is %p",pdest_frame);
}
+ } else {
+ // there has been an error and source frame has been scheduled for an EBD
+ psource_frame = NULL;
}
return ret;
}