summaryrefslogtreecommitdiff
path: root/msm8998
diff options
context:
space:
mode:
authorThierry Strudel <tstrudel@google.com>2017-08-23 15:18:48 -0700
committerThierry Strudel <tstrudel@google.com>2017-09-15 11:37:33 -0700
commita353607795ce19c8ca306a7b57ab8f3513e64f30 (patch)
treeb09b00c0d4b2ec3acec69bd0a5b2b80a02d1a93d /msm8998
parent544fdbb7dbafbe83a1313564074f0af689aae752 (diff)
downloadmedia-a353607795ce19c8ca306a7b57ab8f3513e64f30.tar.gz
msm8998: Update to 07.00.00.279.357
msm8998: from hardware/qcom/media 2ce45c6c mm-video-v4l2: Protect buffer lifecycle with lock Test: build, boot, sanity checks Bug: 64986220 Change-Id: I556c32a4ffefd5b2088e9ee146e4b2cb8e9edcfb Signed-off-by: Thierry Strudel <tstrudel@google.com>
Diffstat (limited to 'msm8998')
-rw-r--r--msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index 107eaee..3ac98e6 100644
--- a/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/msm8998/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -2934,6 +2934,7 @@ OMX_ERRORTYPE omx_video::use_buffer(
return OMX_ErrorInvalidState;
}
if (port == PORT_INDEX_IN) {
+ auto_lock l(m_lock);
eRet = use_input_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
} else if (port == PORT_INDEX_OUT) {
eRet = use_output_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
@@ -3135,7 +3136,9 @@ OMX_ERRORTYPE omx_video::allocate_input_meta_buffer(
meta_buffer_hdr, m_inp_mem_ptr);
}
for (index = 0; ((index < m_sInPortDef.nBufferCountActual) &&
- meta_buffer_hdr[index].pBuffer); index++);
+ meta_buffer_hdr[index].pBuffer &&
+ BITMASK_PRESENT(&m_inp_bm_count, index)); index++);
+
if (index == m_sInPortDef.nBufferCountActual) {
DEBUG_PRINT_ERROR("All buffers are allocated input_meta_buffer");
return OMX_ErrorBadParameter;
@@ -3559,6 +3562,7 @@ OMX_ERRORTYPE omx_video::allocate_buffer(OMX_IN OMX_HANDLETYPE h
// What if the client calls again.
if (port == PORT_INDEX_IN) {
+ auto_lock l(m_lock);
#ifdef _ANDROID_ICS_
if (meta_mode_enable)
eRet = allocate_input_meta_buffer(hComp,bufferHdr,appData,bytes);
@@ -3653,10 +3657,12 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
DEBUG_PRINT_LOW("free_buffer on i/p port - Port idx %u, actual cnt %u",
nPortIndex, (unsigned int)m_sInPortDef.nBufferCountActual);
+ pthread_mutex_lock(&m_lock);
if (nPortIndex < m_sInPortDef.nBufferCountActual &&
BITMASK_PRESENT(&m_inp_bm_count, nPortIndex)) {
// Clear the bit associated with it.
BITMASK_CLEAR(&m_inp_bm_count,nPortIndex);
+ pthread_mutex_unlock(&m_lock);
free_input_buffer (buffer);
m_sInPortDef.bPopulated = OMX_FALSE;
@@ -3684,6 +3690,7 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
#endif
}
} else {
+ pthread_mutex_unlock(&m_lock);
DEBUG_PRINT_ERROR("ERROR: free_buffer ,Port Index Invalid");
eRet = OMX_ErrorBadPortIndex;
}
@@ -3986,7 +3993,7 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
auto_lock l(m_lock);
pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer;
- if (pmem_data_buf) {
+ if (pmem_data_buf && BITMASK_PRESENT(&m_inp_bm_count, nBufIndex)) {
memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset),
buffer->nFilledLen);
}