* @file
* Funcom ISS file demuxer
* @author Jaikrishnan Menon
- * for more information on the .iss file format, visit:
- * http://wiki.multimedia.cx/index.php?title=FunCom_ISS
+ * @see http://wiki.multimedia.cx/index.php?title=FunCom_ISS
*/
+#include "libavutil/channel_layout.h"
#include "avformat.h"
+#include "internal.h"
#include "libavutil/avstring.h"
#define ISS_SIG "IMA_ADPCM_Sound"
#define ISS_SIG_LEN 15
#define MAX_TOKEN_SIZE 20
-typedef struct {
+typedef struct IssDemuxContext {
int packet_size;
int sample_start_pos;
} IssDemuxContext;
return AVPROBE_SCORE_MAX;
}
-static av_cold int iss_read_header(AVFormatContext *s, AVFormatParameters *ap)
+static av_cold int iss_read_header(AVFormatContext *s)
{
IssDemuxContext *iss = s->priv_data;
AVIOContext *pb = s->pb;
iss->sample_start_pos = avio_tell(pb);
- st = av_new_stream(s, 0);
+ st = avformat_new_stream(s, NULL);
if (!st)
return AVERROR(ENOMEM);
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
- st->codec->codec_id = CODEC_ID_ADPCM_IMA_ISS;
- st->codec->channels = stereo ? 2 : 1;
+ st->codec->codec_id = AV_CODEC_ID_ADPCM_IMA_ISS;
+ if (stereo) {
+ st->codec->channels = 2;
+ st->codec->channel_layout = AV_CH_LAYOUT_STEREO;
+ } else {
+ st->codec->channels = 1;
+ st->codec->channel_layout = AV_CH_LAYOUT_MONO;
+ }
st->codec->sample_rate = 44100;
if(rate_divisor > 0)
st->codec->sample_rate /= rate_divisor;
st->codec->bit_rate = st->codec->channels * st->codec->sample_rate
* st->codec->bits_per_coded_sample;
st->codec->block_align = iss->packet_size;
- av_set_pts_info(st, 32, 1, st->codec->sample_rate);
+ avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
return 0;
}
}
AVInputFormat ff_iss_demuxer = {
- "ISS",
- NULL_IF_CONFIG_SMALL("Funcom ISS format"),
- sizeof(IssDemuxContext),
- iss_probe,
- iss_read_header,
- iss_read_packet,
+ .name = "iss",
+ .long_name = NULL_IF_CONFIG_SMALL("Funcom ISS"),
+ .priv_data_size = sizeof(IssDemuxContext),
+ .read_probe = iss_probe,
+ .read_header = iss_read_header,
+ .read_packet = iss_read_packet,
};
-