32
32
#include "libavutil/intreadwrite.h"
33
33
#include "libavutil/dict.h"
34
34
#include "avformat.h"
36
37
#define ID_8SVX MKTAG('8','S','V','X')
37
38
#define ID_VHDR MKTAG('V','H','D','R')
77
76
uint32_t body_size;
78
77
uint32_t sent_bytes;
79
uint32_t audio_frame_count;
83
static void interleave_stereo(const uint8_t *src, uint8_t *dest, int size)
85
uint8_t *end = dest + size;
90
*dest++ = *(src+size);
95
81
/* Metadata string read */
96
82
static int get_metadata(AVFormatContext *s,
97
83
const char *const tag,
232
218
switch(st->codec->codec_type) {
233
219
case AVMEDIA_TYPE_AUDIO:
234
av_set_pts_info(st, 32, 1, st->codec->sample_rate);
220
avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
236
222
switch(compression) {
238
st->codec->codec_id = CODEC_ID_PCM_S8;
224
st->codec->codec_id = CODEC_ID_PCM_S8_PLANAR;
241
227
st->codec->codec_id = CODEC_ID_8SVX_FIB;
279
265
IffDemuxContext *iff = s->priv_data;
280
266
AVIOContext *pb = s->pb;
281
AVStream *st = s->streams[0];
284
269
if(iff->sent_bytes >= iff->body_size)
287
if(st->codec->channels == 2) {
288
uint8_t sample_buffer[PACKET_SIZE];
290
ret = avio_read(pb, sample_buffer, PACKET_SIZE);
291
if(av_new_packet(pkt, PACKET_SIZE) < 0) {
292
av_log(s, AV_LOG_ERROR, "cannot allocate packet\n");
293
return AVERROR(ENOMEM);
295
interleave_stereo(sample_buffer, pkt->data, PACKET_SIZE);
296
} else if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
297
ret = av_get_packet(pb, pkt, iff->body_size);
299
ret = av_get_packet(pb, pkt, PACKET_SIZE);
272
ret = av_get_packet(pb, pkt, iff->body_size);
302
276
if(iff->sent_bytes == 0)
303
277
pkt->flags |= AV_PKT_FLAG_KEY;
278
iff->sent_bytes = iff->body_size;
305
if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
306
iff->sent_bytes += PACKET_SIZE;
308
iff->sent_bytes = iff->body_size;
310
280
pkt->stream_index = 0;
311
if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
312
pkt->pts = iff->audio_frame_count;
313
iff->audio_frame_count += ret / st->codec->channels;
318
284
AVInputFormat ff_iff_demuxer = {
320
NULL_IF_CONFIG_SMALL("IFF format"),
321
sizeof(IffDemuxContext),
286
.long_name = NULL_IF_CONFIG_SMALL("IFF format"),
287
.priv_data_size = sizeof(IffDemuxContext),
288
.read_probe = iff_probe,
289
.read_header = iff_read_header,
290
.read_packet = iff_read_packet,