From c11157c09a11ad3f80ace4dc6832eef7067db72a Mon Sep 17 00:00:00 2001
From: Rodger Combs <rodger.combs@gmail.com>
Date: Thu, 7 Apr 2016 20:27:03 -0500
Subject: [PATCH] lavf/audiotoolboxdec: only send extradata for formats that
 use it

Fixes initialization errors for some AVI files
---
 libavcodec/audiotoolboxdec.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c
index 27406484869..80b1f339229 100644
--- a/libavcodec/audiotoolboxdec.c
+++ b/libavcodec/audiotoolboxdec.c
@@ -261,10 +261,17 @@ static uint8_t* ffat_get_magic_cookie(AVCodecContext *avctx, UInt32 *cookie_size
     }
 }
 
+static av_cold int ffat_usable_extradata(AVCodecContext *avctx)
+{
+    return avctx->extradata_size &&
+           (avctx->codec_id == AV_CODEC_ID_ALAC ||
+            avctx->codec_id == AV_CODEC_ID_AAC);
+}
+
 static int ffat_set_extradata(AVCodecContext *avctx)
 {
     ATDecodeContext *at = avctx->priv_data;
-    if (avctx->extradata_size) {
+    if (ffat_usable_extradata(avctx)) {
         OSStatus status;
         UInt32 cookie_size;
         uint8_t *cookie = ffat_get_magic_cookie(avctx, &cookie_size);
@@ -305,7 +312,7 @@ static av_cold int ffat_create_decoder(AVCodecContext *avctx, AVPacket *pkt)
 
     avctx->sample_fmt = sample_fmt;
 
-    if (avctx->extradata) {
+    if (ffat_usable_extradata(avctx)) {
         UInt32 format_size = sizeof(in_format);
         UInt32 cookie_size;
         uint8_t *cookie = ffat_get_magic_cookie(avctx, &cookie_size);
@@ -384,7 +391,7 @@ static av_cold int ffat_create_decoder(AVCodecContext *avctx, AVPacket *pkt)
 
 static av_cold int ffat_init_decoder(AVCodecContext *avctx)
 {
-    if ((avctx->channels && avctx->sample_rate) || avctx->extradata_size)
+    if ((avctx->channels && avctx->sample_rate) || ffat_usable_extradata(avctx))
         return ffat_create_decoder(avctx, NULL);
     else
         return 0;
-- 
GitLab