summaryrefslogtreecommitdiff
path: root/libavformat/aacdec.c
diff options
context:
space:
mode:
authorMattias Amnefelt <mattiasa@avm.se>2018-04-02 11:30:40 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2018-04-12 02:54:14 +0200
commita26c9fdd1b4c047d6c89e29774928fd7bf347e8b (patch)
tree6704866d4f619059e98e322fb054557e0f50ba0c /libavformat/aacdec.c
parentb5788e70255a8dbbd4a816f06a39a81dca4b2fd1 (diff)
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.c14
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)