annotate daud.c @ 2400:fcaecfb05781 libavformat

When looking for the last packet in each stream, so as to calculate the duration, don't stop as soon as all streams have seen at least one packet. Otherwise the duration will be shorter than it should be. We must keep reading to the end-of-file. patch by neilb suse de
author michael
date Sat, 18 Aug 2007 00:52:05 +0000
parents b21c2af60bc9
children d52c718e83f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
1 /*
1415
3b00fb8ef8e4 replace coder/decoder file description in libavformat by muxer/demuxer
aurel
parents: 1358
diff changeset
2 * D-Cinema audio demuxer
2240
6ebff294b07c ISO8859-1 --> UTF-8
diego
parents: 1415
diff changeset
3 * Copyright (c) 2005 Reimar Döffinger
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
4 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
11 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
15 * Lesser General Public License for more details.
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
16 *
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1169
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 847
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
20 */
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
21 #include "avformat.h"
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
22
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
23 static int daud_header(AVFormatContext *s, AVFormatParameters *ap) {
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
24 AVStream *st = av_new_stream(s, 0);
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
25 st->codec->codec_type = CODEC_TYPE_AUDIO;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
26 st->codec->codec_id = CODEC_ID_PCM_S24DAUD;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
27 st->codec->codec_tag = MKTAG('d', 'a', 'u', 'd');
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
28 st->codec->channels = 6;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
29 st->codec->sample_rate = 96000;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
30 st->codec->bit_rate = 3 * 6 * 96000 * 8;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
31 st->codec->block_align = 3 * 6;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
32 st->codec->bits_per_sample = 24;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
33 return 0;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
34 }
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
35
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
36 static int daud_packet(AVFormatContext *s, AVPacket *pkt) {
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
37 ByteIOContext *pb = &s->pb;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
38 int ret, size;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
39 if (url_feof(pb))
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2240
diff changeset
40 return AVERROR(EIO);
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
41 size = get_be16(pb);
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
42 get_be16(pb); // unknown
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
43 ret = av_get_packet(pb, pkt, size);
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
44 pkt->stream_index = 0;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
45 return ret;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
46 }
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
47
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
48 AVInputFormat daud_demuxer = {
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
49 "daud",
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
50 "D-Cinema audio format",
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
51 0,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
52 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
53 daud_header,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
54 daud_packet,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
55 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
56 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
57 .extensions = "302",
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
58 };