Mercurial > libavformat.hg
annotate riff.c @ 1960:c0289552590f libavformat
Change the vhook code to send real timestamps to the filters instead of the
current time of day, which is useless, and which the filters could just as
easily query for themselves.
patch by Bobby Bingham, uhmmmm gmail com
author | diego |
---|---|
date | Thu, 29 Mar 2007 05:24:35 +0000 |
parents | 79112cde3831 |
children | f25d798425c9 |
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', ' ') }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
100 { 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
|
101 { 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
|
102 { 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
|
103 { CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
104 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */ |
1891 | 105 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, |
1955 | 106 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') }, |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
107 { CODEC_ID_JPEGLS, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
108 { 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
|
109 { 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
|
110 { CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') }, |
1295 | 111 { CODEC_ID_RAWVIDEO, 0 }, |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
112 { 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
|
113 { 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
|
114 { 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
|
115 { 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
|
116 { 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
|
117 { CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') }, |
1315 | 118 { 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
|
119 { 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
|
120 { 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
|
121 { 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
|
122 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') }, |
1305 | 123 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') }, |
1593 | 124 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') }, |
125 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') }, | |
1305 | 126 { 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
|
127 { 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
|
128 { 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
|
129 { 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
|
130 { 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
|
131 { 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
|
132 { 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
|
133 { 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
|
134 { 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
|
135 { 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
|
136 { 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
|
137 { 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
|
138 { 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
|
139 { 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
|
140 { 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
|
141 { 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
|
142 { 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
|
143 { 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
|
144 { 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
|
145 { 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
|
146 { 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
|
147 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') }, |
1311 | 148 { 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
|
149 { 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
|
150 { 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
|
151 { 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
|
152 { 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
|
153 { 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
|
154 { 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
|
155 { 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
|
156 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') }, |
1290 | 157 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') }, |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
158 { 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
|
159 { 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
|
160 { 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
|
161 { 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
|
162 { 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
|
163 { 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
|
164 { 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
|
165 { 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
|
166 { 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
|
167 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') }, |
1196 | 168 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') }, |
1274 | 169 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') }, |
1293 | 170 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') }, |
1919 | 171 { 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
|
172 { CODEC_ID_NONE, 0 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
173 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
174 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
175 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
|
176 { CODEC_ID_MP2, 0x50 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
177 { CODEC_ID_MP3, 0x55 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
178 { CODEC_ID_AC3, 0x2000 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
179 { CODEC_ID_DTS, 0x2001 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
180 { CODEC_ID_PCM_S16LE, 0x01 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
181 { 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
|
182 { CODEC_ID_PCM_S24LE, 0x01 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
183 { CODEC_ID_PCM_S32LE, 0x01 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
184 { CODEC_ID_PCM_ALAW, 0x06 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
185 { CODEC_ID_PCM_MULAW, 0x07 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
186 { CODEC_ID_ADPCM_MS, 0x02 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
187 { 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
|
188 { CODEC_ID_ADPCM_YAMAHA, 0x20 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
189 { CODEC_ID_ADPCM_G726, 0x45 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
190 { 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
|
191 { 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
|
192 { CODEC_ID_WMAV1, 0x160 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
193 { CODEC_ID_WMAV2, 0x161 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
194 { 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
|
195 { CODEC_ID_AAC, 0xff }, |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
196 { 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
|
197 { CODEC_ID_SONIC, 0x2048 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
198 { CODEC_ID_SONIC_LS, 0x2048 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
199 { CODEC_ID_ADPCM_CT, 0x200 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
200 { 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
|
201 { CODEC_ID_TRUESPEECH, 0x22 }, |
1393 | 202 { CODEC_ID_FLAC, 0xF1AC }, |
1434 | 203 { CODEC_ID_IMC, 0x401 }, |
1802 | 204 { CODEC_ID_GSM_MS, 0x31 }, |
1383 | 205 |
206 /* 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
|
207 // for NuppelVideo (nuv.c) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
208 { 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
|
209 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') }, |
1474 | 210 { 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
|
211 { 0, 0 }, |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
212 }; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
213 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
214 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
|
215 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
216 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
|
217 if (tags->id == id) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
218 return tags->tag; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
219 tags++; |
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 return 0; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
222 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
223 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
224 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
|
225 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
226 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
|
227 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
|
228 && 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
|
229 && 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
|
230 && 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
|
231 return tags->id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
232 tags++; |
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 return CODEC_ID_NONE; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
235 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
236 |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
237 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
|
238 { |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
239 int i; |
1679 | 240 for(i=0; tags && tags[i]; i++){ |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
241 int tag= codec_get_tag(tags[i], id); |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
242 if(tag) return tag; |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
243 } |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
244 return 0; |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
245 } |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
246 |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
247 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
|
248 { |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
249 int i; |
1679 | 250 for(i=0; tags && tags[i]; i++){ |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
251 enum CodecID id= codec_get_id(tags[i], tag); |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
252 if(id!=CODEC_ID_NONE) return id; |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
253 } |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
254 return CODEC_ID_NONE; |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
255 } |
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
256 |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
257 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
|
258 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
259 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
|
260 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
261 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
262 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
|
263 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
264 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
|
265 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
266 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
267 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
|
268 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
269 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
|
270 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
271 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
272 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
|
273 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
274 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
|
275 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
276 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
277 #ifdef CONFIG_MUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
278 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
|
279 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
280 put_tag(pb, tag); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
281 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
282 return url_ftell(pb); |
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 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
285 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
|
286 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
287 offset_t pos; |
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 pos = url_ftell(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
290 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
|
291 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
|
292 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
|
293 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
294 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
295 /* WAVEFORMATEX header */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
296 /* 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
|
297 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
|
298 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
299 int bps, blkalign, bytespersec; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
300 int hdrsize = 18; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
301 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
302 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
|
303 return -1; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
304 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
305 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
|
306 put_le16(pb, enc->channels); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 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
|
311 bps = 8; |
1802 | 312 } 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
|
313 bps = 0; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
314 } 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
|
315 bps = 4; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
316 } else if (enc->codec_id == CODEC_ID_PCM_S24LE) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
317 bps = 24; |
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_PCM_S32LE) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
319 bps = 32; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
320 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
321 bps = 16; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
322 } |
1814 | 323 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
|
324 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
|
325 } |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
326 |
1802 | 327 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
|
328 blkalign = enc->frame_size; //this is wrong, but seems many demuxers dont work if this is set correctly |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
329 //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
|
330 } 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
|
331 blkalign = 1; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
332 } 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
|
333 blkalign = enc->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
334 } else |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
335 blkalign = enc->channels*bps >> 3; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 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
|
340 bytespersec = enc->sample_rate * blkalign; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
341 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
342 bytespersec = enc->bit_rate / 8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
343 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
344 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
|
345 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
|
346 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
|
347 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
|
348 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
|
349 hdrsize += 12; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
350 put_le16(pb, 1); /* wID */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
351 put_le32(pb, 2); /* fdwFlags */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
352 put_le16(pb, 1152); /* nBlockSize */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
353 put_le16(pb, 1); /* nFramesPerBlock */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
354 put_le16(pb, 1393); /* nCodecDelay */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
355 } else if (enc->codec_id == CODEC_ID_MP2) { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
356 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
|
357 hdrsize += 22; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
358 put_le16(pb, 2); /* fwHeadLayer */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
359 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
|
360 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
|
361 put_le16(pb, 0); /* fwHeadModeExt */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
362 put_le16(pb, 1); /* wHeadEmphasis */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
363 put_le16(pb, 16); /* fwHeadFlags */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
364 put_le32(pb, 0); /* dwPTSLow */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
365 put_le32(pb, 0); /* dwPTSHigh */ |
1802 | 366 } else if (enc->codec_id == CODEC_ID_GSM_MS) { |
367 put_le16(pb, 2); /* wav_extra_size */ | |
368 hdrsize += 2; | |
369 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
|
370 } 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
|
371 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
|
372 hdrsize += 2; |
1803
f05a4a9b1d19
Remove code duplicated between adpcm.c and riff.c
mbardiaux
parents:
1802
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->extradata_size){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
375 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
|
376 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
|
377 hdrsize += enc->extradata_size; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
378 if(hdrsize&1){ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
379 hdrsize++; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
380 put_byte(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
381 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
382 } else { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
383 hdrsize -= 2; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
384 } |
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 return hdrsize; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
387 } |
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 /* BITMAPINFOHEADER header */ |
1677
2a85c82b8538
add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents:
1593
diff
changeset
|
390 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
|
391 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
392 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
|
393 put_le32(pb, enc->width); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
394 put_le32(pb, enc->height); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
395 put_le16(pb, 1); /* planes */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
396 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
397 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
|
398 /* compression type */ |
1683
8b062c65fe0d
remove now useless codec_tag setting code in muxers
michael
parents:
1679
diff
changeset
|
399 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
|
400 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
|
401 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
402 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
403 put_le32(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
404 put_le32(pb, 0); |
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 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
|
407 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
408 if (enc->extradata_size & 1) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
409 put_byte(pb, 0); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
410 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
411 #endif //CONFIG_MUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
412 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
413 #ifdef CONFIG_DEMUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
414 /* 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
|
415 * 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
|
416 * 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
|
417 * 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
|
418 * 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
|
419 * an openended structure. |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
420 */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
421 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
|
422 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
423 int 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 id = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
426 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
|
427 codec->codec_tag = id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
428 codec->channels = get_le16(pb); |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
429 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
|
430 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
|
431 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
|
432 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
|
433 codec->bits_per_sample = 8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
434 }else |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
435 codec->bits_per_sample = get_le16(pb); |
1738 | 436 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */ |
437 int cbSize = get_le16(pb); /* cbSize */ | |
438 size -= 18; | |
439 cbSize = FFMIN(size, cbSize); | |
440 if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */ | |
441 codec->bits_per_sample = get_le16(pb); | |
442 get_le32(pb); /* dwChannelMask */ | |
443 id = get_le32(pb); /* 4 first bytes of GUID */ | |
444 url_fskip(pb, 12); /* skip end of GUID */ | |
445 cbSize -= 22; | |
446 size -= 22; | |
447 } | |
448 codec->extradata_size = cbSize; | |
449 if (cbSize > 0) { | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
450 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
|
451 get_buffer(pb, codec->extradata, codec->extradata_size); |
1738 | 452 size -= cbSize; |
453 } | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
454 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
455 /* It is possible for the chunk to contain garbage at the end */ |
1738 | 456 if (size > 0) |
457 url_fskip(pb, size); | |
1172
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
458 } |
1738 | 459 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
|
460 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
461 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
462 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
463 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
|
464 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
465 int id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
466 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
|
467 if (id <= 0) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
468 return id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
469 /* handle specific u8 codec */ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
470 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
|
471 id = CODEC_ID_PCM_U8; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
472 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
|
473 id = CODEC_ID_PCM_S24LE; |
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 == 32) |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
475 id = CODEC_ID_PCM_S32LE; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
476 return id; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
477 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
478 #endif // CONFIG_DEMUXERS |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
479 |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
480 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
|
481 { |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
482 int gcd; |
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 *au_ssize= stream->block_align; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
485 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
|
486 *au_scale=stream->frame_size; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
487 *au_rate= stream->sample_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
488 }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
|
489 *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
|
490 *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
|
491 }else{ |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
492 *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
|
493 *au_rate = stream->bit_rate; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
494 } |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
495 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
|
496 *au_scale /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
497 *au_rate /= gcd; |
6a5e58d2114b
move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff
changeset
|
498 } |