diff options
author | Mattias Amnefelt <mattiasa@avm.se> | 2018-04-02 11:30:40 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2018-04-12 02:54:14 +0200 |
commit | a26c9fdd1b4c047d6c89e29774928fd7bf347e8b (patch) | |
tree | 6704866d4f619059e98e322fb054557e0f50ba0c /libavformat/aacdec.c | |
parent | b5788e70255a8dbbd4a816f06a39a81dca4b2fd1 (diff) | |
download | ffmpeg-a26c9fdd1b4c047d6c89e29774928fd7bf347e8b.tar.gz |
libavformat/aac: Parse all ID3 tags present between ADTS frames
Some ADTS streams can have multiple ID3 tags between frames. This
change parses all of them, rather than just the first one.
Signed-off-by: Mattias Amnefelt <mattiasa@avm.se>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/aacdec.c')
-rw-r--r-- | libavformat/aacdec.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c index 5ec706bdc7..685458b911 100644 --- a/libavformat/aacdec.c +++ b/libavformat/aacdec.c @@ -154,11 +154,15 @@ static int adts_aac_read_packet(AVFormatContext *s, AVPacket *pkt) { int ret, fsize; - ret = av_get_packet(s->pb, pkt, FFMAX(ID3v2_HEADER_SIZE, ADTS_HEADER_SIZE)); - - if (ret >= ID3v2_HEADER_SIZE && ff_id3v2_match(pkt->data, ID3v2_DEFAULT_MAGIC)) { - if ((ret = handle_id3(s, pkt)) >= 0) - ret = av_get_packet(s->pb, pkt, ADTS_HEADER_SIZE); + // Parse all the ID3 headers between frames + while (1) { + ret = av_get_packet(s->pb, pkt, FFMAX(ID3v2_HEADER_SIZE, ADTS_HEADER_SIZE)); + if (ret >= ID3v2_HEADER_SIZE && ff_id3v2_match(pkt->data, ID3v2_DEFAULT_MAGIC)) { + if ((ret = handle_id3(s, pkt)) >= 0) { + continue; + } + } + break; } if (ret < 0) |