On 3/19/2016 1:02 PM, Anton Khirnov wrote:
> Quoting Luca Barbato (2016-03-07 09:10:14)
>> On 07/03/16 08:59, Luca Barbato wrote:
>>> On 04/03/16 09:15, Anton Khirnov wrote:
>>>> ---
>>>>  libavcodec/aac_adtstoasc_bsf.c | 95 
>>>> ++++++++++++++++++++++++++----------------
>>>>  libavcodec/allcodecs.c         |  1 -
>>>>  libavcodec/bitstream_filters.c |  5 +++
>>>>  3 files changed, 65 insertions(+), 36 deletions(-)
>>>>
>>>
>>> Possibly Ok.
>>>
>>
>> Reading the others, why the par_out->extradata is not set?
> 
> Because it's set as side data in the first packet. Actually it should be
> actively unset from the output parameters.

This is not what should be done. If the stream has extradata during .init()
then it means it's ASC and not ADTS or even LATM. Deleting it unconditionally
breaks passthrough use cases.

The .init function should validate the extradata and let av_bsf_init() pass
it down the filter chain. See the attached patch.

>From 5f07937db0a12b6176bfc0414c530716cfb382e7 Mon Sep 17 00:00:00 2001
From: James Almer <jamr...@gmail.com>
Date: Thu, 24 Nov 2016 21:10:47 -0300
Subject: [PATCH] aac_adtstoasc_bsf: validate and forward extradata if the
 stream is already ASC

Fixes AAC AudioSpecificConfig passthrough.

Signed-off-by: James Almer <jamr...@gmail.com>
---
 libavcodec/aac_adtstoasc_bsf.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/libavcodec/aac_adtstoasc_bsf.c b/libavcodec/aac_adtstoasc_bsf.c
index 9168e2b..08d60eb 100644
--- a/libavcodec/aac_adtstoasc_bsf.c
+++ b/libavcodec/aac_adtstoasc_bsf.c
@@ -135,8 +135,16 @@ fail:
 
 static int aac_adtstoasc_init(AVBSFContext *ctx)
 {
-    av_freep(&ctx->par_out->extradata);
-    ctx->par_out->extradata_size = 0;
+    /* Validate the extradata if the stream is already MPEG-4 AudioSpecificConfig */
+    if (ctx->par_in->extradata) {
+        MPEG4AudioConfig mp4ac;
+        int ret = avpriv_mpeg4audio_get_config(&mp4ac, ctx->par_in->extradata,
+                                               ctx->par_in->extradata_size * 8, 1);
+        if (ret < 0) {
+            av_log(ctx, AV_LOG_ERROR, "Error parsing AudioSpecificConfig extradata!\n");
+            return ret;
+        }
+    }
 
     return 0;
 }
-- 
2.10.2

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to