diff options
author | Pushkaraj Patil <ppatil@codeaurora.org> | 2014-12-22 19:33:08 +0530 |
---|---|---|
committer | Deva Ramasubramanian <dramasub@codeaurora.org> | 2015-02-06 19:09:14 -0800 |
commit | d9d5d0965f3de02ae57614c4710f45d5283e4635 (patch) | |
tree | d80a9295303421dedc7e5d3088862da727e3697e | |
parent | 63c8572d8dde9630d7b9f34c03eab0318448e339 (diff) | |
download | android_hardware_qcom_media-d9d5d0965f3de02ae57614c4710f45d5283e4635.tar.gz android_hardware_qcom_media-d9d5d0965f3de02ae57614c4710f45d5283e4635.tar.bz2 android_hardware_qcom_media-d9d5d0965f3de02ae57614c4710f45d5283e4635.zip |
mm-video-v4l2: vidc: move codec_config buffer counter increment
Due to random context switch between msg thread and async thread
codec_config buffer count is getting modified in wrong sequence.
In following context switch sequence, IOCTL(codec_config ETBP)
-> reset counter in async thread (EBD for codec_config) ->
increment codec_config in ETBP, counter value results to 1, it
should be 0 as EBD for codec_config buffer is received, this
resuls in unnecessary deferred flush. Adding additional logs to
track counter related issues in future.
Change-Id: I5ec99bfe15a8a38375487367920b7073b337d9a9
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp index be6ad379..47637360 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_msm8974.cpp @@ -5909,16 +5909,17 @@ if (buffer->nFlags & QOMX_VIDEO_BUFFERFLAG_EOSEQ) { buf.flags |= (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) ? V4L2_QCOM_BUF_FLAG_CODECCONFIG: 0; buf.flags |= (buffer->nFlags & OMX_BUFFERFLAG_DECODEONLY) ? V4L2_QCOM_BUF_FLAG_DECODEONLY: 0; + if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { + DEBUG_PRINT_LOW("Increment codec_config buffer counter"); + android_atomic_inc(&m_queued_codec_config_count); + } + rc = ioctl(drv_ctx.video_driver_fd, VIDIOC_QBUF, &buf); if (rc) { DEBUG_PRINT_ERROR("Failed to qbuf Input buffer to driver"); return OMX_ErrorHardware; } - if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { - android_atomic_inc(&m_queued_codec_config_count); - } - if (codec_config_flag && !(buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG)) { codec_config_flag = false; } @@ -7037,6 +7038,7 @@ int omx_vdec::async_message_process (void *context, void* message) omx->m_queued_codec_config_count); sem_post(&omx->m_safe_flush); } + DEBUG_PRINT_LOW("Reset codec_config buffer counter"); android_atomic_and(0, &omx->m_queued_codec_config_count); /* no clearer way to set to 0 */ } |