+
+ /* For the old style cookie, we skip 12 bytes, then read 36 bytes.
+ * The new style cookie only contains the last 24 bytes of what was
+ * 36 bytes in the old style cookie, so we fabricate the first 12 bytes
+ * in that case to maintain compatibility. */
+ if (!memcmp(&preamble[4], "frmaalac", 8)) {
+ if (size < ALAC_PREAMBLE + ALAC_HEADER) {
+ av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n");
+ av_freep(&st->codec->extradata);
+ return AVERROR_INVALIDDATA;
+ }
+ avio_read(pb, st->codec->extradata, ALAC_HEADER);
+ avio_skip(pb, size - ALAC_PREAMBLE - ALAC_HEADER);
+ } else {
+ AV_WB32(st->codec->extradata, 36);
+ memcpy(&st->codec->extradata[4], "alac", 4);
+ AV_WB32(&st->codec->extradata[8], 0);
+ memcpy(&st->codec->extradata[12], preamble, 12);
+ avio_read(pb, &st->codec->extradata[24], ALAC_NEW_KUKI - 12);
+ avio_skip(pb, size - ALAC_NEW_KUKI);
+ }