Mercurial > libavformat.hg
annotate riff.c @ 5061:5ff6a72c9686 libavformat
In mov_read_packet remember the AVStream we want to demux next instead of the
MOVStreamContext. We need the AVStream anyway and it is easier to get the
MOVStreamContext from the AVStream than the other way around.
author | reimar |
---|---|
date | Wed, 24 Jun 2009 08:23:40 +0000 |
parents | 33a244b7ca65 |
children | 2a0aabbef960 |
rev | line source |
---|---|
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
1 /* |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
2 * RIFF codec tags |
4251
77e0c7511d41
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
4242
diff
changeset
|
3 * Copyright (c) 2000 Fabrice Bellard |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
4 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1356
diff
changeset
|
5 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1356
diff
changeset
|
6 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1356
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
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:
1356
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
11 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1356
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
16 * |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
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:
1356
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
20 */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
21 |
3286 | 22 #include "libavcodec/avcodec.h" |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
23 #include "avformat.h" |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
24 #include "riff.h" |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
25 #include "libavcodec/bytestream.h" |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
26 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
27 /* Note: when encoding, the first matching tag is used, so order is |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
28 important if multiple tags possible for a given codec. */ |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
29 const AVCodecTag ff_codec_bmp_tags[] = { |
3131 | 30 { CODEC_ID_H264, MKTAG('H', '2', '6', '4') }, |
31 { CODEC_ID_H264, MKTAG('h', '2', '6', '4') }, | |
32 { CODEC_ID_H264, MKTAG('X', '2', '6', '4') }, | |
33 { CODEC_ID_H264, MKTAG('x', '2', '6', '4') }, | |
34 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, | |
35 { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') }, | |
36 { CODEC_ID_H263, MKTAG('H', '2', '6', '3') }, | |
4061 | 37 { CODEC_ID_H263, MKTAG('X', '2', '6', '3') }, |
4252 | 38 { CODEC_ID_H263, MKTAG('T', '2', '6', '3') }, |
4061 | 39 { CODEC_ID_H263, MKTAG('L', '2', '6', '3') }, |
4065 | 40 { CODEC_ID_H263, MKTAG('V', 'X', '1', 'K') }, |
4897 | 41 { CODEC_ID_H263, MKTAG('Z', 'y', 'G', 'o') }, |
3131 | 42 { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') }, |
43 { CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */ | |
44 { CODEC_ID_H261, MKTAG('H', '2', '6', '1') }, | |
45 { CODEC_ID_H263P, MKTAG('U', '2', '6', '3') }, | |
46 { CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') }, | |
47 { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') }, | |
48 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') }, | |
49 { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') }, | |
50 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') }, | |
51 { CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') }, | |
52 { CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') }, | |
3132
2014993e4399
consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents:
3131
diff
changeset
|
53 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 0 ) }, /* some broken avi use this */ |
3131 | 54 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') }, |
55 { CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') }, | |
56 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') }, | |
57 { CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') }, | |
58 { CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') }, | |
59 { CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') }, | |
60 { CODEC_ID_MPEG4, MKTAG('R', 'M', 'P', '4') }, | |
3705
98156a539790
FOURCC addition: added 3IV2, another mpeg4 id. incoming/video_3iv2/video_3iv2.avi
banan
parents:
3693
diff
changeset
|
61 { CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') }, |
4057 | 62 { CODEC_ID_MPEG4, MKTAG('F', 'F', 'D', 'S') }, |
4114
2eea8c397108
two more mpeg4 fourccs and one msmpeg4v3 from uncommon codec list
compn
parents:
4113
diff
changeset
|
63 { CODEC_ID_MPEG4, MKTAG('F', 'V', 'F', 'W') }, |
4061 | 64 { CODEC_ID_MPEG4, MKTAG('D', 'C', 'O', 'D') }, |
65 { CODEC_ID_MPEG4, MKTAG('M', 'V', 'X', 'M') }, | |
66 { CODEC_ID_MPEG4, MKTAG('P', 'M', '4', 'V') }, | |
67 { CODEC_ID_MPEG4, MKTAG('S', 'M', 'P', '4') }, | |
68 { CODEC_ID_MPEG4, MKTAG('D', 'X', 'G', 'M') }, | |
69 { CODEC_ID_MPEG4, MKTAG('V', 'I', 'D', 'M') }, | |
70 { CODEC_ID_MPEG4, MKTAG('M', '4', 'T', '3') }, | |
4060 | 71 { CODEC_ID_MPEG4, MKTAG('G', 'E', 'O', 'X') }, |
4061 | 72 { CODEC_ID_MPEG4, MKTAG('H', 'D', 'X', '4') }, /* flipped video */ |
4065 | 73 { CODEC_ID_MPEG4, MKTAG('D', 'M', 'K', '2') }, |
4084
96cf19bbdbdc
add another mpeg4 avi fourcc from uncommon codecs list
compn
parents:
4072
diff
changeset
|
74 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'G', 'I') }, |
4114
2eea8c397108
two more mpeg4 fourccs and one msmpeg4v3 from uncommon codec list
compn
parents:
4113
diff
changeset
|
75 { CODEC_ID_MPEG4, MKTAG('I', 'N', 'M', 'C') }, |
4263 | 76 { CODEC_ID_MPEG4, MKTAG('E', 'P', 'H', 'V') }, /* Ephv MPEG-4 */ |
4275 | 77 { CODEC_ID_MPEG4, MKTAG('E', 'M', '4', 'A') }, |
4544 | 78 { CODEC_ID_MPEG4, MKTAG('M', '4', 'C', 'C') }, /* Divio MPEG-4 */ |
4694 | 79 { CODEC_ID_MPEG4, MKTAG('S', 'N', '4', '0') }, |
3131 | 80 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */ |
81 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') }, | |
82 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') }, | |
83 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') }, | |
84 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') }, | |
85 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '4') }, | |
4114
2eea8c397108
two more mpeg4 fourccs and one msmpeg4v3 from uncommon codec list
compn
parents:
4113
diff
changeset
|
86 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'V', 'X', '3') }, |
3131 | 87 { CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') }, |
88 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') }, | |
89 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') }, | |
90 { CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') }, | |
91 { CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') }, | |
92 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') }, | |
4061 | 93 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', '4', '1') }, |
3131 | 94 { CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') }, |
95 { CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') }, | |
96 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') }, | |
97 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') }, | |
4960 | 98 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') }, |
3131 | 99 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') }, |
100 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') }, | |
101 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', '0') }, | |
102 { CODEC_ID_DVVIDEO, MKTAG('c', 'd', 'v', 'c') }, /* Canopus DV */ | |
4802 | 103 { CODEC_ID_DVVIDEO, MKTAG('C', 'D', 'V', 'H') }, /* Canopus DV */ |
4061 | 104 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, |
4908
7c92386eb339
dvh1 avi fourcc, dvh1_sample_truncated.avi, issue #1034
bcoudurier
parents:
4897
diff
changeset
|
105 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') }, |
3131 | 106 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') }, |
107 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') }, | |
108 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') }, | |
109 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') }, | |
110 { CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') }, | |
4061 | 111 { CODEC_ID_MPEG2VIDEO, MKTAG('P', 'I', 'M', '2') }, |
3131 | 112 { CODEC_ID_MPEG1VIDEO, MKTAG('V', 'C', 'R', '2') }, |
3132
2014993e4399
consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents:
3131
diff
changeset
|
113 { CODEC_ID_MPEG1VIDEO, MKTAG( 1 , 0 , 0 , 16) }, |
2014993e4399
consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents:
3131
diff
changeset
|
114 { CODEC_ID_MPEG2VIDEO, MKTAG( 2 , 0 , 0 , 16) }, |
5043
3e581a9edb36
Add fourcc 0x10000004, seems to actually be MPEG4. Fixes a problematic AVI file.
darkshikari
parents:
5024
diff
changeset
|
115 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 16) }, |
3131 | 116 { CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') }, |
117 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') }, | |
4071 | 118 { CODEC_ID_MPEG2VIDEO, MKTAG('L', 'M', 'P', '2') }, /* Lead MPEG2 in avi */ |
3131 | 119 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') }, |
120 { CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') }, | |
4061 | 121 { CODEC_ID_MJPEG, MKTAG('d', 'm', 'b', '1') }, |
3131 | 122 { CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') }, |
123 { CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */ | |
124 { CODEC_ID_JPEGLS, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */ | |
125 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */ | |
126 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, | |
127 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') }, | |
128 { CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') }, | |
4072
b9bb53432c60
add 'ACDV' FourCC (which is just complete JPEG files in individual AVI
melanson
parents:
4071
diff
changeset
|
129 { CODEC_ID_MJPEG, MKTAG('A', 'C', 'D', 'V') }, |
4113
795f2de1a94b
QIVG fourcc, fixes http://rodweb.dip.jp/partner/check.avi
compn
parents:
4112
diff
changeset
|
130 { CODEC_ID_MJPEG, MKTAG('Q', 'I', 'V', 'G') }, |
4205 | 131 { CODEC_ID_MJPEG, MKTAG('S', 'L', 'M', 'J') }, /* SL M-JPEG */ |
4178 | 132 { CODEC_ID_MJPEG, MKTAG('C', 'J', 'P', 'G') }, /* Creative Webcam JPEG */ |
3131 | 133 { CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') }, |
134 { CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') }, | |
135 { CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') }, | |
3132
2014993e4399
consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents:
3131
diff
changeset
|
136 { CODEC_ID_RAWVIDEO, MKTAG( 0 , 0 , 0 , 0 ) }, |
5024
0d2573b3397b
Add new FOURCC (0x0003) for raw DIB video, set flip flag accordingly.
darkshikari
parents:
5023
diff
changeset
|
137 { CODEC_ID_RAWVIDEO, MKTAG( 3 , 0 , 0 , 0 ) }, |
3131 | 138 { CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') }, |
139 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') }, | |
140 { CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') }, | |
141 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') }, | |
142 { CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') }, | |
143 { CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') }, | |
144 { CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') }, | |
145 { CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') }, | |
4961 | 146 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') }, |
4925 | 147 { CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, |
3131 | 148 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') }, |
149 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') }, | |
150 { CODEC_ID_INDEO4, MKTAG('I', 'V', '4', '1') }, | |
151 { CODEC_ID_INDEO5, MKTAG('I', 'V', '5', '0') }, | |
152 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') }, | |
153 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') }, | |
154 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') }, | |
155 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') }, | |
156 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') }, | |
157 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') }, | |
158 { CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') }, | |
159 { CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') }, | |
160 { CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') }, | |
161 { CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') }, | |
162 { CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') }, | |
4238 | 163 { CODEC_ID_MIMIC, MKTAG('L', 'M', '2', '0') }, |
3131 | 164 { CODEC_ID_MSRLE, MKTAG('m', 'r', 'l', 'e') }, |
3132
2014993e4399
consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents:
3131
diff
changeset
|
165 { CODEC_ID_MSRLE, MKTAG( 1 , 0 , 0 , 0 ) }, |
3928 | 166 { CODEC_ID_MSRLE, MKTAG( 2 , 0 , 0 , 0 ) }, |
3131 | 167 { CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') }, |
168 { CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') }, | |
169 { CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') }, | |
170 { CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') }, | |
171 { CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') }, | |
172 { CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') }, | |
173 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') }, | |
174 { CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') }, | |
4306 | 175 { CODEC_ID_TRUEMOTION1, MKTAG('P', 'V', 'E', 'Z') }, |
3131 | 176 { CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') }, |
177 { CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') }, | |
178 { CODEC_ID_SNOW, MKTAG('S', 'N', 'O', 'W') }, | |
179 { CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') }, | |
180 { CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') }, | |
181 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') }, | |
182 { CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') }, | |
183 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') }, | |
184 { CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') }, | |
185 { CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') }, | |
186 { CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') }, | |
187 { CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') }, | |
188 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') }, | |
189 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') }, | |
190 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, | |
191 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, | |
192 { CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') }, | |
193 { CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') }, | |
194 { CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') }, | |
195 { CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') }, | |
196 { CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') }, | |
197 { CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') }, | |
198 { CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') }, | |
199 { CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') }, | |
200 { CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') }, | |
201 { CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') }, | |
202 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') }, | |
203 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') }, | |
204 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') }, | |
205 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') }, | |
206 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, | |
4115 | 207 { CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') }, |
4845 | 208 { CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') }, |
3131 | 209 { CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') }, |
3558 | 210 { CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') }, |
4072
b9bb53432c60
add 'ACDV' FourCC (which is just complete JPEG files in individual AVI
melanson
parents:
4071
diff
changeset
|
211 { CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') }, |
4112 | 212 { CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') }, |
213 { CODEC_ID_RPZA, MKTAG('r', 'p', 'z', 'a') }, | |
4359 | 214 { CODEC_ID_SP5X, MKTAG('S', 'P', '5', '4') }, |
4784
992db955236a
Add AURA 1 and 2 codec IDs and register their FOURCCs
kostya
parents:
4694
diff
changeset
|
215 { CODEC_ID_AURA, MKTAG('A', 'U', 'R', 'A') }, |
992db955236a
Add AURA 1 and 2 codec IDs and register their FOURCCs
kostya
parents:
4694
diff
changeset
|
216 { CODEC_ID_AURA2, MKTAG('A', 'U', 'R', '2') }, |
5022 | 217 { CODEC_ID_DPX, MKTAG('d', 'p', 'x', ' ') }, |
3131 | 218 { CODEC_ID_NONE, 0 } |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
219 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
220 |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
221 const AVCodecTag ff_codec_wav_tags[] = { |
3064 | 222 { CODEC_ID_PCM_S16LE, 0x0001 }, |
223 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */ | |
224 { CODEC_ID_PCM_S24LE, 0x0001 }, | |
225 { CODEC_ID_PCM_S32LE, 0x0001 }, | |
226 { CODEC_ID_ADPCM_MS, 0x0002 }, | |
3737
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
227 { CODEC_ID_PCM_F32LE, 0x0003 }, |
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
228 { CODEC_ID_PCM_F64LE, 0x0003 }, /* must come after f32le in this list */ |
3064 | 229 { CODEC_ID_PCM_ALAW, 0x0006 }, |
230 { CODEC_ID_PCM_MULAW, 0x0007 }, | |
231 { CODEC_ID_WMAVOICE, 0x000A }, | |
232 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 }, | |
3693 | 233 { CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */ |
3064 | 234 { CODEC_ID_ADPCM_YAMAHA, 0x0020 }, |
235 { CODEC_ID_TRUESPEECH, 0x0022 }, | |
236 { CODEC_ID_GSM_MS, 0x0031 }, | |
237 { CODEC_ID_ADPCM_G726, 0x0045 }, | |
238 { CODEC_ID_MP2, 0x0050 }, | |
239 { CODEC_ID_MP3, 0x0055 }, | |
4130 | 240 { CODEC_ID_AMR_NB, 0x0057 }, |
241 { CODEC_ID_AMR_WB, 0x0058 }, | |
3064 | 242 { CODEC_ID_ADPCM_IMA_DK4, 0x0061 }, /* rogue format number */ |
243 { CODEC_ID_ADPCM_IMA_DK3, 0x0062 }, /* rogue format number */ | |
4308 | 244 { CODEC_ID_ADPCM_IMA_WAV, 0x0069 }, |
3064 | 245 { CODEC_ID_VOXWARE, 0x0075 }, |
246 { CODEC_ID_AAC, 0x00ff }, | |
3944
7141e56c9f69
Add support for Acelp.net fourcc and codecid, remuxing wav to avi should work
banan
parents:
3928
diff
changeset
|
247 { CODEC_ID_SIPR, 0x0130 }, |
3064 | 248 { CODEC_ID_WMAV1, 0x0160 }, |
249 { CODEC_ID_WMAV2, 0x0161 }, | |
250 { CODEC_ID_WMAPRO, 0x0162 }, | |
3094 | 251 { CODEC_ID_WMALOSSLESS, 0x0163 }, |
3064 | 252 { CODEC_ID_ADPCM_CT, 0x0200 }, |
253 { CODEC_ID_ATRAC3, 0x0270 }, | |
254 { CODEC_ID_IMC, 0x0401 }, | |
255 { CODEC_ID_AC3, 0x2000 }, | |
256 { CODEC_ID_DTS, 0x2001 }, | |
257 { CODEC_ID_SONIC, 0x2048 }, | |
258 { CODEC_ID_SONIC_LS, 0x2048 }, | |
5023
602c5cd5a1a3
Associate the 0x6c75 TwoCC used in certain Kodak cameras
jai_menon
parents:
5022
diff
changeset
|
259 { CODEC_ID_PCM_MULAW, 0x6c75 }, |
3064 | 260 { CODEC_ID_AAC, 0x706d }, |
4071 | 261 { CODEC_ID_AAC, 0x4143 }, |
3064 | 262 { CODEC_ID_FLAC, 0xF1AC }, |
263 { CODEC_ID_ADPCM_SWF, ('S'<<8)+'F' }, | |
264 { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id? | |
1383 | 265 |
266 /* FIXME: All of the IDs below are not 16 bit and thus illegal. */ | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
267 // for NuppelVideo (nuv.c) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
268 { CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') }, |
3064 | 269 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') }, |
270 { CODEC_ID_MP3, MKTAG('M', 'P', '3', ' ') }, | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
271 { 0, 0 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
272 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
273 |
4206 | 274 #if CONFIG_MUXERS |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
275 int64_t ff_start_tag(ByteIOContext *pb, const char *tag) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
276 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
277 put_tag(pb, tag); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
278 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
279 return url_ftell(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
280 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
281 |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
282 void ff_end_tag(ByteIOContext *pb, int64_t start) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
283 { |
3973
549a09cf23fe
Remove offset_t typedef and use int64_t directly instead.
diego
parents:
3944
diff
changeset
|
284 int64_t pos; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
285 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
286 pos = url_ftell(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
287 url_fseek(pb, start - 4, SEEK_SET); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
288 put_le32(pb, (uint32_t)(pos - start)); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
289 url_fseek(pb, pos, SEEK_SET); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
290 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
291 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
292 /* WAVEFORMATEX header */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
293 /* returns the size or -1 on error */ |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
294 int ff_put_wav_header(ByteIOContext *pb, AVCodecContext *enc) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
295 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
296 int bps, blkalign, bytespersec; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
297 int hdrsize = 18; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
298 int waveformatextensible; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
299 uint8_t temp[256]; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
300 uint8_t *riff_extradata= temp; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
301 uint8_t *riff_extradata_start= temp; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
302 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
303 if(!enc->codec_tag || enc->codec_tag > 0xffff) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
304 return -1; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
305 waveformatextensible = enc->channels > 2 && enc->channel_layout; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
306 |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
307 if (waveformatextensible) { |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
308 put_le16(pb, 0xfffe); |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
309 } else { |
4834 | 310 put_le16(pb, enc->codec_tag); |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
311 } |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
312 put_le16(pb, enc->channels); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
313 put_le32(pb, enc->sample_rate); |
3895
5554c668388b
simplify bps code by using av_get_bits_per_sample
bcoudurier
parents:
3893
diff
changeset
|
314 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_GSM_MS) { |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
315 bps = 0; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
316 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 || enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { // |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
317 bps = 4; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
318 } else { |
3906 | 319 if (!(bps = av_get_bits_per_sample(enc->codec_id))) |
320 bps = 16; // default to 16 | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
321 } |
3908
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
322 if(bps != enc->bits_per_coded_sample && enc->bits_per_coded_sample){ |
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
323 av_log(enc, AV_LOG_WARNING, "requested bits_per_coded_sample (%d) and actually stored (%d) differ\n", enc->bits_per_coded_sample, bps); |
1805
2c2e787782bb
warn if bps from user and what will be stored missmatches
michael
parents:
1803
diff
changeset
|
324 } |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
325 |
3893
8e7b2616e1ad
Fix msgsm in wav, do not set blkalign to frame size, this is wrong,
bcoudurier
parents:
3737
diff
changeset
|
326 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_AC3) { |
2164 | 327 blkalign = enc->frame_size; //this is wrong, but it seems many demuxers do not work if this is set correctly |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
328 //blkalign = 144 * enc->bit_rate/enc->sample_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
329 } else if (enc->codec_id == CODEC_ID_ADPCM_G726) { // |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
330 blkalign = 1; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
331 } else if (enc->block_align != 0) { /* specified by the codec */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
332 blkalign = enc->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
333 } else |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
334 blkalign = enc->channels*bps >> 3; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
335 if (enc->codec_id == CODEC_ID_PCM_U8 || |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
336 enc->codec_id == CODEC_ID_PCM_S24LE || |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
337 enc->codec_id == CODEC_ID_PCM_S32LE || |
3737
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
338 enc->codec_id == CODEC_ID_PCM_F32LE || |
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
339 enc->codec_id == CODEC_ID_PCM_F64LE || |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
340 enc->codec_id == CODEC_ID_PCM_S16LE) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
341 bytespersec = enc->sample_rate * blkalign; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
342 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
343 bytespersec = enc->bit_rate / 8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
344 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
345 put_le32(pb, bytespersec); /* bytes per second */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
346 put_le16(pb, blkalign); /* block align */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
347 put_le16(pb, bps); /* bits per sample */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
348 if (enc->codec_id == CODEC_ID_MP3) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
349 hdrsize += 12; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
350 bytestream_put_le16(&riff_extradata, 1); /* wID */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
351 bytestream_put_le32(&riff_extradata, 2); /* fdwFlags */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
352 bytestream_put_le16(&riff_extradata, 1152); /* nBlockSize */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
353 bytestream_put_le16(&riff_extradata, 1); /* nFramesPerBlock */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
354 bytestream_put_le16(&riff_extradata, 1393); /* nCodecDelay */ |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
355 } else if (enc->codec_id == CODEC_ID_MP2) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
356 hdrsize += 22; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
357 bytestream_put_le16(&riff_extradata, 2); /* fwHeadLayer */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
358 bytestream_put_le32(&riff_extradata, enc->bit_rate); /* dwHeadBitrate */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
359 bytestream_put_le16(&riff_extradata, enc->channels == 2 ? 1 : 8); /* fwHeadMode */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
360 bytestream_put_le16(&riff_extradata, 0); /* fwHeadModeExt */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
361 bytestream_put_le16(&riff_extradata, 1); /* wHeadEmphasis */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
362 bytestream_put_le16(&riff_extradata, 16); /* fwHeadFlags */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
363 bytestream_put_le32(&riff_extradata, 0); /* dwPTSLow */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
364 bytestream_put_le32(&riff_extradata, 0); /* dwPTSHigh */ |
4837 | 365 } else if (enc->codec_id == CODEC_ID_GSM_MS || enc->codec_id == CODEC_ID_ADPCM_IMA_WAV) { |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
366 hdrsize += 2; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
367 bytestream_put_le16(&riff_extradata, enc->frame_size); /* wSamplesPerBlock */ |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
368 } else if(enc->extradata_size){ |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
369 riff_extradata_start= enc->extradata; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
370 riff_extradata= enc->extradata + enc->extradata_size; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
371 hdrsize += enc->extradata_size; |
4833
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
372 } else if (!waveformatextensible){ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
373 hdrsize -= 2; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
374 } |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
375 if(waveformatextensible) { /* write WAVEFORMATEXTENSIBLE extensions */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
376 hdrsize += 22; |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
377 put_le16(pb, riff_extradata - riff_extradata_start + 22); /* 22 is WAVEFORMATEXTENSIBLE size */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
378 put_le16(pb, enc->bits_per_coded_sample); /* ValidBitsPerSample || SamplesPerBlock || Reserved */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
379 put_le32(pb, enc->channel_layout); /* dwChannelMask */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
380 put_le32(pb, enc->codec_tag); /* GUID + next 3 */ |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
381 put_le32(pb, 0x00100000); |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
382 put_le32(pb, 0xAA000080); |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
383 put_le32(pb, 0x719B3800); |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
384 } else if(riff_extradata - riff_extradata_start) { |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
385 put_le16(pb, riff_extradata - riff_extradata_start); |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
386 } |
d607731c2cf8
Add waveformat-extensible support in the wav muxer.
rbultje
parents:
4802
diff
changeset
|
387 put_buffer(pb, riff_extradata_start, riff_extradata - riff_extradata_start); |
4834 | 388 if(hdrsize&1){ |
389 hdrsize++; | |
390 put_byte(pb, 0); | |
391 } | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
392 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
393 return hdrsize; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
394 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
395 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
396 /* BITMAPINFOHEADER header */ |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
397 void ff_put_bmp_header(ByteIOContext *pb, AVCodecContext *enc, const AVCodecTag *tags, int for_asf) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
398 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
399 put_le32(pb, 40 + enc->extradata_size); /* size */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
400 put_le32(pb, enc->width); |
4550
a36f9f2eefcb
Fix raw rgb/bgr vertical flip in avi based on info from http://www.fourcc.org/fccbihgt.php.
michael
parents:
4544
diff
changeset
|
401 //We always store RGB TopDown |
a36f9f2eefcb
Fix raw rgb/bgr vertical flip in avi based on info from http://www.fourcc.org/fccbihgt.php.
michael
parents:
4544
diff
changeset
|
402 put_le32(pb, enc->codec_tag ? enc->height : -enc->height); |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
403 put_le16(pb, 1); /* planes */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
404 |
3908
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
405 put_le16(pb, enc->bits_per_coded_sample ? enc->bits_per_coded_sample : 24); /* depth */ |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
406 /* compression type */ |
1683
8b062c65fe0d
remove now useless codec_tag setting code in muxers
michael
parents:
1679
diff
changeset
|
407 put_le32(pb, enc->codec_tag); |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
408 put_le32(pb, enc->width * enc->height * 3); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
409 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
410 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
411 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
412 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
413 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
414 put_buffer(pb, enc->extradata, enc->extradata_size); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
415 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
416 if (enc->extradata_size & 1) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
417 put_byte(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
418 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
419 #endif //CONFIG_MUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
420 |
4206 | 421 #if CONFIG_DEMUXERS |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
422 /* We could be given one of the three possible structures here: |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
423 * WAVEFORMAT, PCMWAVEFORMAT or WAVEFORMATEX. Each structure |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
424 * is an expansion of the previous one with the fields added |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
425 * at the bottom. PCMWAVEFORMAT adds 'WORD wBitsPerSample' and |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
426 * WAVEFORMATEX adds 'WORD cbSize' and basically makes itself |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
427 * an openended structure. |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
428 */ |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
429 void ff_get_wav_header(ByteIOContext *pb, AVCodecContext *codec, int size) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
430 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
431 int id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
432 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
433 id = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
434 codec->codec_type = CODEC_TYPE_AUDIO; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
435 codec->codec_tag = id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
436 codec->channels = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
437 codec->sample_rate = get_le32(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
438 codec->bit_rate = get_le32(pb) * 8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
439 codec->block_align = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
440 if (size == 14) { /* We're dealing with plain vanilla WAVEFORMAT */ |
3908
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
441 codec->bits_per_coded_sample = 8; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
442 }else |
3908
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
443 codec->bits_per_coded_sample = get_le16(pb); |
1738 | 444 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */ |
445 int cbSize = get_le16(pb); /* cbSize */ | |
446 size -= 18; | |
447 cbSize = FFMIN(size, cbSize); | |
448 if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */ | |
3908
1d3d17de20ba
Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents:
3906
diff
changeset
|
449 codec->bits_per_coded_sample = get_le16(pb); |
4015
136be670d919
Decode audio channel layout from RIFF/WAV file format.
pross
parents:
3973
diff
changeset
|
450 codec->channel_layout = get_le32(pb); /* dwChannelMask */ |
1738 | 451 id = get_le32(pb); /* 4 first bytes of GUID */ |
452 url_fskip(pb, 12); /* skip end of GUID */ | |
453 cbSize -= 22; | |
454 size -= 22; | |
455 } | |
456 codec->extradata_size = cbSize; | |
457 if (cbSize > 0) { | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
458 codec->extradata = av_mallocz(codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
459 get_buffer(pb, codec->extradata, codec->extradata_size); |
1738 | 460 size -= cbSize; |
461 } | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
462 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
463 /* It is possible for the chunk to contain garbage at the end */ |
1738 | 464 if (size > 0) |
465 url_fskip(pb, size); | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
466 } |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
467 codec->codec_id = ff_wav_codec_get_id(id, codec->bits_per_coded_sample); |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
468 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
469 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
470 |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
471 enum CodecID ff_wav_codec_get_id(unsigned int tag, int bps) |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
472 { |
4129
0116c7e7e3ef
Fix two identical warnings when compiling riff.c and nuv.c with icc:
cehoyos
parents:
4115
diff
changeset
|
473 enum CodecID id; |
5058
33a244b7ca65
Add ff_ prefixes to exported symbols in libavformat/riff.h.
diego
parents:
5043
diff
changeset
|
474 id = ff_codec_get_id(ff_codec_wav_tags, tag); |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
475 if (id <= 0) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
476 return id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
477 /* handle specific u8 codec */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
478 if (id == CODEC_ID_PCM_S16LE && bps == 8) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
479 id = CODEC_ID_PCM_U8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
480 if (id == CODEC_ID_PCM_S16LE && bps == 24) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
481 id = CODEC_ID_PCM_S24LE; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
482 if (id == CODEC_ID_PCM_S16LE && bps == 32) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
483 id = CODEC_ID_PCM_S32LE; |
3737
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
484 if (id == CODEC_ID_PCM_F32LE && bps == 64) |
704c20dd52a4
Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents:
3705
diff
changeset
|
485 id = CODEC_ID_PCM_F64LE; |
2292 | 486 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8) |
487 id = CODEC_ID_PCM_ZORK; | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
488 return id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
489 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
490 #endif // CONFIG_DEMUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
491 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
492 void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
493 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
494 int gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
495 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
496 *au_ssize= stream->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
497 if(stream->frame_size && stream->sample_rate){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
498 *au_scale=stream->frame_size; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
499 *au_rate= stream->sample_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
500 }else if(stream->codec_type == CODEC_TYPE_VIDEO){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
501 *au_scale= stream->time_base.num; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
502 *au_rate = stream->time_base.den; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
503 }else{ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
504 *au_scale= stream->block_align ? stream->block_align*8 : 8; |
3103
137e1fc7d16b
Fallback to sample rate if bit rate is 0. This avoids 0 timebases in nut.
michael
parents:
3096
diff
changeset
|
505 *au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate; |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
506 } |
4242 | 507 gcd= av_gcd(*au_scale, *au_rate); |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
508 *au_scale /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
509 *au_rate /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
510 } |