aacsbr: Turnoff in the event of over read.
authorAlex Converse <alex.converse@gmail.com>
Mon, 20 Mar 2017 19:44:42 +0000 (12:44 -0700)
committerAlex Converse <alex.converse@gmail.com>
Tue, 21 Mar 2017 16:38:36 +0000 (09:38 -0700)
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.

libavcodec/aacsbr_template.c

index cf8621e..750131c 100644 (file)
@@ -1137,6 +1137,7 @@ int AAC_RENAME(ff_decode_sbr_extension)(AACContext *ac, SpectralBandReplication
     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;
 }