diff options
Diffstat (limited to 'src/video_out/alphablend.h')
-rw-r--r-- | src/video_out/alphablend.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/video_out/alphablend.h b/src/video_out/alphablend.h index 974f363d8..dd7f799ea 100644 --- a/src/video_out/alphablend.h +++ b/src/video_out/alphablend.h @@ -53,10 +53,22 @@ typedef struct { /* CLUT == Color LookUp Table */ uint8_t foo : 8; } ATTRIBUTE_PACKED clut_t; + #if PRAGMA_PACK #pragma pack() #endif +#define XX44_PALETTE_SIZE 32 + +typedef struct { + unsigned size; + unsigned max_used; + uint32_t cluts[XX44_PALETTE_SIZE]; + /* cache palette entries for both colors and clip_colors */ + int lookup_cache[OVL_PALETTE_SIZE*2]; +} xx44_palette_t; + + void blend_rgb16 (uint8_t * img, vo_overlay_t * img_overl, int img_width, int img_height, int dst_width, int dst_height); @@ -75,4 +87,32 @@ void blend_yuv (uint8_t *dst_base[3], vo_overlay_t * img_overl, void blend_yuy2 (uint8_t * dst_img, vo_overlay_t * img_overl, int dst_width, int dst_height, int dst_pitch); +/* + * This function isn't too smart about blending. We want to avoid creating new + * colors in the palette as a result from two non-zero colors needed to be + * blended. Instead we choose the color with the highest alpha value to be + * visible. Some parts of the code taken from the "VeXP" project. + */ + +void blend_xx44 (uint8_t *dst_img, vo_overlay_t *img_overl, + int dst_width, int dst_height, int dst_pitch, + xx44_palette_t *palette,int ia44); + +/* + * Functions to handle the xine-specific palette. + */ + +void clear_xx44_palette(xx44_palette_t *p); +void init_xx44_palette(xx44_palette_t *p, unsigned num_entries); +void dispose_xx44_palette(xx44_palette_t *p); + +/* + * Convert the xine-specific palette to something useful. + */ + +void xx44_to_xvmc_palette(const xx44_palette_t *p,unsigned char *xvmc_palette, + unsigned first_xx44_entry, unsigned num_xx44_entries, + unsigned num_xvmc_components, char *xvmc_components); + + #endif |