aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2021-09-28 00:12:42 +0300
committerJan Ekström <jeebjp@gmail.com>2021-09-28 23:02:20 +0300
commitc20577806f0a161c6867e72f884d020a253de10a (patch)
tree3b5bc06db56cdce561d6842567296794c059705d
parent855014ff83dae786e914b4c7df88d263ec4122a7 (diff)
downloadffmpeg-c20577806f0a161c6867e72f884d020a253de10a.tar.gz
avformat/aacdec: enable probesize-sized resyncs mid-stream
Before adts_aac_resync would always bail out after probesize amount of bytes had been progressed from the start of the input. Now just query the current position when entering resync, and at most advance probesize amount of data from that start position. Fixes #9433
-rw-r--r--libavformat/aacdec.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c
index ab97be60b5..a476640904 100644
--- a/libavformat/aacdec.c
+++ b/libavformat/aacdec.c
@@ -83,10 +83,12 @@ static int adts_aac_probe(const AVProbeData *p)
static int adts_aac_resync(AVFormatContext *s)
{
uint16_t state;
+ int64_t start_pos = avio_tell(s->pb);
// skip data until an ADTS frame is found
state = avio_r8(s->pb);
- while (!avio_feof(s->pb) && avio_tell(s->pb) < s->probesize) {
+ while (!avio_feof(s->pb) &&
+ (avio_tell(s->pb) - start_pos) < s->probesize) {
state = (state << 8) | avio_r8(s->pb);
if ((state >> 4) != 0xFFF)
continue;