From aa6ba6372c627bc602647d225bdfb076f93bd291 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 19 Dec 2012 12:04:38 +0100 Subject: mp_image: change how palette is handled According to DOCS/OUTDATED-tech/colorspaces.txt, the following formats are supposed to be palettized: IMGFMT_BGR8 IMGFMT_RGB8, IMGFMT_BGR4_CHAR IMGFMT_RGB4_CHAR IMGFMT_BGR4 IMGFMT_RGB4 Of these, only BGR8 and RGB8 are actually treated as palettized in some way. ffmpeg has only one palettized format (AV_PIX_FMT_PAL8), and IMGFMT_BGR8 was inconsistently mapped to packed non-palettized RGB formats too (AV_PIX_FMT_BGR8). Moreover, vf_scale.c contained messy hacks to generate a palette when AV_PIX_FMT_BGR8 is output. (libswscale does not support AV_PIX_FMT_PAL8 output in the first place.) Get rid of all of this, and introduce IMGFMT_PAL8, which directly maps to AV_PIX_FMT_PAL8. Remove the palette creation code from vf_scale.c. IMGFMT_BGR8 maps to AV_PIX_FMT_RGB8 (don't ask me why it's swapped), without any palette use. Enabling it in vo_x11 or using it as vf_scale input seems to give correct results. --- video/img_format.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'video/img_format.h') diff --git a/video/img_format.h b/video/img_format.h index 6f68cae5d1..48780cc694 100644 --- a/video/img_format.h +++ b/video/img_format.h @@ -33,8 +33,6 @@ #define MP_IMGFLAG_YUV 0x200 // set if it's swapped (BGR or YVU) plane/byteorder #define MP_IMGFLAG_SWAPPED 0x400 -// set if you want memory for palette allocated and managed by vf_get_image etc. -#define MP_IMGFLAG_RGB_PALETTE 0x800 // set if the format is standard YUV format: // - planar and yuv colorspace // - chroma shift 0-2 @@ -135,7 +133,6 @@ struct mp_imgfmt_desc mp_imgfmt_get_desc(unsigned int out_fmt); #define IMGFMT_RG4B IMGFMT_RGB4_CHAR #define IMGFMT_BG4B IMGFMT_BGR4_CHAR - // AV_PIX_FMT_BGR0 #define IMGFMT_BGR0 0x1DC70000 @@ -159,6 +156,8 @@ static inline bool IMGFMT_IS_BGR(unsigned int fmt) #define IMGFMT_Y16LE 0x1DC70001 // AV_PIX_FMT_GRAY16BE #define IMGFMT_Y16BE 0x1DC70002 +// AV_PIX_FMT_PAL8 +#define IMGFMT_PAL8 0x1DC70003 #if BYTE_ORDER == BIG_ENDIAN #define IMGFMT_Y16 IMGFMT_Y16BE -- cgit v1.2.3