33 #ifndef __WEED_COMPAT_H__
34 #define __WEED_COMPAT_H__
43 #define WEED_COMPAT_VERSION 0.13.0
45 #ifdef NEED_FOURCC_COMPAT
47 #ifndef WEED_FOURCC_COMPAT
48 #define WEED_FOURCC_COMPAT
51 #ifndef __WEED_PALETTES_H__
52 #ifdef NEED_LOCAL_WEED
57 #endif // WEED_PALETTES_H
60 #define MK_FOURCC(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d)
64 #define VLC_FOURCC(a, b, c, d) MK_FOURCC(a, b, c, d)
68 #define FOURCC_THEORA (MK_FOURCC('T', 'H', 'R', 'A'))
72 #define FOURCC_VORBIS (MK_FOURCC('V', 'B', 'I', 'S'))
76 #define FOURCC_DIRAC (MK_FOURCC('D', 'R', 'A', 'C'))
80 #define FOURCC_DVR (MK_FOURCC('D', 'V', 'R', ' '))
84 #define FOURCC_UNDEF (MK_FOURCC( 'u', 'n', 'd', 'f' ))
88 static inline int fourccp_to_weedp(
unsigned int fourcc,
int bpp,
int *interlaced,
int *sampling,
89 int *sspace,
int *clamping) {
101 if (interlaced) *interlaced = 0;
107 case MK_FOURCC(
'B',
'G',
'R',
'2'):
108 case MK_FOURCC(
'B',
'G',
'R',
'3'):
109 case MK_FOURCC(
'B',
'G',
'R',
'4'):
115 case MK_FOURCC(
'r',
'a',
'w',
'2'):
117 case MK_FOURCC(
'R',
'G',
'B',
'2'):
118 case MK_FOURCC(
'R',
'G',
'B',
'3'):
119 case MK_FOURCC(
'R',
'G',
'B',
'4'):
124 case MK_FOURCC(
'R',
'G',
'B',
'A'):
127 case MK_FOURCC(
'A',
'R',
'G',
'B'):
133 case MK_FOURCC(
'I',
'U',
'Y',
'B'):
134 if (interlaced) *interlaced = 1;
136 case MK_FOURCC(
'I',
'Y',
'U',
'1'):
137 case MK_FOURCC(
'Y',
'4',
'1',
'1'):
139 case MK_FOURCC(
'I',
'Y',
'U',
'2'):
141 case MK_FOURCC(
'H',
'D',
'Y',
'C'):
145 case MK_FOURCC(
'U',
'Y',
'N',
'V'):
146 case MK_FOURCC(
'U',
'Y',
'V',
'Y'):
147 case MK_FOURCC(
'Y',
'4',
'2',
'2'):
148 case MK_FOURCC(
'c',
'y',
'u',
'v'):
150 case MK_FOURCC(
'Y',
'U',
'Y',
'2'):
151 case MK_FOURCC(
'Y',
'U',
'Y',
'V'):
152 case MK_FOURCC(
'Y',
'U',
'N',
'V'):
154 case MK_FOURCC(
'g',
'r',
'e',
'y'):
156 case MK_FOURCC(
'Y',
'8',
'0',
'0'):
157 case MK_FOURCC(
'Y',
'8',
' ',
' '):
161 case MK_FOURCC(
'Y',
'U',
'V',
'A'):
164 case MK_FOURCC(
'I',
'4',
'4',
'4'):
167 case MK_FOURCC(
'4',
'2',
'2',
'P'):
170 case MK_FOURCC(
'Y',
'V',
'1',
'2'):
172 case MK_FOURCC(
'I',
'4',
'2',
'0'):
173 case MK_FOURCC(
'I',
'Y',
'U',
'V'):
174 case MK_FOURCC(
'Y',
'U',
'1',
'2'):
177 case MK_FOURCC(
'J',
'4',
'2',
'0'):
180 case MK_FOURCC(
'J',
'4',
'2',
'2'):
183 case MK_FOURCC(
'J',
'4',
'4',
'4'):
188 case MK_FOURCC(
'R',
'G',
'B',
'P'):
189 case MK_FOURCC(
'R',
'G',
'B',
'0'):
190 case MK_FOURCC(
'R',
'G',
'B',
'Q'):
191 case MK_FOURCC(
'R',
'G',
'B',
'R'):
193 case MK_FOURCC(
'N',
'V',
'1',
'2'):
194 case MK_FOURCC(
'v',
'2',
'1',
'0'):
196 case MK_FOURCC(
'Y',
'U',
'V',
'9'):
197 case MK_FOURCC(
'I',
'4',
'1',
'0'):
198 case MK_FOURCC(
'Y',
'2',
'1',
'1'):
200 case MK_FOURCC(
'I',
'4',
'1',
'1'):
201 case MK_FOURCC(
'I',
'4',
'4',
'0'):
202 case MK_FOURCC(
'J',
'4',
'4',
'0'):
203 case MK_FOURCC(
'A',
'Y',
'U',
'V'):
212 #endif // NEED_FOURCC
219 #include <libavcodec/avcodec.h>
220 #include <libavutil/pixfmt.h>
222 #ifndef __WEED_PALETTES_H__
223 #ifdef NEED_LOCAL_WEED
230 typedef struct AVCodecTag {
236 #define MKTAG(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
239 #if (LIBAVCODEC_VERSION_MAJOR <= 54)
240 #define AVCodecID CodecID
242 #define AV_CODEC_ID_NONE CODEC_ID_NONE
243 #define AV_CODEC_ID_H264 CODEC_ID_H264
244 #define AV_CODEC_ID_H263 CODEC_ID_H263
245 #define AV_CODEC_ID_H263P CODEC_ID_H263P
246 #define AV_CODEC_ID_H263I CODEC_ID_H263I
247 #define AV_CODEC_ID_H261 CODEC_ID_H261
248 #define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4
249 #define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3
250 #define AV_CODEC_ID_MSMPEG4V2 CODEC_ID_MSMPEG4V2
251 #define AV_CODEC_ID_MSMPEG4V1 CODEC_ID_MSMPEG4V1
252 #define AV_CODEC_ID_WMV1 CODEC_ID_WMV1
253 #define AV_CODEC_ID_WMV2 CODEC_ID_WMV2
254 #define AV_CODEC_ID_DVVIDEO CODEC_ID_DVVIDEO
255 #define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO
256 #define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
257 #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG
258 #define AV_CODEC_ID_LJPEG CODEC_ID_LJPEG
259 #define AV_CODEC_ID_JPEGLS CODEC_ID_JPEGLS
260 #define AV_CODEC_ID_HUFFYUV CODEC_ID_HUFFYUV
261 #define AV_CODEC_ID_FFVHUFF CODEC_ID_FFVHUFF
262 #define AV_CODEC_ID_CYUV CODEC_ID_CYUV
263 #define AV_CODEC_ID_RAWVIDEO CODEC_ID_RAWVIDEO
264 #define AV_CODEC_ID_INDEO2 CODEC_ID_INDEO2
265 #define AV_CODEC_ID_INDEO3 CODEC_ID_INDEO3
266 #define AV_CODEC_ID_INDEO4 CODEC_ID_INDEO4
267 #define AV_CODEC_ID_INDEO5 CODEC_ID_INDEO5
268 #define AV_CODEC_ID_VP3 CODEC_ID_VP3
269 #define AV_CODEC_ID_VP5 CODEC_ID_VP5
270 #define AV_CODEC_ID_VP6 CODEC_ID_VP6
271 #define AV_CODEC_ID_VP6F CODEC_ID_VP6F
272 #define AV_CODEC_ID_VP6A CODEC_ID_VP6A
273 #define AV_CODEC_ID_ASV1 CODEC_ID_ASV1
274 #define AV_CODEC_ID_ASV2 CODEC_ID_ASV2
275 #define AV_CODEC_ID_VCR1 CODEC_ID_VCR1
276 #define AV_CODEC_ID_FFV1 CODEC_ID_FFV1
277 #define AV_CODEC_ID_XAN_WC4 CODEC_ID_XAN_WC4
278 #define AV_CODEC_ID_MIMIC CODEC_ID_MIMIC
279 #define AV_CODEC_ID_MSRLE CODEC_ID_MSRLE
280 #define AV_CODEC_ID_MSVIDEO1 CODEC_ID_MSVIDEO1
281 #define AV_CODEC_ID_CINEPAK CODEC_ID_CINEPAK
282 #define AV_CODEC_ID_TRUEMOTION1 CODEC_ID_TRUEMOTION1
283 #define AV_CODEC_ID_TRUEMOTION2 CODEC_ID_TRUEMOTION2
284 #define AV_CODEC_ID_MSZH CODEC_ID_MSZH
285 #define AV_CODEC_ID_ZLIB CODEC_ID_ZLIB
288 #define AV_CODEC_ID_SNOW CODEC_ID_SNOW
291 #define AV_CODEC_ID_4XM CODEC_ID_4XM
292 #define AV_CODEC_ID_FLV1 CODEC_ID_FLV1
293 #define AV_CODEC_ID_FLASHSV CODEC_ID_FLASHSV
294 #define AV_CODEC_ID_SVQ1 CODEC_ID_SVQ1
295 #define AV_CODEC_ID_TSCC CODEC_ID_TSCC
296 #define AV_CODEC_ID_ULTI CODEC_ID_ULTI
297 #define AV_CODEC_ID_VIXL CODEC_ID_VIXL
298 #define AV_CODEC_ID_QPEG CODEC_ID_QPEG
299 #define AV_CODEC_ID_WMV3 CODEC_ID_WMV3
300 #define AV_CODEC_ID_VC1 CODEC_ID_VC1
301 #define AV_CODEC_ID_LOCO CODEC_ID_LOCO
302 #define AV_CODEC_ID_WNV1 CODEC_ID_WNV1
303 #define AV_CODEC_ID_AASC CODEC_ID_AASC
304 #define AV_CODEC_ID_FRAPS CODEC_ID_FRAPS
305 #define AV_CODEC_ID_THEORA CODEC_ID_THEORA
306 #define AV_CODEC_ID_CSCD CODEC_ID_CSCD
307 #define AV_CODEC_ID_ZMBV CODEC_ID_ZMBV
308 #define AV_CODEC_ID_KMVC CODEC_ID_KMVC
309 #define AV_CODEC_ID_CAVS CODEC_ID_CAVS
310 #define AV_CODEC_ID_JPEG2000 CODEC_ID_JPEG2000
311 #define AV_CODEC_ID_VMNC CODEC_ID_VMNC
312 #define AV_CODEC_ID_TARGA CODEC_ID_TARGA
313 #define AV_CODEC_ID_PNG CODEC_ID_PNG
314 #define AV_CODEC_ID_GIF CODEC_ID_GIF
315 #define AV_CODEC_ID_TIFF CODEC_ID_TIFF
316 #define AV_CODEC_ID_CLJR CODEC_ID_CLJR
317 #define AV_CODEC_ID_DIRAC CODEC_ID_DIRAC
318 #define AV_CODEC_ID_RPZA CODEC_ID_RPZA
319 #define AV_CODEC_ID_SP5X CODEC_ID_SP5X
321 #define AV_CODEC_ID_FLASHSV2 CODEC_ID_FLASHSV2
322 #define AV_CODEC_ID_TEXT CODEC_ID_TEXT
323 #define AV_CODEC_ID_SSA CODEC_ID_SSA
324 #define AV_CODEC_ID_SRT CODEC_ID_SRT
325 #define AV_CODEC_ID_VP8 CODEC_ID_VP8
326 #define AV_CODEC_ID_RV10 CODEC_ID_RV10
327 #define AV_CODEC_ID_RV20 CODEC_ID_RV20
328 #define AV_CODEC_ID_RV30 CODEC_ID_RV30
329 #define AV_CODEC_ID_RV40 CODEC_ID_RV40
330 #define AV_CODEC_ID_MP3 CODEC_ID_MP3
331 #define AV_CODEC_ID_MP2 CODEC_ID_MP2
332 #define AV_CODEC_ID_AAC CODEC_ID_AAC
333 #define AV_CODEC_ID_PCM_BLURAY CODEC_ID_PCM_BLURAY
334 #define AV_CODEC_ID_AC3 CODEC_ID_AC3
335 #define AV_CODEC_ID_VORBIS CODEC_ID_VORBIS
336 #define AV_CODEC_ID_EAC3 CODEC_ID_EAC3
337 #define AV_CODEC_ID_DTS CODEC_ID_DTS
338 #define AV_CODEC_ID_TRUEHD CODEC_ID_TRUEHD
339 #define AV_CODEC_ID_S302M CODEC_ID_S302M
340 #define AV_CODEC_ID_DVB_TELETEXT CODEC_ID_DVB_TELETEXT
341 #define AV_CODEC_ID_DVB_SUBTITLE CODEC_ID_DVB_SUBTITLE
342 #define AV_CODEC_ID_DVD_SUBTITLE CODEC_ID_DVD_SUBTITLE
344 #define AV_CODEC_ID_MOV_TEXT CODEC_ID_MOV_TEXT
345 #define AV_CODEC_ID_MP4ALS CODEC_ID_MP4ALS
346 #define AV_CODEC_ID_QCELP CODEC_ID_QCELP
347 #define AV_CODEC_ID_MPEG4SYSTEMS CODEC_ID_MPEG4SYSTEMS
349 #define AV_CODEC_ID_MPEG2TS CODEC_ID_MPEG2TS
350 #define AV_CODEC_ID_AAC_LATM CODEC_ID_AAC_LATM
351 #define AV_CODEC_ID_HDMV_PGS_SUBTITLE CODEC_ID_HDMV_PGS_SUBTITLE
353 #define AV_CODEC_ID_FLAC CODEC_ID_FLAC
354 #define AV_CODEC_ID_MLP CODEC_ID_MLP
356 #define AV_CODEC_ID_PCM_F32LE CODEC_ID_PCM_F32LE
357 #define AV_CODEC_ID_PCM_F64LE CODEC_ID_PCM_F64LE
359 #define AV_CODEC_ID_PCM_S16BE CODEC_ID_PCM_S16BE
360 #define AV_CODEC_ID_PCM_S24BE CODEC_ID_PCM_S24BE
361 #define AV_CODEC_ID_PCM_S32BE CODEC_ID_PCM_S32BE
363 #define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE
364 #define AV_CODEC_ID_PCM_S24LE CODEC_ID_PCM_S24LE
365 #define AV_CODEC_ID_PCM_S32LE CODEC_ID_PCM_S32LE
367 #define AV_CODEC_ID_PCM_U8 CODEC_ID_PCM_U8
369 #define AV_CODEC_ID_QDM2 CODEC_ID_QDM2
370 #define AV_CODEC_ID_RA_144 CODEC_ID_RA_144
371 #define AV_CODEC_ID_RA_288 CODEC_ID_RA_288
372 #define AV_CODEC_ID_ATRAC3 CODEC_ID_ATRAC3
373 #define AV_CODEC_ID_COOK CODEC_ID_COOK
374 #define AV_CODEC_ID_SIPR CODEC_ID_SIPR
375 #define AV_CODEC_ID_TTA CODEC_ID_TTA
376 #define AV_CODEC_ID_WAVPACK CODEC_ID_WAVPACK
378 #define AV_CODEC_ID_TTF CODEC_ID_TTF
381 #define AV_CODEC_ID_R10K CODEC_ID_R10K
382 #define AV_CODEC_ID_R210 CODEC_ID_R210
383 #define AV_CODEC_ID_V210 CODEC_ID_V210
384 #define AV_CODEC_ID_MJPEGB CODEC_ID_MJPEGB
385 #define AV_CODEC_ID_SVQ3 CODEC_ID_SVQ3
386 #define AV_CODEC_ID_8BPS CODEC_ID_8BPS
387 #define AV_CODEC_ID_SMC CODEC_ID_SMC
388 #define AV_CODEC_ID_QTRLE CODEC_ID_QTRLE
389 #define AV_CODEC_ID_QDRAW CODEC_ID_QDRAW
390 #define AV_CODEC_ID_DNXHD CODEC_ID_DNXHD
391 #define AV_CODEC_ID_SGI CODEC_ID_SGI
392 #define AV_CODEC_ID_DPX CODEC_ID_DPX
393 #define AV_CODEC_ID_PRORES CODEC_ID_PRORES
395 #endif // AVCODEC_VERSION
397 static const AVCodecTag codec_bmp_tags[] = {
398 { AV_CODEC_ID_H264, MKTAG(
'H',
'2',
'6',
'4') },
399 { AV_CODEC_ID_H264, MKTAG(
'h',
'2',
'6',
'4') },
400 { AV_CODEC_ID_H264, MKTAG(
'X',
'2',
'6',
'4') },
401 { AV_CODEC_ID_H264, MKTAG(
'x',
'2',
'6',
'4') },
402 { AV_CODEC_ID_H264, MKTAG(
'a',
'v',
'c',
'1') },
403 { AV_CODEC_ID_H264, MKTAG(
'V',
'S',
'S',
'H') },
404 { AV_CODEC_ID_H263, MKTAG(
'H',
'2',
'6',
'3') },
405 { AV_CODEC_ID_H263, MKTAG(
'X',
'2',
'6',
'3') },
406 { AV_CODEC_ID_H263, MKTAG(
'T',
'2',
'6',
'3') },
407 { AV_CODEC_ID_H263, MKTAG(
'L',
'2',
'6',
'3') },
408 { AV_CODEC_ID_H263, MKTAG(
'V',
'X',
'1',
'K') },
409 { AV_CODEC_ID_H263, MKTAG(
'Z',
'y',
'G',
'o') },
410 { AV_CODEC_ID_H263P, MKTAG(
'H',
'2',
'6',
'3') },
411 { AV_CODEC_ID_H263I, MKTAG(
'I',
'2',
'6',
'3') },
412 { AV_CODEC_ID_H261, MKTAG(
'H',
'2',
'6',
'1') },
413 { AV_CODEC_ID_H263P, MKTAG(
'U',
'2',
'6',
'3') },
414 { AV_CODEC_ID_H263P, MKTAG(
'v',
'i',
'v',
'1') },
415 { AV_CODEC_ID_MPEG4, MKTAG(
'F',
'M',
'P',
'4') },
416 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'V',
'X') },
417 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'X',
'5',
'0') },
418 { AV_CODEC_ID_MPEG4, MKTAG(
'X',
'V',
'I',
'D') },
419 { AV_CODEC_ID_MPEG4, MKTAG(
'M',
'P',
'4',
'S') },
420 { AV_CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'S',
'2') },
421 { AV_CODEC_ID_MPEG4, MKTAG(4 , 0 , 0 , 0) },
422 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'V',
'1') },
423 { AV_CODEC_ID_MPEG4, MKTAG(
'B',
'L',
'Z',
'0') },
424 { AV_CODEC_ID_MPEG4, MKTAG(
'm',
'p',
'4',
'v') },
425 { AV_CODEC_ID_MPEG4, MKTAG(
'U',
'M',
'P',
'4') },
426 { AV_CODEC_ID_MPEG4, MKTAG(
'W',
'V',
'1',
'F') },
427 { AV_CODEC_ID_MPEG4, MKTAG(
'S',
'E',
'D',
'G') },
428 { AV_CODEC_ID_MPEG4, MKTAG(
'R',
'M',
'P',
'4') },
429 { AV_CODEC_ID_MPEG4, MKTAG(
'3',
'I',
'V',
'2') },
430 { AV_CODEC_ID_MPEG4, MKTAG(
'F',
'F',
'D',
'S') },
431 { AV_CODEC_ID_MPEG4, MKTAG(
'F',
'V',
'F',
'W') },
432 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'C',
'O',
'D') },
433 { AV_CODEC_ID_MPEG4, MKTAG(
'M',
'V',
'X',
'M') },
434 { AV_CODEC_ID_MPEG4, MKTAG(
'P',
'M',
'4',
'V') },
435 { AV_CODEC_ID_MPEG4, MKTAG(
'S',
'M',
'P',
'4') },
436 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'X',
'G',
'M') },
437 { AV_CODEC_ID_MPEG4, MKTAG(
'V',
'I',
'D',
'M') },
438 { AV_CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'T',
'3') },
439 { AV_CODEC_ID_MPEG4, MKTAG(
'G',
'E',
'O',
'X') },
440 { AV_CODEC_ID_MPEG4, MKTAG(
'H',
'D',
'X',
'4') },
441 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'M',
'K',
'2') },
442 { AV_CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'G',
'I') },
443 { AV_CODEC_ID_MPEG4, MKTAG(
'I',
'N',
'M',
'C') },
444 { AV_CODEC_ID_MPEG4, MKTAG(
'E',
'P',
'H',
'V') },
445 { AV_CODEC_ID_MPEG4, MKTAG(
'E',
'M',
'4',
'A') },
446 { AV_CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'C',
'C') },
447 { AV_CODEC_ID_MPEG4, MKTAG(
'S',
'N',
'4',
'0') },
448 { AV_CODEC_ID_MPEG4, MKTAG(
'V',
'S',
'P',
'X') },
449 { AV_CODEC_ID_MPEG4, MKTAG(
'U',
'L',
'D',
'X') },
450 { AV_CODEC_ID_MPEG4, MKTAG(
'G',
'E',
'O',
'V') },
451 { AV_CODEC_ID_MPEG4, MKTAG(
'S',
'I',
'P',
'P') },
452 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'3') },
453 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'M',
'P',
'4',
'3') },
454 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'M',
'P',
'G',
'3') },
455 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'5') },
456 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'6') },
457 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'4') },
458 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'V',
'X',
'3') },
459 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'A',
'P',
'4',
'1') },
460 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'C',
'O',
'L',
'1') },
461 { AV_CODEC_ID_MSMPEG4V3, MKTAG(
'C',
'O',
'L',
'0') },
462 { AV_CODEC_ID_MSMPEG4V2, MKTAG(
'M',
'P',
'4',
'2') },
463 { AV_CODEC_ID_MSMPEG4V2, MKTAG(
'D',
'I',
'V',
'2') },
464 { AV_CODEC_ID_MSMPEG4V1, MKTAG(
'M',
'P',
'G',
'4') },
465 { AV_CODEC_ID_MSMPEG4V1, MKTAG(
'M',
'P',
'4',
'1') },
466 { AV_CODEC_ID_WMV1, MKTAG(
'W',
'M',
'V',
'1') },
467 { AV_CODEC_ID_WMV2, MKTAG(
'W',
'M',
'V',
'2') },
468 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
's',
'd') },
469 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'd') },
470 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'1') },
471 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
's',
'l') },
472 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'2',
'5') },
473 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'5',
'0') },
474 { AV_CODEC_ID_DVVIDEO, MKTAG(
'c',
'd',
'v',
'c') },
475 { AV_CODEC_ID_DVVIDEO, MKTAG(
'C',
'D',
'V',
'H') },
476 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'c',
' ') },
477 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'c',
's') },
478 { AV_CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'1') },
479 { AV_CODEC_ID_MPEG1VIDEO, MKTAG(
'm',
'p',
'g',
'1') },
480 { AV_CODEC_ID_MPEG1VIDEO, MKTAG(
'm',
'p',
'g',
'2') },
481 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'm',
'p',
'g',
'2') },
482 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'M',
'P',
'E',
'G') },
483 { AV_CODEC_ID_MPEG1VIDEO, MKTAG(
'P',
'I',
'M',
'1') },
484 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'P',
'I',
'M',
'2') },
485 { AV_CODEC_ID_MPEG1VIDEO, MKTAG(
'V',
'C',
'R',
'2') },
486 { AV_CODEC_ID_MPEG1VIDEO, MKTAG(1 , 0 , 0 , 16) },
487 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(2 , 0 , 0 , 16) },
488 { AV_CODEC_ID_MPEG4, MKTAG(4 , 0 , 0 , 16) },
489 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'D',
'V',
'R',
' ') },
490 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'M',
'M',
'E',
'S') },
491 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'L',
'M',
'P',
'2') },
492 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
's',
'l',
'i',
'f') },
493 { AV_CODEC_ID_MPEG2VIDEO, MKTAG(
'E',
'M',
'2',
'V') },
494 { AV_CODEC_ID_MJPEG, MKTAG(
'M',
'J',
'P',
'G') },
495 { AV_CODEC_ID_MJPEG, MKTAG(
'L',
'J',
'P',
'G') },
496 { AV_CODEC_ID_MJPEG, MKTAG(
'd',
'm',
'b',
'1') },
497 { AV_CODEC_ID_MJPEG, MKTAG(
'm',
'j',
'p',
'a') },
498 { AV_CODEC_ID_LJPEG, MKTAG(
'L',
'J',
'P',
'G') },
499 { AV_CODEC_ID_MJPEG, MKTAG(
'J',
'P',
'G',
'L') },
500 { AV_CODEC_ID_JPEGLS, MKTAG(
'M',
'J',
'L',
'S') },
501 { AV_CODEC_ID_MJPEG, MKTAG(
'M',
'J',
'L',
'S') },
502 { AV_CODEC_ID_MJPEG, MKTAG(
'j',
'p',
'e',
'g') },
503 { AV_CODEC_ID_MJPEG, MKTAG(
'I',
'J',
'P',
'G') },
504 { AV_CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'R',
'n') },
505 { AV_CODEC_ID_MJPEG, MKTAG(
'A',
'C',
'D',
'V') },
506 { AV_CODEC_ID_MJPEG, MKTAG(
'Q',
'I',
'V',
'G') },
507 { AV_CODEC_ID_MJPEG, MKTAG(
'S',
'L',
'M',
'J') },
508 { AV_CODEC_ID_MJPEG, MKTAG(
'C',
'J',
'P',
'G') },
509 { AV_CODEC_ID_MJPEG, MKTAG(
'I',
'J',
'L',
'V') },
510 { AV_CODEC_ID_MJPEG, MKTAG(
'M',
'V',
'J',
'P') },
511 { AV_CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'I',
'1') },
512 { AV_CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'I',
'2') },
513 { AV_CODEC_ID_MJPEG, MKTAG(
'M',
'T',
'S',
'J') },
514 { AV_CODEC_ID_MJPEG, MKTAG(
'Z',
'J',
'P',
'G') },
515 { AV_CODEC_ID_HUFFYUV, MKTAG(
'H',
'F',
'Y',
'U') },
516 { AV_CODEC_ID_FFVHUFF, MKTAG(
'F',
'F',
'V',
'H') },
517 { AV_CODEC_ID_CYUV, MKTAG(
'C',
'Y',
'U',
'V') },
518 { AV_CODEC_ID_RAWVIDEO, MKTAG(0 , 0 , 0 , 0) },
519 { AV_CODEC_ID_RAWVIDEO, MKTAG(3 , 0 , 0 , 0) },
520 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'I',
'4',
'2',
'0') },
521 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'U',
'Y',
'2') },
522 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'4',
'2',
'2') },
523 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'V',
'4',
'2',
'2') },
524 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'U',
'N',
'V') },
525 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'N',
'V') },
526 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'N',
'Y') },
527 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'u',
'y',
'v',
'1') },
528 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'2',
'V',
'u',
'1') },
529 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'2',
'v',
'u',
'y') },
530 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'P',
'4',
'2',
'2') },
531 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'V',
'1',
'2') },
532 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'V',
'Y') },
533 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'V',
'Y',
'U',
'Y') },
534 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'I',
'Y',
'U',
'V') },
535 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'8',
'0',
'0') },
536 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'H',
'D',
'Y',
'C') },
537 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'V',
'U',
'9') },
538 { AV_CODEC_ID_RAWVIDEO, MKTAG(
'V',
'D',
'T',
'Z') },
539 { AV_CODEC_ID_INDEO3, MKTAG(
'I',
'V',
'3',
'1') },
540 { AV_CODEC_ID_INDEO3, MKTAG(
'I',
'V',
'3',
'2') },
541 { AV_CODEC_ID_INDEO4, MKTAG(
'I',
'V',
'4',
'1') },
542 { AV_CODEC_ID_INDEO5, MKTAG(
'I',
'V',
'5',
'0') },
543 { AV_CODEC_ID_VP3, MKTAG(
'V',
'P',
'3',
'1') },
544 { AV_CODEC_ID_VP3, MKTAG(
'V',
'P',
'3',
'0') },
545 { AV_CODEC_ID_VP5, MKTAG(
'V',
'P',
'5',
'0') },
546 { AV_CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'0') },
547 { AV_CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'1') },
548 { AV_CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'2') },
549 { AV_CODEC_ID_VP6F, MKTAG(
'V',
'P',
'6',
'F') },
550 { AV_CODEC_ID_VP6F, MKTAG(
'F',
'L',
'V',
'4') },
551 { AV_CODEC_ID_ASV1, MKTAG(
'A',
'S',
'V',
'1') },
552 { AV_CODEC_ID_ASV2, MKTAG(
'A',
'S',
'V',
'2') },
553 { AV_CODEC_ID_VCR1, MKTAG(
'V',
'C',
'R',
'1') },
554 { AV_CODEC_ID_FFV1, MKTAG(
'F',
'F',
'V',
'1') },
555 { AV_CODEC_ID_XAN_WC4, MKTAG(
'X',
'x',
'a',
'n') },
556 { AV_CODEC_ID_MIMIC, MKTAG(
'L',
'M',
'2',
'0') },
557 { AV_CODEC_ID_MSRLE, MKTAG(
'm',
'r',
'l',
'e') },
558 { AV_CODEC_ID_MSRLE, MKTAG(1 , 0 , 0 , 0) },
559 { AV_CODEC_ID_MSRLE, MKTAG(2 , 0 , 0 , 0) },
560 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'M',
'S',
'V',
'C') },
561 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'm',
's',
'v',
'c') },
562 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'C',
'R',
'A',
'M') },
563 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'c',
'r',
'a',
'm') },
564 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'W',
'H',
'A',
'M') },
565 { AV_CODEC_ID_MSVIDEO1, MKTAG(
'w',
'h',
'a',
'm') },
566 { AV_CODEC_ID_CINEPAK, MKTAG(
'c',
'v',
'i',
'd') },
567 { AV_CODEC_ID_TRUEMOTION1, MKTAG(
'D',
'U',
'C',
'K') },
568 { AV_CODEC_ID_TRUEMOTION1, MKTAG(
'P',
'V',
'E',
'Z') },
569 { AV_CODEC_ID_MSZH, MKTAG(
'M',
'S',
'Z',
'H') },
570 { AV_CODEC_ID_ZLIB, MKTAG(
'Z',
'L',
'I',
'B') },
572 { AV_CODEC_ID_SNOW, MKTAG(
'S',
'N',
'O',
'W') },
574 { AV_CODEC_ID_4XM, MKTAG(
'4',
'X',
'M',
'V') },
575 { AV_CODEC_ID_FLV1, MKTAG(
'F',
'L',
'V',
'1') },
576 { AV_CODEC_ID_FLASHSV, MKTAG(
'F',
'S',
'V',
'1') },
577 { AV_CODEC_ID_SVQ1, MKTAG(
's',
'v',
'q',
'1') },
578 { AV_CODEC_ID_TSCC, MKTAG(
't',
's',
'c',
'c') },
579 { AV_CODEC_ID_ULTI, MKTAG(
'U',
'L',
'T',
'I') },
580 { AV_CODEC_ID_VIXL, MKTAG(
'V',
'I',
'X',
'L') },
581 { AV_CODEC_ID_QPEG, MKTAG(
'Q',
'P',
'E',
'G') },
582 { AV_CODEC_ID_QPEG, MKTAG(
'Q',
'1',
'.',
'0') },
583 { AV_CODEC_ID_QPEG, MKTAG(
'Q',
'1',
'.',
'1') },
584 { AV_CODEC_ID_WMV3, MKTAG(
'W',
'M',
'V',
'3') },
585 { AV_CODEC_ID_VC1, MKTAG(
'W',
'V',
'C',
'1') },
586 { AV_CODEC_ID_VC1, MKTAG(
'W',
'M',
'V',
'A') },
587 { AV_CODEC_ID_LOCO, MKTAG(
'L',
'O',
'C',
'O') },
588 { AV_CODEC_ID_WNV1, MKTAG(
'W',
'N',
'V',
'1') },
589 { AV_CODEC_ID_AASC, MKTAG(
'A',
'A',
'S',
'C') },
590 { AV_CODEC_ID_INDEO2, MKTAG(
'R',
'T',
'2',
'1') },
591 { AV_CODEC_ID_FRAPS, MKTAG(
'F',
'P',
'S',
'1') },
592 { AV_CODEC_ID_THEORA, MKTAG(
't',
'h',
'e',
'o') },
593 { AV_CODEC_ID_TRUEMOTION2, MKTAG(
'T',
'M',
'2',
'0') },
594 { AV_CODEC_ID_CSCD, MKTAG(
'C',
'S',
'C',
'D') },
595 { AV_CODEC_ID_ZMBV, MKTAG(
'Z',
'M',
'B',
'V') },
596 { AV_CODEC_ID_KMVC, MKTAG(
'K',
'M',
'V',
'C') },
597 { AV_CODEC_ID_CAVS, MKTAG(
'C',
'A',
'V',
'S') },
598 { AV_CODEC_ID_JPEG2000, MKTAG(
'M',
'J',
'2',
'C') },
599 { AV_CODEC_ID_VMNC, MKTAG(
'V',
'M',
'n',
'c') },
600 { AV_CODEC_ID_TARGA, MKTAG(
't',
'g',
'a',
' ') },
601 { AV_CODEC_ID_PNG, MKTAG(
'M',
'P',
'N',
'G') },
602 { AV_CODEC_ID_PNG, MKTAG(
'P',
'N',
'G',
'1') },
603 { AV_CODEC_ID_CLJR, MKTAG(
'c',
'l',
'j',
'r') },
604 { AV_CODEC_ID_DIRAC, MKTAG(
'd',
'r',
'a',
'c') },
605 { AV_CODEC_ID_RPZA, MKTAG(
'a',
'z',
'p',
'r') },
606 { AV_CODEC_ID_RPZA, MKTAG(
'R',
'P',
'Z',
'A') },
607 { AV_CODEC_ID_RPZA, MKTAG(
'r',
'p',
'z',
'a') },
608 { AV_CODEC_ID_SP5X, MKTAG(
'S',
'P',
'5',
'4') },
609 { AV_CODEC_ID_NONE, 0 }
612 #ifdef NEED_AV_STREAM_TYPES
615 uint32_t stream_type;
616 enum AVMediaType codec_type;
617 enum AVCodecID codec_id;
620 static const StreamType ISO_types[] = {
621 { 0x01, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO },
622 { 0x02, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO },
623 { 0x03, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3 },
624 { 0x04, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3 },
625 { 0x0f, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC },
626 { 0x10, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG4 },
630 { 0x1b, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H264 },
631 { 0xd1, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },
632 { 0xea, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
636 static const StreamType HDMV_types[] = {
637 { 0x80, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_BLURAY },
638 { 0x81, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
639 { 0x82, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
640 { 0x83, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_TRUEHD },
641 { 0x84, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 },
642 { 0x85, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
643 { 0x86, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
644 { 0xa1, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 },
645 { 0xa2, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
646 { 0x90, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_HDMV_PGS_SUBTITLE },
651 static const StreamType MISC_types[] = {
652 { 0x81, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
653 { 0x8a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
657 static const StreamType REGD_types[] = {
658 { MKTAG(
'd',
'r',
'a',
'c'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },
659 { MKTAG(
'A',
'C',
'-',
'3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
660 { MKTAG(
'B',
'S',
'S',
'D'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_S302M },
661 { MKTAG(
'D',
'T',
'S',
'1'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
662 { MKTAG(
'D',
'T',
'S',
'2'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
663 { MKTAG(
'D',
'T',
'S',
'3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
664 { MKTAG(
'V',
'C',
'-',
'1'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
669 static const StreamType DESC_types[] = {
670 { 0x6a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
671 { 0x7a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 },
672 { 0x7b, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
673 { 0x56, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_TELETEXT },
674 { 0x59, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_SUBTITLE },
680 #if defined FF_API_PIX_FMT || defined AVUTIL_PIXFMT_H
682 static inline int avi_color_range_to_weed_clamping(
enum AVColorRange range) {
684 case AVCOL_RANGE_MPEG:
686 case AVCOL_RANGE_JPEG:
694 static inline enum AVColorRange weed_clamping_to_avi_color_range(
int clamping) {
697 return AVCOL_RANGE_MPEG;
699 return AVCOL_RANGE_JPEG;
701 return AVCOL_RANGE_NB;
704 #ifndef AVUTIL_PIXFMT_H
706 static inline int avi_pix_fmt_to_weed_palette(
enum PixelFormat pix_fmt,
int *clamped) {
719 case PIX_FMT_YUV444P:
721 case PIX_FMT_YUVA444P:
723 case PIX_FMT_YUV422P:
725 case PIX_FMT_YUV420P:
727 case PIX_FMT_YUYV422:
729 case PIX_FMT_UYVY422:
731 case PIX_FMT_UYYVYY411:
735 case PIX_FMT_MONOWHITE:
736 case PIX_FMT_MONOBLACK:
738 case PIX_FMT_YUVJ422P:
741 case PIX_FMT_YUVJ444P:
744 case PIX_FMT_YUVAJ444P:
746 return WEED_PALETTE_YUVA444P;
747 case PIX_FMT_YUVJ420P:
756 static inline enum PixelFormat weed_palette_to_avi_pix_fmt(
int pal,
int *clamped) {
759 return PIX_FMT_RGB24;
761 return PIX_FMT_BGR24;
770 return PIX_FMT_YUVJ444P;
771 return PIX_FMT_YUV444P;
772 case WEED_PALETTE_YUVA444P:
774 return PIX_FMT_YUVAJ444P;
775 return PIX_FMT_YUVA444P;
778 return PIX_FMT_YUVJ422P;
779 return PIX_FMT_YUV422P;
782 return PIX_FMT_YUVJ420P;
783 return PIX_FMT_YUV420P;
785 return PIX_FMT_YUYV422;
787 return PIX_FMT_UYVY422;
789 return PIX_FMT_UYYVYY411;
792 return PIX_FMT_GRAY8;
794 return PIX_FMT_MONOBLACK;
803 static inline int avi_pix_fmt_to_weed_palette(
enum AVPixelFormat pix_fmt,
int *clamped) {
806 case AV_PIX_FMT_RGB24:
808 case AV_PIX_FMT_BGR24:
810 case AV_PIX_FMT_RGBA:
812 case AV_PIX_FMT_BGRA:
814 case AV_PIX_FMT_ARGB:
816 case AV_PIX_FMT_YUV444P:
818 case AV_PIX_FMT_YUVA444P:
820 case AV_PIX_FMT_YUV422P:
822 case AV_PIX_FMT_YUV420P:
824 case AV_PIX_FMT_YUYV422:
826 case AV_PIX_FMT_UYVY422:
828 case AV_PIX_FMT_UYYVYY411:
830 case AV_PIX_FMT_GRAY8:
832 case AV_PIX_FMT_MONOWHITE:
833 case AV_PIX_FMT_MONOBLACK:
835 case AV_PIX_FMT_YUVJ422P:
838 case AV_PIX_FMT_YUVJ444P:
841 case AV_PIX_FMT_YUVJ420P:
850 static inline enum AVPixelFormat weed_palette_to_avi_pix_fmt(
int pal,
int *clamped) {
853 return AV_PIX_FMT_RGB24;
855 return AV_PIX_FMT_BGR24;
857 return AV_PIX_FMT_RGBA;
859 return AV_PIX_FMT_BGRA;
861 return AV_PIX_FMT_ARGB;
864 return AV_PIX_FMT_YUVJ444P;
865 return AV_PIX_FMT_YUV444P;
867 return AV_PIX_FMT_YUVA444P;
870 return AV_PIX_FMT_YUVJ422P;
871 return AV_PIX_FMT_YUV422P;
874 return AV_PIX_FMT_YUVJ420P;
875 return AV_PIX_FMT_YUV420P;
877 return AV_PIX_FMT_YUYV422;
879 return AV_PIX_FMT_UYVY422;
881 return AV_PIX_FMT_UYYVYY411;
884 return AV_PIX_FMT_GRAY8;
886 return AV_PIX_FMT_MONOBLACK;
889 return AV_PIX_FMT_NONE;
895 static inline int avi_trc_to_weed_gamma(
enum AVColorTransferCharacteristic trc) {
897 case AVCOL_TRC_BT709:
899 case AVCOL_TRC_LINEAR:
901 case AVCOL_TRC_GAMMA22:
909 static inline enum AVColorTransferCharacteristic weed_gamma_to_avi_trc(
int gamma_type) {
910 switch (gamma_type) {
912 return AVCOL_TRC_BT709;
914 return AVCOL_TRC_LINEAR;
916 return AVCOL_TRC_GAMMA22;
920 return AVCOL_TRC_UNSPECIFIED;
923 #endif // HAVE_AVUTIL
924 #endif // HAVE_AVCODEC
926 #ifndef WEED_AVUTIL_CHANNEL_LAYOUTS
928 #ifdef USE_AVUTIL_CHANNEL_LAYOUTS
929 #ifndef AVUTIL_CHANNEL_LAYOUT_H
931 #include <libavutil/channel_layout.h>
935 #ifdef AVUTIL_CHANNEL_LAYOUT_H
936 #define WEED_CH_FRONT_LEFT AV_CH_FRONT_LEFT
937 #define WEED_CH_FRONT_RIGHT AV_CH_FRONT_RIGHT
938 #define WEED_CH_FRONT_CENTER AV_CH_FRONT_CENTER
939 #define WEED_CH_LOW_FREQUENCY AV_CH_LOW_FREQUENCY
940 #define WEED_CH_BACK_LEFT AV_CH_BACK_LEFT
941 #define WEED_CH_BACK_RIGHT AV_CH_BACK_RIGHT
942 #define WEED_CH_FRONT_LEFT_OF_CENTER AV_CH_FRONT_LEFT_OF_CENTER
943 #define WEED_CH_FRONT_RIGHT_OF_CENTER AV_CH_FRONT_RIGHT_OF_CENTER
944 #define WEED_CH_BACK_CENTER AV_CH_BACK_CENTER
945 #define WEED_CH_SIDE_LEFT AV_CH_SIDE_LEFT
946 #define WEED_CH_SIDE_RIGHT AV_CH_SIDE_RIGHT
947 #define WEED_CH_TOP_CENTER AV_CH_TOP_CENTER
948 #define WEED_CH_TOP_FRONT_LEFT AV_CH_TOP_FRONT_LEFT
949 #define WEED_CH_TOP_FRONT_CENTER AV_CH_TOP_FRONT_CENTER
950 #define WEED_CH_TOP_FRONT_RIGHT AV_CH_TOP_FRONT_RIGHT
951 #define WEED_CH_TOP_BACK_LEFT AV_CH_TOP_BACK_LEFT
952 #define WEED_CH_TOP_BACK_CENTER AV_CH_TOP_BACK_CENTER
953 #define WEED_CH_TOP_BACK_RIGHT AV_CH_TOP_BACK_RIGHT
954 #define WEED_CH_STEREO_LEFT AV_CH_STEREO_LEFT
955 #define WEED_CH_STEREO_RIGHT AV_CH_STEREO_RIGHT
956 #define WEED_CH_WIDE_LEFT AV_CH_WIDE_LEFT
957 #define WEED_CH_WIDE_RIGHT AV_CH_WIDE_RIGHT
958 #define WEED_CH_SURROUND_DIRECT_LEFT AV_CH_SURROUND_DIRECT_LEFT
959 #define WEED_CH_SURROUND_DIRECT_RIGHT AV_CH_SURROUND_DIRECT_RIGHT
960 #define WEED_CH_LOW_FREQUENCY_2 AV_CH_LOW_FREQUENCY_2
962 #ifdef WEED_CH_LAYOUT_MONO
963 #undef WEED_CH_LAYOUT_MONO
966 #ifdef WEED_CH_LAYOUT_STEREO
967 #undef WEED_CH_LAYOUT_STEREO
970 #define WEED_CH_LAYOUT_MONO AV_CH_LAYOUT_MONO
971 #define WEED_CH_LAYOUT_STEREO AV_CH_LAYOUT_STEREO
972 #define WEED_CH_LAYOUT_2POINT1 AV_CH_LAYOUT_2POINT1
973 #define WEED_CH_LAYOUT_2_1 AV_CH_LAYOUT_2_1
974 #define WEED_CH_LAYOUT_SURROUND AV_CH_LAYOUT_SURROUND
975 #define WEED_CH_LAYOUT_3POINT1 AV_CH_LAYOUT_3POINT1
976 #define WEED_CH_LAYOUT_4POINT0 AV_CH_LAYOUT_4POINT0
977 #define WEED_CH_LAYOUT_4POINT1 AV_CH_LAYOUT_4POINT1
978 #define WEED_CH_LAYOUT_2_2 AV_CH_LAYOUT_2_2
979 #define WEED_CH_LAYOUT_QUAD AV_CH_LAYOUT_QUAD
980 #define WEED_CH_LAYOUT_5POINT0 AV_CH_LAYOUT_5POINT0
981 #define WEED_CH_LAYOUT_5POINT1 AV_CH_LAYOUT_5POINT1
982 #define WEED_CH_LAYOUT_5POINT0_BACK AV_CH_LAYOUT_5POINT0_BACK
983 #define WEED_CH_LAYOUT_5POINT1_BACK AV_CH_LAYOUT_5POINT1_BACK
984 #define WEED_CH_LAYOUT_6POINT0 AV_CH_LAYOUT_6POINT0
985 #define WEED_CH_LAYOUT_6POINT0_FRONT AV_CH_LAYOUT_6POINT0_FRONT
986 #define WEED_CH_LAYOUT_HEXAGONAL AV_CH_LAYOUT_HEXAGONAL
987 #define WEED_CH_LAYOUT_6POINT1 AV_CH_LAYOUT_6POINT1
988 #define WEED_CH_LAYOUT_6POINT1_BACK AV_CH_LAYOUT_6POINT1_BACK
989 #define WEED_CH_LAYOUT_6POINT1_FRONT AV_CH_LAYOUT_6POINT1_FRONT
990 #define WEED_CH_LAYOUT_7POINT0 AV_CH_LAYOUT_7POINT0
991 #define WEED_CH_LAYOUT_7POINT0_FRONT AV_CH_LAYOUT_7POINT0_FRONT
992 #define WEED_CH_LAYOUT_7POINT1 AV_CH_LAYOUT_7POINT1
993 #define WEED_CH_LAYOUT_7POINT1_WIDE AV_CH_LAYOUT_7POINT1_WIDE
994 #define WEED_CH_LAYOUT_7POINT1_WIDE_BACK AV_CH_LAYOUT_7POINT1_WIDE_BACK
995 #define WEED_CH_LAYOUT_OCTAGONAL AV_CH_LAYOUT_OCTAGONAL
996 #define WEED_CH_LAYOUT_HEXADECAGONAL AV_CH_LAYOUT_HEXADECAGONAL
997 #define WEED_CH_LAYOUT_STEREO_DOWNMIX AV_CH_LAYOUT_STEREO_DOWNMIX
999 #ifndef WEED_CH_LAYOUT_DEFAULT_1
1000 #define WEED_CH_LAYOUT_DEFAULT_1 WEED_CH_LAYOUT_MONO
1002 #ifndef WEED_CH_LAYOUT_DEFAULT_2
1003 #define WEED_CH_LAYOUT_DEFAULT_2 WEED_CH_LAYOUT_STEREO
1005 #ifndef WEED_CH_LAYOUTS_DEFAULT
1006 #define WEED_CH_LAYOUTS_DEFAULT (WEED_CH_LAYOUT_DEFAULT_2, WEED_CH_LAYOUT_DEFAULT_1}
1008 #ifndef WEED_CH_LAYOUTS_DEFAULT_MIN2
1009 #define WEED_CH_LAYOUTS_DEFAULT_MIN2 (WEED_CH_LAYOUT_DEFAULT_2}
1012 #define WEED_AVUTIL_CHANNEL_LAYOUTS
1014 #ifdef WEED_CHANNEL_LAYOUT_TYPE
1015 #undef WEED_CHANNEL_LAYOUT_TYPE
1018 #define WEED_CHANNEL_LAYOUT_TYPE "avutil"
1024 #ifdef NEED_PANGO_COMPAT
1025 #ifdef __PANGO_FONT_H__
1027 #define HAVE_PANGO_FONT_STRETCH 1
1028 #define HAVE_PANGO_FONT_WEIGHT 1
1029 #define HAVE_PANGO_FONT_STYLE 1
1030 #define HAVE_PANGO_FONT_SIZE 1
1032 static inline int font_stretch_to_pango_stretch(
const char *stretch) {
1033 PangoFontDescription *pfd = pango_font_description_from_string(stretch);
1034 PangoStretch pstretch = pango_font_description_get_stretch(pfd);
1035 pango_font_description_free(pfd);
1039 static inline int font_weight_to_pango_weight(
const char *weight) {
1040 PangoFontDescription *pfd = pango_font_description_from_string(weight);
1041 PangoWeight pweight = pango_font_description_get_weight(pfd);
1042 pango_font_description_free(pfd);
1046 static inline int font_style_to_pango_style(
const char *style) {
1047 PangoFontDescription *pfd = pango_font_description_from_string(style);
1048 PangoStyle pstyle = pango_font_description_get_style(pfd);
1049 pango_font_description_free(pfd);
1054 #define font_size_to_pango_size(font_size) ((font_size) * PANGO_SCALE)
1063 #endif // __WEED_COMPAT_H__