codec = ff_codec_get_id(codec_au_tags, id);
if (codec == AV_CODEC_ID_NONE) {
- av_log_ask_for_sample(s, "unknown or unsupported codec tag: %d\n", id);
+ av_log_ask_for_sample(s, "unknown or unsupported codec tag: %u\n", id);
return AVERROR_PATCHWELCOME;
}
}
if (channels == 0 || channels >= INT_MAX / (BLOCK_SIZE * bps >> 3)) {
- av_log(s, AV_LOG_ERROR, "Invalid number of channels %d\n", channels);
+ av_log(s, AV_LOG_ERROR, "Invalid number of channels %u\n", channels);
+ return AVERROR_INVALIDDATA;
+ }
+
+ if (rate == 0 || rate > INT_MAX) {
+ av_log(s, AV_LOG_ERROR, "Invalid sample rate: %u\n", rate);
return AVERROR_INVALIDDATA;
}
st->codec->sample_rate = rate;
st->codec->bit_rate = channels * rate * bps;
st->codec->block_align = channels * bps >> 3;
+
+ st->start_time = 0;
avpriv_set_pts_info(st, 64, 1, rate);
return 0;
}
if (ret < 0)
return ret;
pkt->stream_index = 0;
+ pkt->duration = ret / s->streams[0]->codec->block_align;
return 0;
}