annotate pcmdec.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 4775a49a6045
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6445
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
1 /*
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
2 * RAW PCM demuxers
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
4 *
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
5 * This file is part of FFmpeg.
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
6 *
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
11 *
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
15 * Lesser General Public License for more details.
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
16 *
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
20 */
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
21
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
22 #include "avformat.h"
6448
4775a49a6045 split raw.c into rawdec.c and rawenc.c
aurel
parents: 6445
diff changeset
23 #include "rawdec.h"
6445
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
24 #include "pcm.h"
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
25
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
26 #define RAW_SAMPLES 1024
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
27
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
28 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
29 {
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
30 int ret, size, bps;
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
31 // AVStream *st = s->streams[0];
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
32
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
33 size= RAW_SAMPLES*s->streams[0]->codec->block_align;
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
34
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
35 ret= av_get_packet(s->pb, pkt, size);
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
36
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
37 pkt->stream_index = 0;
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
38 if (ret < 0)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
39 return ret;
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
40
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
41 bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
42 assert(bps); // if false there IS a bug elsewhere (NOT in this function)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
43 pkt->dts=
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
44 pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
45
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
46 return ret;
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
47 }
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
48
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
49 #define PCMDEF(name, long_name, ext, codec) \
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
50 AVInputFormat pcm_ ## name ## _demuxer = {\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
51 #name,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
52 NULL_IF_CONFIG_SMALL(long_name),\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
53 0,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
54 NULL,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
55 ff_raw_read_header,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
56 raw_read_packet,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
57 NULL,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
58 pcm_read_seek,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
59 .flags= AVFMT_GENERIC_INDEX,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
60 .extensions = ext,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
61 .value = codec,\
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
62 };
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
63
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
64 PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
65 NULL, CODEC_ID_PCM_F64BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
66
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
67 PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
68 NULL, CODEC_ID_PCM_F64LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
69
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
70 PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
71 NULL, CODEC_ID_PCM_F32BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
72
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
73 PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
74 NULL, CODEC_ID_PCM_F32LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
75
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
76 PCMDEF(s32be, "PCM signed 32 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
77 NULL, CODEC_ID_PCM_S32BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
78
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
79 PCMDEF(s32le, "PCM signed 32 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
80 NULL, CODEC_ID_PCM_S32LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
81
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
82 PCMDEF(s24be, "PCM signed 24 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
83 NULL, CODEC_ID_PCM_S24BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
84
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
85 PCMDEF(s24le, "PCM signed 24 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
86 NULL, CODEC_ID_PCM_S24LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
87
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
88 PCMDEF(s16be, "PCM signed 16 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
89 AV_NE("sw", NULL), CODEC_ID_PCM_S16BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
90
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
91 PCMDEF(s16le, "PCM signed 16 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
92 AV_NE(NULL, "sw"), CODEC_ID_PCM_S16LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
93
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
94 PCMDEF(s8, "PCM signed 8 bit format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
95 "sb", CODEC_ID_PCM_S8)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
96
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
97 PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
98 NULL, CODEC_ID_PCM_U32BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
99
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
100 PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
101 NULL, CODEC_ID_PCM_U32LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
102
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
103 PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
104 NULL, CODEC_ID_PCM_U24BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
105
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
106 PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
107 NULL, CODEC_ID_PCM_U24LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
108
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
109 PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
110 AV_NE("uw", NULL), CODEC_ID_PCM_U16BE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
111
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
112 PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
113 AV_NE(NULL, "uw"), CODEC_ID_PCM_U16LE)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
114
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
115 PCMDEF(u8, "PCM unsigned 8 bit format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
116 "ub", CODEC_ID_PCM_U8)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
117
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
118 PCMDEF(alaw, "PCM A-law format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
119 "al", CODEC_ID_PCM_ALAW)
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
120
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
121 PCMDEF(mulaw, "PCM mu-law format",
4aaed59641ff move pcm demuxers to their own file
aurel
parents:
diff changeset
122 "ul", CODEC_ID_PCM_MULAW)