From: Steve Lhomme <[email protected]>

--
can be found in such sample 
http://streams.videolan.org/issues/16620/VLCSupportsample.mkv
---
 libavcodec/alac.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/alac.c b/libavcodec/alac.c
index 72e8a57..655036a 100644
--- a/libavcodec/alac.c
+++ b/libavcodec/alac.c
@@ -57,6 +57,7 @@
 #include "alac_data.h"
 
 #define ALAC_EXTRADATA_SIZE 36
+#define ALAC_EXTRADATA_SIZE_NO_ATOM 24
 
 typedef struct ALACContext {
     AVCodecContext *avctx;
@@ -503,7 +504,8 @@ static int alac_set_info(ALACContext *alac)
     bytestream2_init(&gb, alac->avctx->extradata,
                      alac->avctx->extradata_size);
 
-    bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
+    if (alac->avctx->extradata_size != ALAC_EXTRADATA_SIZE_NO_ATOM)
+        bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
 
     alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
     if (!alac->max_samples_per_frame ||
@@ -534,7 +536,8 @@ static av_cold int alac_decode_init(AVCodecContext * avctx)
     alac->avctx = avctx;
 
     /* initialize from the extradata */
-    if (alac->avctx->extradata_size < ALAC_EXTRADATA_SIZE) {
+    if (alac->avctx->extradata_size < ALAC_EXTRADATA_SIZE ||
+        alac->avctx->extradata_size != ALAC_EXTRADATA_SIZE_NO_ATOM) {
         av_log(avctx, AV_LOG_ERROR, "alac: extradata is too small\n");
         return AVERROR_INVALIDDATA;
     }
-- 
2.7.0.windows.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to