annotate riff.c @ 3705:98156a539790 libavformat

FOURCC addition: added 3IV2, another mpeg4 id. incoming/video_3iv2/video_3iv2.avi
author banan
date Sun, 10 Aug 2008 15:34:29 +0000
parents 2f769a4057e7
children 704c20dd52a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
1 /*
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
2 * RIFF codec tags
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
3 * Copyright (c) 2000 Fabrice Bellard.
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
4 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
11 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
15 * Lesser General Public License for more details.
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
16 *
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1356
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
20 */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
21
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3134
diff changeset
22 #include "libavcodec/avcodec.h"
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
23 #include "avformat.h"
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
24 #include "riff.h"
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
25
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
26 /* Note: when encoding, the first matching tag is used, so order is
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
27 important if multiple tags possible for a given codec. */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
28 const AVCodecTag codec_bmp_tags[] = {
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
29 { CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
30 { CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
31 { CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
32 { CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
33 { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
34 { CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
35 { CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
36 { CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
37 { CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
38 { CODEC_ID_H261, MKTAG('H', '2', '6', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
39 { CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
40 { CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
41 { CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
42 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
43 { CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
44 { CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
45 { CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
46 { CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') },
3132
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
47 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 0 ) }, /* some broken avi use this */
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
48 { CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
49 { CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
50 { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
51 { CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
52 { CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
53 { CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
54 { CODEC_ID_MPEG4, MKTAG('R', 'M', 'P', '4') },
3705
98156a539790 FOURCC addition: added 3IV2, another mpeg4 id. incoming/video_3iv2/video_3iv2.avi
banan
parents: 3693
diff changeset
55 { CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
56 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
57 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
58 { CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
59 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
60 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
61 { CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
62 { CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
63 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
64 { CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
65 { CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
66 { CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
67 { CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
68 { CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
69 { CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
70 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
71 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
72 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
73 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
74 { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
75 { CODEC_ID_DVVIDEO, MKTAG('c', 'd', 'v', 'c') }, /* Canopus DV */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
76 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
77 { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
78 { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
79 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
80 { CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
81 { CODEC_ID_MPEG1VIDEO, MKTAG('V', 'C', 'R', '2') },
3132
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
82 { CODEC_ID_MPEG1VIDEO, MKTAG( 1 , 0 , 0 , 16) },
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
83 { CODEC_ID_MPEG2VIDEO, MKTAG( 2 , 0 , 0 , 16) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
84 { CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
85 { CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
86 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
87 { CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
88 { CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
89 { CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
90 { CODEC_ID_JPEGLS, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
91 { CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
92 { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
93 { CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
94 { CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
95 { CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
96 { CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
97 { CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') },
3132
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
98 { CODEC_ID_RAWVIDEO, MKTAG( 0 , 0 , 0 , 0 ) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
99 { CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
100 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
101 { CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
102 { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
103 { CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
104 { CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
105 { CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
106 { CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
107 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
108 { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
109 { CODEC_ID_INDEO4, MKTAG('I', 'V', '4', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
110 { CODEC_ID_INDEO5, MKTAG('I', 'V', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
111 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
112 { CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
113 { CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
114 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
115 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
116 { CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
117 { CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
118 { CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
119 { CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
120 { CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
121 { CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
122 { CODEC_ID_MSRLE, MKTAG('m', 'r', 'l', 'e') },
3132
2014993e4399 consistent use of MKTAG() in the codec_bmp_tags table
aurel
parents: 3131
diff changeset
123 { CODEC_ID_MSRLE, MKTAG( 1 , 0 , 0 , 0 ) },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
124 { CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
125 { CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
126 { CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
127 { CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
128 { CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
129 { CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
130 { CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
131 { CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
132 { CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
133 { CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
134 { CODEC_ID_SNOW, MKTAG('S', 'N', 'O', 'W') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
135 { CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
136 { CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
137 { CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
138 { CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
139 { CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
140 { CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
141 { CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
142 { CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
143 { CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
144 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
145 { CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
146 { CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
147 { CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
148 { CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
149 { CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
150 { CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
151 { CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
152 { CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
153 { CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
154 { CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
155 { CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
156 { CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
157 { CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
158 { CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
159 { CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
160 { CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
161 { CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
162 { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
163 { CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') },
3558
f615c35681cf Add entry for Dirac codec.
benoit
parents: 3345
diff changeset
164 { CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
3131
a5238e8e81c3 cosmetics: alignment of the codec_bmp_tags table
aurel
parents: 3130
diff changeset
165 { CODEC_ID_NONE, 0 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
166 };
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
167
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
168 const AVCodecTag codec_wav_tags[] = {
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
169 { CODEC_ID_PCM_S16LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
170 { CODEC_ID_PCM_U8, 0x0001 }, /* must come after s16le in this list */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
171 { CODEC_ID_PCM_S24LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
172 { CODEC_ID_PCM_S32LE, 0x0001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
173 { CODEC_ID_ADPCM_MS, 0x0002 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
174 { CODEC_ID_PCM_ALAW, 0x0006 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
175 { CODEC_ID_PCM_MULAW, 0x0007 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
176 { CODEC_ID_WMAVOICE, 0x000A },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
177 { CODEC_ID_ADPCM_IMA_WAV, 0x0011 },
3693
2f769a4057e7 Support muxing of Zork PCM audio into RIFF formats.
pross
parents: 3558
diff changeset
178 { CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
179 { CODEC_ID_ADPCM_YAMAHA, 0x0020 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
180 { CODEC_ID_TRUESPEECH, 0x0022 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
181 { CODEC_ID_GSM_MS, 0x0031 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
182 { CODEC_ID_ADPCM_G726, 0x0045 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
183 { CODEC_ID_MP2, 0x0050 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
184 { CODEC_ID_MP3, 0x0055 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
185 { CODEC_ID_ADPCM_IMA_DK4, 0x0061 }, /* rogue format number */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
186 { CODEC_ID_ADPCM_IMA_DK3, 0x0062 }, /* rogue format number */
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
187 { CODEC_ID_VOXWARE, 0x0075 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
188 { CODEC_ID_AAC, 0x00ff },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
189 { CODEC_ID_WMAV1, 0x0160 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
190 { CODEC_ID_WMAV2, 0x0161 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
191 { CODEC_ID_WMAPRO, 0x0162 },
3094
18517a0b71f3 Add more riff IDs to support remuxing.
banan
parents: 3064
diff changeset
192 { CODEC_ID_WMALOSSLESS, 0x0163 },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
193 { CODEC_ID_ADPCM_CT, 0x0200 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
194 { CODEC_ID_ATRAC3, 0x0270 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
195 { CODEC_ID_IMC, 0x0401 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
196 { CODEC_ID_AC3, 0x2000 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
197 { CODEC_ID_DTS, 0x2001 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
198 { CODEC_ID_SONIC, 0x2048 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
199 { CODEC_ID_SONIC_LS, 0x2048 },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
200 { CODEC_ID_AAC, 0x706d },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
201 { CODEC_ID_FLAC, 0xF1AC },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
202 { CODEC_ID_ADPCM_SWF, ('S'<<8)+'F' },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
203 { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id?
1383
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
204
97bd1648eb9a Add a note about illegal codec IDs.
diego
parents: 1382
diff changeset
205 /* 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
206 // for NuppelVideo (nuv.c)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
207 { CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') },
3064
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
208 { CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') },
4b215e8cc932 cosmetics: Sort and prettyprint codec_wav_tags[].
diego
parents: 3060
diff changeset
209 { 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
210 { 0, 0 },
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
211 };
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 #ifdef CONFIG_MUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
214 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
215 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
216 put_tag(pb, tag);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
217 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
218 return url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
219 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
220
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
221 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
222 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
223 offset_t pos;
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 pos = url_ftell(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
226 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
227 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
228 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
229 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
230
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
231 /* WAVEFORMATEX header */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
232 /* 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
233 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
234 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
235 int bps, blkalign, bytespersec;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
236 int hdrsize = 18;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
237
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
238 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
239 return -1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
240
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
241 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
242 put_le16(pb, enc->channels);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
243 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
244 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
245 enc->codec_id == CODEC_ID_PCM_ALAW ||
3693
2f769a4057e7 Support muxing of Zork PCM audio into RIFF formats.
pross
parents: 3558
diff changeset
246 enc->codec_id == CODEC_ID_PCM_MULAW ||
2f769a4057e7 Support muxing of Zork PCM audio into RIFF formats.
pross
parents: 3558
diff changeset
247 enc->codec_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
248 bps = 8;
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
249 } 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
250 bps = 0;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
251 } 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
252 bps = 4;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
253 } 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
254 bps = 24;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
255 } 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
256 bps = 32;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
257 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
258 bps = 16;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
259 }
1814
d431b26ff5ef be less noisy
michael
parents: 1805
diff changeset
260 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
261 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
262 }
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
263
3345
8947d86e480b Make ac3 in avi work better.
michael
parents: 3286
diff changeset
264 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_GSM_MS || enc->codec_id == CODEC_ID_AC3) {
2164
3804e39efbfd misc spelling fixes
diego
parents: 2151
diff changeset
265 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
266 //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
267 } 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
268 blkalign = 1;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
269 } 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
270 blkalign = enc->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
271 } else
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
272 blkalign = enc->channels*bps >> 3;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
273 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
274 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
275 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
276 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
277 bytespersec = enc->sample_rate * blkalign;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
278 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
279 bytespersec = enc->bit_rate / 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
280 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
281 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
282 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
283 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
284 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
285 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
286 hdrsize += 12;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
287 put_le16(pb, 1); /* wID */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
288 put_le32(pb, 2); /* fdwFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
289 put_le16(pb, 1152); /* nBlockSize */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
290 put_le16(pb, 1); /* nFramesPerBlock */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
291 put_le16(pb, 1393); /* nCodecDelay */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
292 } 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
293 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
294 hdrsize += 22;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
295 put_le16(pb, 2); /* fwHeadLayer */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
296 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
297 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
298 put_le16(pb, 0); /* fwHeadModeExt */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
299 put_le16(pb, 1); /* wHeadEmphasis */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
300 put_le16(pb, 16); /* fwHeadFlags */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
301 put_le32(pb, 0); /* dwPTSLow */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
302 put_le32(pb, 0); /* dwPTSHigh */
1802
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
303 } else if (enc->codec_id == CODEC_ID_GSM_MS) {
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
304 put_le16(pb, 2); /* wav_extra_size */
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
305 hdrsize += 2;
15462a5de747 Add support for MS-GSM codec
mbardiaux
parents: 1738
diff changeset
306 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
307 } 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
308 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
309 hdrsize += 2;
1803
f05a4a9b1d19 Remove code duplicated between adpcm.c and riff.c
mbardiaux
parents: 1802
diff changeset
310 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
311 } else if(enc->extradata_size){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
312 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
313 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
314 hdrsize += enc->extradata_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
315 if(hdrsize&1){
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
316 hdrsize++;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
317 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
318 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
319 } else {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
320 hdrsize -= 2;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
321 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
322
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
323 return hdrsize;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
324 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
325
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
326 /* BITMAPINFOHEADER header */
1677
2a85c82b8538 add codec_id <-> codec_tag tables to AVIn/OutputFormat
michael
parents: 1593
diff changeset
327 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
328 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
329 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
330 put_le32(pb, enc->width);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
331 put_le32(pb, enc->height);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
332 put_le16(pb, 1); /* planes */
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 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
335 /* compression type */
1683
8b062c65fe0d remove now useless codec_tag setting code in muxers
michael
parents: 1679
diff changeset
336 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
337 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
338 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
339 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
340 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
341 put_le32(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
342
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
343 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
344
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
345 if (enc->extradata_size & 1)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
346 put_byte(pb, 0);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
347 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
348 #endif //CONFIG_MUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
349
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
350 #ifdef CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
351 /* 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
352 * 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
353 * 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
354 * 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
355 * 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
356 * an openended structure.
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 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
359 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
360 int id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
361
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
362 id = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
363 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
364 codec->codec_tag = id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
365 codec->channels = get_le16(pb);
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
366 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
367 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
368 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
369 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
370 codec->bits_per_sample = 8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
371 }else
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
372 codec->bits_per_sample = get_le16(pb);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
373 if (size >= 18) { /* We're obviously dealing with WAVEFORMATEX */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
374 int cbSize = get_le16(pb); /* cbSize */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
375 size -= 18;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
376 cbSize = FFMIN(size, cbSize);
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
377 if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
378 codec->bits_per_sample = get_le16(pb);
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
379 get_le32(pb); /* dwChannelMask */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
380 id = get_le32(pb); /* 4 first bytes of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
381 url_fskip(pb, 12); /* skip end of GUID */
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
382 cbSize -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
383 size -= 22;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
384 }
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
385 codec->extradata_size = cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
386 if (cbSize > 0) {
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
387 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
388 get_buffer(pb, codec->extradata, codec->extradata_size);
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
389 size -= cbSize;
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
390 }
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 /* It is possible for the chunk to contain garbage at the end */
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
393 if (size > 0)
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
394 url_fskip(pb, size);
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
395 }
1738
67e4f8b8f2df add waveformatextensible support
bcoudurier
parents: 1683
diff changeset
396 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
397 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
398
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
399
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
400 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
401 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
402 int id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
403 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
404 if (id <= 0)
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
405 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
406 /* handle specific u8 codec */
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
407 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
408 id = CODEC_ID_PCM_U8;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
409 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
410 id = CODEC_ID_PCM_S24LE;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
411 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
412 id = CODEC_ID_PCM_S32LE;
2292
f54b2020d564 support silly PCM variant used by zork nemesis
michael
parents: 2287
diff changeset
413 if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8)
f54b2020d564 support silly PCM variant used by zork nemesis
michael
parents: 2287
diff changeset
414 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
415 return id;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
416 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
417 #endif // CONFIG_DEMUXERS
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
418
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
419 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
420 {
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
421 int gcd;
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 *au_ssize= stream->block_align;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
424 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
425 *au_scale=stream->frame_size;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
426 *au_rate= stream->sample_rate;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
427 }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
428 *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
429 *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
430 }else{
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
431 *au_scale= stream->block_align ? stream->block_align*8 : 8;
3103
137e1fc7d16b Fallback to sample rate if bit rate is 0. This avoids 0 timebases in nut.
michael
parents: 3096
diff changeset
432 *au_rate = stream->bit_rate ? stream->bit_rate : 8*stream->sample_rate;
1172
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
433 }
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
434 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
435 *au_scale /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
436 *au_rate /= gcd;
6a5e58d2114b move common stuff from avienc.c and wav.c to new file riff.c
mru
parents:
diff changeset
437 }