• Aman Gupta's avatar
    avformat/mpegts: parse sections with multiple tables · 9152c1e4
    Aman Gupta authored
    Fixes PMT parsing in some mpegts streams which contain
    multiple tables within the PMT pid. Previously, the parser
    assumed only one table was present in each packet, and discarded
    the rest of the section data after attempting to parse the first
    table.
    
    A similar issue was documented in the BeyondTV software[1], which
    helped me diagnose the same bug in the ffmpeg mpegts demuxer. I also
    tried DVBInspector, libdvbpsi's dvbinfo, and tstools' tsinfo to
    help debug. The former two properly read PMTs with multiple tables,
    whereas the last has the same bug as ffmpeg.
    
    I've created a minimal sample[2] which contains the combined PMT.
    Here's what ffmpeg probe shows before and after this patch:
    
    Before:
    
        Input #0, mpegts, from 'combined-pmt-tids.ts':
          Duration: 00:00:01.08, start: 4932.966167, bitrate: 741 kb/s
          Program 1
          No Program
            Stream #0:0[0xf9d]: Audio: ac3, 48000 Hz, mono, fltp, 96 kb/s
            Stream #0:1[0xf9b]: Audio: mp3, 0 channels, fltp
            Stream #0:2[0xf9c]: Unknown: none
    
    After:
    
        Input #0, mpegts, from 'combined-pmt-tids.ts':
          Duration: 00:00:01.11, start: 4932.966167, bitrate: 718 kb/s
          Program 1
            Stream #0:0[0xf9b]: Video: mpeg2video ([2][0][0][0] / 0x0002), none(tv, top first), 29.97 fps, 29.97 tbr, 90k tbn, 90k tbc
            Stream #0:1[0xf9c](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
            Stream #0:2[0xf9d](spa): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, mono, fltp, 96 kb/s
    
    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] http://forums.snapstream.com/vb/showpost.php?p=343816&postcount=201
    [2] https://s3.amazonaws.com/tmm1/combined-pmt-tids.tsSigned-off-by: 's avatarAman Gupta <aman@tmm1.net>
    Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
    9152c1e4
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
ffbuild Loading commit data...
fftools Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavresample Loading commit data...
libavutil Loading commit data...
libpostproc Loading commit data...
libswresample Loading commit data...
libswscale Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
CONTRIBUTING.md Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
INSTALL.md Loading commit data...
LICENSE.md Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
RELEASE Loading commit data...
configure Loading commit data...