X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Faiffdec.c;h=59e969d12d48c602af742e9aa07e8e25b87aca45;hb=985bc8b49683761e5014a22146d4346c951680ad;hp=9bff5656f894328c3cc580a139a23a3f24fb0423;hpb=8dd0e3d50f8488a00fdb59b0794358a0ba334c00;p=ffmpeg diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index 9bff5656f89..59e969d12d4 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -337,7 +337,10 @@ static int aiff_read_header(AVFormatContext *s) } got_sound: - if (!st->codecpar->block_align) { + if (!st->codecpar->block_align && st->codecpar->codec_id == AV_CODEC_ID_QCELP) { + av_log(s, AV_LOG_WARNING, "qcelp without wave chunk, assuming full rate\n"); + st->codecpar->block_align = 35; + } else if (!st->codecpar->block_align) { av_log(s, AV_LOG_ERROR, "could not find COMM tag or invalid block_align value\n"); return -1; } @@ -368,6 +371,11 @@ static int aiff_read_packet(AVFormatContext *s, if (max_size <= 0) return AVERROR_EOF; + if (!st->codecpar->block_align) { + av_log(s, AV_LOG_ERROR, "block_align not set\n"); + return AVERROR_INVALIDDATA; + } + /* Now for that packet */ switch (st->codecpar->codec_id) { case AV_CODEC_ID_ADPCM_IMA_QT: @@ -377,7 +385,7 @@ static int aiff_read_packet(AVFormatContext *s, size = st->codecpar->block_align; break; default: - size = (MAX_SIZE / st->codecpar->block_align) * st->codecpar->block_align; + size = st->codecpar->block_align ? (MAX_SIZE / st->codecpar->block_align) * st->codecpar->block_align : MAX_SIZE; } size = FFMIN(max_size, size); res = av_get_packet(s->pb, pkt, size);