diff options
author | Alex Converse <alex.converse@gmail.com> | 2011-10-04 18:24:22 -0700 |
---|---|---|
committer | Alex Converse <alex.converse@gmail.com> | 2011-10-28 14:54:13 -0700 |
commit | 476d04a56ac499b9a5a081646d9737d956f24130 (patch) | |
tree | 934e367f4e69511c6922ac392fd6270caf5ee0b0 | |
parent | 77b5c82b49dacfab9966df2d7532ae155478769e (diff) | |
download | ffmpeg-476d04a56ac499b9a5a081646d9737d956f24130.tar.gz |
mpegts: Parse mpeg2 SL descriptors.
-rw-r--r-- | libavformat/mpegts.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 5668f546f6..faa834d3cf 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -909,7 +909,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type uint8_t *mp4_dec_config_descr) { const uint8_t *desc_end; - int desc_len, desc_tag; + int desc_len, desc_tag, desc_es_id; char language[252]; int i; @@ -930,6 +930,18 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type mpegts_find_stream_type(st, desc_tag, DESC_types); switch(desc_tag) { + case 0x1E: /* SL descriptor */ + desc_es_id = get16(pp, desc_end); + if (mp4_dec_config_descr_len && mp4_es_id == desc_es_id) { + AVIOContext pb; + ffio_init_context(&pb, mp4_dec_config_descr, + mp4_dec_config_descr_len, 0, NULL, NULL, NULL, NULL); + ff_mp4_read_dec_config_descr(fc, st, &pb); + if (st->codec->codec_id == CODEC_ID_AAC && + st->codec->extradata_size > 0) + st->need_parsing = 0; + } + break; case 0x1F: /* FMC descriptor */ get16(pp, desc_end); if (st->codec->codec_id == CODEC_ID_AAC_LATM && |