diff options
author | Tim Walker <[email protected]> | 2015-11-22 00:26:54 +0100 |
---|---|---|
committer | Tim Walker <[email protected]> | 2015-11-22 00:26:54 +0100 |
commit | f73a58dfd617103fa5fcc9530ff1079669d96d71 (patch) | |
tree | f3621e70627ed4f0cb107e1b0888609fb2e3ebb2 | |
parent | 6c731e1353608b909ce1e721e9b31b2fea6f932c (diff) |
libav: remove a pointless check in the DTS decoder.
The check resulted in an error with many real-world streams,
which are otherwise perfectly valid. The auxiliary data length
is not reliable and/or the ETSI DTS specification is incorrect.
-rw-r--r-- | contrib/ffmpeg/A10-dcadec-false-overread.patch | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A10-dcadec-false-overread.patch b/contrib/ffmpeg/A10-dcadec-false-overread.patch new file mode 100644 index 000000000..50ca00169 --- /dev/null +++ b/contrib/ffmpeg/A10-dcadec-false-overread.patch @@ -0,0 +1,23 @@ +diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c +index e988e94..a72195e 100644 +--- a/libavcodec/dcadec.c ++++ b/libavcodec/dcadec.c +@@ -1359,12 +1359,12 @@ static int dca_subframe_footer(DCAContext *s, int base_channel) + align_get_bits(&s->gb); // byte align + skip_bits(&s->gb, 16); // nAUXCRC16 + +- // additional data (reserved, cf. ETSI TS 102 114 V1.4.1) +- if ((reserved = (aux_data_end - get_bits_count(&s->gb))) < 0) { +- av_log(s->avctx, AV_LOG_ERROR, +- "Overread auxiliary data by %d bits\n", -reserved); +- return AVERROR_INVALIDDATA; +- } else if (reserved) { ++ /* ++ * additional data (reserved, cf. ETSI TS 102 114 V1.4.1) ++ * ++ * Note: don't check for overreads, aux_data_count can't be trusted. ++ */ ++ if ((reserved = (aux_data_end - get_bits_count(&s->gb))) > 0) { + avpriv_request_sample(s->avctx, + "Core auxiliary data reserved content"); + skip_bits_long(&s->gb, reserved); |