diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-02-04 23:41:53 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-03-10 09:55:39 +0100 |
commit | 0ec869527c13fce6755bc6f6b07cb50138936449 (patch) | |
tree | f68ca5a8ac64b67b5c6d9f60d6594fc59b0ecdc7 | |
parent | 0b198e38c52ca716def04433876b8438b4bc218e (diff) | |
download | ffmpeg-0ec869527c13fce6755bc6f6b07cb50138936449.tar.gz |
mpegts: clear avprograms only for removed programs
Fixes Ticket2186
Requested-by: carl
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 806a66fd08a395486e763fb10588c5fd02e8d54e)
-rw-r--r-- | libavformat/mpegts.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 8b92bc421e..32aa51f97e 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -208,9 +208,6 @@ static void clear_program(MpegTSContext *ts, unsigned int programid) static void clear_programs(MpegTSContext *ts) { - int i; - for(i=0; i<ts->nb_prg; i++) - clear_avprogram(ts, ts->prg[i].id); av_freep(&ts->prg); ts->nb_prg=0; } @@ -1636,6 +1633,17 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len add_pid_to_pmt(ts, sid, pmt_pid); } } + + if (sid < 0) { + int i,j; + for (j=0; j<ts->stream->nb_programs; j++) { + for (i=0; i<ts->nb_prg; i++) + if (ts->prg[i].id == ts->stream->programs[j]->id) + break; + if (i==ts->nb_prg) + clear_avprogram(ts, ts->stream->programs[j]->id); + } + } } static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len) |