summaryrefslogtreecommitdiff
path: root/libavformat/mpegts.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2015-07-27 15:13:50 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2015-07-27 15:38:40 +0200
commit42aa02418e43802b4ebcca373d2413ab63a0307e (patch)
treec6379a1f8b860a8c567e28d4a17d5d136fac7dfe /libavformat/mpegts.c
parentd06ea6e5ce51165c7c81677ab6827612173bf4f7 (diff)
avformat/mpegts: Use DVB_TELETEXT timestamp heuristic also for DVB subtitles
Fixes Ticket4200 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r--libavformat/mpegts.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 689b31da5c..b758ae36d1 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1140,7 +1140,10 @@ skip:
p += 5;
buf_size -= 5;
}
- if (pes->ts->fix_teletext_pts && pes->st->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT) {
+ if ( pes->ts->fix_teletext_pts
+ && ( pes->st->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT
+ || pes->st->codec->codec_id == AV_CODEC_ID_DVB_SUBTITLE)
+ ) {
AVProgram *p = NULL;
while ((p = av_find_program_from_stream(pes->stream, p, pes->st->index))) {
if (p->pcr_pid != -1 && p->discard != AVDISCARD_ALL) {
@@ -1169,7 +1172,11 @@ skip:
pes->st->pts_wrap_behavior = st->pts_wrap_behavior;
if (pes->dts == AV_NOPTS_VALUE || pes->dts < pcr) {
pes->pts = pes->dts = pcr;
- } else if (pes->dts > pcr + 3654 + 9000) {
+ } else if (pes->st->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT &&
+ pes->dts > pcr + 3654 + 9000) {
+ pes->pts = pes->dts = pcr + 3654 + 9000;
+ } else if (pes->st->codec->codec_id == AV_CODEC_ID_DVB_SUBTITLE &&
+ pes->dts > pcr + 10*90000) { //10sec
pes->pts = pes->dts = pcr + 3654 + 9000;
}
break;