summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPushkaraj Patil <ppatil@codeaurora.org>2014-12-22 19:33:08 +0530
committerDeva Ramasubramanian <dramasub@codeaurora.org>2015-02-06 19:09:14 -0800
commitd9d5d0965f3de02ae57614c4710f45d5283e4635 (patch)
treed80a9295303421dedc7e5d3088862da727e3697e
parent63c8572d8dde9630d7b9f34c03eab0318448e339 (diff)
downloadandroid_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.cpp10
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 */
}