annotate riff.c @ 2164:3804e39efbfd libavformat

misc spelling fixes
author diego
date Tue, 12 Jun 2007 09:29:25 +0000
parents 5bd95162a3a2
children 0ff503c4caef
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
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
22 #include "avformat.h"
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
23 #include "avcodec.h"
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
24 #include "riff.h"
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
25 #include "allformats.h" // for asf_muxer
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. */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
29 const AVCodecTag codec_bmp_tags[] = {
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
30 { CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
31 { CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
32 { CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
33 { CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
34 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
35 { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
36
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
37 { CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
38 { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
39 { CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
40 { CODEC_ID_H261, MKTAG('H', '2', '6', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
41
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
42 /* added based on MPlayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
43 { CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
44 { CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
45
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
46 { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
47 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
48 { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
49 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
50 { CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
51 { CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
52 { CODEC_ID_MPEG4, MKTAG(0x04, 0, 0, 0) }, /* some broken avi use this */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
53
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
54 /* added based on MPlayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
55 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
56 { CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
57 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
58 { CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
59 { CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
60 { CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
61
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
62 { CODEC_ID_MPEG4, MKTAG('R', 'M', 'P', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
63
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
64 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
65 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
66
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
67 /* added based on MPlayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
68 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
69 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
70 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
71 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
72 { CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
73 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
74 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
75
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
76 { CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
77
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
78 /* added based on MPlayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
79 { CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
80
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
81 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
82
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
83 { CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
84
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
85 /* added based on MPlayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
86 { CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
87 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
88 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
89 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
90 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
91 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
92 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
93 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
94 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
95 { CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
96 { CODEC_ID_MPEG1VIDEO, MKTAG('V', 'C', 'R', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
97 { CODEC_ID_MPEG1VIDEO, 0x10000001 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
98 { CODEC_ID_MPEG2VIDEO, 0x10000002 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
99 { CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') },
2151
5bd95162a3a2 add MMES fourcc, matrox mpeg2 in avi files
bcoudurier
parents: 2107
diff changeset
100 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
101 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
102 { CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
103 { CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
104 { CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */
2107
d422ebae6dd1 move jpegls up, fixes sf bug #1629152
michael
parents: 2024
diff changeset
105 { CODEC_ID_JPEGLS,MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
106 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */
1891
2afa964cc3ea jpeg fourcc
michael
parents: 1814
diff changeset
107 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') },
1955
79112cde3831 add IJPG fourcc, to play m_ijpg.avi
bcoudurier
parents: 1919
diff changeset
108 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') },
1972
f25d798425c9 add AVRn fourcc
bcoudurier
parents: 1955
diff changeset
109 { CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
110 { CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
111 { CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
112 { CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') },
1295
d2c766bc1b50 Allow RGB Raw encoding
gpoirier
parents: 1293
diff changeset
113 { CODEC_ID_RAWVIDEO, 0 },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
114 { CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
115 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
116 { CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') },
1255
12058d7c6d57 Add YV12 support, patch by Steve Lhomme % steve P lhomme A free P fr %
gpoirier
parents: 1246
diff changeset
117 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
118 { CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
119 { CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') },
1315
af1ced65c24c add support for grayscale rawvideo avi
gpoirier
parents: 1311
diff changeset
120 { CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
121 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
122 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
123 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
124 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') },
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1295
diff changeset
125 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
1593
6f13826a5037 Add support for VP60 and VP61.
aurel
parents: 1474
diff changeset
126 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
6f13826a5037 Add support for VP60 and VP61.
aurel
parents: 1474
diff changeset
127 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
1305
541f4aa12efc VP5 and VP6 video decoder
aurel
parents: 1295
diff changeset
128 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
129 { CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
130 { CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
131 { CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
132 { CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
133 { CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
134 { CODEC_ID_MSRLE, MKTAG('m', 'r', 'l', 'e') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
135 { CODEC_ID_MSRLE, MKTAG(0x1, 0x0, 0x0, 0x0) },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
136 { CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
137 { CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
138 { CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
139 { CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
140 { CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
141 { CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
142 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
143 { CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
144 { CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
145 { CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
146 { CODEC_ID_SNOW, MKTAG('S', 'N', 'O', 'W') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
147 { CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
148 { CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
149 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') },
1311
d35cbb48d76d add a VP6F fourcc for apps which rely on fourcc
aurel
parents: 1305
diff changeset
150 { CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
151 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
152 { CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
153 { CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
154 { CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
155 { CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
156 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
157 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
158 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') },
1290
423559fc3de3 WVC1 is now decodeable with VC-1 decoder.
kostya
parents: 1274
diff changeset
159 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') },
1973
michael
parents: 1972
diff changeset
160 { CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
161 { CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
162 { CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
163 { CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
164 { CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
165 { CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
166 { CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
167 { CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
168 { CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
169 { CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
170 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') },
1196
db5d61f065cc add new tag 'CAVS' for Chinese AVS codec
stefang
parents: 1172
diff changeset
171 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') },
1274
7ed4630a8b84 add codec id and tag for JPEG 2000
bcoudurier
parents: 1255
diff changeset
172 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') },
1293
1816e097c39f VMware Video decoder (fourcc: VMnc)
kostya
parents: 1290
diff changeset
173 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') },
1919
2b0dd64faa4b Targa (.tga) encoder,
gpoirier
parents: 1891
diff changeset
174 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
175 { CODEC_ID_NONE, 0 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
176 };
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
177
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
178 const AVCodecTag codec_wav_tags[] = {
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
179 { CODEC_ID_MP2, 0x50 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
180 { CODEC_ID_MP3, 0x55 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
181 { CODEC_ID_AC3, 0x2000 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
182 { CODEC_ID_DTS, 0x2001 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
183 { CODEC_ID_PCM_S16LE, 0x01 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
184 { CODEC_ID_PCM_U8, 0x01 }, /* must come after s16le in this list */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
185 { CODEC_ID_PCM_S24LE, 0x01 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
186 { CODEC_ID_PCM_S32LE, 0x01 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
187 { CODEC_ID_PCM_ALAW, 0x06 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
188 { CODEC_ID_PCM_MULAW, 0x07 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
189 { CODEC_ID_ADPCM_MS, 0x02 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
190 { CODEC_ID_ADPCM_IMA_WAV, 0x11 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
191 { CODEC_ID_ADPCM_YAMAHA, 0x20 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
192 { CODEC_ID_ADPCM_G726, 0x45 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
193 { CODEC_ID_ADPCM_IMA_DK4, 0x61 }, /* rogue format number */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
194 { CODEC_ID_ADPCM_IMA_DK3, 0x62 }, /* rogue format number */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
195 { CODEC_ID_WMAV1, 0x160 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
196 { CODEC_ID_WMAV2, 0x161 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
197 { CODEC_ID_AAC, 0x706d },
1472
49d5a5ca2987 get rid of CODEC_ID_MPEG4AAC after next version bump, and change it to CODEC_ID_AAC where used
bcoudurier
parents: 1464
diff changeset
198 { CODEC_ID_AAC, 0xff },
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
199 { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id?
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
200 { CODEC_ID_SONIC, 0x2048 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
201 { CODEC_ID_SONIC_LS, 0x2048 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
202 { CODEC_ID_ADPCM_CT, 0x200 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
203 { CODEC_ID_ADPCM_SWF, ('S'<<8)+'F' },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
204 { CODEC_ID_TRUESPEECH, 0x22 },
1393
d8cde666839c Replace FLAC FourCC by TwoCC.
diego
parents: 1383
diff changeset
205 { CODEC_ID_FLAC, 0xF1AC },
1434
cfc938c2abbe IMC decoder
kostya
parents: 1393
diff changeset
206 { CODEC_ID_IMC, 0x401 },
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
207 { CODEC_ID_GSM_MS, 0x31 },
2024
8b400be65542 Atrac3 decoder.
banan
parents: 1973
diff changeset
208 { CODEC_ID_ATRAC3, 0x270 },
1383
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
209
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
210 /* 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
211 // for NuppelVideo (nuv.c)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
212 { CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
213 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') },
1474
70ed1bf0ae45 libnut uses "MP3 " for mp3
michael
parents: 1472
diff changeset
214 { 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
215 { 0, 0 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
216 };
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
217
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
218 unsigned int codec_get_tag(const AVCodecTag *tags, int id)
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 while (tags->id != CODEC_ID_NONE) {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
221 if (tags->id == id)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
222 return tags->tag;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
223 tags++;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
224 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
225 return 0;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
226 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
227
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
228 enum CodecID codec_get_id(const AVCodecTag *tags, unsigned int tag)
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
229 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
230 while (tags->id != CODEC_ID_NONE) {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
231 if( toupper((tag >> 0)&0xFF) == toupper((tags->tag >> 0)&0xFF)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
232 && toupper((tag >> 8)&0xFF) == toupper((tags->tag >> 8)&0xFF)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
233 && toupper((tag >>16)&0xFF) == toupper((tags->tag >>16)&0xFF)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
234 && toupper((tag >>24)&0xFF) == toupper((tags->tag >>24)&0xFF))
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
235 return tags->id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
236 tags++;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
237 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
238 return CODEC_ID_NONE;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
239 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
240
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
241 unsigned int av_codec_get_tag(const AVCodecTag *tags[4], enum CodecID id)
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
242 {
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
243 int i;
1679
ba58d49d4685 get rid of the [4] limitation of codec tag lists
michael
parents: 1677
diff changeset
244 for(i=0; tags && tags[i]; i++){
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
245 int tag= codec_get_tag(tags[i], id);
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
246 if(tag) return tag;
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
247 }
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
248 return 0;
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
249 }
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
250
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
251 enum CodecID av_codec_get_id(const AVCodecTag *tags[4], unsigned int tag)
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
252 {
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
253 int i;
1679
ba58d49d4685 get rid of the [4] limitation of codec tag lists
michael
parents: 1677
diff changeset
254 for(i=0; tags && tags[i]; i++){
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
255 enum CodecID id= codec_get_id(tags[i], tag);
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
256 if(id!=CODEC_ID_NONE) return id;
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
257 }
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
258 return CODEC_ID_NONE;
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
259 }
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
260
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
261 unsigned int codec_get_bmp_tag(int id)
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 return codec_get_tag(codec_bmp_tags, id);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
264 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
265
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
266 unsigned int codec_get_wav_tag(int id)
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 return codec_get_tag(codec_wav_tags, id);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
269 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
270
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
271 enum CodecID codec_get_bmp_id(unsigned int tag)
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 return codec_get_id(codec_bmp_tags, tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
274 }
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 enum CodecID codec_get_wav_id(unsigned int tag)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
277 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
278 return 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
279 }
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 #ifdef CONFIG_MUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
282 offset_t start_tag(ByteIOContext *pb, const char *tag)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
283 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
284 put_tag(pb, tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
285 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
286 return url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
287 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
288
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
289 void end_tag(ByteIOContext *pb, offset_t start)
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 offset_t pos;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
292
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
293 pos = url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
294 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
295 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
296 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
297 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
298
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
299 /* WAVEFORMATEX header */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
300 /* 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
301 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
302 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
303 int bps, blkalign, bytespersec;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
304 int hdrsize = 18;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
305
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
306 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
307 return -1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
308
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
309 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
310 put_le16(pb, enc->channels);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
311 put_le32(pb, enc->sample_rate);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
312 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
313 enc->codec_id == CODEC_ID_PCM_ALAW ||
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
314 enc->codec_id == CODEC_ID_PCM_MULAW) {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
315 bps = 8;
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
316 } else 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
317 bps = 0;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
318 } 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
319 bps = 4;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
320 } else if (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
321 bps = 24;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
322 } else if (enc->codec_id == CODEC_ID_PCM_S32LE) {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
323 bps = 32;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
324 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
325 bps = 16;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
326 }
1814
d431b26ff5ef be less noisy
michael
parents: 1805
diff changeset
327 if(bps != enc->bits_per_sample && enc->bits_per_sample){
1805
2c2e787782bb warn if bps from user and what will be stored missmatches
michael
parents: 1803
diff changeset
328 av_log(enc, AV_LOG_WARNING, "requested bits_per_sample (%d) and actually stored (%d) differ\n", enc->bits_per_sample, bps);
2c2e787782bb warn if bps from user and what will be stored missmatches
michael
parents: 1803
diff changeset
329 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
330
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
331 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_GSM_MS) {
2164
3804e39efbfd misc spelling fixes
diego
parents: 2151
diff changeset
332 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
333 //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
334 } 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
335 blkalign = 1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
336 } 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
337 blkalign = enc->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
338 } else
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
339 blkalign = enc->channels*bps >> 3;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
340 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
341 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
342 enc->codec_id == CODEC_ID_PCM_S32LE ||
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
343 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
344 bytespersec = enc->sample_rate * blkalign;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
345 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
346 bytespersec = enc->bit_rate / 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
347 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
348 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
349 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
350 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
351 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
352 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
353 hdrsize += 12;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
354 put_le16(pb, 1); /* wID */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
355 put_le32(pb, 2); /* fdwFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
356 put_le16(pb, 1152); /* nBlockSize */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
357 put_le16(pb, 1); /* nFramesPerBlock */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
358 put_le16(pb, 1393); /* nCodecDelay */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
359 } 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
360 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
361 hdrsize += 22;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
362 put_le16(pb, 2); /* fwHeadLayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
363 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
364 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
365 put_le16(pb, 0); /* fwHeadModeExt */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
366 put_le16(pb, 1); /* wHeadEmphasis */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
367 put_le16(pb, 16); /* fwHeadFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
368 put_le32(pb, 0); /* dwPTSLow */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
369 put_le32(pb, 0); /* dwPTSHigh */
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
370 } else if (enc->codec_id == CODEC_ID_GSM_MS) {
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
371 put_le16(pb, 2); /* wav_extra_size */
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
372 hdrsize += 2;
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
373 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
374 } 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
375 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
376 hdrsize += 2;
1803
f05a4a9b1d19 Remove code duplicated between adpcm.c and riff.c
mbardiaux
parents: 1802
diff changeset
377 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
378 } else if(enc->extradata_size){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
379 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
380 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
381 hdrsize += enc->extradata_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
382 if(hdrsize&1){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
383 hdrsize++;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
384 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
385 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
386 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
387 hdrsize -= 2;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
388 }
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 return hdrsize;
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
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
393 /* BITMAPINFOHEADER header */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
394 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
395 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
396 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
397 put_le32(pb, enc->width);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
398 put_le32(pb, enc->height);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
399 put_le16(pb, 1); /* planes */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
400
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
401 put_le16(pb, enc->bits_per_sample ? enc->bits_per_sample : 24); /* depth */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
402 /* compression type */
1683
8b062c65fe0d remove now useless codec_tag setting code in muxers
michael
parents: 1679
diff changeset
403 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
404 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
405 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
406 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
407 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
408 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
409
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
410 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
411
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
412 if (enc->extradata_size & 1)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
413 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
414 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
415 #endif //CONFIG_MUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
416
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
417 #ifdef CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
418 /* 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
419 * 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
420 * 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
421 * 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
422 * 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
423 * an openended structure.
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
424 */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
425 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
426 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
427 int id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
428
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
429 id = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
430 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
431 codec->codec_tag = id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
432 codec->channels = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
433 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
434 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
435 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
436 if (size == 14) { /* We're dealing with plain vanilla WAVEFORMAT */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
437 codec->bits_per_sample = 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
438 }else
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
439 codec->bits_per_sample = get_le16(pb);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
440 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
441 int cbSize = get_le16(pb); /* cbSize */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
442 size -= 18;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
443 cbSize = FFMIN(size, cbSize);
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
444 if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
445 codec->bits_per_sample = get_le16(pb);
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
446 get_le32(pb); /* dwChannelMask */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
447 id = get_le32(pb); /* 4 first bytes of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
448 url_fskip(pb, 12); /* skip end of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
449 cbSize -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
450 size -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
451 }
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
452 codec->extradata_size = cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
453 if (cbSize > 0) {
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
454 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
455 get_buffer(pb, codec->extradata, codec->extradata_size);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
456 size -= cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
457 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
458
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
459 /* It is possible for the chunk to contain garbage at the end */
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
460 if (size > 0)
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
461 url_fskip(pb, size);
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
462 }
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
463 codec->codec_id = wav_codec_get_id(id, codec->bits_per_sample);
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
464 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
465
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
466
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
467 int wav_codec_get_id(unsigned int tag, int bps)
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 int id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
470 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
471 if (id <= 0)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
472 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
473 /* handle specific u8 codec */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
474 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
475 id = CODEC_ID_PCM_U8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
476 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
477 id = CODEC_ID_PCM_S24LE;
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 == 32)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
479 id = CODEC_ID_PCM_S32LE;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
480 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
481 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
482 #endif // CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
483
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
484 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
485 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
486 int gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
487
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
488 *au_ssize= stream->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
489 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
490 *au_scale=stream->frame_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
491 *au_rate= stream->sample_rate;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
492 }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
493 *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
494 *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
495 }else{
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
496 *au_scale= stream->block_align ? stream->block_align*8 : 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
497 *au_rate = stream->bit_rate;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
498 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
499 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
500 *au_scale /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
501 *au_rate /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
502 }