diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-06 07:28:55 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-06 07:28:55 +0000 |
commit | f62ee197bc9571cff577012594c543f35b0df3d3 (patch) | |
tree | 9551b53c57aebc99248cb16418d70befc15cdf54 | |
parent | 840ecd15bdaade503860ece4c85e46f2daae70d6 (diff) | |
parent | f317b501353b02968a8c38c79649a9eaa2e9d667 (diff) | |
download | media-oreo-dr1-release.tar.gz |
release-request-ce5644bf-c7ec-4125-96f7-5f9bba4fe5ad-for-git_oc-dr1-release-4249716 snap-temp-L41100000089724307android-8.0.0_r34android-8.0.0_r33android-8.0.0_r27android-8.0.0_r26android-8.0.0_r25android-8.0.0_r24android-8.0.0_r23android-8.0.0_r22android-8.0.0_r21oreo-dr3-releaseoreo-dr2-releaseoreo-dr1-release
Change-Id: I9dd0e056db3b70f1caee3ecfaeda908d52d91390
3 files changed, 59 insertions, 34 deletions
diff --git a/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index b3f9140..71dfc5a 100644 --- a/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/msm8998/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -675,6 +675,7 @@ class omx_vdec: public qc_omx_component bool execute_omx_flush(OMX_U32); bool execute_output_flush(); bool execute_input_flush(); + void notify_flush_done(void *ctxt); OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE * buffer); diff --git a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index 13e8e36..52905d0 100644 --- a/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/msm8998/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -1584,14 +1584,8 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id) pThis->omx_report_error (); } else { /*Check if we need generate event for Flush done*/ - if (BITMASK_PRESENT(&pThis->m_flags, - OMX_COMPONENT_INPUT_FLUSH_PENDING)) { - BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING); - DEBUG_PRINT_LOW("Input Flush completed - Notify Client"); - pThis->m_cb.EventHandler(&pThis->m_cmp, pThis->m_app_data, - OMX_EventCmdComplete,OMX_CommandFlush, - OMX_CORE_INPUT_PORT_INDEX,NULL ); - } + pThis->notify_flush_done(ctxt); + if (BITMASK_PRESENT(&pThis->m_flags, OMX_COMPONENT_IDLE_PENDING)) { if (pThis->stream_off(OMX_CORE_INPUT_PORT_INDEX)) { @@ -1625,14 +1619,8 @@ void omx_vdec::process_event_cb(void *ctxt, unsigned char id) pThis->omx_report_error (); } else { /*Check if we need generate event for Flush done*/ - if (BITMASK_PRESENT(&pThis->m_flags, - OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) { - DEBUG_PRINT_LOW("Notify Output Flush done"); - BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING); - pThis->m_cb.EventHandler(&pThis->m_cmp, pThis->m_app_data, - OMX_EventCmdComplete,OMX_CommandFlush, - OMX_CORE_OUTPUT_PORT_INDEX,NULL ); - } + pThis->notify_flush_done(ctxt); + if (BITMASK_PRESENT(&pThis->m_flags, OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING)) { DEBUG_PRINT_LOW("Internal flush complete"); @@ -3504,6 +3492,42 @@ bool omx_vdec::execute_input_flush() return bRet; } +/*========================================================================= +FUNCTION : notify_flush_done + +DESCRIPTION +Notifies flush done to the OMX Client. + +PARAMETERS +ctxt -- Context information related to the self.. + +RETURN VALUE +NONE +==========================================================================*/ +void omx_vdec::notify_flush_done(void *ctxt) { + + omx_vdec *pThis = (omx_vdec *) ctxt; + + if (!pThis->input_flush_progress && !pThis->output_flush_progress) { + if (BITMASK_PRESENT(&pThis->m_flags, + OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) { + DEBUG_PRINT_LOW("Notify Output Flush done"); + BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING); + pThis->m_cb.EventHandler(&pThis->m_cmp, pThis->m_app_data, + OMX_EventCmdComplete,OMX_CommandFlush, + OMX_CORE_OUTPUT_PORT_INDEX,NULL ); + } + + if (BITMASK_PRESENT(&pThis->m_flags, + OMX_COMPONENT_INPUT_FLUSH_PENDING)) { + BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING); + DEBUG_PRINT_LOW("Input Flush completed - Notify Client"); + pThis->m_cb.EventHandler(&pThis->m_cmp, pThis->m_app_data, + OMX_EventCmdComplete,OMX_CommandFlush, + OMX_CORE_INPUT_PORT_INDEX,NULL ); + } + } +} /* ====================================================================== FUNCTION diff --git a/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index 4e026c0..49797ca 100644 --- a/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/msm8998/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -4166,6 +4166,24 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, } #endif // _PQ_ + if (!streaming[OUTPUT_PORT]) { + enum v4l2_buf_type buf_type; + buf_type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; + int ret; + + ret = ioctl(m_nDriver_fd, VIDIOC_STREAMON, &buf_type); + + if (ret) { + DEBUG_PRINT_ERROR("Failed to call streamon"); + if (errno == EBUSY) { + hw_overload = true; + } + return false; + } else { + streaming[OUTPUT_PORT] = true; + } + } + buf.index = index; buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; buf.memory = V4L2_MEMORY_USERPTR; @@ -4201,24 +4219,6 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, etb++; - if (!streaming[OUTPUT_PORT]) { - enum v4l2_buf_type buf_type; - buf_type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; - int ret; - - ret = ioctl(m_nDriver_fd, VIDIOC_STREAMON, &buf_type); - - if (ret) { - DEBUG_PRINT_ERROR("Failed to call streamon"); - if (errno == EBUSY) { - hw_overload = true; - } - return false; - } else { - streaming[OUTPUT_PORT] = true; - } - } - return true; } |