From c082240c62cb8855e55c0dbe88b8591458599ce9 Mon Sep 17 00:00:00 2001 From: Stephen Hutchinson Date: Tue, 27 Nov 2012 04:39:09 -0500 Subject: video: add support for 12 and 14 bit YUV pixel formats Based on a patch by qyot27. Add the missing parts in mp_get_chroma_shift(), which allow allocation of such images, and which make vo_opengl automatically accept the new formats. Change the IMGFMT_IS_YUVP16_LE/BE macros to properly report IMGFMT_444P14 as supported: this pixel format has the highest numerical bit width identifier (0x55), which is not covered by the mask ~0xfc. Remove 1 bit from the mask (makes it 0xf8) so that IMGFMT_IS_YUVP16(IMGFMT_444P14) is 1. This is slightly risky, as the organization of the image format IDs (actually FourCCs + mplayer internal IDs) is messy at best, but it should be ok. --- video/img_format.h | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'video/img_format.h') diff --git a/video/img_format.h b/video/img_format.h index f3611a5fab..ab657a22d0 100644 --- a/video/img_format.h +++ b/video/img_format.h @@ -143,45 +143,69 @@ #define IMGFMT_444P10_BE 0x34343452 #define IMGFMT_444P9_LE 0x53343434 #define IMGFMT_444P9_BE 0x34343453 +#define IMGFMT_444P12_LE 0x54343434 +#define IMGFMT_444P12_BE 0x34343454 +#define IMGFMT_444P14_LE 0x55343434 +#define IMGFMT_444P14_BE 0x34343455 #define IMGFMT_422P16_LE 0x51323234 #define IMGFMT_422P16_BE 0x34323251 #define IMGFMT_422P10_LE 0x52323234 #define IMGFMT_422P10_BE 0x34323252 #define IMGFMT_422P9_LE 0x53323234 #define IMGFMT_422P9_BE 0x34323253 +#define IMGFMT_422P12_LE 0x54323234 +#define IMGFMT_422P12_BE 0x34323254 +#define IMGFMT_422P14_LE 0x55323234 +#define IMGFMT_422P14_BE 0x34323255 #define IMGFMT_420P16_LE 0x51303234 #define IMGFMT_420P16_BE 0x34323051 #define IMGFMT_420P10_LE 0x52303234 #define IMGFMT_420P10_BE 0x34323052 #define IMGFMT_420P9_LE 0x53303234 #define IMGFMT_420P9_BE 0x34323053 +#define IMGFMT_420P12_LE 0x54303234 +#define IMGFMT_420P12_BE 0x34323054 +#define IMGFMT_420P14_LE 0x55303234 +#define IMGFMT_420P14_BE 0x34323055 #if BYTE_ORDER == BIG_ENDIAN #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_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_420P14 IMGFMT_420P14_BE +#define IMGFMT_420P12 IMGFMT_420P12_BE #define IMGFMT_420P10 IMGFMT_420P10_BE #define IMGFMT_420P9 IMGFMT_420P9_BE #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_BE(fmt) #else #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_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_420P14 IMGFMT_420P14_LE +#define IMGFMT_420P12 IMGFMT_420P12_LE #define IMGFMT_420P10 IMGFMT_420P10_LE #define IMGFMT_420P9 IMGFMT_420P9_LE #define IMGFMT_IS_YUVP16_NE(fmt) IMGFMT_IS_YUVP16_LE(fmt) #endif -// These macros are misnamed - they actually match 9, 10 or 16 bits -#define IMGFMT_IS_YUVP16_LE(fmt) (((fmt - 0x51000034) & 0xfc0000ff) == 0 || fmt == IMGFMT_Y16LE) -#define IMGFMT_IS_YUVP16_BE(fmt) (((fmt - 0x34000051) & 0xff0000fc) == 0 || fmt == IMGFMT_Y16BE) +// These macros are misnamed - they actually match 9 to 16 bits (inclusive) +#define IMGFMT_IS_YUVP16_LE(fmt) (((fmt - 0x51000034) & 0xf80000ff) == 0 || fmt == IMGFMT_Y16LE) +#define IMGFMT_IS_YUVP16_BE(fmt) (((fmt - 0x34000051) & 0xff0000f8) == 0 || fmt == IMGFMT_Y16BE) #define IMGFMT_IS_YUVP16(fmt) (IMGFMT_IS_YUVP16_LE(fmt) || IMGFMT_IS_YUVP16_BE(fmt)) /* Packed YUV Formats */ -- cgit v1.2.3