[FFmpeg-cvslog] avcodec/v4l2_m2m_dec: set pkt_dts on decoded frames to NOPTS

Aman Gupta git at videolan.org
Wed Sep 11 20:40:17 EEST 2019


ffmpeg | branch: master | Aman Gupta <aman at tmm1.net> | Fri Aug 30 15:42:00 2019 -0700| [3475758a3791dc89c6e7c406f8b032f035cd7d1e] | committer: Aman Gupta

avcodec/v4l2_m2m_dec: set pkt_dts on decoded frames to NOPTS

Without this ffmpeg will attempt to copy the dts from the
most recently enqueued packet into the most recently dequeued
frame, which does not account for the buffering inside v4l2
and is not accurate.

Signed-off-by: Aman Gupta <aman at tmm1.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3475758a3791dc89c6e7c406f8b032f035cd7d1e
---

 libavcodec/v4l2_buffers.c | 1 +
 libavcodec/v4l2_m2m_dec.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c
index 0726dc121b..46c9f11d7b 100644
--- a/libavcodec/v4l2_buffers.c
+++ b/libavcodec/v4l2_buffers.c
@@ -420,6 +420,7 @@ int ff_v4l2_buffer_buf_to_avframe(AVFrame *frame, V4L2Buffer *avbuf)
     frame->color_range = v4l2_get_color_range(avbuf);
     frame->color_trc = v4l2_get_color_trc(avbuf);
     frame->pts = v4l2_get_pts(avbuf);
+    frame->pkt_dts = AV_NOPTS_VALUE;
 
     /* these two values are updated also during re-init in v4l2_process_driver_event */
     frame->height = avbuf->context->height;
diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c
index fb2bfde714..a3744208f3 100644
--- a/libavcodec/v4l2_m2m_dec.c
+++ b/libavcodec/v4l2_m2m_dec.c
@@ -242,6 +242,7 @@ static const AVOption options[] = {
         .close          = v4l2_decode_close, \
         .bsfs           = bsf_name, \
         .capabilities   = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, \
+        .caps_internal  = FF_CODEC_CAP_SETS_PKT_DTS, \
         .wrapper_name   = "v4l2m2m", \
     };
 



More information about the ffmpeg-cvslog mailing list