/*
* Westwood Studios AUD Format Demuxer
- * Copyright (c) 2003 The ffmpeg Project
+ * Copyright (c) 2003 The FFmpeg project
*
* This file is part of Libav.
*
* qualify a file. Refer to wsaud_probe() for the precise parameters.
*/
+#include "libavutil/channel_layout.h"
#include "libavutil/intreadwrite.h"
#include "avformat.h"
#include "internal.h"
#define AUD_CHUNK_PREAMBLE_SIZE 8
#define AUD_CHUNK_SIGNATURE 0x0000DEAF
-typedef struct WsAudDemuxContext {
- int audio_channels;
- int audio_samplerate;
- int audio_stream_index;
- int64_t audio_frame_counter;
-} WsAudDemuxContext;
-
static int wsaud_probe(AVProbeData *p)
{
int field;
return 0;
/* return 1/2 certainty since this file check is a little sketchy */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
-static int wsaud_read_header(AVFormatContext *s,
- AVFormatParameters *ap)
+static int wsaud_read_header(AVFormatContext *s)
{
- WsAudDemuxContext *wsaud = s->priv_data;
AVIOContext *pb = s->pb;
AVStream *st;
unsigned char header[AUD_HEADER_SIZE];
switch (codec) {
case 1:
if (channels != 1) {
- av_log_ask_for_sample(s, "Stereo WS-SND1 is not supported.\n");
+ avpriv_request_sample(s, "Stereo WS-SND1");
return AVERROR_PATCHWELCOME;
}
- st->codec->codec_id = CODEC_ID_WESTWOOD_SND1;
+ st->codecpar->codec_id = AV_CODEC_ID_WESTWOOD_SND1;
break;
case 99:
- st->codec->codec_id = CODEC_ID_ADPCM_IMA_WS;
- st->codec->bits_per_coded_sample = 4;
- st->codec->bit_rate = channels * sample_rate * 4;
+ st->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_WS;
+ st->codecpar->bits_per_coded_sample = 4;
+ st->codecpar->bit_rate = channels * sample_rate * 4;
break;
default:
- av_log_ask_for_sample(s, "Unknown codec: %d\n", codec);
+ avpriv_request_sample(s, "Unknown codec: %d", codec);
return AVERROR_PATCHWELCOME;
}
avpriv_set_pts_info(st, 64, 1, sample_rate);
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->channels = channels;
- st->codec->sample_rate = sample_rate;
-
- wsaud->audio_channels = channels;
- wsaud->audio_samplerate = sample_rate;
- wsaud->audio_stream_index = st->index;
- wsaud->audio_frame_counter = 0;
+ st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
+ st->codecpar->channels = channels;
+ st->codecpar->channel_layout = channels == 1 ? AV_CH_LAYOUT_MONO :
+ AV_CH_LAYOUT_STEREO;
+ st->codecpar->sample_rate = sample_rate;
return 0;
}
static int wsaud_read_packet(AVFormatContext *s,
AVPacket *pkt)
{
- WsAudDemuxContext *wsaud = s->priv_data;
AVIOContext *pb = s->pb;
unsigned char preamble[AUD_CHUNK_PREAMBLE_SIZE];
unsigned int chunk_size;
int ret = 0;
- AVStream *st = s->streams[wsaud->audio_stream_index];
+ AVStream *st = s->streams[0];
if (avio_read(pb, preamble, AUD_CHUNK_PREAMBLE_SIZE) !=
AUD_CHUNK_PREAMBLE_SIZE)
chunk_size = AV_RL16(&preamble[0]);
- if (st->codec->codec_id == CODEC_ID_WESTWOOD_SND1) {
+ if (st->codecpar->codec_id == AV_CODEC_ID_WESTWOOD_SND1) {
/* For Westwood SND1 audio we need to add the output size and input
size to the start of the packet to match what is in VQA.
Specifically, this is needed to signal when a packet should be
ret = av_get_packet(pb, pkt, chunk_size);
if (ret != chunk_size)
return AVERROR(EIO);
- pkt->pts = wsaud->audio_frame_counter;
- pkt->pts /= wsaud->audio_samplerate;
/* 2 samples/byte, 1 or 2 samples per frame depending on stereo */
- wsaud->audio_frame_counter += (chunk_size * 2) / wsaud->audio_channels;
+ pkt->duration = (chunk_size * 2) / st->codecpar->channels;
}
pkt->stream_index = st->index;
AVInputFormat ff_wsaud_demuxer = {
.name = "wsaud",
- .long_name = NULL_IF_CONFIG_SMALL("Westwood Studios audio format"),
- .priv_data_size = sizeof(WsAudDemuxContext),
+ .long_name = NULL_IF_CONFIG_SMALL("Westwood Studios audio"),
.read_probe = wsaud_probe,
.read_header = wsaud_read_header,
.read_packet = wsaud_read_packet,