annotate riff.c @ 2230:0ff503c4caef libavformat

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