summaryrefslogtreecommitdiffstats
path: root/libavformat/aacdec.c
diff options
context:
space:
mode:
authorMattias Amnefelt <[email protected]>2018-04-02 11:30:40 +0200
committerMichael Niedermayer <[email protected]>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 <[email protected]> Signed-off-by: Michael Niedermayer <[email protected]>
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)