/src/vlc/modules/codec/avcodec/fourcc.c
Line | Count | Source |
1 | | /***************************************************************************** |
2 | | * fourcc.c: libavcodec <-> libvlc conversion routines |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 1999-2009 VLC authors and VideoLAN |
5 | | * |
6 | | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
7 | | * Gildas Bazin <gbazin@videolan.org> |
8 | | * |
9 | | * This program is free software; you can redistribute it and/or modify it |
10 | | * under the terms of the GNU Lesser General Public License as published by |
11 | | * the Free Software Foundation; either version 2.1 of the License, or |
12 | | * (at your option) any later version. |
13 | | * |
14 | | * This program is distributed in the hope that it will be useful, |
15 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | | * GNU Lesser General Public License for more details. |
18 | | * |
19 | | * You should have received a copy of the GNU Lesser General Public License |
20 | | * along with this program; if not, write to the Free Software Foundation, |
21 | | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
22 | | *****************************************************************************/ |
23 | | |
24 | | #ifdef HAVE_CONFIG_H |
25 | | # include <config.h> |
26 | | #endif |
27 | | |
28 | | #include <vlc_common.h> |
29 | | #include <vlc_codec.h> |
30 | | |
31 | | #include <libavcodec/avcodec.h> |
32 | | #include "avcodec.h" |
33 | | |
34 | | /***************************************************************************** |
35 | | * Codec fourcc -> libavcodec Codec_id mapping |
36 | | * Sorted by AVCodecID enumeration order |
37 | | *****************************************************************************/ |
38 | | struct vlc_avcodec_fourcc |
39 | | { |
40 | | vlc_fourcc_t i_fourcc; |
41 | | enum AVCodecID i_codec; |
42 | | }; |
43 | | |
44 | | /* |
45 | | * Video Codecs |
46 | | */ |
47 | | static const struct vlc_avcodec_fourcc video_codecs[] = |
48 | | { |
49 | | { VLC_CODEC_MP1V, AV_CODEC_ID_MPEG1VIDEO }, |
50 | | { VLC_CODEC_MP2V, AV_CODEC_ID_MPEG2VIDEO }, /* prefer MPEG2 over MPEG1 */ |
51 | | { VLC_CODEC_MPGV, AV_CODEC_ID_MPEG2VIDEO }, /* prefer MPEG2 over MPEG1 */ |
52 | | /* AV_CODEC_ID_MPEG2VIDEO_XVMC */ |
53 | | { VLC_CODEC_H261, AV_CODEC_ID_H261 }, |
54 | | { VLC_CODEC_H263, AV_CODEC_ID_H263 }, |
55 | | { VLC_CODEC_RV10, AV_CODEC_ID_RV10 }, |
56 | | { VLC_CODEC_RV13, AV_CODEC_ID_RV10 }, |
57 | | { VLC_CODEC_RV20, AV_CODEC_ID_RV20 }, |
58 | | { VLC_CODEC_MJPG, AV_CODEC_ID_MJPEG }, |
59 | | { VLC_CODEC_MJPGB, AV_CODEC_ID_MJPEGB }, |
60 | | { VLC_CODEC_LJPG, AV_CODEC_ID_LJPEG }, |
61 | | { VLC_CODEC_SP5X, AV_CODEC_ID_SP5X }, |
62 | | { VLC_CODEC_JPEGLS, AV_CODEC_ID_JPEGLS }, |
63 | | { VLC_CODEC_MP4V, AV_CODEC_ID_MPEG4 }, |
64 | | { VLC_CODEC_RGB24, AV_CODEC_ID_RAWVIDEO }, |
65 | | { VLC_CODEC_BGR24, AV_CODEC_ID_RAWVIDEO }, |
66 | | { VLC_CODEC_RGB332, AV_CODEC_ID_RAWVIDEO }, |
67 | | { VLC_CODEC_RGB233, AV_CODEC_ID_RAWVIDEO }, |
68 | | { VLC_CODEC_BGR233, AV_CODEC_ID_RAWVIDEO }, |
69 | | { VLC_CODEC_RGBA, AV_CODEC_ID_RAWVIDEO }, |
70 | | { VLC_CODEC_ARGB, AV_CODEC_ID_RAWVIDEO }, |
71 | | { VLC_CODEC_ABGR, AV_CODEC_ID_RAWVIDEO }, |
72 | | { VLC_CODEC_RGBX, AV_CODEC_ID_RAWVIDEO }, |
73 | | { VLC_CODEC_XRGB, AV_CODEC_ID_RAWVIDEO }, |
74 | | { VLC_CODEC_XBGR, AV_CODEC_ID_RAWVIDEO }, |
75 | | { VLC_CODEC_BGRX, AV_CODEC_ID_RAWVIDEO }, |
76 | | { VLC_CODEC_RGB565BE, AV_CODEC_ID_RAWVIDEO }, |
77 | | { VLC_CODEC_RGB565LE, AV_CODEC_ID_RAWVIDEO }, |
78 | | { VLC_CODEC_BGR565BE, AV_CODEC_ID_RAWVIDEO }, |
79 | | { VLC_CODEC_BGR565LE, AV_CODEC_ID_RAWVIDEO }, |
80 | | { VLC_CODEC_DIV1, AV_CODEC_ID_MSMPEG4V1 }, |
81 | | { VLC_CODEC_DIV2, AV_CODEC_ID_MSMPEG4V2 }, |
82 | | { VLC_CODEC_DIV3, AV_CODEC_ID_MSMPEG4V3 }, |
83 | | { VLC_CODEC_WMV1, AV_CODEC_ID_WMV1 }, |
84 | | { VLC_CODEC_WMV2, AV_CODEC_ID_WMV2 }, |
85 | | { VLC_CODEC_H263P, AV_CODEC_ID_H263P }, |
86 | | { VLC_CODEC_H263I, AV_CODEC_ID_H263I }, |
87 | | { VLC_CODEC_FLV1, AV_CODEC_ID_FLV1 }, |
88 | | { VLC_CODEC_SVQ1, AV_CODEC_ID_SVQ1 }, |
89 | | { VLC_CODEC_SVQ3, AV_CODEC_ID_SVQ3 }, |
90 | | { VLC_CODEC_DV, AV_CODEC_ID_DVVIDEO }, |
91 | | { VLC_CODEC_HUFFYUV, AV_CODEC_ID_HUFFYUV }, |
92 | | { VLC_CODEC_CYUV, AV_CODEC_ID_CYUV }, |
93 | | { VLC_CODEC_H264, AV_CODEC_ID_H264 }, |
94 | | { VLC_CODEC_INDEO3, AV_CODEC_ID_INDEO3 }, |
95 | | { VLC_CODEC_VP3, AV_CODEC_ID_VP3 }, |
96 | | { VLC_CODEC_THEORA, AV_CODEC_ID_THEORA }, |
97 | | #if ( !defined( WORDS_BIGENDIAN ) ) |
98 | | /* Asus Video (Another thing that doesn't work on PPC) */ |
99 | | { VLC_CODEC_ASV1, AV_CODEC_ID_ASV1 }, |
100 | | { VLC_CODEC_ASV2, AV_CODEC_ID_ASV2 }, |
101 | | #endif |
102 | | { VLC_CODEC_FFV1, AV_CODEC_ID_FFV1 }, |
103 | | { VLC_CODEC_4XM, AV_CODEC_ID_4XM }, |
104 | | { VLC_CODEC_VCR1, AV_CODEC_ID_VCR1 }, |
105 | | { VLC_CODEC_CLJR, AV_CODEC_ID_CLJR }, |
106 | | { VLC_CODEC_MDEC, AV_CODEC_ID_MDEC }, |
107 | | { VLC_CODEC_ROQ, AV_CODEC_ID_ROQ }, |
108 | | { VLC_CODEC_INTERPLAY, AV_CODEC_ID_INTERPLAY_VIDEO }, |
109 | | { VLC_CODEC_XAN_WC3, AV_CODEC_ID_XAN_WC3 }, |
110 | | { VLC_CODEC_XAN_WC4, AV_CODEC_ID_XAN_WC4 }, |
111 | | { VLC_CODEC_RPZA, AV_CODEC_ID_RPZA }, |
112 | | { VLC_CODEC_CINEPAK, AV_CODEC_ID_CINEPAK }, |
113 | | { VLC_CODEC_WS_VQA, AV_CODEC_ID_WS_VQA }, |
114 | | { VLC_CODEC_MSRLE, AV_CODEC_ID_MSRLE }, |
115 | | { VLC_CODEC_MSVIDEO1, AV_CODEC_ID_MSVIDEO1 }, |
116 | | { VLC_CODEC_IDCIN, AV_CODEC_ID_IDCIN }, |
117 | | { VLC_CODEC_8BPS, AV_CODEC_ID_8BPS }, |
118 | | { VLC_CODEC_SMC, AV_CODEC_ID_SMC }, |
119 | | { VLC_CODEC_FLIC, AV_CODEC_ID_FLIC }, |
120 | | { VLC_CODEC_TRUEMOTION1, AV_CODEC_ID_TRUEMOTION1 }, |
121 | | { VLC_CODEC_VMDVIDEO, AV_CODEC_ID_VMDVIDEO }, |
122 | | { VLC_CODEC_LCL_MSZH, AV_CODEC_ID_MSZH }, |
123 | | { VLC_CODEC_LCL_ZLIB, AV_CODEC_ID_ZLIB }, |
124 | | { VLC_CODEC_QTRLE, AV_CODEC_ID_QTRLE }, |
125 | | #if LIBAVCODEC_VERSION_CHECK(59, 33, 100) |
126 | | { VLC_CODEC_QOI, AV_CODEC_ID_QOI }, |
127 | | #endif |
128 | | { VLC_CODEC_TSCC, AV_CODEC_ID_TSCC }, |
129 | | { VLC_CODEC_ULTI, AV_CODEC_ID_ULTI }, |
130 | | { VLC_CODEC_QDRAW, AV_CODEC_ID_QDRAW }, |
131 | | { VLC_CODEC_VIXL, AV_CODEC_ID_VIXL }, |
132 | | { VLC_CODEC_QPEG, AV_CODEC_ID_QPEG }, |
133 | | { VLC_CODEC_PNG, AV_CODEC_ID_PNG }, |
134 | | { VLC_CODEC_PNM, AV_CODEC_ID_PPM }, |
135 | | { VLC_CODEC_PPM, AV_CODEC_ID_PPM }, |
136 | | /* AV_CODEC_ID_PBM */ |
137 | | { VLC_CODEC_PGM, AV_CODEC_ID_PGM }, |
138 | | { VLC_CODEC_PGMYUV, AV_CODEC_ID_PGMYUV }, |
139 | | { VLC_CODEC_PAM, AV_CODEC_ID_PAM }, |
140 | | { VLC_CODEC_FFVHUFF, AV_CODEC_ID_FFVHUFF }, |
141 | | { VLC_CODEC_RV30, AV_CODEC_ID_RV30 }, |
142 | | { VLC_CODEC_RV40, AV_CODEC_ID_RV40 }, |
143 | | { VLC_CODEC_VC1, AV_CODEC_ID_VC1 }, |
144 | | { VLC_CODEC_WMVA, AV_CODEC_ID_VC1 }, |
145 | | { VLC_CODEC_WMV3, AV_CODEC_ID_WMV3 }, |
146 | | { VLC_CODEC_WMVP, AV_CODEC_ID_WMV3 }, |
147 | | { VLC_CODEC_LOCO, AV_CODEC_ID_LOCO }, |
148 | | { VLC_CODEC_WNV1, AV_CODEC_ID_WNV1 }, |
149 | | { VLC_CODEC_AASC, AV_CODEC_ID_AASC }, |
150 | | { VLC_CODEC_INDEO2, AV_CODEC_ID_INDEO2 }, |
151 | | { VLC_CODEC_FRAPS, AV_CODEC_ID_FRAPS }, |
152 | | { VLC_CODEC_TRUEMOTION2, AV_CODEC_ID_TRUEMOTION2 }, |
153 | | { VLC_CODEC_BMP, AV_CODEC_ID_BMP }, |
154 | | { VLC_CODEC_CSCD, AV_CODEC_ID_CSCD }, |
155 | | { VLC_CODEC_MMVIDEO, AV_CODEC_ID_MMVIDEO }, |
156 | | { VLC_CODEC_ZMBV, AV_CODEC_ID_ZMBV }, |
157 | | { VLC_CODEC_AVS, AV_CODEC_ID_AVS }, |
158 | | { VLC_CODEC_SMACKVIDEO, AV_CODEC_ID_SMACKVIDEO }, |
159 | | { VLC_CODEC_NUV, AV_CODEC_ID_NUV }, |
160 | | { VLC_CODEC_KMVC, AV_CODEC_ID_KMVC }, |
161 | | { VLC_CODEC_FLASHSV, AV_CODEC_ID_FLASHSV }, |
162 | | { VLC_CODEC_CAVS, AV_CODEC_ID_CAVS }, |
163 | | { VLC_CODEC_CAVS2, AV_CODEC_ID_AVS2 }, |
164 | | { VLC_CODEC_CAVS3, AV_CODEC_ID_AVS3 }, |
165 | | { VLC_CODEC_JPEG2000, AV_CODEC_ID_JPEG2000 }, |
166 | | { VLC_CODEC_VMNC, AV_CODEC_ID_VMNC }, |
167 | | { VLC_CODEC_VP5, AV_CODEC_ID_VP5 }, |
168 | | { VLC_CODEC_VP6, AV_CODEC_ID_VP6 }, |
169 | | { VLC_CODEC_VP6F, AV_CODEC_ID_VP6F }, |
170 | | { VLC_CODEC_TARGA, AV_CODEC_ID_TARGA }, |
171 | | { VLC_CODEC_DSICINVIDEO, AV_CODEC_ID_DSICINVIDEO }, |
172 | | { VLC_CODEC_TIERTEXSEQVIDEO, AV_CODEC_ID_TIERTEXSEQVIDEO }, |
173 | | { VLC_CODEC_TIFF, AV_CODEC_ID_TIFF }, |
174 | | { VLC_CODEC_GIF, AV_CODEC_ID_GIF }, |
175 | | { VLC_CODEC_DXA, AV_CODEC_ID_DXA }, |
176 | | { VLC_CODEC_DNXHD, AV_CODEC_ID_DNXHD }, |
177 | | { VLC_CODEC_THP, AV_CODEC_ID_THP }, |
178 | | { VLC_CODEC_SGI, AV_CODEC_ID_SGI }, |
179 | | { VLC_CODEC_C93, AV_CODEC_ID_C93 }, |
180 | | { VLC_CODEC_BETHSOFTVID, AV_CODEC_ID_BETHSOFTVID }, |
181 | | /* AV_CODEC_ID_PTX */ |
182 | | { VLC_CODEC_TXD, AV_CODEC_ID_TXD }, |
183 | | { VLC_CODEC_VP6A, AV_CODEC_ID_VP6A }, |
184 | | { VLC_CODEC_AMV, AV_CODEC_ID_AMV }, |
185 | | { VLC_CODEC_VB, AV_CODEC_ID_VB }, |
186 | | { VLC_CODEC_PCX, AV_CODEC_ID_PCX }, |
187 | | /* AV_CODEC_ID_SUNRAST */ |
188 | | { VLC_CODEC_INDEO4, AV_CODEC_ID_INDEO4 }, |
189 | | { VLC_CODEC_INDEO5, AV_CODEC_ID_INDEO5 }, |
190 | | { VLC_CODEC_MIMIC, AV_CODEC_ID_MIMIC }, |
191 | | { VLC_CODEC_RL2, AV_CODEC_ID_RL2 }, |
192 | | { VLC_CODEC_ESCAPE124, AV_CODEC_ID_ESCAPE124 }, |
193 | | { VLC_CODEC_DIRAC, AV_CODEC_ID_DIRAC }, |
194 | | { VLC_CODEC_BFI, AV_CODEC_ID_BFI }, |
195 | | { VLC_CODEC_CMV, AV_CODEC_ID_CMV }, |
196 | | { VLC_CODEC_MOTIONPIXELS, AV_CODEC_ID_MOTIONPIXELS }, |
197 | | { VLC_CODEC_TGV, AV_CODEC_ID_TGV }, |
198 | | { VLC_CODEC_TGQ, AV_CODEC_ID_TGQ }, |
199 | | { VLC_CODEC_TQI, AV_CODEC_ID_TQI }, |
200 | | { VLC_CODEC_AURA, AV_CODEC_ID_AURA }, |
201 | | /* AV_CODEC_ID_AURA2 */ |
202 | | /* AV_CODEC_ID_V210X */ |
203 | | { VLC_CODEC_TMV, AV_CODEC_ID_TMV }, |
204 | | { VLC_CODEC_V210, AV_CODEC_ID_V210 }, |
205 | | #if LIBAVCODEC_VERSION_CHECK( 59, 42, 102 ) |
206 | | { VLC_CODEC_VUYA, AV_CODEC_ID_RAWVIDEO }, |
207 | | #else |
208 | | { VLC_CODEC_VUYA, AV_CODEC_ID_AYUV }, |
209 | | #endif |
210 | | /* AV_CODEC_ID_DPX */ |
211 | | { VLC_CODEC_MAD, AV_CODEC_ID_MAD }, |
212 | | { VLC_CODEC_FRWU, AV_CODEC_ID_FRWU }, |
213 | | { VLC_CODEC_FLASHSV2, AV_CODEC_ID_FLASHSV2 }, |
214 | | /* AV_CODEC_ID_CDGRAPHICS */ |
215 | | /* AV_CODEC_ID_R210 */ |
216 | | { VLC_CODEC_ANM, AV_CODEC_ID_ANM }, |
217 | | { VLC_CODEC_BINKVIDEO, AV_CODEC_ID_BINKVIDEO }, |
218 | | /* AV_CODEC_ID_IFF_ILBM */ |
219 | | /* AV_CODEC_ID_IFF_BYTERUN1 */ |
220 | | { VLC_CODEC_KGV1, AV_CODEC_ID_KGV1 }, |
221 | | { VLC_CODEC_YOP, AV_CODEC_ID_YOP }, |
222 | | { VLC_CODEC_VP4, AV_CODEC_ID_VP4 }, |
223 | | { VLC_CODEC_VP8, AV_CODEC_ID_VP8 }, |
224 | | /* AV_CODEC_ID_PICTOR */ |
225 | | /* AV_CODEC_ID_ANSI */ |
226 | | /* AV_CODEC_ID_A64_MULTI */ |
227 | | /* AV_CODEC_ID_A64_MULTI5 */ |
228 | | /* AV_CODEC_ID_R10K */ |
229 | | { VLC_CODEC_MXPEG, AV_CODEC_ID_MXPEG }, |
230 | | { VLC_CODEC_LAGARITH, AV_CODEC_ID_LAGARITH }, |
231 | | { VLC_CODEC_PRORES, AV_CODEC_ID_PRORES }, |
232 | | { VLC_CODEC_JV, AV_CODEC_ID_JV }, |
233 | | { VLC_CODEC_DFA, AV_CODEC_ID_DFA }, |
234 | | { VLC_CODEC_WMVP, AV_CODEC_ID_WMV3IMAGE }, |
235 | | { VLC_CODEC_WMVP2, AV_CODEC_ID_VC1IMAGE }, |
236 | | { VLC_CODEC_UTVIDEO, AV_CODEC_ID_UTVIDEO }, |
237 | | { VLC_CODEC_BMVVIDEO, AV_CODEC_ID_BMV_VIDEO }, |
238 | | { VLC_CODEC_VBLE, AV_CODEC_ID_VBLE }, |
239 | | { VLC_CODEC_DXTORY, AV_CODEC_ID_DXTORY }, |
240 | | { VLC_CODEC_V410, AV_CODEC_ID_V410 }, |
241 | | /* AV_CODEC_ID_XWD */ |
242 | | { VLC_CODEC_CDXL, AV_CODEC_ID_CDXL }, |
243 | | /* AV_CODEC_ID_XBM */ |
244 | | /* AV_CODEC_ID_ZEROCODEC */ |
245 | | { VLC_CODEC_MSS1, AV_CODEC_ID_MSS1 }, |
246 | | { VLC_CODEC_MSA1, AV_CODEC_ID_MSA1 }, |
247 | | { VLC_CODEC_TSC2, AV_CODEC_ID_TSCC2 }, |
248 | | { VLC_CODEC_MTS2, AV_CODEC_ID_MTS2 }, |
249 | | { VLC_CODEC_CLLC, AV_CODEC_ID_CLLC }, |
250 | | { VLC_CODEC_MSS2, AV_CODEC_ID_MSS2 }, |
251 | | { VLC_CODEC_VP9, AV_CODEC_ID_VP9 }, |
252 | | { VLC_CODEC_VP9ALPHA_ES, AV_CODEC_ID_VP9 }, |
253 | | { VLC_CODEC_AV1, AV_CODEC_ID_AV1 }, |
254 | | { VLC_CODEC_ICOD, AV_CODEC_ID_AIC }, |
255 | | /* AV_CODEC_ID_ESCAPE130 */ |
256 | | { VLC_CODEC_G2M4, AV_CODEC_ID_G2M }, |
257 | | { VLC_CODEC_G2M2, AV_CODEC_ID_G2M }, |
258 | | { VLC_CODEC_G2M3, AV_CODEC_ID_G2M }, |
259 | | /* AV_CODEC_ID_WEBP */ |
260 | | { VLC_CODEC_HNM4_VIDEO, AV_CODEC_ID_HNM4_VIDEO }, |
261 | | { VLC_CODEC_HEVC, AV_CODEC_ID_HEVC }, |
262 | | |
263 | | { VLC_CODEC_FIC , AV_CODEC_ID_FIC }, |
264 | | /* AV_CODEC_ID_ALIAS_PIX */ |
265 | | /* AV_CODEC_ID_BRENDER_PIX */ |
266 | | /* AV_CODEC_ID_PAF_VIDEO */ |
267 | | /* AV_CODEC_ID_EXR */ |
268 | | |
269 | | { VLC_CODEC_VP7 , AV_CODEC_ID_VP7 }, |
270 | | /* AV_CODEC_ID_SANM */ |
271 | | /* AV_CODEC_ID_SGIRLE */ |
272 | | /* AV_CODEC_ID_MVC1 */ |
273 | | /* AV_CODEC_ID_MVC2 */ |
274 | | { VLC_CODEC_HQX, AV_CODEC_ID_HQX }, |
275 | | |
276 | | { VLC_CODEC_TDSC, AV_CODEC_ID_TDSC }, |
277 | | |
278 | | { VLC_CODEC_HQ_HQA, AV_CODEC_ID_HQ_HQA }, |
279 | | |
280 | | { VLC_CODEC_HAP, AV_CODEC_ID_HAP }, |
281 | | /* AV_CODEC_ID_DDS */ |
282 | | |
283 | | { VLC_CODEC_DXV, AV_CODEC_ID_DXV }, |
284 | | |
285 | | #if LIBAVCODEC_VERSION_CHECK( 61, 03, 100 ) |
286 | | { VLC_CODEC_VVC, AV_CODEC_ID_VVC }, |
287 | | #endif |
288 | | /* ffmpeg only: AV_CODEC_ID_BRENDER_PIX */ |
289 | | /* ffmpeg only: AV_CODEC_ID_Y41P */ |
290 | | /* ffmpeg only: AV_CODEC_ID_EXR */ |
291 | | /* ffmpeg only: AV_CODEC_ID_AVRP */ |
292 | | /* ffmpeg only: AV_CODEC_ID_012V */ |
293 | | /* ffmpeg only: AV_CODEC_ID_AVUI */ |
294 | | /* ffmpeg only: AV_CODEC_ID_TARGA_Y216 */ |
295 | | |
296 | | { VLC_CODEC_V308, AV_CODEC_ID_V308 }, |
297 | | { VLC_CODEC_V408, AV_CODEC_ID_V408 }, |
298 | | { VLC_CODEC_YUV4, AV_CODEC_ID_YUV4 }, |
299 | | |
300 | | /* ffmpeg only: AV_CODEC_ID_SANM */ |
301 | | /* ffmpeg only: AV_CODEC_ID_PAF_VIDEO */ |
302 | | /* ffmpeg only: AV_CODEC_ID_AVRN */ |
303 | | /* ffmpeg only: AV_CODEC_ID_CPIA */ |
304 | | /* ffmpeg only: AV_CODEC_ID_XFACE */ |
305 | | /* ffmpeg only: AV_CODEC_ID_SGIRLE */ |
306 | | /* ffmpeg only: AV_CODEC_ID_MVC1 */ |
307 | | /* ffmpeg only: AV_CODEC_ID_MVC2 */ |
308 | | /* ffmpeg only: AV_CODEC_ID_SNOW */ |
309 | | /* ffmpeg only: AV_CODEC_ID_SMVJPEG */ |
310 | | |
311 | | { VLC_CODEC_MAGICYUV, AV_CODEC_ID_MAGICYUV }, |
312 | | |
313 | | { VLC_CODEC_CINEFORM, AV_CODEC_ID_CFHD }, |
314 | | |
315 | | { VLC_CODEC_PIXLET, AV_CODEC_ID_PIXLET }, |
316 | | |
317 | | { VLC_CODEC_SPEEDHQ, AV_CODEC_ID_SPEEDHQ }, |
318 | | |
319 | | { VLC_CODEC_FMVC, AV_CODEC_ID_FMVC }, |
320 | | |
321 | | { VLC_CODEC_IMM4, AV_CODEC_ID_IMM4 }, |
322 | | |
323 | | { VLC_CODEC_AGM, AV_CODEC_ID_AGM }, |
324 | | |
325 | | { VLC_CODEC_IMM5, AV_CODEC_ID_IMM5 }, |
326 | | |
327 | | { VLC_CODEC_NOTCHLC, AV_CODEC_ID_NOTCHLC }, |
328 | | |
329 | | #if LIBAVCODEC_VERSION_CHECK( 62, 1, 100 ) |
330 | | { VLC_CODEC_APV, AV_CODEC_ID_APV }, |
331 | | #endif |
332 | | |
333 | | }; |
334 | | |
335 | | /* |
336 | | * Audio Codecs |
337 | | */ |
338 | | static const struct vlc_avcodec_fourcc audio_codecs[] = |
339 | | { |
340 | | /* PCM */ |
341 | | { VLC_CODEC_S16L, AV_CODEC_ID_PCM_S16LE }, |
342 | | { VLC_CODEC_S16B, AV_CODEC_ID_PCM_S16BE }, |
343 | | { VLC_CODEC_U16L, AV_CODEC_ID_PCM_U16LE }, |
344 | | { VLC_CODEC_U16B, AV_CODEC_ID_PCM_U16BE }, |
345 | | { VLC_CODEC_S8, AV_CODEC_ID_PCM_S8 }, |
346 | | { VLC_CODEC_U8, AV_CODEC_ID_PCM_U8 }, |
347 | | { VLC_CODEC_MULAW, AV_CODEC_ID_PCM_MULAW }, |
348 | | { VLC_CODEC_ALAW, AV_CODEC_ID_PCM_ALAW }, |
349 | | { VLC_CODEC_S32L, AV_CODEC_ID_PCM_S32LE }, |
350 | | { VLC_CODEC_S32B, AV_CODEC_ID_PCM_S32BE }, |
351 | | { VLC_CODEC_U32L, AV_CODEC_ID_PCM_U32LE }, |
352 | | { VLC_CODEC_U32B, AV_CODEC_ID_PCM_U32BE }, |
353 | | { VLC_CODEC_S24L, AV_CODEC_ID_PCM_S24LE }, |
354 | | { VLC_CODEC_S24B, AV_CODEC_ID_PCM_S24BE }, |
355 | | { VLC_CODEC_U24L, AV_CODEC_ID_PCM_U24LE }, |
356 | | { VLC_CODEC_U24B, AV_CODEC_ID_PCM_U24BE }, |
357 | | { VLC_CODEC_S24DAUD, AV_CODEC_ID_PCM_S24DAUD }, |
358 | | /* AV_CODEC_ID_PCM_ZORK */ |
359 | | { VLC_CODEC_S16L_PLANAR, AV_CODEC_ID_PCM_S16LE_PLANAR }, |
360 | | /* AV_CODEC_ID_PCM_DVD */ |
361 | | { VLC_CODEC_F32B, AV_CODEC_ID_PCM_F32BE }, |
362 | | { VLC_CODEC_F32L, AV_CODEC_ID_PCM_F32LE }, |
363 | | { VLC_CODEC_F64B, AV_CODEC_ID_PCM_F64BE }, |
364 | | { VLC_CODEC_F64L, AV_CODEC_ID_PCM_F64LE }, |
365 | | { VLC_CODEC_BD_LPCM, AV_CODEC_ID_PCM_BLURAY }, |
366 | | /* AV_CODEC_ID_PCM_LXF */ |
367 | | /* AV_CODEC_ID_S302M */ |
368 | | /* AV_CODEC_ID_PCM_S8_PLANAR */ |
369 | | /* AV_CODEC_ID_PCM_S24LE_PLANAR */ |
370 | | /* AV_CODEC_ID_PCM_S32LE_PLANAR */ |
371 | | /* ffmpeg only: AV_CODEC_ID_PCM_S16BE_PLANAR */ |
372 | | |
373 | | /* ADPCM */ |
374 | | { VLC_CODEC_ADPCM_IMA_QT, AV_CODEC_ID_ADPCM_IMA_QT }, |
375 | | { VLC_CODEC_ADPCM_IMA_WAV, AV_CODEC_ID_ADPCM_IMA_WAV }, |
376 | | /* AV_CODEC_ID_ADPCM_IMA_DK3 */ |
377 | | /* AV_CODEC_ID_ADPCM_IMA_DK4 */ |
378 | | { VLC_CODEC_ADPCM_IMA_WS, AV_CODEC_ID_ADPCM_IMA_WS }, |
379 | | /* AV_CODEC_ID_ADPCM_IMA_SMJPEG */ |
380 | | { VLC_CODEC_ADPCM_MS, AV_CODEC_ID_ADPCM_MS }, |
381 | | { VLC_CODEC_ADPCM_4XM, AV_CODEC_ID_ADPCM_4XM }, |
382 | | { VLC_CODEC_ADPCM_XA, AV_CODEC_ID_ADPCM_XA }, |
383 | | { VLC_CODEC_ADPCM_ADX, AV_CODEC_ID_ADPCM_ADX }, |
384 | | { VLC_CODEC_ADPCM_EA, AV_CODEC_ID_ADPCM_EA }, |
385 | | { VLC_CODEC_ADPCM_G726, AV_CODEC_ID_ADPCM_G726 }, |
386 | | { VLC_CODEC_ADPCM_G726_LE, AV_CODEC_ID_ADPCM_G726LE }, |
387 | | { VLC_CODEC_ADPCM_CREATIVE, AV_CODEC_ID_ADPCM_CT }, |
388 | | { VLC_CODEC_ADPCM_SWF, AV_CODEC_ID_ADPCM_SWF }, |
389 | | { VLC_CODEC_ADPCM_YAMAHA, AV_CODEC_ID_ADPCM_YAMAHA }, |
390 | | { VLC_CODEC_ADPCM_SBPRO_4, AV_CODEC_ID_ADPCM_SBPRO_4 }, |
391 | | { VLC_CODEC_ADPCM_SBPRO_3, AV_CODEC_ID_ADPCM_SBPRO_3 }, |
392 | | { VLC_CODEC_ADPCM_SBPRO_2, AV_CODEC_ID_ADPCM_SBPRO_2 }, |
393 | | { VLC_CODEC_ADPCM_THP, AV_CODEC_ID_ADPCM_THP }, |
394 | | { VLC_CODEC_ADPCM_IMA_AMV, AV_CODEC_ID_ADPCM_IMA_AMV }, |
395 | | { VLC_CODEC_ADPCM_EA_R1, AV_CODEC_ID_ADPCM_EA_R1 }, |
396 | | { VLC_CODEC_ADPCM_EA_R3, AV_CODEC_ID_ADPCM_EA_R3 }, |
397 | | /* AV_CODEC_ID_ADPCM_EA_R2 */ |
398 | | { VLC_CODEC_ADPCM_IMA_EA_SEAD, AV_CODEC_ID_ADPCM_IMA_EA_SEAD }, |
399 | | /* AV_CODEC_ID_ADPCM_IMA_EA_EACS */ |
400 | | /* AV_CODEC_ID_ADPCM_EA_XAS */ |
401 | | /* AV_CODEC_ID_ADPCM_EA_MAXIS_XA */ |
402 | | /* AV_CODEC_ID_ADPCM_IMA_ISS */ |
403 | | { VLC_CODEC_ADPCM_G722, AV_CODEC_ID_ADPCM_G722 }, |
404 | | { VLC_CODEC_ADPCM_IMA_APC, AV_CODEC_ID_ADPCM_IMA_APC }, |
405 | | /* ffmpeg only: AV_CODEC_ID_VIMA */ |
406 | | /* ffmpeg only: AV_CODEC_ID_ADPCM_AFC */ |
407 | | /* ffmpeg only: AV_CODEC_ID_ADPCM_IMA_OKI */ |
408 | | /* ffmpeg only: AV_CODEC_ID_ADPCM_DTK */ |
409 | | /* ffmpeg only: AV_CODEC_ID_ADPCM_IMA_RAD */ |
410 | | /* ffmpeg only: AV_CODEC_ID_ADPCM_G726LE */ |
411 | | |
412 | | /* AMR */ |
413 | | { VLC_CODEC_AMR_NB, AV_CODEC_ID_AMR_NB }, |
414 | | { VLC_CODEC_AMR_WB, AV_CODEC_ID_AMR_WB }, |
415 | | |
416 | | /* RealAudio */ |
417 | | { VLC_CODEC_RA_144, AV_CODEC_ID_RA_144 }, |
418 | | { VLC_CODEC_RA_288, AV_CODEC_ID_RA_288 }, |
419 | | |
420 | | /* DPCM */ |
421 | | { VLC_CODEC_ROQ_DPCM, AV_CODEC_ID_ROQ_DPCM }, |
422 | | { VLC_CODEC_INTERPLAY_DPCM, AV_CODEC_ID_INTERPLAY_DPCM }, |
423 | | /* AV_CODEC_ID_XAN_DPCM */ |
424 | | /* AV_CODEC_ID_SOL_DPCM */ |
425 | | |
426 | | /* audio codecs */ |
427 | | { VLC_CODEC_MPGA, AV_CODEC_ID_MP2 }, |
428 | | { VLC_CODEC_MP2, AV_CODEC_ID_MP2 }, |
429 | | { VLC_CODEC_MP3, AV_CODEC_ID_MP3 }, |
430 | | { VLC_CODEC_MP4A, AV_CODEC_ID_AAC }, |
431 | | { VLC_CODEC_A52, AV_CODEC_ID_AC3 }, |
432 | | { VLC_CODEC_DTS, AV_CODEC_ID_DTS }, |
433 | | { VLC_CODEC_VORBIS, AV_CODEC_ID_VORBIS }, |
434 | | { VLC_CODEC_DVAUDIO, AV_CODEC_ID_DVAUDIO }, |
435 | | { VLC_CODEC_WMA1, AV_CODEC_ID_WMAV1 }, |
436 | | { VLC_CODEC_WMA2, AV_CODEC_ID_WMAV2 }, |
437 | | { VLC_CODEC_MACE3, AV_CODEC_ID_MACE3 }, |
438 | | { VLC_CODEC_MACE6, AV_CODEC_ID_MACE6 }, |
439 | | { VLC_CODEC_VMDAUDIO, AV_CODEC_ID_VMDAUDIO }, |
440 | | { VLC_CODEC_FLAC, AV_CODEC_ID_FLAC }, |
441 | | /* AV_CODEC_ID_MP3ADU */ |
442 | | /* AV_CODEC_ID_MP3ON4 */ |
443 | | { VLC_CODEC_SHORTEN, AV_CODEC_ID_SHORTEN }, |
444 | | { VLC_CODEC_ALAC, AV_CODEC_ID_ALAC }, |
445 | | /* AV_CODEC_ID_WESTWOOD_SND1 */ |
446 | | { VLC_CODEC_GSM, AV_CODEC_ID_GSM }, |
447 | | { VLC_CODEC_QDM2, AV_CODEC_ID_QDM2 }, |
448 | | { VLC_CODEC_QDMC, AV_CODEC_ID_QDMC }, |
449 | | #if LIBAVCODEC_VERSION_CHECK(60, 35, 100) |
450 | | { VLC_CODEC_QOA, AV_CODEC_ID_QOA }, |
451 | | #endif |
452 | | { VLC_CODEC_COOK, AV_CODEC_ID_COOK }, |
453 | | { VLC_CODEC_TRUESPEECH, AV_CODEC_ID_TRUESPEECH }, |
454 | | { VLC_CODEC_TTA, AV_CODEC_ID_TTA }, |
455 | | { VLC_CODEC_SMACKAUDIO, AV_CODEC_ID_SMACKAUDIO }, |
456 | | { VLC_CODEC_QCELP, AV_CODEC_ID_QCELP }, |
457 | | { VLC_CODEC_WAVPACK, AV_CODEC_ID_WAVPACK }, |
458 | | { VLC_CODEC_DSICINAUDIO, AV_CODEC_ID_DSICINAUDIO }, |
459 | | { VLC_CODEC_IMC, AV_CODEC_ID_IMC }, |
460 | | { VLC_CODEC_MUSEPACK7, AV_CODEC_ID_MUSEPACK7 }, |
461 | | { VLC_CODEC_MLP, AV_CODEC_ID_MLP }, |
462 | | { VLC_CODEC_GSM_MS, AV_CODEC_ID_GSM_MS }, |
463 | | { VLC_CODEC_ATRAC3, AV_CODEC_ID_ATRAC3 }, |
464 | | { VLC_CODEC_APE, AV_CODEC_ID_APE }, |
465 | | { VLC_CODEC_NELLYMOSER, AV_CODEC_ID_NELLYMOSER }, |
466 | | { VLC_CODEC_MUSEPACK8, AV_CODEC_ID_MUSEPACK8 }, |
467 | | { VLC_CODEC_SPEEX, AV_CODEC_ID_SPEEX }, |
468 | | { VLC_CODEC_CODEC2, AV_CODEC_ID_CODEC2 }, |
469 | | { VLC_CODEC_WMAS, AV_CODEC_ID_WMAVOICE }, |
470 | | { VLC_CODEC_WMAP, AV_CODEC_ID_WMAPRO }, |
471 | | { VLC_CODEC_WMAL, AV_CODEC_ID_WMALOSSLESS }, |
472 | | { VLC_CODEC_ATRAC3P, AV_CODEC_ID_ATRAC3P }, |
473 | | { VLC_CODEC_EAC3, AV_CODEC_ID_EAC3 }, |
474 | | { VLC_CODEC_SIPR, AV_CODEC_ID_SIPR }, |
475 | | /* AV_CODEC_ID_MP1 */ |
476 | | { VLC_CODEC_TWINVQ, AV_CODEC_ID_TWINVQ }, |
477 | | { VLC_CODEC_TRUEHD, AV_CODEC_ID_TRUEHD }, |
478 | | { VLC_CODEC_ALS, AV_CODEC_ID_MP4ALS }, |
479 | | { VLC_CODEC_ATRAC1, AV_CODEC_ID_ATRAC1 }, |
480 | | { VLC_CODEC_ATRAC3AL, AV_CODEC_ID_ATRAC3AL }, |
481 | | { VLC_CODEC_ATRAC3PAL, AV_CODEC_ID_ATRAC3PAL }, |
482 | | { VLC_CODEC_ATRAC9, AV_CODEC_ID_ATRAC9 }, |
483 | | { VLC_CODEC_BINKAUDIO_RDFT, AV_CODEC_ID_BINKAUDIO_RDFT }, |
484 | | { VLC_CODEC_BINKAUDIO_DCT, AV_CODEC_ID_BINKAUDIO_DCT }, |
485 | | { VLC_CODEC_MP4A, AV_CODEC_ID_AAC_LATM }, |
486 | | /* AV_CODEC_ID_QDMC */ |
487 | | /* AV_CODEC_ID_CELT */ |
488 | | { VLC_CODEC_G723_1, AV_CODEC_ID_G723_1 }, |
489 | | /* AV_CODEC_ID_G729 */ |
490 | | /* AV_CODEC_ID_8SVX_EXP */ |
491 | | /* AV_CODEC_ID_8SVX_FIB */ |
492 | | { VLC_CODEC_BMVAUDIO, AV_CODEC_ID_BMV_AUDIO }, |
493 | | { VLC_CODEC_RALF, AV_CODEC_ID_RALF }, |
494 | | { VLC_CODEC_INDEO_AUDIO, AV_CODEC_ID_IAC }, |
495 | | /* AV_CODEC_ID_ILBC */ |
496 | | { VLC_CODEC_OPUS, AV_CODEC_ID_OPUS }, |
497 | | /* AV_CODEC_ID_COMFORT_NOISE */ |
498 | | { VLC_CODEC_TAK, AV_CODEC_ID_TAK }, |
499 | | { VLC_CODEC_METASOUND, AV_CODEC_ID_METASOUND }, |
500 | | /* AV_CODEC_ID_PAF_AUDIO */ |
501 | | { VLC_CODEC_ON2AVC, AV_CODEC_ID_ON2AVC }, |
502 | | |
503 | | /* DSD */ |
504 | | { VLC_CODEC_DSD_LSBF, AV_CODEC_ID_DSD_LSBF }, |
505 | | { VLC_CODEC_DSD_MSBF, AV_CODEC_ID_DSD_MSBF }, |
506 | | { VLC_CODEC_DSD_LSBF_PLANAR, AV_CODEC_ID_DSD_LSBF_PLANAR }, |
507 | | { VLC_CODEC_DSD_MSBF_PLANAR, AV_CODEC_ID_DSD_MSBF_PLANAR }, |
508 | | |
509 | | /* ffmpeg only: AV_CODEC_ID_FFWAVESYNTH */ |
510 | | /* ffmpeg only: AV_CODEC_ID_SONIC */ |
511 | | /* ffmpeg only: AV_CODEC_ID_SONIC_LS */ |
512 | | /* ffmpeg only: AV_CODEC_ID_PAF_AUDIO */ |
513 | | /* ffmpeg only: AV_CODEC_ID_EVRC */ |
514 | | /* ffmpeg only: AV_CODEC_ID_SMV */ |
515 | | }; |
516 | | |
517 | | /* Subtitle streams */ |
518 | | static const struct vlc_avcodec_fourcc spu_codecs[] = |
519 | | { |
520 | | { VLC_CODEC_SPU, AV_CODEC_ID_DVD_SUBTITLE }, |
521 | | { VLC_CODEC_DVBS, AV_CODEC_ID_DVB_SUBTITLE }, |
522 | | { VLC_CODEC_SUBT, AV_CODEC_ID_TEXT }, |
523 | | { VLC_CODEC_XSUB, AV_CODEC_ID_XSUB }, |
524 | | { VLC_CODEC_SSA, AV_CODEC_ID_SSA }, |
525 | | { VLC_CODEC_TX3G, AV_CODEC_ID_MOV_TEXT }, |
526 | | { VLC_CODEC_BD_PG, AV_CODEC_ID_HDMV_PGS_SUBTITLE }, |
527 | | { VLC_CODEC_BD_TEXT, AV_CODEC_ID_HDMV_TEXT_SUBTITLE }, |
528 | | { VLC_CODEC_TELETEXT, AV_CODEC_ID_DVB_TELETEXT }, |
529 | | /* AV_CODEC_ID_SRT */ |
530 | | /* ffmpeg only: AV_CODEC_ID_MICRODVD */ |
531 | | /* ffmpeg only: AV_CODEC_ID_EIA_608 */ |
532 | | /* ffmpeg only: AV_CODEC_ID_JACOSUB */ |
533 | | /* ffmpeg only: AV_CODEC_ID_SAMI */ |
534 | | /* ffmpeg only: AV_CODEC_ID_REALTEXT */ |
535 | | /* ffmpeg only: AV_CODEC_ID_SUBVIEWER1 */ |
536 | | /* ffmpeg only: AV_CODEC_ID_SUBVIEWER */ |
537 | | /* ffmpeg only: AV_CODEC_ID_SUBRIP */ |
538 | | /* ffmpeg only: AV_CODEC_ID_WEBVTT */ |
539 | | /* ffmpeg only: AV_CODEC_ID_MPL2 */ |
540 | | /* ffmpeg only: AV_CODEC_ID_VPLAYER */ |
541 | | /* ffmpeg only: AV_CODEC_ID_PJS */ |
542 | | /* ffmpeg only: AV_CODEC_ID_ASS */ |
543 | | }; |
544 | | |
545 | | bool GetFfmpegCodec( const es_format_t *es, |
546 | | enum AVCodecID *pi_ffmpeg_codec, const char **ppsz_name ) |
547 | 879k | { |
548 | 879k | const struct vlc_avcodec_fourcc *base; |
549 | 879k | size_t count; |
550 | | |
551 | 879k | if (es->i_codec == VLC_CODEC_VP8 && es_format_HasVpxAlpha(es)) // contains alpha extradata |
552 | 30 | return false; |
553 | 879k | if (es->i_codec == VLC_CODEC_VP9 && es_format_HasVpxAlpha(es)) // contains alpha extradata |
554 | 1 | return false; |
555 | | |
556 | 879k | switch( es->i_cat ) |
557 | 879k | { |
558 | 183k | case VIDEO_ES: |
559 | 183k | base = video_codecs; |
560 | 183k | count = ARRAY_SIZE(video_codecs); |
561 | 183k | break; |
562 | 674k | case AUDIO_ES: |
563 | 674k | base = audio_codecs; |
564 | 674k | count = ARRAY_SIZE(audio_codecs); |
565 | 674k | break; |
566 | 21.3k | case SPU_ES: |
567 | 21.3k | base = spu_codecs; |
568 | 21.3k | count = ARRAY_SIZE(spu_codecs); |
569 | 21.3k | break; |
570 | 0 | default: |
571 | 0 | base = NULL; |
572 | 0 | count = 0; |
573 | 879k | } |
574 | | |
575 | 879k | vlc_fourcc_t i_fourcc = vlc_fourcc_GetCodec( es->i_cat, es->i_codec ); |
576 | | |
577 | 47.7M | for( size_t i = 0; i < count; i++ ) |
578 | 47.6M | { |
579 | 47.6M | if( base[i].i_fourcc == i_fourcc ) |
580 | 851k | { |
581 | 851k | if( pi_ffmpeg_codec != NULL ) |
582 | 851k | *pi_ffmpeg_codec = base[i].i_codec; |
583 | 851k | if( ppsz_name ) |
584 | 851k | *ppsz_name = vlc_fourcc_GetDescription( es->i_cat, i_fourcc ); |
585 | 851k | return true; |
586 | 851k | } |
587 | 47.6M | } |
588 | 27.5k | return false; |
589 | 879k | } |
590 | | |
591 | | vlc_fourcc_t GetVlcFourcc( enum AVCodecID i_ffmpeg_codec ) |
592 | 0 | { |
593 | 0 | if( i_ffmpeg_codec == AV_CODEC_ID_RAWVIDEO ) |
594 | 0 | return VLC_CODEC_UNKNOWN; |
595 | 0 | for( size_t i = 0; i < ARRAY_SIZE(video_codecs); i++ ) |
596 | 0 | { |
597 | 0 | if( video_codecs[i].i_codec == i_ffmpeg_codec ) |
598 | 0 | return video_codecs[i].i_fourcc; |
599 | 0 | } |
600 | 0 | for( size_t i = 0; i < ARRAY_SIZE(audio_codecs); i++ ) |
601 | 0 | { |
602 | 0 | if( audio_codecs[i].i_codec == i_ffmpeg_codec ) |
603 | 0 | return audio_codecs[i].i_fourcc; |
604 | 0 | } |
605 | 0 | for( size_t i = 0; i < ARRAY_SIZE(spu_codecs); i++ ) |
606 | 0 | { |
607 | 0 | if( spu_codecs[i].i_codec == i_ffmpeg_codec ) |
608 | 0 | return spu_codecs[i].i_fourcc; |
609 | 0 | } |
610 | 0 | return VLC_CODEC_UNKNOWN; |
611 | 0 | } |