if (!channels || channels > 8 || !srate || srate > 192000 ||
bits_per_sample < 4 || bits_per_sample > 32)
return 0;
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int xa_read_header(AVFormatContext *s)
if (!st)
return AVERROR(ENOMEM);
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_id = CODEC_ID_ADPCM_EA_MAXIS_XA;
+ st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
+ st->codecpar->codec_id = AV_CODEC_ID_ADPCM_EA_MAXIS_XA;
avio_skip(pb, 4); /* Skip the XA ID */
xa->out_size = avio_rl32(pb);
avio_skip(pb, 2); /* Skip the tag */
- st->codec->channels = avio_rl16(pb);
- st->codec->sample_rate = avio_rl32(pb);
+ st->codecpar->channels = avio_rl16(pb);
+ st->codecpar->sample_rate = avio_rl32(pb);
avio_skip(pb, 4); /* Skip average byte rate */
avio_skip(pb, 2); /* Skip block align */
avio_skip(pb, 2); /* Skip bits-per-sample */
- avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
+ st->codecpar->bit_rate = av_clip(15LL * st->codecpar->channels * 8 *
+ st->codecpar->sample_rate / 28, 0, INT_MAX);
+
+ avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
st->start_time = 0;
return 0;
if (xa->sent_bytes >= xa->out_size)
return AVERROR_EOF;
/* 1 byte header and 14 bytes worth of samples * number channels per block */
- packet_size = 15*st->codec->channels;
+ packet_size = 15*st->codecpar->channels;
ret = av_get_packet(pb, pkt, packet_size);
if(ret < 0)
AVInputFormat ff_xa_demuxer = {
.name = "xa",
- .long_name = NULL_IF_CONFIG_SMALL("Maxis XA File Format"),
+ .long_name = NULL_IF_CONFIG_SMALL("Maxis XA"),
.priv_data_size = sizeof(MaxisXADemuxContext),
.read_probe = xa_probe,
.read_header = xa_read_header,