annotate pcmdec.c @ 6468:317dedc6b9a2 libavformat

In mov muxer, write reduced sample aspect ratio values in pasp
author bcoudurier
date Wed, 08 Sep 2010 20:22:02 +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)