annotate daud.c @ 6455:3f50c7effad1 libavformat

rtsp: 10l, try to update the correct rtp stream This fixes a bug from rev 22917. Now RTSP streams where the individual RTCP sender reports aren't sent at the same time actually are synced properly.
author mstorsjo
date Fri, 03 Sep 2010 07:10:21 +0000
parents 536e5527c1e0
children
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);
3403
65f48adb4cc9 Check av_new_stream return value, fixes CID75 RUN2
reimar
parents: 2771
diff changeset
25 if (!st)
65f48adb4cc9 Check av_new_stream return value, fixes CID75 RUN2
reimar
parents: 2771
diff changeset
26 return AVERROR(ENOMEM);
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 4206
diff changeset
27 st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
28 st->codec->codec_id = CODEC_ID_PCM_S24DAUD;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
29 st->codec->codec_tag = MKTAG('d', 'a', 'u', 'd');
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
30 st->codec->channels = 6;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
31 st->codec->sample_rate = 96000;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
32 st->codec->bit_rate = 3 * 6 * 96000 * 8;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
33 st->codec->block_align = 3 * 6;
3908
1d3d17de20ba Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 3627
diff changeset
34 st->codec->bits_per_coded_sample = 24;
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
35 return 0;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
36 }
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
37
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
38 static int daud_packet(AVFormatContext *s, AVPacket *pkt) {
2771
d52c718e83f9 Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents: 2274
diff changeset
39 ByteIOContext *pb = s->pb;
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
40 int ret, size;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
41 if (url_feof(pb))
2274
b21c2af60bc9 Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents: 2240
diff changeset
42 return AVERROR(EIO);
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
43 size = get_be16(pb);
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
44 get_be16(pb); // unknown
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
45 ret = av_get_packet(pb, pkt, size);
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
46 pkt->stream_index = 0;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
47 return ret;
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
48 }
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
49
3627
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
50 static int daud_write_header(struct AVFormatContext *s)
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
51 {
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
52 AVCodecContext *codec = s->streams[0]->codec;
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
53 if (codec->channels!=6 || codec->sample_rate!=96000)
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
54 return -1;
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
55 return 0;
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
56 }
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
57
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
58 static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt)
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
59 {
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
60 put_be16(s->pb, pkt->size);
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
61 put_be16(s->pb, 0x8010); // unknown
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
62 put_buffer(s->pb, pkt->data, pkt->size);
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
63 put_flush_packet(s->pb);
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
64 return 0;
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
65 }
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
66
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
67 #if CONFIG_DAUD_DEMUXER
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
68 AVInputFormat daud_demuxer = {
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
69 "daud",
3424
7a0230981402 Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents: 3403
diff changeset
70 NULL_IF_CONFIG_SMALL("D-Cinema audio format"),
847
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
71 0,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
72 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
73 daud_header,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
74 daud_packet,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
75 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
76 NULL,
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
77 .extensions = "302",
f5a33919749a Support D-Cinema audio demuxing.
reimar
parents:
diff changeset
78 };
3627
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
79 #endif
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
80
4206
c3102b189cb6 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 3908
diff changeset
81 #if CONFIG_DAUD_MUXER
3627
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
82 AVOutputFormat daud_muxer =
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
83 {
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
84 "daud",
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
85 NULL_IF_CONFIG_SMALL("D-Cinema audio format"),
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
86 NULL,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
87 "302",
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
88 0,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
89 CODEC_ID_PCM_S24DAUD,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
90 CODEC_ID_NONE,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
91 daud_write_header,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
92 daud_write_packet,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
93 .flags= AVFMT_NOTIMESTAMPS,
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
94 };
0dd9806a26ea Add D-Cinema audio muxer
pross
parents: 3424
diff changeset
95 #endif