libweed  0.6.0
weed-compat.h
Go to the documentation of this file.
1 /* WEED is free software; you can redistribute it and/or
2  modify it under the terms of the GNU Lesser General Public
3  License as published by the Free Software Foundation; either
4  version 3 of the License, or (at your option) any later version.
5 
6  Weed is distributed in the hope that it will be useful,
7  but WITHOUT ANY WARRANTY; without even the implied warranty of
8  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9  Lesser General Public License for more details.
10 
11  You should have received a copy of the GNU Lesser General Public
12  License along with this source code; if not, write to the Free Software
13  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
14 
15 
16  Weed is developed by:
17 
18  Gabriel "Salsaman" Finch - http://lives.sourceforge.net
19 
20  mainly based on LiViDO, which is developed by:
21 
22 
23  Niels Elburg - http://veejay.sf.net
24 
25  Gabriel "Salsaman" Finch - http://lives.sourceforge.net
26 
27  Denis "Jaromil" Rojo - http://freej.dyne.org
28 
29  Tom Schouten - http://zwizwa.fartit.com
30 
31  Andraz Tori - http://cvs.cinelerra.org
32 
33  reviewed with suggestions and contributions from:
34 
35  Silvano "Kysucix" Galliani - http://freej.dyne.org
36 
37  Kentaro Fukuchi - http://megaui.net/fukuchi
38 
39  Jun Iio - http://www.malib.net
40 
41  Carlo Prelz - http://www2.fluido.as:8080/
42 
43 */
44 
45 /* (C) Gabriel "Salsaman" Finch, 2005 - 2016 */
46 
47 #ifndef __WEED_COMPAT_H__
48 #define __WEED_COMPAT_H__
49 
50 #ifdef __cplusplus
51 extern "C"
52 {
53 #endif /* __cplusplus */
54 
55 
56 #ifdef NEED_FOURCC_COMPAT
57 
58 #ifndef __WEED_PALETTES_H__
59 #include <weed/weed-palettes.h>
60 #endif
61 
62 #define WEED_COMPAT_VERSION 0.10.0
63 
64 int fourccp_to_weedp(unsigned int fourcc, int bpp, int *interlaced, int *sampling,
65  int *sspace, int *clamping) {
66  // inputs are fourcc and bpp
67  // returns int weed_palette
68 
69  // optionally sets interlaced (0 = none, 1 = interlaced), sampling, subspace and clamping
70 
71 
72 
73  // TODO - this is probably wrong for some formats and needs testing/verifying with various devices
74  // fourcc colorcodes are a nasty mess, and should be avoided whenever possible
75 
76  // data from http://www.fourcc.org
77 
78  if (clamping != NULL) *clamping = WEED_YUV_CLAMPING_CLAMPED;
79  if (interlaced != NULL) *interlaced = 0;
80  if (sspace != NULL) *sspace = WEED_YUV_SUBSPACE_YCBCR;
81  if (sampling != NULL) *sampling = WEED_YUV_SAMPLING_DEFAULT;
82 
83  switch (fourcc) {
84  // RGB formats
85  case 0x32524742: // BGR3
86  case 0x33524742: // BGR3 - tested and OK
87  case 0x34524742: // BGR4
88  if (bpp == 24) return WEED_PALETTE_BGR24;
89  if (bpp == 32) return WEED_PALETTE_BGRA32;
90  break;
91 
92  case 0x00000000: // BI_RGB - RGB or BGR ???
93  case 0x32776172: // raw2 - RGB or BGR ???
94 
95  case 0x32424752: // RGB2
96  case 0x33424752: // RGB3
97  case 0x34424752: // RGB4
98  if (bpp == 24) return WEED_PALETTE_RGB24;
99  if (bpp == 32) return WEED_PALETTE_RGBA32;
100  break;
101  case 0x41424752: // RGBA
102  if (bpp == 32) return WEED_PALETTE_RGBA32;
103  break;
104 
105 
106  // YUV packed formats
107 
108  case 0x56595549: // IUYV
109  if (interlaced != NULL) *interlaced = 1;
110  return WEED_PALETTE_UYVY;
111  case 0x31555949: // IYU1
112  case 0x31313459: // Y411
113  return WEED_PALETTE_YUV411;
114  case 0x32555949: // IYU2
115  return WEED_PALETTE_YUV888;
116  case 0x43594448: // HDYC
117  if (sspace != NULL) *sspace = WEED_YUV_SUBSPACE_BT709;
118  return WEED_PALETTE_UYVY;
119  case 0x564E5955: // UYNV
120  case 0x59565955: // UYVY
121  case 0x32323459: // Y422
122  case 0x76757963: // cyuv - ???
123  return WEED_PALETTE_UYVY;
124  case 0x32595559: // YUY2
125  case 0x56595559: // YUYV - tested and OK
126  case 0x564E5559: // YUNV
127  case 0x31313259: // Y211 - ???
128  return WEED_PALETTE_YUYV;
129  case 0x59455247: // grey
130  if (clamping != NULL) *clamping = WEED_YUV_CLAMPING_UNCLAMPED;
131  case 0x30303859: // Y800
132  case 0x20203859: // Y8
133  return WEED_PALETTE_A8;
134 
135 
136  // YUV planar formats
137  case 0x41565559: // YUVA
138  return WEED_PALETTE_YUVA4444P;
139  break;
140  case 0x34343449: // I444
141  return WEED_PALETTE_YUV444P;
142  break;
143  case 0x50323234: // 422P ??
144  return WEED_PALETTE_YUV422P;
145  break;
146  case 0x32315659: // YV12
147  return WEED_PALETTE_YVU420P;
148  case 0x30323449: // I420
149  case 0x56555949: // IYUV
150  case 0x32315559: // YU12 ??
151  return WEED_PALETTE_YUV420P;
152 
153  case 0x3032344a: // J420
154  if (clamping != NULL) *clamping = WEED_YUV_CLAMPING_UNCLAMPED;
155  return WEED_PALETTE_YUV420P;
156  case 0x3232344a: // J422
157  if (clamping != NULL) *clamping = WEED_YUV_CLAMPING_UNCLAMPED;
158  return WEED_PALETTE_YUV422P;
159  case 0x3434344a: // J444
160  if (clamping != NULL) *clamping = WEED_YUV_CLAMPING_UNCLAMPED;
161  return WEED_PALETTE_YUV444P;
162 
163 
164  // known formats we cannot use
165  case 0x50424752: // RGBP - palettised RGB
166  case 0x4f424752: // RGB0 - 15 or 16 bit RGB
167  case 0x51424752: // RGBQ - 15 or 16 bit RGB
168  case 0x52424752: // RGBR - ???
169 
170  case 0x3231564e: // NV12 - planar Y, packed UV
171  case 0x30313276: // v210 - 10 bit 422, packed
172 
173  case 0x39565559: // YUV9 - 410 planar palette
174  case 0x30313449: // I410 - 410 planar palette
175 
176  case 0x31313449: // I411 - 411 planar palette
177  case 0x30343449: // I440 - 440 planar palette
178  case 0x30343450: // J440 - 440 planar palette unclamped
179 
180  // no match
181  default:
182  return WEED_PALETTE_END;
183  }
184  return WEED_PALETTE_END;
185 }
186 
187 
188 
189 
190 #endif
191 
192 
193 
194 
195 
196 
197 
198 
199 #ifdef HAVE_AVCODEC
200 #ifdef HAVE_AVUTIL
201 
202 // compatibility with libavcodec
203 
204 #include <libavcodec/avcodec.h>
205 #include <libavutil/pixfmt.h>
206 
207 typedef struct AVCodecTag {
208  int id;
209  unsigned int tag;
210 } AVCodecTag;
211 
212 #ifndef MKTAG
213 #define MKTAG(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
214 #endif
215 
216 #if (LIBAVCODEC_VERSION_MAJOR <= 54)
217 #define AVCodecID CodecID
218 
219 #define AV_CODEC_ID_NONE CODEC_ID_NONE
220 #define AV_CODEC_ID_H264 CODEC_ID_H264
221 #define AV_CODEC_ID_H263 CODEC_ID_H263
222 #define AV_CODEC_ID_H263P CODEC_ID_H263P
223 #define AV_CODEC_ID_H263I CODEC_ID_H263I
224 #define AV_CODEC_ID_H261 CODEC_ID_H261
225 #define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4
226 #define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3
227 #define AV_CODEC_ID_MSMPEG4V2 CODEC_ID_MSMPEG4V2
228 #define AV_CODEC_ID_MSMPEG4V1 CODEC_ID_MSMPEG4V1
229 #define AV_CODEC_ID_WMV1 CODEC_ID_WMV1
230 #define AV_CODEC_ID_WMV2 CODEC_ID_WMV2
231 #define AV_CODEC_ID_DVVIDEO CODEC_ID_DVVIDEO
232 #define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO
233 #define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
234 #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG
235 #define AV_CODEC_ID_LJPEG CODEC_ID_LJPEG
236 #define AV_CODEC_ID_JPEGLS CODEC_ID_JPEGLS
237 #define AV_CODEC_ID_HUFFYUV CODEC_ID_HUFFYUV
238 #define AV_CODEC_ID_FFVHUFF CODEC_ID_FFVHUFF
239 #define AV_CODEC_ID_CYUV CODEC_ID_CYUV
240 #define AV_CODEC_ID_RAWVIDEO CODEC_ID_RAWVIDEO
241 #define AV_CODEC_ID_INDEO2 CODEC_ID_INDEO2
242 #define AV_CODEC_ID_INDEO3 CODEC_ID_INDEO3
243 #define AV_CODEC_ID_INDEO4 CODEC_ID_INDEO4
244 #define AV_CODEC_ID_INDEO5 CODEC_ID_INDEO5
245 #define AV_CODEC_ID_VP3 CODEC_ID_VP3
246 #define AV_CODEC_ID_VP5 CODEC_ID_VP5
247 #define AV_CODEC_ID_VP6 CODEC_ID_VP6
248 #define AV_CODEC_ID_VP6F CODEC_ID_VP6F
249 #define AV_CODEC_ID_VP6A CODEC_ID_VP6A
250 #define AV_CODEC_ID_ASV1 CODEC_ID_ASV1
251 #define AV_CODEC_ID_ASV2 CODEC_ID_ASV2
252 #define AV_CODEC_ID_VCR1 CODEC_ID_VCR1
253 #define AV_CODEC_ID_FFV1 CODEC_ID_FFV1
254 #define AV_CODEC_ID_XAN_WC4 CODEC_ID_XAN_WC4
255 #define AV_CODEC_ID_MIMIC CODEC_ID_MIMIC
256 #define AV_CODEC_ID_MSRLE CODEC_ID_MSRLE
257 #define AV_CODEC_ID_MSVIDEO1 CODEC_ID_MSVIDEO1
258 #define AV_CODEC_ID_CINEPAK CODEC_ID_CINEPAK
259 #define AV_CODEC_ID_TRUEMOTION1 CODEC_ID_TRUEMOTION1
260 #define AV_CODEC_ID_TRUEMOTION2 CODEC_ID_TRUEMOTION2
261 #define AV_CODEC_ID_MSZH CODEC_ID_MSZH
262 #define AV_CODEC_ID_ZLIB CODEC_ID_ZLIB
263 
264 #if FF_API_SNOW
265 #define AV_CODEC_ID_SNOW CODEC_ID_SNOW
266 #endif
267 
268 #define AV_CODEC_ID_4XM CODEC_ID_4XM
269 #define AV_CODEC_ID_FLV1 CODEC_ID_FLV1
270 #define AV_CODEC_ID_FLASHSV CODEC_ID_FLASHSV
271 #define AV_CODEC_ID_SVQ1 CODEC_ID_SVQ1
272 #define AV_CODEC_ID_TSCC CODEC_ID_TSCC
273 #define AV_CODEC_ID_ULTI CODEC_ID_ULTI
274 #define AV_CODEC_ID_VIXL CODEC_ID_VIXL
275 #define AV_CODEC_ID_QPEG CODEC_ID_QPEG
276 #define AV_CODEC_ID_WMV3 CODEC_ID_WMV3
277 #define AV_CODEC_ID_VC1 CODEC_ID_VC1
278 #define AV_CODEC_ID_LOCO CODEC_ID_LOCO
279 #define AV_CODEC_ID_WNV1 CODEC_ID_WNV1
280 #define AV_CODEC_ID_AASC CODEC_ID_AASC
281 #define AV_CODEC_ID_FRAPS CODEC_ID_FRAPS
282 #define AV_CODEC_ID_THEORA CODEC_ID_THEORA
283 #define AV_CODEC_ID_CSCD CODEC_ID_CSCD
284 #define AV_CODEC_ID_ZMBV CODEC_ID_ZMBV
285 #define AV_CODEC_ID_KMVC CODEC_ID_KMVC
286 #define AV_CODEC_ID_CAVS CODEC_ID_CAVS
287 #define AV_CODEC_ID_JPEG2000 CODEC_ID_JPEG2000
288 #define AV_CODEC_ID_VMNC CODEC_ID_VMNC
289 #define AV_CODEC_ID_TARGA CODEC_ID_TARGA
290 #define AV_CODEC_ID_PNG CODEC_ID_PNG
291 #define AV_CODEC_ID_GIF CODEC_ID_GIF
292 #define AV_CODEC_ID_TIFF CODEC_ID_TIFF
293 #define AV_CODEC_ID_CLJR CODEC_ID_CLJR
294 #define AV_CODEC_ID_DIRAC CODEC_ID_DIRAC
295 #define AV_CODEC_ID_RPZA CODEC_ID_RPZA
296 #define AV_CODEC_ID_SP5X CODEC_ID_SP5X
297 
298 #define AV_CODEC_ID_FLASHSV2 CODEC_ID_FLASHSV2
299 #define AV_CODEC_ID_TEXT CODEC_ID_TEXT
300 #define AV_CODEC_ID_SSA CODEC_ID_SSA
301 #define AV_CODEC_ID_SRT CODEC_ID_SRT
302 #define AV_CODEC_ID_VP8 CODEC_ID_VP8
303 #define AV_CODEC_ID_RV10 CODEC_ID_RV10
304 #define AV_CODEC_ID_RV20 CODEC_ID_RV20
305 #define AV_CODEC_ID_RV30 CODEC_ID_RV30
306 #define AV_CODEC_ID_RV40 CODEC_ID_RV40
307 #define AV_CODEC_ID_MP3 CODEC_ID_MP3
308 #define AV_CODEC_ID_MP2 CODEC_ID_MP2
309 #define AV_CODEC_ID_AAC CODEC_ID_AAC
310 #define AV_CODEC_ID_PCM_BLURAY CODEC_ID_PCM_BLURAY
311 #define AV_CODEC_ID_AC3 CODEC_ID_AC3
312 #define AV_CODEC_ID_VORBIS CODEC_ID_VORBIS
313 #define AV_CODEC_ID_EAC3 CODEC_ID_EAC3
314 #define AV_CODEC_ID_DTS CODEC_ID_DTS
315 #define AV_CODEC_ID_TRUEHD CODEC_ID_TRUEHD
316 #define AV_CODEC_ID_S302M CODEC_ID_S302M
317 #define AV_CODEC_ID_DVB_TELETEXT CODEC_ID_DVB_TELETEXT
318 #define AV_CODEC_ID_DVB_SUBTITLE CODEC_ID_DVB_SUBTITLE
319 #define AV_CODEC_ID_DVD_SUBTITLE CODEC_ID_DVD_SUBTITLE
320 
321 #define AV_CODEC_ID_MOV_TEXT CODEC_ID_MOV_TEXT
322 #define AV_CODEC_ID_MP4ALS CODEC_ID_MP4ALS
323 #define AV_CODEC_ID_QCELP CODEC_ID_QCELP
324 #define AV_CODEC_ID_MPEG4SYSTEMS CODEC_ID_MPEG4SYSTEMS
325 
326 #define AV_CODEC_ID_MPEG2TS CODEC_ID_MPEG2TS
327 #define AV_CODEC_ID_AAC_LATM CODEC_ID_AAC_LATM
328 #define AV_CODEC_ID_HDMV_PGS_SUBTITLE CODEC_ID_HDMV_PGS_SUBTITLE
329 
330 #define AV_CODEC_ID_FLAC CODEC_ID_FLAC
331 #define AV_CODEC_ID_MLP CODEC_ID_MLP
332 
333 #define AV_CODEC_ID_PCM_F32LE CODEC_ID_PCM_F32LE
334 #define AV_CODEC_ID_PCM_F64LE CODEC_ID_PCM_F64LE
335 
336 #define AV_CODEC_ID_PCM_S16BE CODEC_ID_PCM_S16BE
337 #define AV_CODEC_ID_PCM_S24BE CODEC_ID_PCM_S24BE
338 #define AV_CODEC_ID_PCM_S32BE CODEC_ID_PCM_S32BE
339 
340 #define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE
341 #define AV_CODEC_ID_PCM_S24LE CODEC_ID_PCM_S24LE
342 #define AV_CODEC_ID_PCM_S32LE CODEC_ID_PCM_S32LE
343 
344 #define AV_CODEC_ID_PCM_U8 CODEC_ID_PCM_U8
345 
346 #define AV_CODEC_ID_QDM2 CODEC_ID_QDM2
347 #define AV_CODEC_ID_RA_144 CODEC_ID_RA_144
348 #define AV_CODEC_ID_RA_288 CODEC_ID_RA_288
349 #define AV_CODEC_ID_ATRAC3 CODEC_ID_ATRAC3
350 #define AV_CODEC_ID_COOK CODEC_ID_COOK
351 #define AV_CODEC_ID_SIPR CODEC_ID_SIPR
352 #define AV_CODEC_ID_TTA CODEC_ID_TTA
353 #define AV_CODEC_ID_WAVPACK CODEC_ID_WAVPACK
354 
355 #define AV_CODEC_ID_TTF CODEC_ID_TTF
356 
357 // from mkv_decoder.h
358 #define AV_CODEC_ID_R10K CODEC_ID_R10K
359 #define AV_CODEC_ID_R210 CODEC_ID_R210
360 #define AV_CODEC_ID_V210 CODEC_ID_V210
361 #define AV_CODEC_ID_MJPEGB CODEC_ID_MJPEGB
362 #define AV_CODEC_ID_SVQ3 CODEC_ID_SVQ3
363 #define AV_CODEC_ID_8BPS CODEC_ID_8BPS
364 #define AV_CODEC_ID_SMC CODEC_ID_SMC
365 #define AV_CODEC_ID_QTRLE CODEC_ID_QTRLE
366 #define AV_CODEC_ID_QDRAW CODEC_ID_QDRAW
367 #define AV_CODEC_ID_DNXHD CODEC_ID_DNXHD
368 #define AV_CODEC_ID_SGI CODEC_ID_SGI
369 #define AV_CODEC_ID_DPX CODEC_ID_DPX
370 #define AV_CODEC_ID_PRORES CODEC_ID_PRORES
371 
372 
373 
374 
375 #endif
376 
377 const AVCodecTag codec_bmp_tags[] = {
378  { AV_CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
379  { AV_CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
380  { AV_CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
381  { AV_CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
382  { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
383  { AV_CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
384  { AV_CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
385  { AV_CODEC_ID_H263, MKTAG('X', '2', '6', '3') },
386  { AV_CODEC_ID_H263, MKTAG('T', '2', '6', '3') },
387  { AV_CODEC_ID_H263, MKTAG('L', '2', '6', '3') },
388  { AV_CODEC_ID_H263, MKTAG('V', 'X', '1', 'K') },
389  { AV_CODEC_ID_H263, MKTAG('Z', 'y', 'G', 'o') },
390  { AV_CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
391  { AV_CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
392  { AV_CODEC_ID_H261, MKTAG('H', '2', '6', '1') },
393  { AV_CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
394  { AV_CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },
395  { AV_CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
396  { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
397  { AV_CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
398  { AV_CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
399  { AV_CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
400  { AV_CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') },
401  { AV_CODEC_ID_MPEG4, MKTAG(4 , 0 , 0 , 0) }, /* some broken avi use this */
402  { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', '1') },
403  { AV_CODEC_ID_MPEG4, MKTAG('B', 'L', 'Z', '0') },
404  { AV_CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') },
405  { AV_CODEC_ID_MPEG4, MKTAG('U', 'M', 'P', '4') },
406  { AV_CODEC_ID_MPEG4, MKTAG('W', 'V', '1', 'F') },
407  { AV_CODEC_ID_MPEG4, MKTAG('S', 'E', 'D', 'G') },
408  { AV_CODEC_ID_MPEG4, MKTAG('R', 'M', 'P', '4') },
409  { AV_CODEC_ID_MPEG4, MKTAG('3', 'I', 'V', '2') },
410  { AV_CODEC_ID_MPEG4, MKTAG('F', 'F', 'D', 'S') },
411  { AV_CODEC_ID_MPEG4, MKTAG('F', 'V', 'F', 'W') },
412  { AV_CODEC_ID_MPEG4, MKTAG('D', 'C', 'O', 'D') },
413  { AV_CODEC_ID_MPEG4, MKTAG('M', 'V', 'X', 'M') },
414  { AV_CODEC_ID_MPEG4, MKTAG('P', 'M', '4', 'V') },
415  { AV_CODEC_ID_MPEG4, MKTAG('S', 'M', 'P', '4') },
416  { AV_CODEC_ID_MPEG4, MKTAG('D', 'X', 'G', 'M') },
417  { AV_CODEC_ID_MPEG4, MKTAG('V', 'I', 'D', 'M') },
418  { AV_CODEC_ID_MPEG4, MKTAG('M', '4', 'T', '3') },
419  { AV_CODEC_ID_MPEG4, MKTAG('G', 'E', 'O', 'X') },
420  { AV_CODEC_ID_MPEG4, MKTAG('H', 'D', 'X', '4') }, /* flipped video */
421  { AV_CODEC_ID_MPEG4, MKTAG('D', 'M', 'K', '2') },
422  { AV_CODEC_ID_MPEG4, MKTAG('D', 'I', 'G', 'I') },
423  { AV_CODEC_ID_MPEG4, MKTAG('I', 'N', 'M', 'C') },
424  { AV_CODEC_ID_MPEG4, MKTAG('E', 'P', 'H', 'V') }, /* Ephv MPEG-4 */
425  { AV_CODEC_ID_MPEG4, MKTAG('E', 'M', '4', 'A') },
426  { AV_CODEC_ID_MPEG4, MKTAG('M', '4', 'C', 'C') }, /* Divio MPEG-4 */
427  { AV_CODEC_ID_MPEG4, MKTAG('S', 'N', '4', '0') },
428  { AV_CODEC_ID_MPEG4, MKTAG('V', 'S', 'P', 'X') },
429  { AV_CODEC_ID_MPEG4, MKTAG('U', 'L', 'D', 'X') },
430  { AV_CODEC_ID_MPEG4, MKTAG('G', 'E', 'O', 'V') },
431  { AV_CODEC_ID_MPEG4, MKTAG('S', 'I', 'P', 'P') }, /* Samsung SHR-6040 */
432  { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */
433  { AV_CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', '4', '3') },
434  { AV_CODEC_ID_MSMPEG4V3, MKTAG('M', 'P', 'G', '3') },
435  { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '5') },
436  { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '6') },
437  { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'I', 'V', '4') },
438  { AV_CODEC_ID_MSMPEG4V3, MKTAG('D', 'V', 'X', '3') },
439  { AV_CODEC_ID_MSMPEG4V3, MKTAG('A', 'P', '4', '1') },
440  { AV_CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '1') },
441  { AV_CODEC_ID_MSMPEG4V3, MKTAG('C', 'O', 'L', '0') },
442  { AV_CODEC_ID_MSMPEG4V2, MKTAG('M', 'P', '4', '2') },
443  { AV_CODEC_ID_MSMPEG4V2, MKTAG('D', 'I', 'V', '2') },
444  { AV_CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', 'G', '4') },
445  { AV_CODEC_ID_MSMPEG4V1, MKTAG('M', 'P', '4', '1') },
446  { AV_CODEC_ID_WMV1, MKTAG('W', 'M', 'V', '1') },
447  { AV_CODEC_ID_WMV2, MKTAG('W', 'M', 'V', '2') },
448  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd') },
449  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', 'd') },
450  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') },
451  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'l') },
452  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', '2', '5') },
453  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', '0') },
454  { AV_CODEC_ID_DVVIDEO, MKTAG('c', 'd', 'v', 'c') }, /* Canopus DV */
455  { AV_CODEC_ID_DVVIDEO, MKTAG('C', 'D', 'V', 'H') }, /* Canopus DV */
456  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') },
457  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 's') },
458  { AV_CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '1') },
459  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '1') },
460  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'g', '2') },
461  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', 'g', '2') },
462  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('M', 'P', 'E', 'G') },
463  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('P', 'I', 'M', '1') },
464  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('P', 'I', 'M', '2') },
465  { AV_CODEC_ID_MPEG1VIDEO, MKTAG('V', 'C', 'R', '2') },
466  { AV_CODEC_ID_MPEG1VIDEO, MKTAG(1 , 0 , 0 , 16) },
467  { AV_CODEC_ID_MPEG2VIDEO, MKTAG(2 , 0 , 0 , 16) },
468  { AV_CODEC_ID_MPEG4, MKTAG(4 , 0 , 0 , 16) },
469  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('D', 'V', 'R', ' ') },
470  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('M', 'M', 'E', 'S') },
471  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('L', 'M', 'P', '2') }, /* Lead MPEG2 in avi */
472  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('s', 'l', 'i', 'f') },
473  { AV_CODEC_ID_MPEG2VIDEO, MKTAG('E', 'M', '2', 'V') },
474  { AV_CODEC_ID_MJPEG, MKTAG('M', 'J', 'P', 'G') },
475  { AV_CODEC_ID_MJPEG, MKTAG('L', 'J', 'P', 'G') },
476  { AV_CODEC_ID_MJPEG, MKTAG('d', 'm', 'b', '1') },
477  { AV_CODEC_ID_MJPEG, MKTAG('m', 'j', 'p', 'a') },
478  { AV_CODEC_ID_LJPEG, MKTAG('L', 'J', 'P', 'G') },
479  { AV_CODEC_ID_MJPEG, MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */
480  { AV_CODEC_ID_JPEGLS, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */
481  { AV_CODEC_ID_MJPEG, MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - decoder */
482  { AV_CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') },
483  { AV_CODEC_ID_MJPEG, MKTAG('I', 'J', 'P', 'G') },
484  { AV_CODEC_ID_MJPEG, MKTAG('A', 'V', 'R', 'n') },
485  { AV_CODEC_ID_MJPEG, MKTAG('A', 'C', 'D', 'V') },
486  { AV_CODEC_ID_MJPEG, MKTAG('Q', 'I', 'V', 'G') },
487  { AV_CODEC_ID_MJPEG, MKTAG('S', 'L', 'M', 'J') }, /* SL M-JPEG */
488  { AV_CODEC_ID_MJPEG, MKTAG('C', 'J', 'P', 'G') }, /* Creative Webcam JPEG */
489  { AV_CODEC_ID_MJPEG, MKTAG('I', 'J', 'L', 'V') }, /* Intel JPEG Library Video Codec */
490  { AV_CODEC_ID_MJPEG, MKTAG('M', 'V', 'J', 'P') }, /* Midvid JPEG Video Codec */
491  { AV_CODEC_ID_MJPEG, MKTAG('A', 'V', 'I', '1') },
492  { AV_CODEC_ID_MJPEG, MKTAG('A', 'V', 'I', '2') },
493  { AV_CODEC_ID_MJPEG, MKTAG('M', 'T', 'S', 'J') },
494  { AV_CODEC_ID_MJPEG, MKTAG('Z', 'J', 'P', 'G') }, /* Paradigm Matrix M-JPEG Codec */
495  { AV_CODEC_ID_HUFFYUV, MKTAG('H', 'F', 'Y', 'U') },
496  { AV_CODEC_ID_FFVHUFF, MKTAG('F', 'F', 'V', 'H') },
497  { AV_CODEC_ID_CYUV, MKTAG('C', 'Y', 'U', 'V') },
498  { AV_CODEC_ID_RAWVIDEO, MKTAG(0 , 0 , 0 , 0) },
499  { AV_CODEC_ID_RAWVIDEO, MKTAG(3 , 0 , 0 , 0) },
500  { AV_CODEC_ID_RAWVIDEO, MKTAG('I', '4', '2', '0') },
501  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'Y', '2') },
502  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', '4', '2', '2') },
503  { AV_CODEC_ID_RAWVIDEO, MKTAG('V', '4', '2', '2') },
504  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'N', 'V') },
505  { AV_CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'N', 'V') },
506  { AV_CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'N', 'Y') },
507  { AV_CODEC_ID_RAWVIDEO, MKTAG('u', 'y', 'v', '1') },
508  { AV_CODEC_ID_RAWVIDEO, MKTAG('2', 'V', 'u', '1') },
509  { AV_CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') },
510  { AV_CODEC_ID_RAWVIDEO, MKTAG('P', '4', '2', '2') },
511  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', '1', '2') },
512  { AV_CODEC_ID_RAWVIDEO, MKTAG('U', 'Y', 'V', 'Y') },
513  { AV_CODEC_ID_RAWVIDEO, MKTAG('V', 'Y', 'U', 'Y') },
514  { AV_CODEC_ID_RAWVIDEO, MKTAG('I', 'Y', 'U', 'V') },
515  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', '8', '0', '0') },
516  { AV_CODEC_ID_RAWVIDEO, MKTAG('H', 'D', 'Y', 'C') },
517  { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') },
518  { AV_CODEC_ID_RAWVIDEO, MKTAG('V', 'D', 'T', 'Z') }, /* SoftLab-NSK VideoTizer */
519  { AV_CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') },
520  { AV_CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') },
521  { AV_CODEC_ID_INDEO4, MKTAG('I', 'V', '4', '1') },
522  { AV_CODEC_ID_INDEO5, MKTAG('I', 'V', '5', '0') },
523  { AV_CODEC_ID_VP3, MKTAG('V', 'P', '3', '1') },
524  { AV_CODEC_ID_VP3, MKTAG('V', 'P', '3', '0') },
525  { AV_CODEC_ID_VP5, MKTAG('V', 'P', '5', '0') },
526  { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '0') },
527  { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '1') },
528  { AV_CODEC_ID_VP6, MKTAG('V', 'P', '6', '2') },
529  { AV_CODEC_ID_VP6F, MKTAG('V', 'P', '6', 'F') },
530  { AV_CODEC_ID_VP6F, MKTAG('F', 'L', 'V', '4') },
531  { AV_CODEC_ID_ASV1, MKTAG('A', 'S', 'V', '1') },
532  { AV_CODEC_ID_ASV2, MKTAG('A', 'S', 'V', '2') },
533  { AV_CODEC_ID_VCR1, MKTAG('V', 'C', 'R', '1') },
534  { AV_CODEC_ID_FFV1, MKTAG('F', 'F', 'V', '1') },
535  { AV_CODEC_ID_XAN_WC4, MKTAG('X', 'x', 'a', 'n') },
536  { AV_CODEC_ID_MIMIC, MKTAG('L', 'M', '2', '0') },
537  { AV_CODEC_ID_MSRLE, MKTAG('m', 'r', 'l', 'e') },
538  { AV_CODEC_ID_MSRLE, MKTAG(1 , 0 , 0 , 0) },
539  { AV_CODEC_ID_MSRLE, MKTAG(2 , 0 , 0 , 0) },
540  { AV_CODEC_ID_MSVIDEO1, MKTAG('M', 'S', 'V', 'C') },
541  { AV_CODEC_ID_MSVIDEO1, MKTAG('m', 's', 'v', 'c') },
542  { AV_CODEC_ID_MSVIDEO1, MKTAG('C', 'R', 'A', 'M') },
543  { AV_CODEC_ID_MSVIDEO1, MKTAG('c', 'r', 'a', 'm') },
544  { AV_CODEC_ID_MSVIDEO1, MKTAG('W', 'H', 'A', 'M') },
545  { AV_CODEC_ID_MSVIDEO1, MKTAG('w', 'h', 'a', 'm') },
546  { AV_CODEC_ID_CINEPAK, MKTAG('c', 'v', 'i', 'd') },
547  { AV_CODEC_ID_TRUEMOTION1, MKTAG('D', 'U', 'C', 'K') },
548  { AV_CODEC_ID_TRUEMOTION1, MKTAG('P', 'V', 'E', 'Z') },
549  { AV_CODEC_ID_MSZH, MKTAG('M', 'S', 'Z', 'H') },
550  { AV_CODEC_ID_ZLIB, MKTAG('Z', 'L', 'I', 'B') },
551 #if FF_API_SNOW
552  { AV_CODEC_ID_SNOW, MKTAG('S', 'N', 'O', 'W') },
553 #endif
554  { AV_CODEC_ID_4XM, MKTAG('4', 'X', 'M', 'V') },
555  { AV_CODEC_ID_FLV1, MKTAG('F', 'L', 'V', '1') },
556  { AV_CODEC_ID_FLASHSV, MKTAG('F', 'S', 'V', '1') },
557  { AV_CODEC_ID_SVQ1, MKTAG('s', 'v', 'q', '1') },
558  { AV_CODEC_ID_TSCC, MKTAG('t', 's', 'c', 'c') },
559  { AV_CODEC_ID_ULTI, MKTAG('U', 'L', 'T', 'I') },
560  { AV_CODEC_ID_VIXL, MKTAG('V', 'I', 'X', 'L') },
561  { AV_CODEC_ID_QPEG, MKTAG('Q', 'P', 'E', 'G') },
562  { AV_CODEC_ID_QPEG, MKTAG('Q', '1', '.', '0') },
563  { AV_CODEC_ID_QPEG, MKTAG('Q', '1', '.', '1') },
564  { AV_CODEC_ID_WMV3, MKTAG('W', 'M', 'V', '3') },
565  { AV_CODEC_ID_VC1, MKTAG('W', 'V', 'C', '1') },
566  { AV_CODEC_ID_VC1, MKTAG('W', 'M', 'V', 'A') },
567  { AV_CODEC_ID_LOCO, MKTAG('L', 'O', 'C', 'O') },
568  { AV_CODEC_ID_WNV1, MKTAG('W', 'N', 'V', '1') },
569  { AV_CODEC_ID_AASC, MKTAG('A', 'A', 'S', 'C') },
570  { AV_CODEC_ID_INDEO2, MKTAG('R', 'T', '2', '1') },
571  { AV_CODEC_ID_FRAPS, MKTAG('F', 'P', 'S', '1') },
572  { AV_CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
573  { AV_CODEC_ID_TRUEMOTION2, MKTAG('T', 'M', '2', '0') },
574  { AV_CODEC_ID_CSCD, MKTAG('C', 'S', 'C', 'D') },
575  { AV_CODEC_ID_ZMBV, MKTAG('Z', 'M', 'B', 'V') },
576  { AV_CODEC_ID_KMVC, MKTAG('K', 'M', 'V', 'C') },
577  { AV_CODEC_ID_CAVS, MKTAG('C', 'A', 'V', 'S') },
578  { AV_CODEC_ID_JPEG2000, MKTAG('M', 'J', '2', 'C') },
579  { AV_CODEC_ID_VMNC, MKTAG('V', 'M', 'n', 'c') },
580  { AV_CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
581  { AV_CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
582  { AV_CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') },
583  { AV_CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') },
584  { AV_CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
585  { AV_CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') },
586  { AV_CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
587  { AV_CODEC_ID_RPZA, MKTAG('r', 'p', 'z', 'a') },
588  { AV_CODEC_ID_SP5X, MKTAG('S', 'P', '5', '4') },
589  { AV_CODEC_ID_NONE, 0 }
590 };
591 
592 
593 #ifndef __WEED_PALETTES_H__
594 #include <weed/weed-palettes.h>
595 #endif
596 
597 #ifdef FF_API_PIX_FMT
598 
599 int avi_pix_fmt_to_weed_palette(enum PixelFormat pix_fmt, int *clamped) {
600  // clamped may be set to NULL if you are not interested in the value
601  switch (pix_fmt) {
602  case PIX_FMT_RGB24:
603  return WEED_PALETTE_RGB24;
604  case PIX_FMT_BGR24:
605  return WEED_PALETTE_BGR24;
606  case PIX_FMT_RGBA:
607  return WEED_PALETTE_RGBA32;
608  case PIX_FMT_BGRA:
609  return WEED_PALETTE_BGRA32;
610  case PIX_FMT_ARGB:
611  return WEED_PALETTE_ARGB32;
612  case PIX_FMT_YUV444P:
613  return WEED_PALETTE_YUV444P;
614  case PIX_FMT_YUV422P:
615  return WEED_PALETTE_YUV422P;
616  case PIX_FMT_YUV420P:
617  return WEED_PALETTE_YUV420P;
618  case PIX_FMT_YUYV422:
619  return WEED_PALETTE_YUYV;
620  case PIX_FMT_UYVY422:
621  return WEED_PALETTE_UYVY;
622  case PIX_FMT_UYYVYY411:
623  return WEED_PALETTE_YUV411;
624  case PIX_FMT_GRAY8:
625  return WEED_PALETTE_A8;
626  case PIX_FMT_MONOWHITE:
627  case PIX_FMT_MONOBLACK:
628  return WEED_PALETTE_A1;
629  case PIX_FMT_YUVJ422P:
630  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
631  return WEED_PALETTE_YUV422P;
632  case PIX_FMT_YUVJ444P:
633  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
634  return WEED_PALETTE_YUV444P;
635  case PIX_FMT_YUVJ420P:
636  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
637  return WEED_PALETTE_YUV420P;
638 
639  default:
640  return WEED_PALETTE_END;
641  }
642 }
643 
644 
645 enum PixelFormat weed_palette_to_avi_pix_fmt(int pal, int *clamped) {
646  switch (pal) {
647  case WEED_PALETTE_RGB24:
648  return PIX_FMT_RGB24;
649  case WEED_PALETTE_BGR24:
650  return PIX_FMT_BGR24;
651  case WEED_PALETTE_RGBA32:
652  return PIX_FMT_RGBA;
653  case WEED_PALETTE_BGRA32:
654  return PIX_FMT_BGRA;
655  case WEED_PALETTE_ARGB32:
656  return PIX_FMT_ARGB;
658  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
659  return PIX_FMT_YUVJ444P;
660  return PIX_FMT_YUV444P;
662  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
663  return PIX_FMT_YUVJ422P;
664  return PIX_FMT_YUV422P;
666  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
667  return PIX_FMT_YUVJ420P;
668  return PIX_FMT_YUV420P;
669  case WEED_PALETTE_YUYV:
670  return PIX_FMT_YUYV422;
671  case WEED_PALETTE_UYVY:
672  return PIX_FMT_UYVY422;
673  case WEED_PALETTE_YUV411:
674  return PIX_FMT_UYYVYY411;
675 
676  case WEED_PALETTE_A8:
677  return PIX_FMT_GRAY8;
678  case WEED_PALETTE_A1:
679  return PIX_FMT_MONOBLACK;
680 
681  default:
682  return PIX_FMT_NONE;
683  }
684  }
685 
686 #else
687 
688 int avi_pix_fmt_to_weed_palette(enum AVPixelFormat pix_fmt, int *clamped) {
689  // clamped may be set to NULL if you are not interested in the value
690  switch (pix_fmt) {
691  case AV_PIX_FMT_RGB24:
692  return WEED_PALETTE_RGB24;
693  case AV_PIX_FMT_BGR24:
694  return WEED_PALETTE_BGR24;
695  case AV_PIX_FMT_RGBA:
696  return WEED_PALETTE_RGBA32;
697  case AV_PIX_FMT_BGRA:
698  return WEED_PALETTE_BGRA32;
699  case AV_PIX_FMT_ARGB:
700  return WEED_PALETTE_ARGB32;
701  case AV_PIX_FMT_YUV444P:
702  return WEED_PALETTE_YUV444P;
703  case AV_PIX_FMT_YUV422P:
704  return WEED_PALETTE_YUV422P;
705  case AV_PIX_FMT_YUV420P:
706  return WEED_PALETTE_YUV420P;
707  case AV_PIX_FMT_YUYV422:
708  return WEED_PALETTE_YUYV;
709  case AV_PIX_FMT_UYVY422:
710  return WEED_PALETTE_UYVY;
711  case AV_PIX_FMT_UYYVYY411:
712  return WEED_PALETTE_YUV411;
713  case AV_PIX_FMT_GRAY8:
714  return WEED_PALETTE_A8;
715  case AV_PIX_FMT_MONOWHITE:
716  case AV_PIX_FMT_MONOBLACK:
717  return WEED_PALETTE_A1;
718  case AV_PIX_FMT_YUVJ422P:
719  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
720  return WEED_PALETTE_YUV422P;
721  case AV_PIX_FMT_YUVJ444P:
722  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
723  return WEED_PALETTE_YUV444P;
724  case AV_PIX_FMT_YUVJ420P:
725  if (clamped) *clamped = WEED_YUV_CLAMPING_UNCLAMPED;
726  return WEED_PALETTE_YUV420P;
727 
728  default:
729  return WEED_PALETTE_END;
730  }
731 }
732 
733 
734 enum AVPixelFormat weed_palette_to_avi_pix_fmt(int pal, int *clamped) {
735  switch (pal) {
736  case WEED_PALETTE_RGB24:
737  return AV_PIX_FMT_RGB24;
738  case WEED_PALETTE_BGR24:
739  return AV_PIX_FMT_BGR24;
740  case WEED_PALETTE_RGBA32:
741  return AV_PIX_FMT_RGBA;
742  case WEED_PALETTE_BGRA32:
743  return AV_PIX_FMT_BGRA;
744  case WEED_PALETTE_ARGB32:
745  return AV_PIX_FMT_ARGB;
747  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
748  return AV_PIX_FMT_YUVJ444P;
749  return AV_PIX_FMT_YUV444P;
751  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
752  return AV_PIX_FMT_YUVJ422P;
753  return AV_PIX_FMT_YUV422P;
755  if (clamped && *clamped == WEED_YUV_CLAMPING_UNCLAMPED)
756  return AV_PIX_FMT_YUVJ420P;
757  return AV_PIX_FMT_YUV420P;
758  case WEED_PALETTE_YUYV:
759  return AV_PIX_FMT_YUYV422;
760  case WEED_PALETTE_UYVY:
761  return AV_PIX_FMT_UYVY422;
762  case WEED_PALETTE_YUV411:
763  return AV_PIX_FMT_UYYVYY411;
764 
765  case WEED_PALETTE_A8:
766  return AV_PIX_FMT_GRAY8;
767  case WEED_PALETTE_A1:
768  return AV_PIX_FMT_MONOBLACK;
769 
770  default:
771  return AV_PIX_FMT_NONE;
772  }
773  }
774 
775 #endif
776 
777 #endif // HAVE_AVUTIL
778 #endif // HAVE_AVCODEC
779 
780 #ifdef __cplusplus
781 }
782 #endif /* __cplusplus */
783 
784 #endif // #ifndef __WEED_COMPAT_H__
#define WEED_PALETTE_YUV420P
Definition: weed-palettes.h:76
#define WEED_PALETTE_YUV888
Definition: weed-palettes.h:90
#define WEED_PALETTE_A8
Definition: weed-palettes.h:96
#define WEED_YUV_SUBSPACE_BT709
Definition: weed-palettes.h:115
#define WEED_PALETTE_YUV411
Definition: weed-palettes.h:88
#define WEED_PALETTE_A1
Definition: weed-palettes.h:95
#define WEED_PALETTE_YUV444P
Definition: weed-palettes.h:81
#define WEED_YUV_CLAMPING_CLAMPED
Definition: weed-palettes.h:109
#define WEED_PALETTE_UYVY
Definition: weed-palettes.h:87
#define WEED_PALETTE_END
Definition: weed-palettes.h:59
#define WEED_PALETTE_YUV422P
Definition: weed-palettes.h:74
#define WEED_PALETTE_BGRA32
Definition: weed-palettes.h:71
#define WEED_PALETTE_RGBA32
Definition: weed-palettes.h:65
#define WEED_YUV_CLAMPING_UNCLAMPED
Definition: weed-palettes.h:110
#define WEED_PALETTE_ARGB32
Definition: weed-palettes.h:67
#define WEED_PALETTE_BGR24
Definition: weed-palettes.h:63
#define WEED_YUV_SAMPLING_DEFAULT
Definition: weed-palettes.h:102
#define WEED_PALETTE_YUYV
Definition: weed-palettes.h:84
#define WEED_PALETTE_YVU420P
Definition: weed-palettes.h:78
#define WEED_PALETTE_YUVA4444P
Definition: weed-palettes.h:82
#define WEED_PALETTE_RGB24
Definition: weed-palettes.h:61
#define WEED_YUV_SUBSPACE_YCBCR
Definition: weed-palettes.h:114