Message ID | 20180508195417.82850-1-ffmpeg@tmm1.net |
---|---|
State | New |
Headers | show |
On Tue, May 8, 2018 at 12:54 PM, Aman Gupta <ffmpeg@tmm1.net> wrote: > From: Aman Gupta <aman@tmm1.net> > > Allows the user to skip streams that are not advertised in the PMT. > Disregard this patch. It combines two different things (skip pmt, skip streams without pmt) into one badly named option. Aman > --- > libavformat/mpegts.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c > index 629631f60a..5464f48a8d 100644 > --- a/libavformat/mpegts.c > +++ b/libavformat/mpegts.c > @@ -143,6 +143,7 @@ struct MpegTSContext { > > int skip_changes; > int skip_clear; > + int skip_unknown_pids; > > int scan_all_pmts; > > @@ -176,6 +177,8 @@ static const AVOption options[] = { > {.i64 = 0}, 0, 1, 0 }, > {"skip_clear", "skip clearing programs", offsetof(MpegTSContext, > skip_clear), AV_OPT_TYPE_BOOL, > {.i64 = 0}, 0, 1, 0 }, > + {"skip_unknown_pids", "skip streams not advertised in PMT", > offsetof(MpegTSContext, skip_unknown_pids), AV_OPT_TYPE_BOOL, > + {.i64 = 0}, 0, 1, 0 }, > { NULL }, > }; > > @@ -1058,7 +1061,7 @@ static int mpegts_push_data(MpegTSFilter *filter, > > /* stream not present in PMT */ > if (!pes->st) { > - if (ts->skip_changes) > + if (ts->skip_changes || ts->skip_unknown_pids) > goto skip; > > pes->st = avformat_new_stream(ts->stream, NULL); > @@ -2011,6 +2014,8 @@ static void pmt_cb(MpegTSFilter *filter, const > uint8_t *section, int section_len > if (!ts->scan_all_pmts && ts->skip_changes) > return; > > + if (ts->skip_unknown_pids && !get_program(ts, h->id)) > + return; > if (!ts->skip_clear) > clear_program(ts, h->id); > > -- > 2.14.2 > >
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 629631f60a..5464f48a8d 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -143,6 +143,7 @@ struct MpegTSContext { int skip_changes; int skip_clear; + int skip_unknown_pids; int scan_all_pmts; @@ -176,6 +177,8 @@ static const AVOption options[] = { {.i64 = 0}, 0, 1, 0 }, {"skip_clear", "skip clearing programs", offsetof(MpegTSContext, skip_clear), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, 0 }, + {"skip_unknown_pids", "skip streams not advertised in PMT", offsetof(MpegTSContext, skip_unknown_pids), AV_OPT_TYPE_BOOL, + {.i64 = 0}, 0, 1, 0 }, { NULL }, }; @@ -1058,7 +1061,7 @@ static int mpegts_push_data(MpegTSFilter *filter, /* stream not present in PMT */ if (!pes->st) { - if (ts->skip_changes) + if (ts->skip_changes || ts->skip_unknown_pids) goto skip; pes->st = avformat_new_stream(ts->stream, NULL); @@ -2011,6 +2014,8 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len if (!ts->scan_all_pmts && ts->skip_changes) return; + if (ts->skip_unknown_pids && !get_program(ts, h->id)) + return; if (!ts->skip_clear) clear_program(ts, h->id);
From: Aman Gupta <aman@tmm1.net> Allows the user to skip streams that are not advertised in the PMT. --- libavformat/mpegts.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)