Mercurial > libavformat.hg
annotate riff.c @ 3068:9cc9ff5aff9c libavformat
set bps to uncompressed original sound data for compressed audio
according to aiff specs, qt set it to 16 for mace and ima4,
fail if block align is not set.
author | bcoudurier |
---|---|
date | Mon, 25 Feb 2008 12:00:31 +0000 |
parents | 4b215e8cc932 |
children | 18517a0b71f3 |
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" |
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[] = { |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
29 { 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
|
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('X', '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('a', 'v', 'c', '1') }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
34 { 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
|
35 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
36 { 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
|
37 { 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
|
38 { 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
|
39 { 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
|
40 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
41 /* added based on MPlayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
42 { 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
|
43 { 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
|
44 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
45 { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') }, |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
46 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') }, |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
47 { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') }, |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
48 { 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
|
49 { 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
|
50 { 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
|
51 { 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
|
52 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
53 /* added based on MPlayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
54 { 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
|
55 { 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
|
56 { 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
|
57 { 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
|
58 { 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
|
59 { 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
|
60 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
61 { 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
|
62 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
63 { 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
|
64 { 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
|
65 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
66 /* added based on MPlayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
67 { 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
|
68 { 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
|
69 { 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
|
70 { 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
|
71 { 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
|
72 { 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
|
73 { 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
|
74 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
75 { 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
|
76 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
77 /* added based on MPlayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
78 { 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
|
79 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
80 { 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
|
81 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
82 { 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
|
83 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
84 /* added based on MPlayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
85 { 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
|
86 { 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
|
87 { 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
|
88 { 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
|
89 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') }, |
3018
93c9fd942256
Add dv50 tag to support samples with dv50 fourcc in AVI.
diego
parents:
2565
diff
changeset
|
90 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', '0') }, |
1172
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 | 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 | 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 | 107 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, |
1955 | 108 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') }, |
1972 | 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 | 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 | 120 { CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') }, |
2565 | 121 { CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') }, |
1172
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', '1') }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
123 { 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
|
124 { 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
|
125 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') }, |
1305 | 126 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') }, |
1593 | 127 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') }, |
128 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') }, | |
1305 | 129 { 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
|
130 { 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
|
131 { 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
|
132 { 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
|
133 { 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
|
134 { 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
|
135 { 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
|
136 { 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
|
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('m', 's', 'v', 'c') }, |
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('c', 'r', '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_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
|
143 { 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
|
144 { 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
|
145 { 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
|
146 { 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
|
147 { 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
|
148 { 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
|
149 { 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
|
150 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') }, |
1311 | 151 { 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
|
152 { 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
|
153 { 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
|
154 { 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
|
155 { 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
|
156 { 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
|
157 { 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
|
158 { 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
|
159 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, |
1290 | 160 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, |
1973 | 161 { 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
|
162 { 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
|
163 { 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
|
164 { 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
|
165 { 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
|
166 { 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
|
167 { 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
|
168 { 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
|
169 { 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
|
170 { 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
|
171 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') }, |
1196 | 172 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') }, |
1274 | 173 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') }, |
1293 | 174 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') }, |
1919 | 175 { 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
|
176 { CODEC_ID_NONE, 0 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
177 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
178 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
179 const AVCodecTag codec_wav_tags[] = { |
3064 | 180 { CODEC_ID_PCM_S16LE, 0x0001 }, |
181 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */ | |
182 { CODEC_ID_PCM_S24LE, 0x0001 }, | |
183 { CODEC_ID_PCM_S32LE, 0x0001 }, | |
184 { CODEC_ID_ADPCM_MS, 0x0002 }, | |
185 { CODEC_ID_PCM_ALAW, 0x0006 }, | |
186 { CODEC_ID_PCM_MULAW, 0x0007 }, | |
187 { CODEC_ID_WMAVOICE, 0x000A }, | |
188 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 }, | |
189 { CODEC_ID_ADPCM_YAMAHA, 0x0020 }, | |
190 { CODEC_ID_TRUESPEECH, 0x0022 }, | |
191 { CODEC_ID_GSM_MS, 0x0031 }, | |
192 { CODEC_ID_ADPCM_G726, 0x0045 }, | |
193 { CODEC_ID_MP2, 0x0050 }, | |
194 { CODEC_ID_MP3, 0x0055 }, | |
195 { CODEC_ID_ADPCM_IMA_DK4, 0x0061 }, /* rogue format number */ | |
196 { CODEC_ID_ADPCM_IMA_DK3, 0x0062 }, /* rogue format number */ | |
197 { CODEC_ID_VOXWARE, 0x0075 }, | |
198 { CODEC_ID_AAC, 0x00ff }, | |
199 { CODEC_ID_WMAV1, 0x0160 }, | |
200 { CODEC_ID_WMAV2, 0x0161 }, | |
201 { CODEC_ID_WMAPRO, 0x0162 }, | |
202 { CODEC_ID_ADPCM_CT, 0x0200 }, | |
203 { CODEC_ID_ATRAC3, 0x0270 }, | |
204 { CODEC_ID_IMC, 0x0401 }, | |
205 { CODEC_ID_AC3, 0x2000 }, | |
206 { CODEC_ID_DTS, 0x2001 }, | |
207 { CODEC_ID_SONIC, 0x2048 }, | |
208 { CODEC_ID_SONIC_LS, 0x2048 }, | |
209 { CODEC_ID_AAC, 0x706d }, | |
210 { CODEC_ID_FLAC, 0xF1AC }, | |
211 { CODEC_ID_ADPCM_SWF, ('S'<<8)+'F' }, | |
212 { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id? | |
1383 | 213 |
214 /* 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
|
215 // for NuppelVideo (nuv.c) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
216 { CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') }, |
3064 | 217 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') }, |
218 { 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
|
219 { 0, 0 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
220 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
221 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
222 #ifdef CONFIG_MUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
223 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
|
224 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
225 put_tag(pb, tag); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
226 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
227 return url_ftell(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
228 } |
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 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
|
231 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
232 offset_t pos; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
233 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
234 pos = url_ftell(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
235 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
|
236 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
|
237 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
|
238 } |
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 /* WAVEFORMATEX header */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
241 /* 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
|
242 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
|
243 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
244 int bps, blkalign, bytespersec; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
245 int hdrsize = 18; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
246 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
247 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
|
248 return -1; |
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 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
|
251 put_le16(pb, enc->channels); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
252 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
|
253 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
|
254 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
|
255 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
|
256 bps = 8; |
1802 | 257 } 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
|
258 bps = 0; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
259 } 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
|
260 bps = 4; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
261 } 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
|
262 bps = 24; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
263 } 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
|
264 bps = 32; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
265 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
266 bps = 16; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
267 } |
1814 | 268 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
|
269 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
|
270 } |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
271 |
1802 | 272 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_GSM_MS) { |
2164 | 273 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
|
274 //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
|
275 } 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
|
276 blkalign = 1; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
277 } 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
|
278 blkalign = enc->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
279 } else |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
280 blkalign = enc->channels*bps >> 3; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 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
|
285 bytespersec = enc->sample_rate * blkalign; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
286 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
287 bytespersec = enc->bit_rate / 8; |
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 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 hdrsize += 12; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
295 put_le16(pb, 1); /* wID */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
296 put_le32(pb, 2); /* fdwFlags */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
297 put_le16(pb, 1152); /* nBlockSize */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
298 put_le16(pb, 1); /* nFramesPerBlock */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
299 put_le16(pb, 1393); /* nCodecDelay */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
300 } 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
|
301 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
|
302 hdrsize += 22; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
303 put_le16(pb, 2); /* fwHeadLayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
304 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
|
305 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
|
306 put_le16(pb, 0); /* fwHeadModeExt */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
307 put_le16(pb, 1); /* wHeadEmphasis */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
308 put_le16(pb, 16); /* fwHeadFlags */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
309 put_le32(pb, 0); /* dwPTSLow */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
310 put_le32(pb, 0); /* dwPTSHigh */ |
1802 | 311 } else if (enc->codec_id == CODEC_ID_GSM_MS) { |
312 put_le16(pb, 2); /* wav_extra_size */ | |
313 hdrsize += 2; | |
314 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
|
315 } 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
|
316 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
|
317 hdrsize += 2; |
1803
f05a4a9b1d19
Remove code duplicated between adpcm.c and riff.c
mbardiaux
parents:
1802
diff
changeset
|
318 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
|
319 } else if(enc->extradata_size){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
320 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
|
321 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
|
322 hdrsize += enc->extradata_size; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
323 if(hdrsize&1){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
324 hdrsize++; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
325 put_byte(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
326 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
327 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
328 hdrsize -= 2; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
329 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
330 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
331 return hdrsize; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
332 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
333 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
334 /* BITMAPINFOHEADER header */ |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
335 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
|
336 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
337 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
|
338 put_le32(pb, enc->width); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
339 put_le32(pb, enc->height); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
340 put_le16(pb, 1); /* planes */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
341 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
342 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
|
343 /* compression type */ |
1683
8b062c65fe0d
remove now useless codec_tag setting code in muxers
michael
parents:
1679
diff
changeset
|
344 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
|
345 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
|
346 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
347 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
348 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
349 put_le32(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 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
|
352 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
353 if (enc->extradata_size & 1) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
354 put_byte(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
355 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
356 #endif //CONFIG_MUXERS |
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 #ifdef CONFIG_DEMUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
359 /* 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
|
360 * 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
|
361 * 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
|
362 * 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
|
363 * 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
|
364 * an openended structure. |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
365 */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
366 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
|
367 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
368 int id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
369 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
370 id = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
371 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
|
372 codec->codec_tag = id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
373 codec->channels = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
374 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
|
375 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
|
376 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
|
377 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
|
378 codec->bits_per_sample = 8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
379 }else |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
380 codec->bits_per_sample = get_le16(pb); |
1738 | 381 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */ |
382 int cbSize = get_le16(pb); /* cbSize */ | |
383 size -= 18; | |
384 cbSize = FFMIN(size, cbSize); | |
385 if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */ | |
386 codec->bits_per_sample = get_le16(pb); | |
387 get_le32(pb); /* dwChannelMask */ | |
388 id = get_le32(pb); /* 4 first bytes of GUID */ | |
389 url_fskip(pb, 12); /* skip end of GUID */ | |
390 cbSize -= 22; | |
391 size -= 22; | |
392 } | |
393 codec->extradata_size = cbSize; | |
394 if (cbSize > 0) { | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
395 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
|
396 get_buffer(pb, codec->extradata, codec->extradata_size); |
1738 | 397 size -= cbSize; |
398 } | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
399 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
400 /* It is possible for the chunk to contain garbage at the end */ |
1738 | 401 if (size > 0) |
402 url_fskip(pb, size); | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
403 } |
1738 | 404 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
|
405 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
406 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
407 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
408 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
|
409 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
410 int id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
411 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
|
412 if (id <= 0) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
413 return id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
414 /* handle specific u8 codec */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
415 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
|
416 id = CODEC_ID_PCM_U8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
417 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
|
418 id = CODEC_ID_PCM_S24LE; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
419 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
|
420 id = CODEC_ID_PCM_S32LE; |
2292 | 421 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8) |
422 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
|
423 return id; |
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 #endif // CONFIG_DEMUXERS |
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 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
|
428 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
429 int gcd; |
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 *au_ssize= stream->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
432 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
|
433 *au_scale=stream->frame_size; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
434 *au_rate= stream->sample_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
435 }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
|
436 *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
|
437 *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
|
438 }else{ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
439 *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
|
440 *au_rate = stream->bit_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
441 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
442 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
|
443 *au_scale /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
444 *au_rate /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
445 } |