Fixes ticket #5973 Signed-off-by: James Almer <jamr...@gmail.com> --- Maybe init() should propagate the extradata down the filter chain instead of this, since if an aac stream has extradata then it means that it's an ASC stream. Neither ADTS or LATM use extradata.
What's preferred? libavcodec/aac_adtstoasc_bsf.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libavcodec/aac_adtstoasc_bsf.c b/libavcodec/aac_adtstoasc_bsf.c index 48889fc..76cf32e 100644 --- a/libavcodec/aac_adtstoasc_bsf.c +++ b/libavcodec/aac_adtstoasc_bsf.c @@ -54,8 +54,19 @@ static int aac_adtstoasc_filter(AVBSFContext *bsfc, AVPacket *out) init_get_bits(&gb, in->data, AAC_ADTS_HEADER_SIZE * 8); - if (bsfc->par_in->extradata && show_bits(&gb, 12) != 0xfff) + if (bsfc->par_in->extradata && show_bits(&gb, 12) != 0xfff) { + if (!bsfc->par_out->extradata) { + /* Stream is already AudioSpecificConfig. Restore its original extradata */ + bsfc->par_out->extradata = av_mallocz(bsfc->par_in->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!bsfc->par_out->extradata) { + ret = AVERROR(ENOMEM); + goto fail; + } + bsfc->par_out->extradata_size = bsfc->par_in->extradata_size; + memcpy(bsfc->par_out->extradata, bsfc->par_in->extradata, bsfc->par_in->extradata_size); + } goto finish; + } if (avpriv_aac_parse_header(&gb, &hdr) < 0) { av_log(bsfc, AV_LOG_ERROR, "Error parsing ADTS frame header!\n"); -- 2.10.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel