aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2018-10-07 13:03:00 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2018-10-12 00:53:14 +0200
commit8f1524802469cb701040561cd05a9a924dec3627 (patch)
tree5f04b5de09bca98b1f6645868089fafb0ae65185
parentf7affc6f70cc1bbeec51b1d699e2f17f4ced7362 (diff)
downloadffmpeg-8f1524802469cb701040561cd05a9a924dec3627.tar.gz
avcodec/aacdec_template: Allow duplicated elements
Such streams are invalid according to 4.5.2.1 Top level payloads for the audio object types AAC main, AAC SSR, AAC LC and AAC LTP 4.5.2.1.1 Definitions ...cIn the raw_data_block(), several instances of the same syntactic element may occur, but must have a different 4 bit element_instance_tag, except for data_stream_element()'s and fill_element()'s. Fixes: Ticket7477 Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/aacdec_template.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index b60b31a92c..dce6035d67 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -3161,12 +3161,15 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
if (elem_type < TYPE_DSE) {
if (che_presence[elem_type][elem_id]) {
- av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d duplicate\n",
+ int error = che_presence[elem_type][elem_id] > 1;
+ av_log(ac->avctx, error ? AV_LOG_ERROR : AV_LOG_DEBUG, "channel element %d.%d duplicate\n",
elem_type, elem_id);
- err = AVERROR_INVALIDDATA;
- goto fail;
+ if (error) {
+ err = AVERROR_INVALIDDATA;
+ goto fail;
+ }
}
- che_presence[elem_type][elem_id] = 1;
+ che_presence[elem_type][elem_id]++;
if (!(che=get_che(ac, elem_type, elem_id))) {
av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n",