diff options
author | Mahesh Lanka <mlanka@codeaurora.org> | 2017-06-28 20:48:59 +0530 |
---|---|---|
committer | Pawin Vongmasa <pawin@google.com> | 2017-06-29 17:07:12 -0700 |
commit | d128a260d9c67b376b05959ab50fb7174e30cd1d (patch) | |
tree | 138da126cb3c2db0bd9601a6cba9552657b1256d /msm8996 | |
parent | e34f279fc2fd42057c006614b0f6e5378b97c1fd (diff) | |
download | media-d128a260d9c67b376b05959ab50fb7174e30cd1d.tar.gz |
mm-video-v4l2: venc: Change QBUF and STREAM_ON call sequence
By calling STREAM_ON after QBUF, and meanwhile if there is
any buffer requirements query, there is a chance that queued
buffer will be ignored by driver. Hence changing the QBUF and
STREAM_ON sequence.
CRs-Fixed: 2065953
author : Manikanta Kanamarlapudi <kmanikan@codeaurora.org>
Bug: 62602083
Bug: 62848424
Bug: 62848422
Merged-In: I9fd910208d197bd0d28160393c3426ed9270494c
Change-Id: I9fd910208d197bd0d28160393c3426ed9270494c
Diffstat (limited to 'msm8996')
-rw-r--r-- | msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp b/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp index ed0ce88..03652aa 100644 --- a/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp +++ b/msm8996/mm-video-v4l2/vidc/venc/src/video_encoder_device_v4l2.cpp @@ -3692,6 +3692,23 @@ bool venc_dev::venc_empty_buf(void *buffer, void *pmem_data_buf, unsigned index, return false; } + 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; @@ -3714,22 +3731,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; - } - } if (m_debug.in_buffer_log) { venc_input_log_buffers(bufhdr, fd, plane[0].data_offset, m_sVenc_cfg.inputformat); } |