}
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;
}
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:
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);