int64_t data_size; ///< raw data size, in bytes
} CafContext;
-static int probe(AVProbeData *p)
+static int probe(const AVProbeData *p)
{
if (AV_RB32(p->buf) == MKBETAG('c','a','f','f') && AV_RB16(&p->buf[4]) == 1)
return AVPROBE_SCORE_MAX;
"skipping CAF chunk: %08"PRIX32" (%s), size %"PRId64"\n",
tag, av_fourcc2str(av_bswap32(tag)), size);
case MKBETAG('f','r','e','e'):
+ if (size < 0 && found_data)
+ goto found_data;
if (size < 0)
return AVERROR_INVALIDDATA;
break;
if (!found_data)
return AVERROR_INVALIDDATA;
+found_data:
if (caf->bytes_per_packet > 0 && caf->frames_per_packet > 0) {
if (caf->data_size > 0)
st->nb_frames = (caf->data_size / caf->bytes_per_packet) * caf->frames_per_packet;