* AU muxer and demuxer
* Copyright (c) 2001 Fabrice Bellard
*
+ * first version by Francois Revol <revol@free.fr>
+ *
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
*/
/*
- * First version by Francois Revol revol@free.fr
- *
* Reference documents:
* http://www.opengroup.org/public/pubs/external/auformat.html
* http://www.goice.co.jp/member/mo/formats/au.html
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: %u\n", id);
+ avpriv_request_sample(s, "unknown or unsupported codec tag: %u", id);
return AVERROR_PATCHWELCOME;
}
bps = av_get_bits_per_sample(codec);
if (!bps) {
- av_log_ask_for_sample(s, "could not determine bits per sample\n");
+ avpriv_request_sample(s, "Unknown bits per sample");
return AVERROR_PATCHWELCOME;
}
st = avformat_new_stream(s, NULL);
if (!st)
return AVERROR(ENOMEM);
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_tag = id;
- st->codec->codec_id = codec;
- st->codec->channels = channels;
- st->codec->sample_rate = rate;
- st->codec->bit_rate = channels * rate * bps;
- st->codec->block_align = channels * bps >> 3;
+ st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
+ st->codecpar->codec_tag = id;
+ st->codecpar->codec_id = codec;
+ st->codecpar->channels = channels;
+ st->codecpar->sample_rate = rate;
+ st->codecpar->bit_rate = channels * rate * bps;
+ st->codecpar->block_align = channels * bps >> 3;
st->start_time = 0;
avpriv_set_pts_info(st, 64, 1, rate);
int ret;
ret = av_get_packet(s->pb, pkt, BLOCK_SIZE *
- s->streams[0]->codec->block_align);
+ s->streams[0]->codecpar->block_align);
if (ret < 0)
return ret;
pkt->stream_index = 0;
- pkt->duration = ret / s->streams[0]->codec->block_align;
+ pkt->duration = ret / s->streams[0]->codecpar->block_align;
return 0;
}
#define AU_UNKNOWN_SIZE ((uint32_t)(~0))
/* AUDIO_FILE header */
-static int put_au_header(AVIOContext *pb, AVCodecContext *enc)
+static int put_au_header(AVIOContext *pb, AVCodecParameters *par)
{
- if (!enc->codec_tag)
+ if (!par->codec_tag)
return AVERROR(EINVAL);
ffio_wfourcc(pb, ".snd"); /* magic number */
avio_wb32(pb, 24); /* header size */
avio_wb32(pb, AU_UNKNOWN_SIZE); /* data size */
- avio_wb32(pb, (uint32_t)enc->codec_tag); /* codec ID */
- avio_wb32(pb, enc->sample_rate);
- avio_wb32(pb, (uint32_t)enc->channels);
+ avio_wb32(pb, par->codec_tag); /* codec ID */
+ avio_wb32(pb, par->sample_rate);
+ avio_wb32(pb, par->channels);
return 0;
}
s->priv_data = NULL;
- if ((ret = put_au_header(pb, s->streams[0]->codec)) < 0)
+ if ((ret = put_au_header(pb, s->streams[0]->codecpar)) < 0)
return ret;
avio_flush(pb);
AVIOContext *pb = s->pb;
int64_t file_size;
- if (s->pb->seekable) {
+ if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) {
/* update file size */
file_size = avio_tell(pb);
avio_seek(pb, 8, SEEK_SET);
.write_packet = ff_raw_write_packet,
.write_trailer = au_write_trailer,
.codec_tag = (const AVCodecTag* const []) { codec_au_tags, 0 },
+ .flags = AVFMT_NOTIMESTAMPS,
};
#endif /* CONFIG_AU_MUXER */