From 5e28297b6d4915a9ce7a70c7f3dadda88480acd8 Mon Sep 17 00:00:00 2001 From: Praveen Chavan Date: Wed, 17 Jun 2015 20:36:46 -0700 Subject: mm-video-v4l2: vdec: Handle empty EOS buffer Input buffer queued with EOS flag may have 0 filled-length. Ignore checks for pBuffer-sanity and continue to signal EOS. Bug: 21659665 Change-Id: I2d0e09ffe37e73b1799fd41a869cdf0372277ecf --- mm-video-v4l2/vidc/venc/src/omx_video_base.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 81782db2..643e2d99 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp @@ -4547,6 +4547,7 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp, unsigned nBufIndex = 0; OMX_ERRORTYPE ret = OMX_ErrorNone; encoder_media_buffer_type *media_buffer; + private_handle_t *handle = NULL; DEBUG_PRINT_LOW("ETBProxyOpaque: buffer[%p]", buffer); if (buffer == NULL) { @@ -4560,13 +4561,15 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp, return OMX_ErrorBadParameter; } media_buffer = (encoder_media_buffer_type *)buffer->pBuffer; - if (!media_buffer || !media_buffer->meta_handle) { + if ((!media_buffer || !media_buffer->meta_handle) && + !(buffer->nFlags & OMX_BUFFERFLAG_EOS)) { DEBUG_PRINT_ERROR("Incorrect Buffer queued media buffer = %p", media_buffer); m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); return OMX_ErrorBadParameter; + } else if (media_buffer) { + handle = (private_handle_t *)media_buffer->meta_handle; } - private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; /*Enable following code once private handle color format is updated correctly*/ -- cgit v1.2.3 From 9d8954113625360e2a05ca0cad93b987ce516818 Mon Sep 17 00:00:00 2001 From: Ashray Kulkarni Date: Fri, 10 Apr 2015 16:02:34 -0700 Subject: mm-video-v4l2: venc: Update low power mode for 4K recording - Enable low power mode for 4K recording - Increasing min buff count for 4K session to 11 for power save mode. Bug: 23505291 Change-Id: I6e35d373d7dc57f95f35d9a6acc45246552d21b2 --- mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index 96fbbe67..7ad8ca2a 100644 --- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -1195,10 +1195,14 @@ bool venc_dev::venc_get_buf_req(OMX_U32 *min_buff_count, // Increase buffer-header count for metadata-mode on input port // to improve buffering and reduce bottlenecks in clients if (metadatamode && (bufreq.count < 9)) { - DEBUG_PRINT_LOW("FW returned buffer count = %d , overwriting with 16", + DEBUG_PRINT_LOW("FW returned buffer count = %d , overwriting with 9", bufreq.count); bufreq.count = 9; } + if (m_sVenc_cfg.input_height * m_sVenc_cfg.input_width >= 3840*2160) { + DEBUG_PRINT_LOW("Increasing buffer count = %d to 11", bufreq.count); + bufreq.count = 11; + } bufreq.type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; ret = ioctl(m_nDriver_fd,VIDIOC_REQBUFS, &bufreq); @@ -1335,6 +1339,11 @@ bool venc_dev::venc_set_param(void *paramData,OMX_INDEXTYPE index ) DEBUG_PRINT_LOW("input: actual: %u, min: %u, count_req: %u", (unsigned int)portDefn->nBufferCountActual, (unsigned int)m_sInput_buff_property.mincount, bufreq.count); + if (m_sVenc_cfg.input_width * m_sVenc_cfg.input_height >= 3840 * 2160) { + if (venc_set_perf_mode(V4L2_MPEG_VIDC_VIDEO_PERF_POWER_SAVE) == false) { + DEBUG_PRINT_ERROR("ERROR: Failed to set Power save mode"); + } + } } else if (portDefn->nPortIndex == PORT_INDEX_OUT) { m_sVenc_cfg.dvs_height = portDefn->format.video.nFrameHeight; m_sVenc_cfg.dvs_width = portDefn->format.video.nFrameWidth; -- cgit v1.2.3 From dd826103a6c76f67897eaa2afafd8db9548195dc Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Fri, 25 Sep 2015 23:11:15 -0700 Subject: encoder: increase the input buffer count from 9 to 12 This is to reduce the chance of frame drops during high speed recording or with high system load. Bug: 24227252 Change-Id: I353a9ea5427eb7dc3f7a153abc75bc7f1514e455 --- mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index 7ad8ca2a..8266ee0b 100644 --- a/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -1202,6 +1202,8 @@ bool venc_dev::venc_get_buf_req(OMX_U32 *min_buff_count, if (m_sVenc_cfg.input_height * m_sVenc_cfg.input_width >= 3840*2160) { DEBUG_PRINT_LOW("Increasing buffer count = %d to 11", bufreq.count); bufreq.count = 11; + } else { + bufreq.count = 12; } bufreq.type=V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; -- cgit v1.2.3