diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-07-05 03:27:07 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-07-07 18:33:32 +0200 |
commit | b186a5d08cde10ec61b2d7e83ced44c18cc1d9de (patch) | |
tree | 0b8b6bc5b5c5724da21d0d30d2524db91f25ef5f /libavformat | |
parent | af95e174c5d9cf9c87cbe396ed2e0269c0f18bc1 (diff) | |
download | ffmpeg-b186a5d08cde10ec61b2d7e83ced44c18cc1d9de.tar.gz |
mpegts: only reopen pmt_cb filter if its different from the previous.
Fixes Ticket2632
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit b009267910df10c004b5f340a090d45da29089a0)
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mpegts.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index a6dff475e1..274b85690a 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1620,12 +1620,18 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len if (sid == 0x0000) { /* NIT info */ } else { + MpegTSFilter *fil = ts->pids[pmt_pid]; program = av_new_program(ts->stream, sid); program->program_num = sid; program->pmt_pid = pmt_pid; - if (ts->pids[pmt_pid]) - mpegts_close_filter(ts, ts->pids[pmt_pid]); - mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1); + if (fil) + if ( fil->type != MPEGTS_SECTION + || fil->pid != pmt_pid + || fil->u.section_filter.section_cb != pmt_cb) + mpegts_close_filter(ts, ts->pids[pmt_pid]); + + if (!ts->pids[pmt_pid]) + mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1); add_pat_entry(ts, sid); add_pid_to_pmt(ts, sid, 0); //add pat pid to program add_pid_to_pmt(ts, sid, pmt_pid); |