From 97aea63340d1c971df7313dd8ec642017b5cd0c1 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Tue, 8 May 2018 15:07:35 -0700 Subject: [PATCH] avformat/mpegts: skip non-PMT tids earlier This mimics the logic flow in all the other callbacks (pat_cb, sdt_cb, m4sl_cb), and avoids calling skip_identical() for non PMT_TID packets. Since skip_identical modifies internal state like MpegTSSectionFilter.last_ver, this change prevents unnecessary reprocessing on some streams which contain multiple tables in the PMT pid. This can be observed with streams from certain US cable providers, which include both tid=0x2 and another unspecified tid=0xc0. Signed-off-by: Aman Gupta (cherry picked from commit 2c500f50972c19f25ebca783ba9374d6a0c23efb) --- libavformat/mpegts.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 37a6aa8bff..cfdd03125b 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1970,14 +1970,14 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len p = section; if (parse_section_header(h, &p, p_end) < 0) return; + if (h->tid != PMT_TID) + return; if (skip_identical(h, tssf)) return; av_log(ts->stream, AV_LOG_TRACE, "sid=0x%x sec_num=%d/%d version=%d tid=%d\n", h->id, h->sec_num, h->last_sec_num, h->version, h->tid); - if (h->tid != PMT_TID) - return; if (!ts->scan_all_pmts && ts->skip_changes) return;