aacsbr: Turnoff in the event of over read.

Message ID 20170503230039.AC9D85DB1C@aruru.libav.org
State New
Headers show

Commit Message

Janne Grunau May 3, 2017, 11 p.m.
Module: libav
Branch: master
Commit: 504403ab28688588fb85817ad58964482f67f29f

Author:    Alex Converse <alex.converse@gmail.com>
Committer: Sean McGovern <gseanmcg@gmail.com>
Date:      Mon Mar 20 12:44:42 2017 -0700

aacsbr: Turnoff in the event of over read.

Aliased compressed AAC bytes are almost certainly not meaningful SBR
data. In the wild this causes harsh artifacts switching HE-AAC streams
that don't have SBR headers aligned with segment boundaries.

Turning off SBR falls back to a default set of upsampling parameters
that can function as a sort of error concealment. This is consistent
with how the decoder handles other sorts of errors.

Bug-Id: 1047
CC: libav-stable@libav.org

Signed-off-by: Sean McGovern <gseanmcg@gmail.com>


 libavcodec/aacsbr.c | 1 +
 1 file changed, 1 insertion(+)


diff --git a/libavcodec/aacsbr.c b/libavcodec/aacsbr.c
index 99f7b08..d9bbe5e 100644
--- a/libavcodec/aacsbr.c
+++ b/libavcodec/aacsbr.c
@@ -1097,6 +1097,7 @@  int ff_decode_sbr_extension(AACContext *ac, SpectralBandReplication *sbr,
     if (bytes_read > cnt) {
         av_log(ac->avctx, AV_LOG_ERROR,
                "Expected to read %d SBR bytes actually read %d.\n", cnt, bytes_read);
+        sbr_turnoff(sbr);
     return cnt;