On Thu, 13 Aug 2020, Jan Ekström wrote:

While having the possibility of non-NOPTS values that can suddenly
jump in time due to adjustments to match PCR is not nice for DVB
subtitles, apparently the parser for this format bases its behavior on
whether the packets' timestamps are NOPTS or not.

Actually what matters is that the parser separates packets which have different PTS values. Having a DVB subtitle packet with no PTS is not even valid based on what I read from the specs:

"Each PES header shall carry a PTS, associated with all the subtitle data
contained within that PES packet. "

So I guess current code assumes that if a packet has no PTS then it is also part of the previous packet, but this also seems like a workaround for bad streams...

Thus while we can adjust timestamps, we should exclude DVB subtitles from the timestamp unsetting logic.

Ok, but to be frank the timestamp setting logic (even when it is used with PCR) also breaks the parser, because it might assign different PTS to PES packets which have the same PTS...


Fixes #8844
---
libavformat/mpegts.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index f71f18a57d..50d4d5e9bc 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1343,7 +1343,8 @@ skip:
                        }
                    }

-                    if (!pcr_found) {
+                    if (pes->st->codecpar->codec_id == AV_CODEC_ID_DVB_TELETEXT 
&&
+                        !pcr_found) {
                        av_log(pes->stream, AV_LOG_VERBOSE,
                               "Forcing DTS/PTS to be unset for a "
                               "non-trustworthy PES packet for PID %d as "

Patch LGTM, I am just saying that the problems lies more deep...

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to