[FFmpeg-devel] [PATCH] avformat/mpegts: parse large PMTs with multiple tables

Michael Niedermayer michael at niedermayer.cc
Wed Jun 13 15:34:10 EEST 2018


On Tue, Jun 12, 2018 at 09:23:25PM -0700, Aman Gupta wrote:
> On Tue, Jun 12, 2018 at 3:17 PM Michael Niedermayer <michael at niedermayer.cc>
> wrote:
> 
> > On Mon, Jun 11, 2018 at 12:43:31AM -0700, Aman Gupta wrote:
> > > From: Aman Gupta <aman at tmm1.net>
> > >
> > > In 9152c1e4955, the mpegts parser was taught how to parse
> > > PMT sections which contained multiple tables. That commit
> > > fixed parsing of PMT packets from some cable providers,
> > > which included a special SCTE table (0xc0) before the
> > > standard program map table (0x2).
> > >
> > > Sometimes, however, the combined 0xc0 and 0x2 tables are
> > > larger than a single TS packet (188 bytes). The mpegts parser
> > > already attempts to parse sections which span multiple packets,
> > > but still assumed that the split section only contained one
> > > table.
> > >
> > > This patch fixes parsing of such a sample[1].
> > >
> > > Before:
> > >
> > >     Input #0, mpegts, from 'combined-pmt-tids-split.ts':
> > >       Duration: 00:00:01.26, start: 39188.931756, bitrate: 597 kb/s
> > >       Program 1
> > >       No Program
> > >         Stream #0:0[0xeff]: Audio: ac3, 48000 Hz, mono, fltp, 64 kb/s
> > >         Stream #0:1[0xefd]: Audio: mp3, 0 channels, fltp
> > >         Stream #0:2[0xefe]: Unknown: none
> > >
> > > After:
> > >
> > >     Input #0, mpegts, from 'combined-pmt-tids-split.ts':
> > >       Duration: 00:00:01.27, start: 39188.931756, bitrate: 589 kb/s
> > >       Program 1
> > >         Stream #0:0[0xefd]: Video: h264 ([27][0][0][0] / 0x001B), none,
> > 59.94 fps, 59.94 tbr, 90k tbn, 180k tbc
> > >         Stream #0:1[0xefe](eng): Audio: ac3 ([129][0][0][0] / 0x0081),
> > 48000 Hz, stereo, fltp, 384 kb/s
> > >         Stream #0:2[0xeff](spa): Audio: ac3 ([129][0][0][0] / 0x0081),
> > 48000 Hz, mono, fltp, 64 kb/s
> > >         Stream #0:3[0xf00]: Data: scte_35
> > >         Stream #0:4[0xf01]: Unknown: none (ETV1 / 0x31565445)
> > >         Stream #0:5[0xf02]: Unknown: none (ETV1 / 0x31565445)
> > >         Stream #0:6[0xf03]: Unknown: none ([192][0][0][0] / 0x00C0)
> > >
> > > With the patch, the PMT is parsed correctly so the streams are
> > > created in the correct order, are associated with "Program 1",
> > > and their codecs are set correctly.
> > >
> > > [1] https://s3.amazonaws.com/tmm1/combined-pmt-tids-split.ts
> > >
> > > Signed-off-by: Aman Gupta <aman at tmm1.net>
> > > ---
> > >  libavformat/mpegts.c | 1 +
> > >  1 file changed, 1 insertion(+)
> >
> > with this change section_h_size becomes almost a local variable
> > is that intended ?
> 
> 
> Yes that is the intended behavior. Previously the size was cached as an
> optimization, but that assumed that there was only one size value per
> section (whereas these sections have multiple tables and thus multiple
> sizes).
> 
> I will follow up with a refactor to turn it into a local variable and
> remove the field from the struct.

ok, perfectly fine

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

it is not once nor twice but times without number that the same ideas make
their appearance in the world. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180613/398cde15/attachment.sig>


More information about the ffmpeg-devel mailing list