Please see mplayer svn for authorship and individual commits Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.2
| @@ -19,53 +19,88 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include "img_format.h" | #include "img_format.h" | ||||
| #include "stdio.h" | #include "stdio.h" | ||||
| #include "libavutil/bswap.h" | |||||
| const char *ff_vo_format_name(int format) | const char *ff_vo_format_name(int format) | ||||
| { | { | ||||
| static char unknown_format[20]; | static char unknown_format[20]; | ||||
| switch(format) | switch(format) | ||||
| { | { | ||||
| case IMGFMT_RGB1: return "RGB 1-bit"; | |||||
| case IMGFMT_RGB4: return "RGB 4-bit"; | |||||
| case IMGFMT_RG4B: return "RGB 4-bit per byte"; | |||||
| case IMGFMT_RGB8: return "RGB 8-bit"; | |||||
| case IMGFMT_RGB12: return "RGB 12-bit"; | |||||
| case IMGFMT_RGB15: return "RGB 15-bit"; | |||||
| case IMGFMT_RGB16: return "RGB 16-bit"; | |||||
| case IMGFMT_RGB24: return "RGB 24-bit"; | |||||
| // case IMGFMT_RGB32: return "RGB 32-bit"; | |||||
| case IMGFMT_RGB1: return "RGB 1-bit"; | |||||
| case IMGFMT_RGB4: return "RGB 4-bit"; | |||||
| case IMGFMT_RG4B: return "RGB 4-bit per byte"; | |||||
| case IMGFMT_RGB8: return "RGB 8-bit"; | |||||
| case IMGFMT_RGB12: return "RGB 12-bit"; | |||||
| case IMGFMT_RGB15: return "RGB 15-bit"; | |||||
| case IMGFMT_RGB16: return "RGB 16-bit"; | |||||
| case IMGFMT_RGB24: return "RGB 24-bit"; | |||||
| // case IMGFMT_RGB32: return "RGB 32-bit"; | |||||
| case IMGFMT_RGB48LE: return "RGB 48-bit LE"; | case IMGFMT_RGB48LE: return "RGB 48-bit LE"; | ||||
| case IMGFMT_RGB48BE: return "RGB 48-bit BE"; | case IMGFMT_RGB48BE: return "RGB 48-bit BE"; | ||||
| case IMGFMT_BGR1: return "BGR 1-bit"; | |||||
| case IMGFMT_BGR4: return "BGR 4-bit"; | |||||
| case IMGFMT_BG4B: return "BGR 4-bit per byte"; | |||||
| case IMGFMT_BGR8: return "BGR 8-bit"; | |||||
| case IMGFMT_BGR12: return "BGR 12-bit"; | |||||
| case IMGFMT_BGR15: return "BGR 15-bit"; | |||||
| case IMGFMT_BGR16: return "BGR 16-bit"; | |||||
| case IMGFMT_BGR24: return "BGR 24-bit"; | |||||
| // case IMGFMT_BGR32: return "BGR 32-bit"; | |||||
| case IMGFMT_ABGR: return "ABGR"; | |||||
| case IMGFMT_BGRA: return "BGRA"; | |||||
| case IMGFMT_ARGB: return "ARGB"; | |||||
| case IMGFMT_RGBA: return "RGBA"; | |||||
| case IMGFMT_YVU9: return "Planar YVU9"; | |||||
| case IMGFMT_IF09: return "Planar IF09"; | |||||
| case IMGFMT_YV12: return "Planar YV12"; | |||||
| case IMGFMT_I420: return "Planar I420"; | |||||
| case IMGFMT_IYUV: return "Planar IYUV"; | |||||
| case IMGFMT_CLPL: return "Planar CLPL"; | |||||
| case IMGFMT_Y800: return "Planar Y800"; | |||||
| case IMGFMT_Y8: return "Planar Y8"; | |||||
| case IMGFMT_RGB64LE: return "RGB 64-bit LE"; | |||||
| case IMGFMT_RGB64BE: return "RGB 64-bit BE"; | |||||
| case IMGFMT_BGR1: return "BGR 1-bit"; | |||||
| case IMGFMT_BGR4: return "BGR 4-bit"; | |||||
| case IMGFMT_BG4B: return "BGR 4-bit per byte"; | |||||
| case IMGFMT_BGR8: return "BGR 8-bit"; | |||||
| case IMGFMT_BGR12: return "BGR 12-bit"; | |||||
| case IMGFMT_BGR15: return "BGR 15-bit"; | |||||
| case IMGFMT_BGR16: return "BGR 16-bit"; | |||||
| case IMGFMT_BGR24: return "BGR 24-bit"; | |||||
| // case IMGFMT_BGR32: return "BGR 32-bit"; | |||||
| case IMGFMT_ABGR: return "ABGR"; | |||||
| case IMGFMT_BGRA: return "BGRA"; | |||||
| case IMGFMT_ARGB: return "ARGB"; | |||||
| case IMGFMT_RGBA: return "RGBA"; | |||||
| case IMGFMT_GBR24P: return "Planar GBR 24-bit"; | |||||
| case IMGFMT_GBR12P: return "Planar GBR 36-bit"; | |||||
| case IMGFMT_GBR14P: return "Planar GBR 42-bit"; | |||||
| case IMGFMT_YVU9: return "Planar YVU9"; | |||||
| case IMGFMT_IF09: return "Planar IF09"; | |||||
| case IMGFMT_YV12: return "Planar YV12"; | |||||
| case IMGFMT_I420: return "Planar I420"; | |||||
| case IMGFMT_IYUV: return "Planar IYUV"; | |||||
| case IMGFMT_CLPL: return "Planar CLPL"; | |||||
| case IMGFMT_Y800: return "Planar Y800"; | |||||
| case IMGFMT_Y8: return "Planar Y8"; | |||||
| case IMGFMT_Y8A: return "Planar Y8 with alpha"; | |||||
| case IMGFMT_Y16_LE: return "Planar Y16 little-endian"; | |||||
| case IMGFMT_Y16_BE: return "Planar Y16 big-endian"; | |||||
| case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian"; | case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian"; | ||||
| case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian"; | case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian"; | ||||
| case IMGFMT_420P14_LE: return "Planar 420P 14-bit little-endian"; | |||||
| case IMGFMT_420P14_BE: return "Planar 420P 14-bit big-endian"; | |||||
| case IMGFMT_420P12_LE: return "Planar 420P 12-bit little-endian"; | |||||
| case IMGFMT_420P12_BE: return "Planar 420P 12-bit big-endian"; | |||||
| case IMGFMT_420P10_LE: return "Planar 420P 10-bit little-endian"; | |||||
| case IMGFMT_420P10_BE: return "Planar 420P 10-bit big-endian"; | |||||
| case IMGFMT_420P9_LE: return "Planar 420P 9-bit little-endian"; | |||||
| case IMGFMT_420P9_BE: return "Planar 420P 9-bit big-endian"; | |||||
| case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian"; | case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian"; | ||||
| case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian"; | case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian"; | ||||
| case IMGFMT_422P14_LE: return "Planar 422P 14-bit little-endian"; | |||||
| case IMGFMT_422P14_BE: return "Planar 422P 14-bit big-endian"; | |||||
| case IMGFMT_422P12_LE: return "Planar 422P 12-bit little-endian"; | |||||
| case IMGFMT_422P12_BE: return "Planar 422P 12-bit big-endian"; | |||||
| case IMGFMT_422P10_LE: return "Planar 422P 10-bit little-endian"; | |||||
| case IMGFMT_422P10_BE: return "Planar 422P 10-bit big-endian"; | |||||
| case IMGFMT_422P9_LE: return "Planar 422P 9-bit little-endian"; | |||||
| case IMGFMT_422P9_BE: return "Planar 422P 9-bit big-endian"; | |||||
| case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian"; | case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian"; | ||||
| case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian"; | case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian"; | ||||
| case IMGFMT_444P14_LE: return "Planar 444P 14-bit little-endian"; | |||||
| case IMGFMT_444P14_BE: return "Planar 444P 14-bit big-endian"; | |||||
| case IMGFMT_444P12_LE: return "Planar 444P 12-bit little-endian"; | |||||
| case IMGFMT_444P12_BE: return "Planar 444P 12-bit big-endian"; | |||||
| case IMGFMT_444P10_LE: return "Planar 444P 10-bit little-endian"; | |||||
| case IMGFMT_444P10_BE: return "Planar 444P 10-bit big-endian"; | |||||
| case IMGFMT_444P9_LE: return "Planar 444P 9-bit little-endian"; | |||||
| case IMGFMT_444P9_BE: return "Planar 444P 9-bit big-endian"; | |||||
| case IMGFMT_420A: return "Planar 420P with alpha"; | case IMGFMT_420A: return "Planar 420P with alpha"; | ||||
| case IMGFMT_444P: return "Planar 444P"; | case IMGFMT_444P: return "Planar 444P"; | ||||
| case IMGFMT_444A: return "Planar 444P with alpha"; | |||||
| case IMGFMT_422P: return "Planar 422P"; | case IMGFMT_422P: return "Planar 422P"; | ||||
| case IMGFMT_422A: return "Planar 422P with alpha"; | |||||
| case IMGFMT_411P: return "Planar 411P"; | case IMGFMT_411P: return "Planar 411P"; | ||||
| case IMGFMT_NV12: return "Planar NV12"; | case IMGFMT_NV12: return "Planar NV12"; | ||||
| case IMGFMT_NV21: return "Planar NV21"; | case IMGFMT_NV21: return "Planar NV21"; | ||||
| @@ -90,33 +125,82 @@ const char *ff_vo_format_name(int format) | |||||
| case IMGFMT_CLJR: return "Packed CLJR"; | case IMGFMT_CLJR: return "Packed CLJR"; | ||||
| case IMGFMT_YUVP: return "Packed YUVP"; | case IMGFMT_YUVP: return "Packed YUVP"; | ||||
| case IMGFMT_UYVP: return "Packed UYVP"; | case IMGFMT_UYVP: return "Packed UYVP"; | ||||
| case IMGFMT_MPEGPES: return "Mpeg PES"; | |||||
| case IMGFMT_ZRMJPEGNI: return "Zoran MJPEG non-interlaced"; | |||||
| case IMGFMT_ZRMJPEGIT: return "Zoran MJPEG top field first"; | |||||
| case IMGFMT_ZRMJPEGIB: return "Zoran MJPEG bottom field first"; | |||||
| case IMGFMT_MPEGPES: return "Mpeg PES"; | |||||
| case IMGFMT_ZRMJPEGNI: return "Zoran MJPEG non-interlaced"; | |||||
| case IMGFMT_ZRMJPEGIT: return "Zoran MJPEG top field first"; | |||||
| case IMGFMT_ZRMJPEGIB: return "Zoran MJPEG bottom field first"; | |||||
| case IMGFMT_XVMC_MOCO_MPEG2: return "MPEG1/2 Motion Compensation"; | case IMGFMT_XVMC_MOCO_MPEG2: return "MPEG1/2 Motion Compensation"; | ||||
| case IMGFMT_XVMC_IDCT_MPEG2: return "MPEG1/2 Motion Compensation and IDCT"; | case IMGFMT_XVMC_IDCT_MPEG2: return "MPEG1/2 Motion Compensation and IDCT"; | ||||
| case IMGFMT_VDPAU_MPEG1: return "MPEG1 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_MPEG2: return "MPEG2 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_H264: return "H.264 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_MPEG4: return "MPEG-4 Part 2 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_WMV3: return "WMV3 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_VC1: return "VC1 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_MPEG1: return "MPEG1 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_MPEG2: return "MPEG2 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_H264: return "H.264 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_MPEG4: return "MPEG-4 Part 2 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_WMV3: return "WMV3 VDPAU acceleration"; | |||||
| case IMGFMT_VDPAU_VC1: return "VC1 VDPAU acceleration"; | |||||
| } | } | ||||
| snprintf(unknown_format,20,"Unknown 0x%04x",format); | snprintf(unknown_format,20,"Unknown 0x%04x",format); | ||||
| return unknown_format; | return unknown_format; | ||||
| } | } | ||||
| int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift) | |||||
| int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits) | |||||
| { | { | ||||
| int xs = 0, ys = 0; | int xs = 0, ys = 0; | ||||
| int bpp; | int bpp; | ||||
| int bpp_factor = 1; | |||||
| int err = 0; | int err = 0; | ||||
| switch (format) { | |||||
| case IMGFMT_420P16_LE: | |||||
| case IMGFMT_420P16_BE: | |||||
| bpp_factor = 2; | |||||
| int bits = 8; | |||||
| if ((format & 0xff0000f0) == 0x34000050) | |||||
| format = av_bswap32(format); | |||||
| if ((format & 0xf00000ff) == 0x50000034) { | |||||
| switch (format >> 24) { | |||||
| case 0x50: | |||||
| break; | |||||
| case 0x51: | |||||
| bits = 16; | |||||
| break; | |||||
| case 0x52: | |||||
| bits = 10; | |||||
| break; | |||||
| case 0x53: | |||||
| bits = 9; | |||||
| break; | |||||
| default: | |||||
| err = 1; | |||||
| break; | |||||
| } | |||||
| switch (format & 0x00ffffff) { | |||||
| case 0x00343434: // 444 | |||||
| xs = 0; | |||||
| ys = 0; | |||||
| break; | |||||
| case 0x00323234: // 422 | |||||
| xs = 1; | |||||
| ys = 0; | |||||
| break; | |||||
| case 0x00303234: // 420 | |||||
| xs = 1; | |||||
| ys = 1; | |||||
| break; | |||||
| case 0x00313134: // 411 | |||||
| xs = 2; | |||||
| ys = 0; | |||||
| break; | |||||
| case 0x00303434: // 440 | |||||
| xs = 0; | |||||
| ys = 1; | |||||
| break; | |||||
| default: | |||||
| err = 1; | |||||
| break; | |||||
| } | |||||
| } else switch (format) { | |||||
| case IMGFMT_444A: | |||||
| xs = 0; | |||||
| ys = 0; | |||||
| break; | |||||
| case IMGFMT_422A: | |||||
| xs = 1; | |||||
| ys = 0; | |||||
| break; | |||||
| case IMGFMT_420A: | case IMGFMT_420A: | ||||
| case IMGFMT_I420: | case IMGFMT_I420: | ||||
| case IMGFMT_IYUV: | case IMGFMT_IYUV: | ||||
| @@ -129,28 +213,6 @@ int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift) | |||||
| xs = 2; | xs = 2; | ||||
| ys = 2; | ys = 2; | ||||
| break; | break; | ||||
| case IMGFMT_444P16_LE: | |||||
| case IMGFMT_444P16_BE: | |||||
| bpp_factor = 2; | |||||
| case IMGFMT_444P: | |||||
| xs = 0; | |||||
| ys = 0; | |||||
| break; | |||||
| case IMGFMT_422P16_LE: | |||||
| case IMGFMT_422P16_BE: | |||||
| bpp_factor = 2; | |||||
| case IMGFMT_422P: | |||||
| xs = 1; | |||||
| ys = 0; | |||||
| break; | |||||
| case IMGFMT_411P: | |||||
| xs = 2; | |||||
| ys = 0; | |||||
| break; | |||||
| case IMGFMT_440P: | |||||
| xs = 0; | |||||
| ys = 1; | |||||
| break; | |||||
| case IMGFMT_Y8: | case IMGFMT_Y8: | ||||
| case IMGFMT_Y800: | case IMGFMT_Y800: | ||||
| xs = 31; | xs = 31; | ||||
| @@ -162,9 +224,10 @@ int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift) | |||||
| } | } | ||||
| if (x_shift) *x_shift = xs; | if (x_shift) *x_shift = xs; | ||||
| if (y_shift) *y_shift = ys; | if (y_shift) *y_shift = ys; | ||||
| if (component_bits) *component_bits = bits; | |||||
| bpp = 8 + ((16 >> xs) >> ys); | bpp = 8 + ((16 >> xs) >> ys); | ||||
| if (format == IMGFMT_420A) | |||||
| if (format == IMGFMT_420A || format == IMGFMT_422A || format == IMGFMT_444A) | |||||
| bpp += 8; | bpp += 8; | ||||
| bpp *= bpp_factor; | |||||
| bpp *= (bits + 7) >> 3; | |||||
| return err ? 0 : bpp; | return err ? 0 : bpp; | ||||
| } | } | ||||
| @@ -36,55 +36,69 @@ | |||||
| #define IMGFMT_RGB32 (IMGFMT_RGB|32) | #define IMGFMT_RGB32 (IMGFMT_RGB|32) | ||||
| #define IMGFMT_RGB48LE (IMGFMT_RGB|48) | #define IMGFMT_RGB48LE (IMGFMT_RGB|48) | ||||
| #define IMGFMT_RGB48BE (IMGFMT_RGB|48|128) | #define IMGFMT_RGB48BE (IMGFMT_RGB|48|128) | ||||
| #define IMGFMT_RGB64LE (IMGFMT_RGB|64) | |||||
| #define IMGFMT_RGB64BE (IMGFMT_RGB|64|128) | |||||
| #define IMGFMT_BGR_MASK 0xFFFFFF00 | #define IMGFMT_BGR_MASK 0xFFFFFF00 | ||||
| #define IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8)) | #define IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8)) | ||||
| #define IMGFMT_BGR1 (IMGFMT_BGR|1) | |||||
| #define IMGFMT_BGR4 (IMGFMT_BGR|4) | |||||
| #define IMGFMT_BGR1 (IMGFMT_BGR|1) | |||||
| #define IMGFMT_BGR4 (IMGFMT_BGR|4) | |||||
| #define IMGFMT_BGR4_CHAR (IMGFMT_BGR|4|128) // BGR4 with 1 pixel per byte | #define IMGFMT_BGR4_CHAR (IMGFMT_BGR|4|128) // BGR4 with 1 pixel per byte | ||||
| #define IMGFMT_BGR8 (IMGFMT_BGR|8) | |||||
| #define IMGFMT_BGR8 (IMGFMT_BGR|8) | |||||
| #define IMGFMT_BGR12 (IMGFMT_BGR|12) | #define IMGFMT_BGR12 (IMGFMT_BGR|12) | ||||
| #define IMGFMT_BGR15 (IMGFMT_BGR|15) | #define IMGFMT_BGR15 (IMGFMT_BGR|15) | ||||
| #define IMGFMT_BGR16 (IMGFMT_BGR|16) | #define IMGFMT_BGR16 (IMGFMT_BGR|16) | ||||
| #define IMGFMT_BGR24 (IMGFMT_BGR|24) | #define IMGFMT_BGR24 (IMGFMT_BGR|24) | ||||
| #define IMGFMT_BGR32 (IMGFMT_BGR|32) | #define IMGFMT_BGR32 (IMGFMT_BGR|32) | ||||
| #define IMGFMT_GBR24P (('G'<<24)|('B'<<16)|('R'<<8)|24) | |||||
| #define IMGFMT_GBR12PLE (('G'<<24)|('B'<<16)|('R'<<8)|36) | |||||
| #define IMGFMT_GBR12PBE (('G'<<24)|('B'<<16)|('R'<<8)|36|128) | |||||
| #define IMGFMT_GBR14PLE (('G'<<24)|('B'<<16)|('R'<<8)|42) | |||||
| #define IMGFMT_GBR14PBE (('G'<<24)|('B'<<16)|('R'<<8)|42|128) | |||||
| #if HAVE_BIGENDIAN | #if HAVE_BIGENDIAN | ||||
| #define IMGFMT_ABGR IMGFMT_RGB32 | |||||
| #define IMGFMT_BGRA (IMGFMT_RGB32|64) | |||||
| #define IMGFMT_ARGB IMGFMT_BGR32 | |||||
| #define IMGFMT_RGBA (IMGFMT_BGR32|64) | |||||
| #define IMGFMT_ABGR IMGFMT_RGB32 | |||||
| #define IMGFMT_BGRA (IMGFMT_RGB32|128) | |||||
| #define IMGFMT_ARGB IMGFMT_BGR32 | |||||
| #define IMGFMT_RGBA (IMGFMT_BGR32|128) | |||||
| #define IMGFMT_RGB64NE IMGFMT_RGB64BE | |||||
| #define IMGFMT_RGB48NE IMGFMT_RGB48BE | #define IMGFMT_RGB48NE IMGFMT_RGB48BE | ||||
| #define IMGFMT_RGB12BE IMGFMT_RGB12 | #define IMGFMT_RGB12BE IMGFMT_RGB12 | ||||
| #define IMGFMT_RGB12LE (IMGFMT_RGB12|64) | |||||
| #define IMGFMT_RGB12LE (IMGFMT_RGB12|128) | |||||
| #define IMGFMT_RGB15BE IMGFMT_RGB15 | #define IMGFMT_RGB15BE IMGFMT_RGB15 | ||||
| #define IMGFMT_RGB15LE (IMGFMT_RGB15|64) | |||||
| #define IMGFMT_RGB15LE (IMGFMT_RGB15|128) | |||||
| #define IMGFMT_RGB16BE IMGFMT_RGB16 | #define IMGFMT_RGB16BE IMGFMT_RGB16 | ||||
| #define IMGFMT_RGB16LE (IMGFMT_RGB16|64) | |||||
| #define IMGFMT_RGB16LE (IMGFMT_RGB16|128) | |||||
| #define IMGFMT_BGR12BE IMGFMT_BGR12 | #define IMGFMT_BGR12BE IMGFMT_BGR12 | ||||
| #define IMGFMT_BGR12LE (IMGFMT_BGR12|64) | |||||
| #define IMGFMT_BGR12LE (IMGFMT_BGR12|128) | |||||
| #define IMGFMT_BGR15BE IMGFMT_BGR15 | #define IMGFMT_BGR15BE IMGFMT_BGR15 | ||||
| #define IMGFMT_BGR15LE (IMGFMT_BGR15|64) | |||||
| #define IMGFMT_BGR15LE (IMGFMT_BGR15|128) | |||||
| #define IMGFMT_BGR16BE IMGFMT_BGR16 | #define IMGFMT_BGR16BE IMGFMT_BGR16 | ||||
| #define IMGFMT_BGR16LE (IMGFMT_BGR16|64) | |||||
| #define IMGFMT_BGR16LE (IMGFMT_BGR16|128) | |||||
| #define IMGFMT_GBR12P IMGFMT_GBR12PBE | |||||
| #define IMGFMT_GBR14P IMGFMT_GBR14PBE | |||||
| #else | #else | ||||
| #define IMGFMT_ABGR (IMGFMT_BGR32|64) | |||||
| #define IMGFMT_ABGR (IMGFMT_BGR32|128) | |||||
| #define IMGFMT_BGRA IMGFMT_BGR32 | #define IMGFMT_BGRA IMGFMT_BGR32 | ||||
| #define IMGFMT_ARGB (IMGFMT_RGB32|64) | |||||
| #define IMGFMT_ARGB (IMGFMT_RGB32|128) | |||||
| #define IMGFMT_RGBA IMGFMT_RGB32 | #define IMGFMT_RGBA IMGFMT_RGB32 | ||||
| #define IMGFMT_RGB64NE IMGFMT_RGB64LE | |||||
| #define IMGFMT_RGB48NE IMGFMT_RGB48LE | #define IMGFMT_RGB48NE IMGFMT_RGB48LE | ||||
| #define IMGFMT_RGB12BE (IMGFMT_RGB12|64) | |||||
| #define IMGFMT_RGB12BE (IMGFMT_RGB12|128) | |||||
| #define IMGFMT_RGB12LE IMGFMT_RGB12 | #define IMGFMT_RGB12LE IMGFMT_RGB12 | ||||
| #define IMGFMT_RGB15BE (IMGFMT_RGB15|64) | |||||
| #define IMGFMT_RGB15BE (IMGFMT_RGB15|128) | |||||
| #define IMGFMT_RGB15LE IMGFMT_RGB15 | #define IMGFMT_RGB15LE IMGFMT_RGB15 | ||||
| #define IMGFMT_RGB16BE (IMGFMT_RGB16|64) | |||||
| #define IMGFMT_RGB16BE (IMGFMT_RGB16|128) | |||||
| #define IMGFMT_RGB16LE IMGFMT_RGB16 | #define IMGFMT_RGB16LE IMGFMT_RGB16 | ||||
| #define IMGFMT_BGR12BE (IMGFMT_BGR12|64) | |||||
| #define IMGFMT_BGR12BE (IMGFMT_BGR12|128) | |||||
| #define IMGFMT_BGR12LE IMGFMT_BGR12 | #define IMGFMT_BGR12LE IMGFMT_BGR12 | ||||
| #define IMGFMT_BGR15BE (IMGFMT_BGR15|64) | |||||
| #define IMGFMT_BGR15BE (IMGFMT_BGR15|128) | |||||
| #define IMGFMT_BGR15LE IMGFMT_BGR15 | #define IMGFMT_BGR15LE IMGFMT_BGR15 | ||||
| #define IMGFMT_BGR16BE (IMGFMT_BGR16|64) | |||||
| #define IMGFMT_BGR16BE (IMGFMT_BGR16|128) | |||||
| #define IMGFMT_BGR16LE IMGFMT_BGR16 | #define IMGFMT_BGR16LE IMGFMT_BGR16 | ||||
| #define IMGFMT_GBR12P IMGFMT_GBR12PLE | |||||
| #define IMGFMT_GBR14P IMGFMT_GBR14PLE | |||||
| #endif | #endif | ||||
| /* old names for compatibility */ | /* old names for compatibility */ | ||||
| @@ -94,8 +108,8 @@ | |||||
| #define IMGFMT_IS_RGB(fmt) (((fmt)&IMGFMT_RGB_MASK)==IMGFMT_RGB) | #define IMGFMT_IS_RGB(fmt) (((fmt)&IMGFMT_RGB_MASK)==IMGFMT_RGB) | ||||
| #define IMGFMT_IS_BGR(fmt) (((fmt)&IMGFMT_BGR_MASK)==IMGFMT_BGR) | #define IMGFMT_IS_BGR(fmt) (((fmt)&IMGFMT_BGR_MASK)==IMGFMT_BGR) | ||||
| #define IMGFMT_RGB_DEPTH(fmt) ((fmt)&0x3F) | |||||
| #define IMGFMT_BGR_DEPTH(fmt) ((fmt)&0x3F) | |||||
| #define IMGFMT_RGB_DEPTH(fmt) ((fmt)&0x7F) | |||||
| #define IMGFMT_BGR_DEPTH(fmt) ((fmt)&0x7F) | |||||
| /* Planar YUV Formats */ | /* Planar YUV Formats */ | ||||
| @@ -110,6 +124,7 @@ | |||||
| #define IMGFMT_Y8 0x20203859 | #define IMGFMT_Y8 0x20203859 | ||||
| #define IMGFMT_NV12 0x3231564E | #define IMGFMT_NV12 0x3231564E | ||||
| #define IMGFMT_NV21 0x3132564E | #define IMGFMT_NV21 0x3132564E | ||||
| #define IMGFMT_Y16_LE 0x20363159 | |||||
| /* unofficial Planar Formats, FIXME if official 4CC exists */ | /* unofficial Planar Formats, FIXME if official 4CC exists */ | ||||
| #define IMGFMT_444P 0x50343434 | #define IMGFMT_444P 0x50343434 | ||||
| @@ -117,53 +132,123 @@ | |||||
| #define IMGFMT_411P 0x50313134 | #define IMGFMT_411P 0x50313134 | ||||
| #define IMGFMT_440P 0x50303434 | #define IMGFMT_440P 0x50303434 | ||||
| #define IMGFMT_HM12 0x32314D48 | #define IMGFMT_HM12 0x32314D48 | ||||
| #define IMGFMT_Y16_BE 0x59313620 | |||||
| // Gray with alpha | |||||
| #define IMGFMT_Y8A 0x59320008 | |||||
| // 4:2:0 planar with alpha | // 4:2:0 planar with alpha | ||||
| #define IMGFMT_420A 0x41303234 | #define IMGFMT_420A 0x41303234 | ||||
| // 4:2:2 planar with alpha | |||||
| #define IMGFMT_422A 0x41323234 | |||||
| // 4:4:4 planar with alpha | |||||
| #define IMGFMT_444A 0x41343434 | |||||
| #define IMGFMT_444P16_LE 0x51343434 | #define IMGFMT_444P16_LE 0x51343434 | ||||
| #define IMGFMT_444P16_BE 0x34343451 | #define IMGFMT_444P16_BE 0x34343451 | ||||
| #define IMGFMT_444P14_LE 0x54343434 | |||||
| #define IMGFMT_444P14_BE 0x34343454 | |||||
| #define IMGFMT_444P12_LE 0x55343434 | |||||
| #define IMGFMT_444P12_BE 0x34343455 | |||||
| #define IMGFMT_444P10_LE 0x52343434 | |||||
| #define IMGFMT_444P10_BE 0x34343452 | |||||
| #define IMGFMT_444P9_LE 0x53343434 | |||||
| #define IMGFMT_444P9_BE 0x34343453 | |||||
| #define IMGFMT_422P16_LE 0x51323234 | #define IMGFMT_422P16_LE 0x51323234 | ||||
| #define IMGFMT_422P16_BE 0x34323251 | #define IMGFMT_422P16_BE 0x34323251 | ||||
| #define IMGFMT_422P14_LE 0x54323234 | |||||
| #define IMGFMT_422P14_BE 0x34323254 | |||||
| #define IMGFMT_422P12_LE 0x55323234 | |||||
| #define IMGFMT_422P12_BE 0x34323255 | |||||
| #define IMGFMT_422P10_LE 0x52323234 | |||||
| #define IMGFMT_422P10_BE 0x34323252 | |||||
| #define IMGFMT_422P9_LE 0x53323234 | |||||
| #define IMGFMT_422P9_BE 0x34323253 | |||||
| #define IMGFMT_420P16_LE 0x51303234 | #define IMGFMT_420P16_LE 0x51303234 | ||||
| #define IMGFMT_420P16_BE 0x34323051 | #define IMGFMT_420P16_BE 0x34323051 | ||||
| #define IMGFMT_420P14_LE 0x54303234 | |||||
| #define IMGFMT_420P14_BE 0x34323054 | |||||
| #define IMGFMT_420P12_LE 0x55303234 | |||||
| #define IMGFMT_420P12_BE 0x34323055 | |||||
| #define IMGFMT_420P10_LE 0x52303234 | |||||
| #define IMGFMT_420P10_BE 0x34323052 | |||||
| #define IMGFMT_420P9_LE 0x53303234 | |||||
| #define IMGFMT_420P9_BE 0x34323053 | |||||
| #if HAVE_BIGENDIAN | #if HAVE_BIGENDIAN | ||||
| #define IMGFMT_444P16 IMGFMT_444P16_BE | #define IMGFMT_444P16 IMGFMT_444P16_BE | ||||
| #define IMGFMT_444P14 IMGFMT_444P14_BE | |||||
| #define IMGFMT_444P12 IMGFMT_444P12_BE | |||||
| #define IMGFMT_444P10 IMGFMT_444P10_BE | |||||
| #define IMGFMT_444P9 IMGFMT_444P9_BE | |||||
| #define IMGFMT_422P16 IMGFMT_422P16_BE | #define IMGFMT_422P16 IMGFMT_422P16_BE | ||||
| #define IMGFMT_422P14 IMGFMT_422P14_BE | |||||
| #define IMGFMT_422P12 IMGFMT_422P12_BE | |||||
| #define IMGFMT_422P10 IMGFMT_422P10_BE | |||||
| #define IMGFMT_422P9 IMGFMT_422P9_BE | |||||
| #define IMGFMT_420P16 IMGFMT_420P16_BE | #define IMGFMT_420P16 IMGFMT_420P16_BE | ||||
| #define IMGFMT_420P14 IMGFMT_420P14_BE | |||||
| #define IMGFMT_420P12 IMGFMT_420P12_BE | |||||
| #define IMGFMT_420P10 IMGFMT_420P10_BE | |||||
| #define IMGFMT_420P9 IMGFMT_420P9_BE | |||||
| #define IMGFMT_Y16 IMGFMT_Y16_BE | |||||
| #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_BE(fmt) | |||||
| #else | #else | ||||
| #define IMGFMT_444P16 IMGFMT_444P16_LE | #define IMGFMT_444P16 IMGFMT_444P16_LE | ||||
| #define IMGFMT_444P14 IMGFMT_444P14_LE | |||||
| #define IMGFMT_444P12 IMGFMT_444P12_LE | |||||
| #define IMGFMT_444P10 IMGFMT_444P10_LE | |||||
| #define IMGFMT_444P9 IMGFMT_444P9_LE | |||||
| #define IMGFMT_422P16 IMGFMT_422P16_LE | #define IMGFMT_422P16 IMGFMT_422P16_LE | ||||
| #define IMGFMT_422P14 IMGFMT_422P14_LE | |||||
| #define IMGFMT_422P12 IMGFMT_422P12_LE | |||||
| #define IMGFMT_422P10 IMGFMT_422P10_LE | |||||
| #define IMGFMT_422P9 IMGFMT_422P9_LE | |||||
| #define IMGFMT_420P16 IMGFMT_420P16_LE | #define IMGFMT_420P16 IMGFMT_420P16_LE | ||||
| #define IMGFMT_420P14 IMGFMT_420P14_LE | |||||
| #define IMGFMT_420P12 IMGFMT_420P12_LE | |||||
| #define IMGFMT_420P10 IMGFMT_420P10_LE | |||||
| #define IMGFMT_420P9 IMGFMT_420P9_LE | |||||
| #define IMGFMT_Y16 IMGFMT_Y16_LE | |||||
| #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_LE(fmt) | |||||
| #endif | #endif | ||||
| #define IMGFMT_IS_YUVP16_LE(fmt) (((fmt ^ IMGFMT_420P16_LE) & 0xff0000ff) == 0) | |||||
| #define IMGFMT_IS_YUVP16_BE(fmt) (((fmt ^ IMGFMT_420P16_BE) & 0xff0000ff) == 0) | |||||
| #define IMGFMT_IS_YUVP16_NE(fmt) (((fmt ^ IMGFMT_420P16 ) & 0xff0000ff) == 0) | |||||
| #define IMGFMT_IS_YUVP16_LE(fmt) (((fmt - 0x51000034) & 0xfc0000ff) == 0) | |||||
| #define IMGFMT_IS_YUVP16_BE(fmt) (((fmt - 0x34000051) & 0xff0000fc) == 0) | |||||
| #define IMGFMT_IS_YUVP16(fmt) (IMGFMT_IS_YUVP16_LE(fmt) || IMGFMT_IS_YUVP16_BE(fmt)) | #define IMGFMT_IS_YUVP16(fmt) (IMGFMT_IS_YUVP16_LE(fmt) || IMGFMT_IS_YUVP16_BE(fmt)) | ||||
| /** | |||||
| * \brief Find the corresponding full 16 bit format, i.e. IMGFMT_420P10_LE -> IMGFMT_420P16_LE | |||||
| * \return normalized format ID or 0 if none exists. | |||||
| */ | |||||
| static inline int normalize_yuvp16(int fmt) { | |||||
| if (IMGFMT_IS_YUVP16_LE(fmt)) | |||||
| return (fmt & 0x00ffffff) | 0x51000000; | |||||
| if (IMGFMT_IS_YUVP16_BE(fmt)) | |||||
| return (fmt & 0xffffff00) | 0x00000051; | |||||
| return 0; | |||||
| } | |||||
| /* Packed YUV Formats */ | /* Packed YUV Formats */ | ||||
| #define IMGFMT_IUYV 0x56595549 | |||||
| #define IMGFMT_IY41 0x31435949 | |||||
| #define IMGFMT_IUYV 0x56595549 // Interlaced UYVY | |||||
| #define IMGFMT_IY41 0x31435949 // Interlaced Y41P | |||||
| #define IMGFMT_IYU1 0x31555949 | #define IMGFMT_IYU1 0x31555949 | ||||
| #define IMGFMT_IYU2 0x32555949 | #define IMGFMT_IYU2 0x32555949 | ||||
| #define IMGFMT_UYVY 0x59565955 | #define IMGFMT_UYVY 0x59565955 | ||||
| #define IMGFMT_UYNV 0x564E5955 | |||||
| #define IMGFMT_cyuv 0x76757963 | |||||
| #define IMGFMT_Y422 0x32323459 | |||||
| #define IMGFMT_UYNV 0x564E5955 // Exactly same as UYVY | |||||
| #define IMGFMT_cyuv 0x76757963 // upside-down UYVY | |||||
| #define IMGFMT_Y422 0x32323459 // Exactly same as UYVY | |||||
| #define IMGFMT_YUY2 0x32595559 | #define IMGFMT_YUY2 0x32595559 | ||||
| #define IMGFMT_YUNV 0x564E5559 | |||||
| #define IMGFMT_YUNV 0x564E5559 // Exactly same as YUY2 | |||||
| #define IMGFMT_YVYU 0x55595659 | #define IMGFMT_YVYU 0x55595659 | ||||
| #define IMGFMT_Y41P 0x50313459 | #define IMGFMT_Y41P 0x50313459 | ||||
| #define IMGFMT_Y211 0x31313259 | #define IMGFMT_Y211 0x31313259 | ||||
| #define IMGFMT_Y41T 0x54313459 | |||||
| #define IMGFMT_Y42T 0x54323459 | |||||
| #define IMGFMT_V422 0x32323456 | |||||
| #define IMGFMT_Y41T 0x54313459 // Y41P, Y lsb = transparency | |||||
| #define IMGFMT_Y42T 0x54323459 // UYVY, Y lsb = transparency | |||||
| #define IMGFMT_V422 0x32323456 // upside-down UYVY? | |||||
| #define IMGFMT_V655 0x35353656 | #define IMGFMT_V655 0x35353656 | ||||
| #define IMGFMT_CLJR 0x524A4C43 | #define IMGFMT_CLJR 0x524A4C43 | ||||
| #define IMGFMT_YUVP 0x50565559 | |||||
| #define IMGFMT_UYVP 0x50565955 | |||||
| #define IMGFMT_YUVP 0x50565559 // 10-bit YUYV | |||||
| #define IMGFMT_UYVP 0x50565955 // 10-bit UYVY | |||||
| /* Compressed Formats */ | /* Compressed Formats */ | ||||
| #define IMGFMT_MPEGPES (('M'<<24)|('P'<<16)|('E'<<8)|('S')) | #define IMGFMT_MPEGPES (('M'<<24)|('P'<<16)|('E'<<8)|('S')) | ||||
| @@ -207,8 +292,9 @@ const char *ff_vo_format_name(int format); | |||||
| /** | /** | ||||
| * Calculates the scale shifts for the chroma planes for planar YUV | * Calculates the scale shifts for the chroma planes for planar YUV | ||||
| * | * | ||||
| * \param component_bits bits per component | |||||
| * \return bits-per-pixel for format if successful (i.e. format is 3 or 4-planes planar YUV), 0 otherwise | * \return bits-per-pixel for format if successful (i.e. format is 3 or 4-planes planar YUV), 0 otherwise | ||||
| */ | */ | ||||
| int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift); | |||||
| int ff_mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits); | |||||
| #endif /* MPLAYER_IMG_FORMAT_H */ | #endif /* MPLAYER_IMG_FORMAT_H */ | ||||
| @@ -121,11 +121,24 @@ void ff_mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){ | |||||
| mpi->flags|=MP_IMGFLAG_SWAPPED; | mpi->flags|=MP_IMGFLAG_SWAPPED; | ||||
| return; | return; | ||||
| } | } | ||||
| mpi->flags|=MP_IMGFLAG_YUV; | |||||
| mpi->num_planes=3; | mpi->num_planes=3; | ||||
| if (ff_mp_get_chroma_shift(out_fmt, NULL, NULL)) { | |||||
| if (out_fmt == IMGFMT_GBR24P) { | |||||
| mpi->bpp=24; | |||||
| mpi->flags|=MP_IMGFLAG_PLANAR; | |||||
| return; | |||||
| } else if (out_fmt == IMGFMT_GBR12P) { | |||||
| mpi->bpp=36; | |||||
| mpi->flags|=MP_IMGFLAG_PLANAR; | |||||
| return; | |||||
| } else if (out_fmt == IMGFMT_GBR14P) { | |||||
| mpi->bpp=42; | |||||
| mpi->flags|=MP_IMGFLAG_PLANAR; | |||||
| return; | |||||
| } | |||||
| mpi->flags|=MP_IMGFLAG_YUV; | |||||
| if (ff_mp_get_chroma_shift(out_fmt, NULL, NULL, NULL)) { | |||||
| mpi->flags|=MP_IMGFLAG_PLANAR; | mpi->flags|=MP_IMGFLAG_PLANAR; | ||||
| mpi->bpp = ff_mp_get_chroma_shift(out_fmt, &mpi->chroma_x_shift, &mpi->chroma_y_shift); | |||||
| mpi->bpp = ff_mp_get_chroma_shift(out_fmt, &mpi->chroma_x_shift, &mpi->chroma_y_shift, NULL); | |||||
| mpi->chroma_width = mpi->width >> mpi->chroma_x_shift; | mpi->chroma_width = mpi->width >> mpi->chroma_x_shift; | ||||
| mpi->chroma_height = mpi->height >> mpi->chroma_y_shift; | mpi->chroma_height = mpi->height >> mpi->chroma_y_shift; | ||||
| } | } | ||||
| @@ -136,6 +149,8 @@ void ff_mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){ | |||||
| case IMGFMT_YV12: | case IMGFMT_YV12: | ||||
| return; | return; | ||||
| case IMGFMT_420A: | case IMGFMT_420A: | ||||
| case IMGFMT_422A: | |||||
| case IMGFMT_444A: | |||||
| case IMGFMT_IF09: | case IMGFMT_IF09: | ||||
| mpi->num_planes=4; | mpi->num_planes=4; | ||||
| case IMGFMT_YVU9: | case IMGFMT_YVU9: | ||||
| @@ -145,20 +160,51 @@ void ff_mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){ | |||||
| case IMGFMT_440P: | case IMGFMT_440P: | ||||
| case IMGFMT_444P16_LE: | case IMGFMT_444P16_LE: | ||||
| case IMGFMT_444P16_BE: | case IMGFMT_444P16_BE: | ||||
| case IMGFMT_444P14_LE: | |||||
| case IMGFMT_444P14_BE: | |||||
| case IMGFMT_444P12_LE: | |||||
| case IMGFMT_444P12_BE: | |||||
| case IMGFMT_444P10_LE: | |||||
| case IMGFMT_444P10_BE: | |||||
| case IMGFMT_444P9_LE: | |||||
| case IMGFMT_444P9_BE: | |||||
| case IMGFMT_422P16_LE: | case IMGFMT_422P16_LE: | ||||
| case IMGFMT_422P16_BE: | case IMGFMT_422P16_BE: | ||||
| case IMGFMT_422P14_LE: | |||||
| case IMGFMT_422P14_BE: | |||||
| case IMGFMT_422P12_LE: | |||||
| case IMGFMT_422P12_BE: | |||||
| case IMGFMT_422P10_LE: | |||||
| case IMGFMT_422P10_BE: | |||||
| case IMGFMT_422P9_LE: | |||||
| case IMGFMT_422P9_BE: | |||||
| case IMGFMT_420P16_LE: | case IMGFMT_420P16_LE: | ||||
| case IMGFMT_420P16_BE: | case IMGFMT_420P16_BE: | ||||
| case IMGFMT_420P14_LE: | |||||
| case IMGFMT_420P14_BE: | |||||
| case IMGFMT_420P12_LE: | |||||
| case IMGFMT_420P12_BE: | |||||
| case IMGFMT_420P10_LE: | |||||
| case IMGFMT_420P10_BE: | |||||
| case IMGFMT_420P9_LE: | |||||
| case IMGFMT_420P9_BE: | |||||
| return; | return; | ||||
| case IMGFMT_Y16_LE: | |||||
| case IMGFMT_Y16_BE: | |||||
| mpi->bpp=16; | |||||
| case IMGFMT_Y800: | case IMGFMT_Y800: | ||||
| case IMGFMT_Y8: | case IMGFMT_Y8: | ||||
| /* they're planar ones, but for easier handling use them as packed */ | /* they're planar ones, but for easier handling use them as packed */ | ||||
| mpi->flags&=~MP_IMGFLAG_PLANAR; | mpi->flags&=~MP_IMGFLAG_PLANAR; | ||||
| mpi->num_planes=1; | mpi->num_planes=1; | ||||
| return; | return; | ||||
| case IMGFMT_Y8A: | |||||
| mpi->num_planes=2; | |||||
| return; | |||||
| case IMGFMT_UYVY: | case IMGFMT_UYVY: | ||||
| mpi->flags|=MP_IMGFLAG_SWAPPED; | mpi->flags|=MP_IMGFLAG_SWAPPED; | ||||
| case IMGFMT_YUY2: | case IMGFMT_YUY2: | ||||
| mpi->chroma_x_shift = 1; | |||||
| mpi->bpp=16; | mpi->bpp=16; | ||||
| mpi->num_planes=1; | mpi->num_planes=1; | ||||
| return; | return; | ||||
| @@ -42,7 +42,14 @@ | |||||
| //--- buffer content restrictions: | //--- buffer content restrictions: | ||||
| // set if buffer content shouldn't be modified: | // set if buffer content shouldn't be modified: | ||||
| #define MP_IMGFLAG_PRESERVE 0x01 | #define MP_IMGFLAG_PRESERVE 0x01 | ||||
| // set if buffer content will be READ for next frame's MC: (I/P mpeg frames) | |||||
| // set if buffer content will be READ. | |||||
| // This can be e.g. for next frame's MC: (I/P mpeg frames) - | |||||
| // then in combination with MP_IMGFLAG_PRESERVE - or it | |||||
| // can be because a video filter or codec will read a significant | |||||
| // amount of data while processing that frame (e.g. blending something | |||||
| // onto the frame, MV based intra prediction). | |||||
| // A frame marked like this should not be placed in to uncachable | |||||
| // video RAM for example. | |||||
| #define MP_IMGFLAG_READABLE 0x02 | #define MP_IMGFLAG_READABLE 0x02 | ||||
| //--- buffer width/stride/plane restrictions: (used for direct rendering) | //--- buffer width/stride/plane restrictions: (used for direct rendering) | ||||