aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2019-08-24 00:27:41 +0200
committerMarton Balint <cus@passwd.hu>2019-09-02 22:05:46 +0200
commit3a17fe2bdd57294edda378693ff45f19cbdaf0ed (patch)
tree63634b9b7de0f03d75f3aa83395d769a0b45b3cf
parentc1dc4d2d501cd926ce698df86a8cf1d0b77606eb (diff)
downloadffmpeg-3a17fe2bdd57294edda378693ff45f19cbdaf0ed.tar.gz
avformat/mpegts: fix teletext PTS when selecting teletext streams only
After a1b4f120c031e6697bac9fd8c725d9c37ee36d13 the teletext PTS values were set to AV_NOPTS_VALUE if the stream of the PCR pid was discarded. What actually matters is that if we parse the PCR of the PCR PID or not, so let's use the cached discard value of the actual PCR PID instead of the stream discard value, which may be different. Also fixes ticket #7567, which was caused by the fact that teletext PTS values were not touched if the PCR pid was discarded even before a1b4f120c031e6697bac9fd8c725d9c37ee36d13. Signed-off-by: Marton Balint <cus@passwd.hu> (cherry picked from commit 765c56bfa9037060e36250090880b2961c88f27d)
-rw-r--r--libavformat/mpegts.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 47d8d5f877..58902527c5 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1303,15 +1303,17 @@ skip:
st = pst;
}
}
- if (f->last_pcr != -1 && st && st->discard != AVDISCARD_ALL) {
+ if (f->last_pcr != -1 && !f->discard) {
// teletext packets do not always have correct timestamps,
// the standard says they should be handled after 40.6 ms at most,
// and the pcr error to this packet should be no more than 100 ms.
// TODO: we should interpolate the PCR, not just use the last one
int64_t pcr = f->last_pcr / 300;
pcr_found = 1;
- pes->st->pts_wrap_reference = st->pts_wrap_reference;
- pes->st->pts_wrap_behavior = st->pts_wrap_behavior;
+ if (st) {
+ pes->st->pts_wrap_reference = st->pts_wrap_reference;
+ 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->st->codecpar->codec_id == AV_CODEC_ID_DVB_TELETEXT &&