[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