47 #ifndef __WEED_COMPAT_H__
48 #define __WEED_COMPAT_H__
56 #ifdef NEED_FOURCC_COMPAT
58 #ifndef __WEED_PALETTES_H__
62 int fourccp_to_weedp (
unsigned int fourcc,
int bpp,
int *interlaced,
int *sampling,
63 int *sspace,
int *clamping) {
77 if (interlaced!=NULL) *interlaced=0;
109 if (interlaced!=NULL) *interlaced=1;
204 #include <libavcodec/avcodec.h>
205 #include <libavutil/pixfmt.h>
207 typedef struct AVCodecTag {
213 #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
216 const AVCodecTag codec_bmp_tags[] = {
217 { CODEC_ID_H264, MKTAG(
'H',
'2',
'6',
'4') },
218 { CODEC_ID_H264, MKTAG(
'h',
'2',
'6',
'4') },
219 { CODEC_ID_H264, MKTAG(
'X',
'2',
'6',
'4') },
220 { CODEC_ID_H264, MKTAG(
'x',
'2',
'6',
'4') },
221 { CODEC_ID_H264, MKTAG(
'a',
'v',
'c',
'1') },
222 { CODEC_ID_H264, MKTAG(
'V',
'S',
'S',
'H') },
223 { CODEC_ID_H263, MKTAG(
'H',
'2',
'6',
'3') },
224 { CODEC_ID_H263, MKTAG(
'X',
'2',
'6',
'3') },
225 { CODEC_ID_H263, MKTAG(
'T',
'2',
'6',
'3') },
226 { CODEC_ID_H263, MKTAG(
'L',
'2',
'6',
'3') },
227 { CODEC_ID_H263, MKTAG(
'V',
'X',
'1',
'K') },
228 { CODEC_ID_H263, MKTAG(
'Z',
'y',
'G',
'o') },
229 { CODEC_ID_H263P, MKTAG(
'H',
'2',
'6',
'3') },
230 { CODEC_ID_H263I, MKTAG(
'I',
'2',
'6',
'3') },
231 { CODEC_ID_H261, MKTAG(
'H',
'2',
'6',
'1') },
232 { CODEC_ID_H263P, MKTAG(
'U',
'2',
'6',
'3') },
233 { CODEC_ID_H263P, MKTAG(
'v',
'i',
'v',
'1') },
234 { CODEC_ID_MPEG4, MKTAG(
'F',
'M',
'P',
'4') },
235 { CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'V',
'X') },
236 { CODEC_ID_MPEG4, MKTAG(
'D',
'X',
'5',
'0') },
237 { CODEC_ID_MPEG4, MKTAG(
'X',
'V',
'I',
'D') },
238 { CODEC_ID_MPEG4, MKTAG(
'M',
'P',
'4',
'S') },
239 { CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'S',
'2') },
240 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 0 ) },
241 { CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'V',
'1') },
242 { CODEC_ID_MPEG4, MKTAG(
'B',
'L',
'Z',
'0') },
243 { CODEC_ID_MPEG4, MKTAG(
'm',
'p',
'4',
'v') },
244 { CODEC_ID_MPEG4, MKTAG(
'U',
'M',
'P',
'4') },
245 { CODEC_ID_MPEG4, MKTAG(
'W',
'V',
'1',
'F') },
246 { CODEC_ID_MPEG4, MKTAG(
'S',
'E',
'D',
'G') },
247 { CODEC_ID_MPEG4, MKTAG(
'R',
'M',
'P',
'4') },
248 { CODEC_ID_MPEG4, MKTAG(
'3',
'I',
'V',
'2') },
249 { CODEC_ID_MPEG4, MKTAG(
'F',
'F',
'D',
'S') },
250 { CODEC_ID_MPEG4, MKTAG(
'F',
'V',
'F',
'W') },
251 { CODEC_ID_MPEG4, MKTAG(
'D',
'C',
'O',
'D') },
252 { CODEC_ID_MPEG4, MKTAG(
'M',
'V',
'X',
'M') },
253 { CODEC_ID_MPEG4, MKTAG(
'P',
'M',
'4',
'V') },
254 { CODEC_ID_MPEG4, MKTAG(
'S',
'M',
'P',
'4') },
255 { CODEC_ID_MPEG4, MKTAG(
'D',
'X',
'G',
'M') },
256 { CODEC_ID_MPEG4, MKTAG(
'V',
'I',
'D',
'M') },
257 { CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'T',
'3') },
258 { CODEC_ID_MPEG4, MKTAG(
'G',
'E',
'O',
'X') },
259 { CODEC_ID_MPEG4, MKTAG(
'H',
'D',
'X',
'4') },
260 { CODEC_ID_MPEG4, MKTAG(
'D',
'M',
'K',
'2') },
261 { CODEC_ID_MPEG4, MKTAG(
'D',
'I',
'G',
'I') },
262 { CODEC_ID_MPEG4, MKTAG(
'I',
'N',
'M',
'C') },
263 { CODEC_ID_MPEG4, MKTAG(
'E',
'P',
'H',
'V') },
264 { CODEC_ID_MPEG4, MKTAG(
'E',
'M',
'4',
'A') },
265 { CODEC_ID_MPEG4, MKTAG(
'M',
'4',
'C',
'C') },
266 { CODEC_ID_MPEG4, MKTAG(
'S',
'N',
'4',
'0') },
267 { CODEC_ID_MPEG4, MKTAG(
'V',
'S',
'P',
'X') },
268 { CODEC_ID_MPEG4, MKTAG(
'U',
'L',
'D',
'X') },
269 { CODEC_ID_MPEG4, MKTAG(
'G',
'E',
'O',
'V') },
270 { CODEC_ID_MPEG4, MKTAG(
'S',
'I',
'P',
'P') },
271 { CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'3') },
272 { CODEC_ID_MSMPEG4V3, MKTAG(
'M',
'P',
'4',
'3') },
273 { CODEC_ID_MSMPEG4V3, MKTAG(
'M',
'P',
'G',
'3') },
274 { CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'5') },
275 { CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'6') },
276 { CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'I',
'V',
'4') },
277 { CODEC_ID_MSMPEG4V3, MKTAG(
'D',
'V',
'X',
'3') },
278 { CODEC_ID_MSMPEG4V3, MKTAG(
'A',
'P',
'4',
'1') },
279 { CODEC_ID_MSMPEG4V3, MKTAG(
'C',
'O',
'L',
'1') },
280 { CODEC_ID_MSMPEG4V3, MKTAG(
'C',
'O',
'L',
'0') },
281 { CODEC_ID_MSMPEG4V2, MKTAG(
'M',
'P',
'4',
'2') },
282 { CODEC_ID_MSMPEG4V2, MKTAG(
'D',
'I',
'V',
'2') },
283 { CODEC_ID_MSMPEG4V1, MKTAG(
'M',
'P',
'G',
'4') },
284 { CODEC_ID_MSMPEG4V1, MKTAG(
'M',
'P',
'4',
'1') },
285 { CODEC_ID_WMV1, MKTAG(
'W',
'M',
'V',
'1') },
286 { CODEC_ID_WMV2, MKTAG(
'W',
'M',
'V',
'2') },
287 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
's',
'd') },
288 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'd') },
289 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'1') },
290 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
's',
'l') },
291 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'2',
'5') },
292 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'5',
'0') },
293 { CODEC_ID_DVVIDEO, MKTAG(
'c',
'd',
'v',
'c') },
294 { CODEC_ID_DVVIDEO, MKTAG(
'C',
'D',
'V',
'H') },
295 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'c',
' ') },
296 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'c',
's') },
297 { CODEC_ID_DVVIDEO, MKTAG(
'd',
'v',
'h',
'1') },
298 { CODEC_ID_MPEG1VIDEO, MKTAG(
'm',
'p',
'g',
'1') },
299 { CODEC_ID_MPEG1VIDEO, MKTAG(
'm',
'p',
'g',
'2') },
300 { CODEC_ID_MPEG2VIDEO, MKTAG(
'm',
'p',
'g',
'2') },
301 { CODEC_ID_MPEG2VIDEO, MKTAG(
'M',
'P',
'E',
'G') },
302 { CODEC_ID_MPEG1VIDEO, MKTAG(
'P',
'I',
'M',
'1') },
303 { CODEC_ID_MPEG2VIDEO, MKTAG(
'P',
'I',
'M',
'2') },
304 { CODEC_ID_MPEG1VIDEO, MKTAG(
'V',
'C',
'R',
'2') },
305 { CODEC_ID_MPEG1VIDEO, MKTAG( 1 , 0 , 0 , 16) },
306 { CODEC_ID_MPEG2VIDEO, MKTAG( 2 , 0 , 0 , 16) },
307 { CODEC_ID_MPEG4, MKTAG( 4 , 0 , 0 , 16) },
308 { CODEC_ID_MPEG2VIDEO, MKTAG(
'D',
'V',
'R',
' ') },
309 { CODEC_ID_MPEG2VIDEO, MKTAG(
'M',
'M',
'E',
'S') },
310 { CODEC_ID_MPEG2VIDEO, MKTAG(
'L',
'M',
'P',
'2') },
311 { CODEC_ID_MPEG2VIDEO, MKTAG(
's',
'l',
'i',
'f') },
312 { CODEC_ID_MPEG2VIDEO, MKTAG(
'E',
'M',
'2',
'V') },
313 { CODEC_ID_MJPEG, MKTAG(
'M',
'J',
'P',
'G') },
314 { CODEC_ID_MJPEG, MKTAG(
'L',
'J',
'P',
'G') },
315 { CODEC_ID_MJPEG, MKTAG(
'd',
'm',
'b',
'1') },
316 { CODEC_ID_MJPEG, MKTAG(
'm',
'j',
'p',
'a') },
317 { CODEC_ID_LJPEG, MKTAG(
'L',
'J',
'P',
'G') },
318 { CODEC_ID_MJPEG, MKTAG(
'J',
'P',
'G',
'L') },
319 { CODEC_ID_JPEGLS, MKTAG(
'M',
'J',
'L',
'S') },
320 { CODEC_ID_MJPEG, MKTAG(
'M',
'J',
'L',
'S') },
321 { CODEC_ID_MJPEG, MKTAG(
'j',
'p',
'e',
'g') },
322 { CODEC_ID_MJPEG, MKTAG(
'I',
'J',
'P',
'G') },
323 { CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'R',
'n') },
324 { CODEC_ID_MJPEG, MKTAG(
'A',
'C',
'D',
'V') },
325 { CODEC_ID_MJPEG, MKTAG(
'Q',
'I',
'V',
'G') },
326 { CODEC_ID_MJPEG, MKTAG(
'S',
'L',
'M',
'J') },
327 { CODEC_ID_MJPEG, MKTAG(
'C',
'J',
'P',
'G') },
328 { CODEC_ID_MJPEG, MKTAG(
'I',
'J',
'L',
'V') },
329 { CODEC_ID_MJPEG, MKTAG(
'M',
'V',
'J',
'P') },
330 { CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'I',
'1') },
331 { CODEC_ID_MJPEG, MKTAG(
'A',
'V',
'I',
'2') },
332 { CODEC_ID_MJPEG, MKTAG(
'M',
'T',
'S',
'J') },
333 { CODEC_ID_MJPEG, MKTAG(
'Z',
'J',
'P',
'G') },
334 { CODEC_ID_HUFFYUV, MKTAG(
'H',
'F',
'Y',
'U') },
335 { CODEC_ID_FFVHUFF, MKTAG(
'F',
'F',
'V',
'H') },
336 { CODEC_ID_CYUV, MKTAG(
'C',
'Y',
'U',
'V') },
337 { CODEC_ID_RAWVIDEO, MKTAG( 0 , 0 , 0 , 0 ) },
338 { CODEC_ID_RAWVIDEO, MKTAG( 3 , 0 , 0 , 0 ) },
339 { CODEC_ID_RAWVIDEO, MKTAG(
'I',
'4',
'2',
'0') },
340 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'U',
'Y',
'2') },
341 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'4',
'2',
'2') },
342 { CODEC_ID_RAWVIDEO, MKTAG(
'V',
'4',
'2',
'2') },
343 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'U',
'N',
'V') },
344 { CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'N',
'V') },
345 { CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'N',
'Y') },
346 { CODEC_ID_RAWVIDEO, MKTAG(
'u',
'y',
'v',
'1') },
347 { CODEC_ID_RAWVIDEO, MKTAG(
'2',
'V',
'u',
'1') },
348 { CODEC_ID_RAWVIDEO, MKTAG(
'2',
'v',
'u',
'y') },
349 { CODEC_ID_RAWVIDEO, MKTAG(
'P',
'4',
'2',
'2') },
350 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'V',
'1',
'2') },
351 { CODEC_ID_RAWVIDEO, MKTAG(
'U',
'Y',
'V',
'Y') },
352 { CODEC_ID_RAWVIDEO, MKTAG(
'V',
'Y',
'U',
'Y') },
353 { CODEC_ID_RAWVIDEO, MKTAG(
'I',
'Y',
'U',
'V') },
354 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'8',
'0',
'0') },
355 { CODEC_ID_RAWVIDEO, MKTAG(
'H',
'D',
'Y',
'C') },
356 { CODEC_ID_RAWVIDEO, MKTAG(
'Y',
'V',
'U',
'9') },
357 { CODEC_ID_RAWVIDEO, MKTAG(
'V',
'D',
'T',
'Z') },
358 { CODEC_ID_INDEO3, MKTAG(
'I',
'V',
'3',
'1') },
359 { CODEC_ID_INDEO3, MKTAG(
'I',
'V',
'3',
'2') },
360 { CODEC_ID_INDEO4, MKTAG(
'I',
'V',
'4',
'1') },
361 { CODEC_ID_INDEO5, MKTAG(
'I',
'V',
'5',
'0') },
362 { CODEC_ID_VP3, MKTAG(
'V',
'P',
'3',
'1') },
363 { CODEC_ID_VP3, MKTAG(
'V',
'P',
'3',
'0') },
364 { CODEC_ID_VP5, MKTAG(
'V',
'P',
'5',
'0') },
365 { CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'0') },
366 { CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'1') },
367 { CODEC_ID_VP6, MKTAG(
'V',
'P',
'6',
'2') },
368 { CODEC_ID_VP6F, MKTAG(
'V',
'P',
'6',
'F') },
369 { CODEC_ID_VP6F, MKTAG(
'F',
'L',
'V',
'4') },
370 { CODEC_ID_ASV1, MKTAG(
'A',
'S',
'V',
'1') },
371 { CODEC_ID_ASV2, MKTAG(
'A',
'S',
'V',
'2') },
372 { CODEC_ID_VCR1, MKTAG(
'V',
'C',
'R',
'1') },
373 { CODEC_ID_FFV1, MKTAG(
'F',
'F',
'V',
'1') },
374 { CODEC_ID_XAN_WC4, MKTAG(
'X',
'x',
'a',
'n') },
375 { CODEC_ID_MIMIC, MKTAG(
'L',
'M',
'2',
'0') },
376 { CODEC_ID_MSRLE, MKTAG(
'm',
'r',
'l',
'e') },
377 { CODEC_ID_MSRLE, MKTAG( 1 , 0 , 0 , 0 ) },
378 { CODEC_ID_MSRLE, MKTAG( 2 , 0 , 0 , 0 ) },
379 { CODEC_ID_MSVIDEO1, MKTAG(
'M',
'S',
'V',
'C') },
380 { CODEC_ID_MSVIDEO1, MKTAG(
'm',
's',
'v',
'c') },
381 { CODEC_ID_MSVIDEO1, MKTAG(
'C',
'R',
'A',
'M') },
382 { CODEC_ID_MSVIDEO1, MKTAG(
'c',
'r',
'a',
'm') },
383 { CODEC_ID_MSVIDEO1, MKTAG(
'W',
'H',
'A',
'M') },
384 { CODEC_ID_MSVIDEO1, MKTAG(
'w',
'h',
'a',
'm') },
385 { CODEC_ID_CINEPAK, MKTAG(
'c',
'v',
'i',
'd') },
386 { CODEC_ID_TRUEMOTION1, MKTAG(
'D',
'U',
'C',
'K') },
387 { CODEC_ID_TRUEMOTION1, MKTAG(
'P',
'V',
'E',
'Z') },
388 { CODEC_ID_MSZH, MKTAG(
'M',
'S',
'Z',
'H') },
389 { CODEC_ID_ZLIB, MKTAG(
'Z',
'L',
'I',
'B') },
390 { CODEC_ID_SNOW, MKTAG(
'S',
'N',
'O',
'W') },
391 { CODEC_ID_4XM, MKTAG(
'4',
'X',
'M',
'V') },
392 { CODEC_ID_FLV1, MKTAG(
'F',
'L',
'V',
'1') },
393 { CODEC_ID_FLASHSV, MKTAG(
'F',
'S',
'V',
'1') },
394 { CODEC_ID_SVQ1, MKTAG(
's',
'v',
'q',
'1') },
395 { CODEC_ID_TSCC, MKTAG(
't',
's',
'c',
'c') },
396 { CODEC_ID_ULTI, MKTAG(
'U',
'L',
'T',
'I') },
397 { CODEC_ID_VIXL, MKTAG(
'V',
'I',
'X',
'L') },
398 { CODEC_ID_QPEG, MKTAG(
'Q',
'P',
'E',
'G') },
399 { CODEC_ID_QPEG, MKTAG(
'Q',
'1',
'.',
'0') },
400 { CODEC_ID_QPEG, MKTAG(
'Q',
'1',
'.',
'1') },
401 { CODEC_ID_WMV3, MKTAG(
'W',
'M',
'V',
'3') },
402 { CODEC_ID_VC1, MKTAG(
'W',
'V',
'C',
'1') },
403 { CODEC_ID_VC1, MKTAG(
'W',
'M',
'V',
'A') },
404 { CODEC_ID_LOCO, MKTAG(
'L',
'O',
'C',
'O') },
405 { CODEC_ID_WNV1, MKTAG(
'W',
'N',
'V',
'1') },
406 { CODEC_ID_AASC, MKTAG(
'A',
'A',
'S',
'C') },
407 { CODEC_ID_INDEO2, MKTAG(
'R',
'T',
'2',
'1') },
408 { CODEC_ID_FRAPS, MKTAG(
'F',
'P',
'S',
'1') },
409 { CODEC_ID_THEORA, MKTAG(
't',
'h',
'e',
'o') },
410 { CODEC_ID_TRUEMOTION2, MKTAG(
'T',
'M',
'2',
'0') },
411 { CODEC_ID_CSCD, MKTAG(
'C',
'S',
'C',
'D') },
412 { CODEC_ID_ZMBV, MKTAG(
'Z',
'M',
'B',
'V') },
413 { CODEC_ID_KMVC, MKTAG(
'K',
'M',
'V',
'C') },
414 { CODEC_ID_CAVS, MKTAG(
'C',
'A',
'V',
'S') },
415 { CODEC_ID_JPEG2000, MKTAG(
'M',
'J',
'2',
'C') },
416 { CODEC_ID_VMNC, MKTAG(
'V',
'M',
'n',
'c') },
417 { CODEC_ID_TARGA, MKTAG(
't',
'g',
'a',
' ') },
418 { CODEC_ID_PNG, MKTAG(
'M',
'P',
'N',
'G') },
419 { CODEC_ID_PNG, MKTAG(
'P',
'N',
'G',
'1') },
420 { CODEC_ID_CLJR, MKTAG(
'c',
'l',
'j',
'r') },
421 { CODEC_ID_DIRAC, MKTAG(
'd',
'r',
'a',
'c') },
422 { CODEC_ID_RPZA, MKTAG(
'a',
'z',
'p',
'r') },
423 { CODEC_ID_RPZA, MKTAG(
'R',
'P',
'Z',
'A') },
424 { CODEC_ID_RPZA, MKTAG(
'r',
'p',
'z',
'a') },
425 { CODEC_ID_SP5X, MKTAG(
'S',
'P',
'5',
'4') },
430 #ifndef __WEED_PALETTES_H__
434 int avi_pix_fmt_to_weed_palette(
enum PixelFormat pix_fmt,
int *clamped) {
448 case PIX_FMT_YUV444P:
450 case PIX_FMT_YUV422P:
452 case PIX_FMT_YUV420P:
454 case PIX_FMT_YUYV422:
456 case PIX_FMT_UYVY422:
458 case PIX_FMT_UYYVYY411:
462 case PIX_FMT_MONOWHITE:
463 case PIX_FMT_MONOBLACK:
465 case PIX_FMT_YUVJ422P:
468 case PIX_FMT_YUVJ444P:
471 case PIX_FMT_YUVJ420P:
483 enum PixelFormat weed_palette_to_avi_pix_fmt(
int pal,
int *clamped) {
487 return PIX_FMT_RGB24;
489 return PIX_FMT_BGR24;
498 return PIX_FMT_YUVJ444P;
499 return PIX_FMT_YUV444P;
502 return PIX_FMT_YUVJ422P;
503 return PIX_FMT_YUV422P;
506 return PIX_FMT_YUVJ420P;
507 return PIX_FMT_YUV420P;
509 return PIX_FMT_YUYV422;
511 return PIX_FMT_UYVY422;
513 return PIX_FMT_UYYVYY411;
516 return PIX_FMT_GRAY8;
518 return PIX_FMT_MONOBLACK;
528 #endif // HAVE_AVUTIL
529 #endif // HAVE_AVCODEC
535 #endif // #ifndef __WEED_COMPAT_H__