annotate riff.c @ 4205:41878938d030 libavformat

add SLMJ fourcc to mjpeg
author compn
date Tue, 13 Jan 2009 17:10:10 +0000
parents 84da7f1e6901
children c3102b189cb6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
3 * Copyright (c) 2000 Fabrice Bellard.
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
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3134
diff changeset
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"
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
25
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
26 /* 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
27 important if multiple tags possible for a given codec. */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
28 const AVCodecTag codec_bmp_tags[] = {
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
29 { CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
30 { CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
31 { CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
32 { CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
33 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
34 { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
35 { CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
36 { CODEC_ID_H263, MKTAG('X', '2', '6', '3') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
37 { CODEC_ID_H263, MKTAG('L', '2', '6', '3') },
4065
e1620316fe5c add VX1K h263 and DMK2 mpeg4 avi fourccs
compn
parents: 4061
diff changeset
38 { CODEC_ID_H263, MKTAG('V', 'X', '1', 'K') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
39 { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
40 { CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
41 { CODEC_ID_H261, MKTAG('H', '2', '6', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
42 { CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
43 { CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
44 { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
45 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
46 { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
47 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
48 { CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
49 { 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
50 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 0 ) }, /* some broken avi use this */
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
51 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
52 { CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
53 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
54 { CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
55 { CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
56 { CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
57 { 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
58 { CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') },
4057
bf23e96cf362 add FFDS fourcc, ok'd by kostya
compn
parents: 4015
diff changeset
59 { 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
60 { CODEC_ID_MPEG4, MKTAG('F', 'V', 'F', 'W') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
61 { CODEC_ID_MPEG4, MKTAG('D', 'C', 'O', 'D') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
62 { CODEC_ID_MPEG4, MKTAG('M', 'V', 'X', 'M') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
63 { CODEC_ID_MPEG4, MKTAG('P', 'M', '4', 'V') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
64 { CODEC_ID_MPEG4, MKTAG('S', 'M', 'P', '4') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
65 { CODEC_ID_MPEG4, MKTAG('D', 'X', 'G', 'M') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
66 { CODEC_ID_MPEG4, MKTAG('V', 'I', 'D', 'M') },
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
67 { CODEC_ID_MPEG4, MKTAG('M', '4', 'T', '3') },
4060
2d23165a1518 add GEOX fourcc for mpeg4
michael
parents: 4057
diff changeset
68 { CODEC_ID_MPEG4, MKTAG('G', 'E', 'O', 'X') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
69 { CODEC_ID_MPEG4, MKTAG('H', 'D', 'X', '4') }, /* flipped video */
4065
e1620316fe5c add VX1K h263 and DMK2 mpeg4 avi fourccs
compn
parents: 4061
diff changeset
70 { CODEC_ID_MPEG4, MKTAG('D', 'M', 'K', '2') },
4084
96cf19bbdbdc add another mpeg4 avi fourcc from uncommon codecs list
compn
parents: 4072
diff changeset
71 { 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
72 { CODEC_ID_MPEG4, MKTAG('I', 'N', 'M', 'C') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
73 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
74 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
75 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
76 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
77 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
78 { 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
79 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'V', 'X', '3') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
80 { CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
81 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
82 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
83 { CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
84 { CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
85 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
86 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', '4', '1') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
87 { CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
88 { CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
89 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
90 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
91 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
92 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
93 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
94 { CODEC_ID_DVVIDEO, MKTAG('c', 'd', 'v', 'c') }, /* Canopus DV */
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
95 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
96 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
97 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
98 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
99 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
100 { CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
101 { CODEC_ID_MPEG2VIDEO, MKTAG('P', 'I', 'M', '2') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
102 { 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
103 { CODEC_ID_MPEG1VIDEO, MKTAG( 1 , 0 , 0 , 16) },
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
104 { CODEC_ID_MPEG2VIDEO, MKTAG( 2 , 0 , 0 , 16) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
105 { CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
106 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') },
4071
a1f5c4042d4f add mpeg2 fourcc and aac format tag from asf
compn
parents: 4065
diff changeset
107 { CODEC_ID_MPEG2VIDEO, MKTAG('L', 'M', 'P', '2') }, /* Lead MPEG2 in avi */
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
108 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
109 { CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') },
4061
4911a195fd0e add fourccs from avi files
compn
parents: 4060
diff changeset
110 { CODEC_ID_MJPEG, MKTAG('d', 'm', 'b', '1') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
111 { CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
112 { CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
113 { CODEC_ID_JPEGLS, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
114 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
115 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
116 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
117 { 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
118 { 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
119 { CODEC_ID_MJPEG, MKTAG('Q', 'I', 'V', 'G') },
4205
41878938d030 add SLMJ fourcc to mjpeg
compn
parents: 4178
diff changeset
120 { CODEC_ID_MJPEG, MKTAG('S', 'L', 'M', 'J') }, /* SL M-JPEG */
4178
84da7f1e6901 cosmetics: CJPG is from Creative Webcam
compn
parents: 4177
diff changeset
121 { CODEC_ID_MJPEG, MKTAG('C', 'J', 'P', 'G') }, /* Creative Webcam JPEG */
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
122 { CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
123 { CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
124 { 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
125 { CODEC_ID_RAWVIDEO, MKTAG( 0 , 0 , 0 , 0 ) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
126 { CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
127 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
128 { CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
129 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
130 { CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
131 { CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
132 { CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
133 { CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
134 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
135 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
136 { CODEC_ID_INDEO4, MKTAG('I', 'V', '4', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
137 { CODEC_ID_INDEO5, MKTAG('I', 'V', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
138 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
139 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
140 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
141 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
142 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
143 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
144 { CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
145 { CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
146 { CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
147 { CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
148 { CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
149 { 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
150 { CODEC_ID_MSRLE, MKTAG( 1 , 0 , 0 , 0 ) },
3928
2768ffe4332b Add fourcc for MS RLE4
kostya
parents: 3908
diff changeset
151 { CODEC_ID_MSRLE, MKTAG( 2 , 0 , 0 , 0 ) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
152 { CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
153 { CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
154 { CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
155 { CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
156 { CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
157 { CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
158 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
159 { CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
160 { CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
161 { CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
162 { CODEC_ID_SNOW, MKTAG('S', 'N', 'O', 'W') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
163 { CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
164 { CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
165 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
166 { CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
167 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
168 { CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
169 { CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
170 { CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
171 { CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
172 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
173 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
174 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
175 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
176 { CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
177 { CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
178 { CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
179 { CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
180 { CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
181 { CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
182 { CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
183 { CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
184 { CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
185 { CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
186 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
187 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
188 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
189 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
190 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
4115
05d41346b964 add MPNG fourcc
compn
parents: 4114
diff changeset
191 { CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
192 { CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') },
3558
f615c35681cf Add entry for Dirac codec.
benoit
parents: 3345
diff changeset
193 { 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
194 { CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') },
4112
4053a13bfcc7 add rpza avi fourcc
compn
parents: 4084
diff changeset
195 { CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
4053a13bfcc7 add rpza avi fourcc
compn
parents: 4084
diff changeset
196 { CODEC_ID_RPZA, MKTAG('r', 'p', 'z', 'a') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
197 { CODEC_ID_NONE, 0 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
198 };
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
199
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
200 const AVCodecTag codec_wav_tags[] = {
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
201 { CODEC_ID_PCM_S16LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
202 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
203 { CODEC_ID_PCM_S24LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
204 { CODEC_ID_PCM_S32LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
205 { CODEC_ID_ADPCM_MS, 0x0002 },
3737
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
206 { CODEC_ID_PCM_F32LE, 0x0003 },
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
207 { CODEC_ID_PCM_F64LE, 0x0003 }, /* must come after f32le in this list */
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
208 { CODEC_ID_PCM_ALAW, 0x0006 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
209 { CODEC_ID_PCM_MULAW, 0x0007 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
210 { CODEC_ID_WMAVOICE, 0x000A },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
211 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 },
3693
2f769a4057e7 Support muxing of Zork PCM audio into RIFF formats.
pross
parents: 3558
diff changeset
212 { CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
213 { CODEC_ID_ADPCM_YAMAHA, 0x0020 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
214 { CODEC_ID_TRUESPEECH, 0x0022 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
215 { CODEC_ID_GSM_MS, 0x0031 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
216 { CODEC_ID_ADPCM_G726, 0x0045 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
217 { CODEC_ID_MP2, 0x0050 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
218 { CODEC_ID_MP3, 0x0055 },
4130
22a0dae5e6ae add amr in avi riff tags
compn
parents: 4129
diff changeset
219 { CODEC_ID_AMR_NB, 0x0057 },
22a0dae5e6ae add amr in avi riff tags
compn
parents: 4129
diff changeset
220 { CODEC_ID_AMR_WB, 0x0058 },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
221 { CODEC_ID_ADPCM_IMA_DK4, 0x0061 }, /* rogue format number */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
222 { CODEC_ID_ADPCM_IMA_DK3, 0x0062 }, /* rogue format number */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
223 { CODEC_ID_VOXWARE, 0x0075 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
224 { 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
225 { CODEC_ID_SIPR, 0x0130 },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
226 { CODEC_ID_WMAV1, 0x0160 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
227 { CODEC_ID_WMAV2, 0x0161 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
228 { CODEC_ID_WMAPRO, 0x0162 },
3094
18517a0b71f3 Add more riff IDs to support remuxing.
banan
parents: 3064
diff changeset
229 { CODEC_ID_WMALOSSLESS, 0x0163 },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
230 { CODEC_ID_ADPCM_CT, 0x0200 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
231 { CODEC_ID_ATRAC3, 0x0270 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
232 { CODEC_ID_IMC, 0x0401 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
233 { CODEC_ID_AC3, 0x2000 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
234 { CODEC_ID_DTS, 0x2001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
235 { CODEC_ID_SONIC, 0x2048 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
236 { CODEC_ID_SONIC_LS, 0x2048 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
237 { CODEC_ID_AAC, 0x706d },
4071
a1f5c4042d4f add mpeg2 fourcc and aac format tag from asf
compn
parents: 4065
diff changeset
238 { CODEC_ID_AAC, 0x4143 },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
239 { CODEC_ID_FLAC, 0xF1AC },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
240 { CODEC_ID_ADPCM_SWF, ('S'<<8)+'F' },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
241 { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id?
1383
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
242
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
243 /* 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
244 // for NuppelVideo (nuv.c)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
245 { CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
246 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
247 { 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
248 { 0, 0 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
249 };
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
250
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
251 #ifdef CONFIG_MUXERS
3973
549a09cf23fe Remove offset_t typedef and use int64_t directly instead.
diego
parents: 3944
diff changeset
252 int64_t 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
253 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
254 put_tag(pb, tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
255 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
256 return url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
257 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
258
3973
549a09cf23fe Remove offset_t typedef and use int64_t directly instead.
diego
parents: 3944
diff changeset
259 void 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
260 {
3973
549a09cf23fe Remove offset_t typedef and use int64_t directly instead.
diego
parents: 3944
diff changeset
261 int64_t pos;
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
262
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
263 pos = url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
264 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
265 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
266 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
267 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
268
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
269 /* WAVEFORMATEX header */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
270 /* returns the size or -1 on error */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
271 int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
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 int bps, blkalign, bytespersec;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
274 int hdrsize = 18;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
275
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
276 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
277 return -1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
278
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
279 put_le16(pb, enc->codec_tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
280 put_le16(pb, enc->channels);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
281 put_le32(pb, enc->sample_rate);
3895
5554c668388b simplify bps code by using av_get_bits_per_sample
bcoudurier
parents: 3893
diff changeset
282 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
283 bps = 0;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
284 } 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
285 bps = 4;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
286 } else {
3906
b3a0c732d0d7 set default bps to 16 in wav header
bcoudurier
parents: 3895
diff changeset
287 if (!(bps = av_get_bits_per_sample(enc->codec_id)))
b3a0c732d0d7 set default bps to 16 in wav header
bcoudurier
parents: 3895
diff changeset
288 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
289 }
3908
1d3d17de20ba Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 3906
diff changeset
290 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
291 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
292 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
293
3893
8e7b2616e1ad Fix msgsm in wav, do not set blkalign to frame size, this is wrong,
bcoudurier
parents: 3737
diff changeset
294 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_AC3) {
2164
3804e39efbfd misc spelling fixes
diego
parents: 2151
diff changeset
295 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
296 //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
297 } 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
298 blkalign = 1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
299 } 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
300 blkalign = enc->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
301 } else
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
302 blkalign = enc->channels*bps >> 3;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
303 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
304 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
305 enc->codec_id == CODEC_ID_PCM_S32LE ||
3737
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
306 enc->codec_id == CODEC_ID_PCM_F32LE ||
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
307 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
308 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
309 bytespersec = enc->sample_rate * blkalign;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
310 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
311 bytespersec = enc->bit_rate / 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
312 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
313 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
314 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
315 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
316 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
317 put_le16(pb, 12); /* wav_extra_size */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
318 hdrsize += 12;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
319 put_le16(pb, 1); /* wID */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
320 put_le32(pb, 2); /* fdwFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
321 put_le16(pb, 1152); /* nBlockSize */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
322 put_le16(pb, 1); /* nFramesPerBlock */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
323 put_le16(pb, 1393); /* nCodecDelay */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
324 } 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
325 put_le16(pb, 22); /* wav_extra_size */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
326 hdrsize += 22;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
327 put_le16(pb, 2); /* fwHeadLayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
328 put_le32(pb, enc->bit_rate); /* dwHeadBitrate */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
329 put_le16(pb, enc->channels == 2 ? 1 : 8); /* fwHeadMode */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
330 put_le16(pb, 0); /* fwHeadModeExt */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
331 put_le16(pb, 1); /* wHeadEmphasis */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
332 put_le16(pb, 16); /* fwHeadFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
333 put_le32(pb, 0); /* dwPTSLow */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
334 put_le32(pb, 0); /* dwPTSHigh */
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
335 } else if (enc->codec_id == CODEC_ID_GSM_MS) {
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
336 put_le16(pb, 2); /* wav_extra_size */
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
337 hdrsize += 2;
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
338 put_le16(pb, enc->frame_size); /* wSamplesPerBlock */
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
339 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV) {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
340 put_le16(pb, 2); /* wav_extra_size */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
341 hdrsize += 2;
1803
f05a4a9b1d19 Remove code duplicated between adpcm.c and riff.c
mbardiaux
parents: 1802
diff changeset
342 put_le16(pb, enc->frame_size); /* wSamplesPerBlock */
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
343 } else if(enc->extradata_size){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
344 put_le16(pb, enc->extradata_size);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
345 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
346 hdrsize += enc->extradata_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
347 if(hdrsize&1){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
348 hdrsize++;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
349 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
350 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
351 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
352 hdrsize -= 2;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
353 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
354
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
355 return hdrsize;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
356 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
357
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
358 /* BITMAPINFOHEADER header */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
359 void 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
360 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
361 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
362 put_le32(pb, enc->width);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
363 put_le32(pb, enc->height);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
364 put_le16(pb, 1); /* planes */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
365
3908
1d3d17de20ba Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 3906
diff changeset
366 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
367 /* compression type */
1683
8b062c65fe0d remove now useless codec_tag setting code in muxers
michael
parents: 1679
diff changeset
368 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
369 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
370 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
371 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
372 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
373 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
374
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
375 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
376
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
377 if (enc->extradata_size & 1)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
378 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
379 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
380 #endif //CONFIG_MUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
381
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
382 #ifdef CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
383 /* 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
384 * 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
385 * 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
386 * 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
387 * 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
388 * an openended structure.
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
389 */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
390 void get_wav_header(ByteIOContext *pb, AVCodecContext *codec, int size)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
391 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
392 int id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
393
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
394 id = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
395 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
396 codec->codec_tag = id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
397 codec->channels = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
398 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
399 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
400 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
401 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
402 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
403 }else
3908
1d3d17de20ba Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 3906
diff changeset
404 codec->bits_per_coded_sample = get_le16(pb);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
405 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
406 int cbSize = get_le16(pb); /* cbSize */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
407 size -= 18;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
408 cbSize = FFMIN(size, cbSize);
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
409 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
410 codec->bits_per_coded_sample = get_le16(pb);
4015
136be670d919 Decode audio channel layout from RIFF/WAV file format.
pross
parents: 3973
diff changeset
411 codec->channel_layout = get_le32(pb); /* dwChannelMask */
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
412 id = get_le32(pb); /* 4 first bytes of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
413 url_fskip(pb, 12); /* skip end of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
414 cbSize -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
415 size -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
416 }
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
417 codec->extradata_size = cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
418 if (cbSize > 0) {
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
419 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
420 get_buffer(pb, codec->extradata, codec->extradata_size);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
421 size -= cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
422 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
423
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
424 /* It is possible for the chunk to contain garbage at the end */
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
425 if (size > 0)
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
426 url_fskip(pb, size);
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
427 }
3908
1d3d17de20ba Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 3906
diff changeset
428 codec->codec_id = 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
429 }
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
4129
0116c7e7e3ef Fix two identical warnings when compiling riff.c and nuv.c with icc:
cehoyos
parents: 4115
diff changeset
432 enum CodecID 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
433 {
4129
0116c7e7e3ef Fix two identical warnings when compiling riff.c and nuv.c with icc:
cehoyos
parents: 4115
diff changeset
434 enum CodecID id;
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
435 id = codec_get_id(codec_wav_tags, tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
436 if (id <= 0)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
437 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
438 /* handle specific u8 codec */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
439 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
440 id = CODEC_ID_PCM_U8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
441 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
442 id = CODEC_ID_PCM_S24LE;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
443 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
444 id = CODEC_ID_PCM_S32LE;
3737
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
445 if (id == CODEC_ID_PCM_F32LE && bps == 64)
704c20dd52a4 Make RIFF-based demuxers handle F32LE and F64LE PCM audio.
pross
parents: 3705
diff changeset
446 id = CODEC_ID_PCM_F64LE;
2292
f54b2020d564 support silly PCM variant used by zork nemesis
michael
parents: 2287
diff changeset
447 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8)
f54b2020d564 support silly PCM variant used by zork nemesis
michael
parents: 2287
diff changeset
448 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
449 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
450 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
451 #endif // CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
452
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
453 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
454 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
455 int gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
456
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
457 *au_ssize= stream->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
458 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
459 *au_scale=stream->frame_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
460 *au_rate= stream->sample_rate;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
461 }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
462 *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
463 *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
464 }else{
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
465 *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
466 *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
467 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
468 gcd= ff_gcd(*au_scale, *au_rate);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
469 *au_scale /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
470 *au_rate /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
471 }