From 49a3af8585178fa4b790bedfb587a8c23ec9c99e Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 30 Jan 2003 09:15:09 +0000 Subject: fixing rgb4 & bgr4 (2 pixels per byte) adding bg4b & rg4b (1 pixel per byte) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9172 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/img_format.c | 2 ++ libmpcodecs/img_format.h | 6 ++++-- libmpcodecs/mp_image.h | 4 ++-- libmpcodecs/vf_format.c | 2 ++ libmpcodecs/vf_scale.c | 5 ++++- 5 files changed, 14 insertions(+), 5 deletions(-) (limited to 'libmpcodecs') diff --git a/libmpcodecs/img_format.c b/libmpcodecs/img_format.c index 5dc0b719e9..df6325505e 100644 --- a/libmpcodecs/img_format.c +++ b/libmpcodecs/img_format.c @@ -6,6 +6,7 @@ char *vo_format_name(int 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_RGB15: return("RGB 15-bit"); case IMGFMT_RGB16: return("RGB 16-bit"); @@ -13,6 +14,7 @@ char *vo_format_name(int format) case IMGFMT_RGB32: return("RGB 32-bit"); 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_BGR15: return("BGR 15-bit"); case IMGFMT_BGR16: return("BGR 16-bit"); diff --git a/libmpcodecs/img_format.h b/libmpcodecs/img_format.h index 4a19febc27..5619eb624f 100644 --- a/libmpcodecs/img_format.h +++ b/libmpcodecs/img_format.h @@ -8,6 +8,7 @@ #define IMGFMT_RGB (('R'<<24)|('G'<<16)|('B'<<8)) #define IMGFMT_RGB1 (IMGFMT_RGB|1) #define IMGFMT_RGB4 (IMGFMT_RGB|4) +#define IMGFMT_RG4B (IMGFMT_RGB|4|128) // RGB4 with 1 pixel per byte #define IMGFMT_RGB8 (IMGFMT_RGB|8) #define IMGFMT_RGB15 (IMGFMT_RGB|15) #define IMGFMT_RGB16 (IMGFMT_RGB|16) @@ -18,6 +19,7 @@ #define IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8)) #define IMGFMT_BGR1 (IMGFMT_BGR|1) #define IMGFMT_BGR4 (IMGFMT_BGR|4) +#define IMGFMT_BG4B (IMGFMT_BGR|4|128) // BGR4 with 1 pixel per byte #define IMGFMT_BGR8 (IMGFMT_BGR|8) #define IMGFMT_BGR15 (IMGFMT_BGR|15) #define IMGFMT_BGR16 (IMGFMT_BGR|16) @@ -27,8 +29,8 @@ #define IMGFMT_IS_RGB(fmt) (((fmt)&IMGFMT_RGB_MASK)==IMGFMT_RGB) #define IMGFMT_IS_BGR(fmt) (((fmt)&IMGFMT_BGR_MASK)==IMGFMT_BGR) -#define IMGFMT_RGB_DEPTH(fmt) ((fmt)&~IMGFMT_RGB_MASK) -#define IMGFMT_BGR_DEPTH(fmt) ((fmt)&~IMGFMT_BGR_MASK) +#define IMGFMT_RGB_DEPTH(fmt) ((fmt)&0x3F) +#define IMGFMT_BGR_DEPTH(fmt) ((fmt)&0x3F) /* Planar YUV Formats */ diff --git a/libmpcodecs/mp_image.h b/libmpcodecs/mp_image.h index f5a26ac5a2..23d0c34852 100644 --- a/libmpcodecs/mp_image.h +++ b/libmpcodecs/mp_image.h @@ -96,14 +96,14 @@ static inline void mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){ } mpi->num_planes=1; if (IMGFMT_IS_RGB(out_fmt)) { - if (IMGFMT_RGB_DEPTH(out_fmt) < 8) + if (IMGFMT_RGB_DEPTH(out_fmt) < 8 && !(out_fmt&128)) mpi->bpp = IMGFMT_RGB_DEPTH(out_fmt); else mpi->bpp=(IMGFMT_RGB_DEPTH(out_fmt)+7)&(~7); return; } if (IMGFMT_IS_BGR(out_fmt)) { - if (IMGFMT_BGR_DEPTH(out_fmt) < 8) + if (IMGFMT_BGR_DEPTH(out_fmt) < 8 && !(out_fmt&128)) mpi->bpp = IMGFMT_BGR_DEPTH(out_fmt); else mpi->bpp=(IMGFMT_BGR_DEPTH(out_fmt)+7)&(~7); diff --git a/libmpcodecs/vf_format.c b/libmpcodecs/vf_format.c index 4ead90c4ec..5e351f0d2d 100644 --- a/libmpcodecs/vf_format.c +++ b/libmpcodecs/vf_format.c @@ -44,6 +44,7 @@ static int open(vf_instance_t *vf, char* args){ if(!strcasecmp(args,"bgr15")) vf->priv->fmt=IMGFMT_BGR15; else if(!strcasecmp(args,"bgr8")) vf->priv->fmt=IMGFMT_BGR8; else if(!strcasecmp(args,"bgr4")) vf->priv->fmt=IMGFMT_BGR4; else + if(!strcasecmp(args,"bg4b")) vf->priv->fmt=IMGFMT_BG4B; else if(!strcasecmp(args,"bgr1")) vf->priv->fmt=IMGFMT_BGR1; else if(!strcasecmp(args,"rgb24")) vf->priv->fmt=IMGFMT_RGB24; else if(!strcasecmp(args,"rgb32")) vf->priv->fmt=IMGFMT_RGB32; else @@ -51,6 +52,7 @@ static int open(vf_instance_t *vf, char* args){ if(!strcasecmp(args,"rgb15")) vf->priv->fmt=IMGFMT_RGB15; else if(!strcasecmp(args,"rgb8")) vf->priv->fmt=IMGFMT_RGB8; else if(!strcasecmp(args,"rgb4")) vf->priv->fmt=IMGFMT_RGB4; else + if(!strcasecmp(args,"rg4b")) vf->priv->fmt=IMGFMT_RG4B; else if(!strcasecmp(args,"rgb1")) vf->priv->fmt=IMGFMT_RGB1; else { printf("Unknown format name: '%s'\n",args);return 0;} } else diff --git a/libmpcodecs/vf_scale.c b/libmpcodecs/vf_scale.c index 5b69a28a60..d5e0f33ebc 100644 --- a/libmpcodecs/vf_scale.c +++ b/libmpcodecs/vf_scale.c @@ -41,6 +41,8 @@ static unsigned int outfmt_list[]={ IMGFMT_RGB8, IMGFMT_BGR4, IMGFMT_RGB4, + IMGFMT_BG4B, + IMGFMT_RG4B, IMGFMT_BGR1, IMGFMT_RGB1, // YUV: @@ -178,7 +180,8 @@ static int config(struct vf_instance_s* vf, vf->priv->palette[4*i+2]=4*((i>>5)&7)*9; } break; } - case IMGFMT_BGR4: { + case IMGFMT_BGR4: + case IMGFMT_BG4B: { int i; vf->priv->palette=malloc(4*16); for(i=0; i<16; i++){ -- cgit v1.2.3