diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-01-07 22:47:19 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2018-01-07 22:47:19 -0700 |
commit | dcc126e781489af017cda31e79941b0e4390fdf8 (patch) | |
tree | 11c2681f29cb3d7ac627b2af17a3630680f54432 | |
parent | 0c47c1b1b7ab2476dc464b2e7e32b55c37fff4f5 (diff) | |
parent | 5bea69b872cef37d811fc083d332cfcd29f336af (diff) | |
download | android_hardware_qcom_media-dcc126e781489af017cda31e79941b0e4390fdf8.tar.gz android_hardware_qcom_media-dcc126e781489af017cda31e79941b0e4390fdf8.tar.bz2 android_hardware_qcom_media-dcc126e781489af017cda31e79941b0e4390fdf8.zip |
Merge 5bea69b872cef37d811fc083d332cfcd29f336af on remote branch
Change-Id: I5baafd25ef1f7da0849b7bf9ff4a94a8d2d9ea18
-rw-r--r-- | mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h | 1 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/inc/omx_video_base.h | 1 | ||||
-rwxr-xr-x | mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h | 1 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp | 18 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_base.cpp | 13 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp | 5 |
6 files changed, 39 insertions, 0 deletions
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h b/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h index 871bf546..7d826353 100644 --- a/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h +++ b/mm-video-v4l2/vidc/venc/inc/omx_swvenc_mpeg4.h @@ -117,6 +117,7 @@ class omx_venc: public omx_video OMX_U32 dev_resume(void); OMX_U32 dev_start_done(void); OMX_U32 dev_set_message_thread_id(pthread_t); + bool dev_handle_empty_eos_buffer(void); bool dev_use_buf( void *,unsigned,unsigned); bool dev_free_buf( void *,unsigned); bool dev_empty_buf(void *, void *,unsigned,unsigned); diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h index cc51359f..f325678e 100644 --- a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h +++ b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h @@ -237,6 +237,7 @@ class omx_video: public qc_omx_component virtual OMX_U32 dev_resume(void) = 0; virtual OMX_U32 dev_start_done(void) = 0; virtual OMX_U32 dev_set_message_thread_id(pthread_t) = 0; + virtual bool dev_handle_empty_eos_buffer(void) = 0; virtual bool dev_use_buf(void *,unsigned,unsigned) = 0; virtual bool dev_free_buf(void *,unsigned) = 0; virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0; diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h b/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h index c0f18d9e..24d97066 100755 --- a/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h +++ b/mm-video-v4l2/vidc/venc/inc/omx_video_encoder.h @@ -65,6 +65,7 @@ class omx_venc: public omx_video OMX_U32 dev_resume(void); OMX_U32 dev_start_done(void); OMX_U32 dev_set_message_thread_id(pthread_t); + bool dev_handle_empty_eos_buffer(void); bool dev_use_buf( void *,unsigned,unsigned); bool dev_free_buf( void *,unsigned); bool dev_empty_buf(void *, void *,unsigned,unsigned); diff --git a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp index fc4a2cf3..2f72020c 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_swvenc_mpeg4.cpp @@ -1758,6 +1758,24 @@ OMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid) RETURN(true); } +bool omx_venc::dev_handle_empty_eos_buffer(void) +{ + ENTER_FUNC(); + SWVENC_STATUS Ret; + SWVENC_IPBUFFER ipbuffer; + ipbuffer.p_buffer = NULL; + ipbuffer.filled_length = 0; + ipbuffer.flags = SWVENC_FLAG_EOS; + Ret = swvenc_emptythisbuffer(m_hSwVenc, &ipbuffer); + if (Ret != SWVENC_S_SUCCESS) + { + DEBUG_PRINT_ERROR("%s, swvenc_emptythisbuffer failed (%d)", + __FUNCTION__, Ret); + RETURN(false); + } + RETURN(true); +} + bool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index) { ENTER_FUNC(); diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp index 74a574d9..c0c697a1 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -3953,6 +3953,19 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, } } + if (meta_mode_enable && !mUsesColorConversion) { + VideoGrallocMetadata *media_buffer = (VideoGrallocMetadata *)meta_buffer_hdr[nBufIndex].pBuffer; + if (buffer->nFilledLen == 0 && (buffer->nFlags & OMX_BUFFERFLAG_EOS) && !media_buffer->pHandle) { + DEBUG_PRINT_LOW("Zero length EOS buffer"); + if(!dev_handle_empty_eos_buffer()) + return OMX_ErrorHardware; + else { + post_event((unsigned long)buffer, 0, OMX_COMPONENT_GENERATE_EBD); + return OMX_ErrorNone; + } + } + } + pending_input_buffers++; VIDC_TRACE_INT_LOW("ETB-pending", pending_input_buffers); if (input_flush_progress == true) { diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp index 72280682..ac5bfff8 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -2499,6 +2499,11 @@ OMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid) return handle->venc_set_message_thread_id(tid); } +bool omx_venc::dev_handle_empty_eos_buffer(void) +{ + return true; +} + bool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index) { return handle->venc_use_buf(buf_addr,port,index); |