diff mbox series

[FFmpeg-devel,v3,15/17] avformat/dvdvideodec: drop packets with unset PTS or DTS

Message ID 20241007230505.27623-16-marth64@proxyid.net
State New
Headers show
Series avformat/dvdvideodec: bugfixes and menu chapter markers | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 fail Make failed

Commit Message

Marth64 Oct. 7, 2024, 11:05 p.m. UTC
The packets effectively serve no purpose and we are already
dropping packets with PTS less than 0. This also creates
for a smoother seeking experience after the subdemuxer
reset fix.

Signed-off-by: Marth64 <marth64@proxyid.net>
---
 libavformat/dvdvideodec.c | 29 ++++++++++++-----------------
 1 file changed, 12 insertions(+), 17 deletions(-)
diff mbox series

Patch

diff --git a/libavformat/dvdvideodec.c b/libavformat/dvdvideodec.c
index d64a678589..f20d2aa5cb 100644
--- a/libavformat/dvdvideodec.c
+++ b/libavformat/dvdvideodec.c
@@ -1643,28 +1643,23 @@  static int dvdvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
         }
     }
 
-    if (!st_mapped)
+    if (!st_mapped || pkt->pts == AV_NOPTS_VALUE || pkt->dts == AV_NOPTS_VALUE)
         goto discard;
 
-    if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE) {
-        if (!c->play_started) {
-            /* try to start at the beginning of a GOP */
-            if (st_subdemux->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || !is_key)
-                goto discard;
+    if (!c->play_started) {
+        /* try to start at the beginning of a GOP */
+        if (st_subdemux->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || !is_key)
+            goto discard;
 
-            c->first_pts = pkt->pts;
-            c->play_started = 1;
-        }
+        c->first_pts = pkt->pts;
+        c->play_started = 1;
+    }
 
-        pkt->pts += c->pts_offset - c->first_pts;
-        pkt->dts += c->pts_offset - c->first_pts;
+    pkt->pts += c->pts_offset - c->first_pts;
+    pkt->dts += c->pts_offset - c->first_pts;
 
-        if (pkt->pts < 0)
-            goto discard;
-    } else {
-        av_log(s, AV_LOG_WARNING, "Unset PTS or DTS @ st=%d pts=%" PRId64 " dts=%" PRId64 "\n",
-                                  pkt->stream_index, pkt->pts, pkt->dts);
-    }
+    if (pkt->pts < 0)
+        goto discard;
 
     av_log(s, AV_LOG_TRACE, "st=%d pts=%" PRId64 " dts=%" PRId64 " "
                             "pts_offset=%" PRId64 " first_pts=%" PRId64 "\n",