From: Ilyes Gouta <ilyes.go...@st.com> BGR24 now uses the newly introduced 24bit templates for the accumulators and color-keying s/w handlers.
Signed-off-by: Ilyes Gouta <ilyes.go...@st.com> --- src/gfx/generic/generic.c | 123 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 122 insertions(+), 1 deletion(-) diff --git a/src/gfx/generic/generic.c b/src/gfx/generic/generic.c index b3ba434..681a133 100644 --- a/src/gfx/generic/generic.c +++ b/src/gfx/generic/generic.c @@ -120,7 +120,7 @@ static void gInit_BigEndian(); #define Bop_PFI_OP_Aop_PFI( op ) Bop_12vv_##op##_Aop #include "template_colorkey_16.h" -/* RGB24/VYU */ +/* RGB24/BGR24/VYU */ #define RGB_MASK 0xffffff #define Cop_OP_Aop_PFI( op ) Cop_##op##_Aop_24_24 #define Bop_PFI_OP_Aop_PFI( op ) Bop_24_24_##op##_Aop @@ -420,6 +420,24 @@ static void gInit_BigEndian(); #define B_MASK 0x0000ff #include "template_acc_24.h" +/* BGR24 */ +#define EXPAND_Ato8( a ) 0xff +#define EXPAND_Rto8( r ) (r) +#define EXPAND_Gto8( g ) (g) +#define EXPAND_Bto8( b ) (b) +#define PIXEL_OUT( a, r, g, b ) PIXEL_RGB32( b, g, r ) +#define Sop_PFI_OP_Dacc( op ) Sop_bgr24_##op##_Dacc +#define Sacc_OP_Aop_PFI( op ) Sacc_##op##_Aop_bgr24 +#define A_SHIFT 0 +#define B_SHIFT 16 +#define G_SHIFT 8 +#define R_SHIFT 0 +#define A_MASK 0 +#define B_MASK 0xff0000 +#define G_MASK 0x00ff00 +#define R_MASK 0x0000ff +#include "template_acc_24.h" + /* ARGB1666 */ #define EXPAND_Ato8( a ) EXPAND_1to8( a ) #define EXPAND_Rto8( r ) EXPAND_6to8( r ) @@ -534,6 +552,7 @@ static const bool is_ycbcr[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = false, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = true, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = false, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = false, }; @@ -818,6 +837,7 @@ static GenefxFunc Cop_to_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Cop_to_Aop_yv16, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Cop_to_Aop_4, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Cop_to_Aop_24, }; /********************************* Cop_toK_Aop_PFI ****************************/ @@ -991,6 +1011,7 @@ static const GenefxFunc Cop_toK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Cop_toK_Aop_4, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Cop_toK_Aop_24_24, }; /********************************* Bop_PFI_to_Aop_PFI *************************/ @@ -1091,6 +1112,7 @@ static const GenefxFunc Bop_PFI_to_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Bop_yv16_to_Aop, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Bop_4_to_Aop, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_to_Aop, }; /********************************* Bop_PFI_toR_Aop_PFI *************************/ @@ -1292,6 +1314,7 @@ static const GenefxFunc Bop_PFI_toR_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Bop_yv16_toR_Aop, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Bop_4_toR_Aop, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_toR_Aop, }; /********************************* Bop_PFI_Kto_Aop_PFI ************************/ @@ -1496,6 +1519,7 @@ static GenefxFunc Bop_PFI_Kto_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Bop_lut4_Kto_Aop, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_Kto_Aop, }; /********************************* Bop_PFI_toK_Aop_PFI ************************/ @@ -1677,6 +1701,7 @@ static GenefxFunc Bop_PFI_toK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Bop_4_toK_Aop, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_toK_Aop, }; /********************************* Bop_PFI_KtoK_Aop_PFI ***********************/ @@ -1761,6 +1786,7 @@ static const GenefxFunc Bop_PFI_KtoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_KtoK_Aop, }; /********************************* Bop_PFI_Sto_Aop_PFI ************************/ @@ -2071,6 +2097,7 @@ static GenefxFunc Bop_PFI_Sto_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Bop_yv16_Sto_Aop, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_Sto_Aop, }; /********************************* Bop_PFI_SKto_Aop_PFI ***********************/ @@ -2313,6 +2340,7 @@ static const GenefxFunc Bop_PFI_SKto_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_SKto_Aop, }; /********************************* Bop_PFI_StoK_Aop_PFI ***********************/ @@ -2391,6 +2419,7 @@ static const GenefxFunc Bop_PFI_StoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_StoK_Aop, }; /********************************* Bop_PFI_SKtoK_Aop_PFI **********************/ @@ -2471,6 +2500,7 @@ static const GenefxFunc Bop_PFI_SKtoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_24_24_SKtoK_Aop, }; /********************************* Bop_PFI_TEX_to_Aop_PFI ************************/ @@ -3003,6 +3033,7 @@ static GenefxFunc Sop_PFI_Sto_Dacc[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Sop_i420_Sto_Dacc, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sop_bgr24_Sto_Dacc, }; /********************************* Sop_PFI_SKto_Dacc **************************/ @@ -3394,6 +3425,7 @@ static const GenefxFunc Sop_PFI_SKto_Dacc[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sop_bgr24_SKto_Dacc, }; /********************************* Sop_PFI_to_Dacc ****************************/ @@ -3777,6 +3809,7 @@ static GenefxFunc Sop_PFI_to_Dacc[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Sop_i420_to_Dacc, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Sop_lut4_to_Dacc, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sop_bgr24_to_Dacc, }; /********************************* Sop_PFI_Kto_Dacc ***************************/ @@ -4154,6 +4187,7 @@ static const GenefxFunc Sop_PFI_Kto_Dacc[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sop_bgr24_Kto_Dacc, }; /********************************* Sacc_to_Aop_PFI ****************************/ @@ -4737,6 +4771,7 @@ static GenefxFunc Sacc_to_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Sacc_to_Aop_yv16, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = Sacc_to_Aop_lut4, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sacc_to_Aop_bgr24, }; /********************************* Sop_PFI_TEX_to_Dacc ****************************/ @@ -5451,6 +5486,7 @@ static GenefxFunc Sacc_Sto_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = Sacc_Sto_Aop_yv16, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sacc_Sto_Aop_bgr24, }; /********************************* Sacc_toK_Aop_PFI ***************************/ @@ -5794,6 +5830,7 @@ static const GenefxFunc Sacc_toK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sacc_toK_Aop_bgr24, }; /********************************* Sacc_StoK_Aop_PFI **************************/ @@ -5930,6 +5967,7 @@ static const GenefxFunc Sacc_StoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Sacc_StoK_Aop_bgr24, }; /************** Bop_a8_set_alphapixel_Aop_PFI *********************************/ @@ -6220,6 +6258,42 @@ static void Bop_a8_set_alphapixel_Aop_rgb24( GenefxState *gfxs ) #undef SET_PIXEL } +static void Bop_a8_set_alphapixel_Aop_bgr24( GenefxState *gfxs ) +{ + int w = gfxs->length; + u8 *S = gfxs->Bop[0]; + u8 *D = gfxs->Aop[0]; + DFBColor color = gfxs->color; + +#define SET_PIXEL(d,r,g,b,a)\ + switch (a) {\ + case 0xff:\ + d[0] = r;\ + d[1] = g;\ + d[2] = b;\ + case 0: break;\ + default: {\ + register u16 s = a+1;\ + d[0] = ((r-d[0]) * s + (d[0] << 8)) >> 8;\ + d[1] = ((g-d[1]) * s + (d[1] << 8)) >> 8;\ + d[2] = ((b-d[2]) * s + (d[2] << 8)) >> 8;\ + }\ + } + + while (w>4) { + SET_PIXEL( D, color.r, color.g, color.b, *S ); D+=3; S++; + SET_PIXEL( D, color.r, color.g, color.b, *S ); D+=3; S++; + SET_PIXEL( D, color.r, color.g, color.b, *S ); D+=3; S++; + SET_PIXEL( D, color.r, color.g, color.b, *S ); D+=3; S++; + w-=4; + } + while (w--) { + SET_PIXEL( D, color.r, color.g, color.b, *S ); D+=3, S++; + } + +#undef SET_PIXEL +} + static void Bop_a8_set_alphapixel_Aop_rgb32( GenefxState *gfxs ) { int w = gfxs->length; @@ -6652,6 +6726,7 @@ static const GenefxFunc Bop_a8_set_alphapixel_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_a8_set_alphapixel_Aop_bgr24, }; /************** Bop_a1_set_alphapixel_Aop_PFI *********************************/ @@ -6807,6 +6882,25 @@ static void Bop_a1_set_alphapixel_Aop_rgb24( GenefxState *gfxs ) } } +static void Bop_a1_set_alphapixel_Aop_bgr24( GenefxState *gfxs ) +{ + int i; + int w = gfxs->length; + u8 *S = gfxs->Bop[0]; + u8 *D = gfxs->Aop[0]; + DFBColor color = gfxs->color; + + for (i=0; i<w; i++) { + if (S[i>>3] & (0x80 >> (i&7))) { + D[0] = color.r; + D[1] = color.g; + D[2] = color.b; + } + + D += 3; + } +} + static void Bop_a1_set_alphapixel_Aop_rgb32( GenefxState *gfxs ) { int i; @@ -7037,6 +7131,7 @@ static const GenefxFunc Bop_a1_set_alphapixel_Aop_PFI[DFB_NUM_PIXELFORMATS] = { [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_a1_set_alphapixel_Aop_bgr24, }; /************** Bop_a1_lsb_set_alphapixel_Aop_PFI *********************************/ @@ -7151,6 +7246,25 @@ static void Bop_a1_lsb_set_alphapixel_Aop_rgb24( GenefxState *gfxs ) } } +static void Bop_a1_lsb_set_alphapixel_Aop_bgr24( GenefxState *gfxs ) +{ + int i; + int w = gfxs->length; + u8 *S = gfxs->Bop[0]; + u8 *D = gfxs->Aop[0]; + DFBColor color = gfxs->color; + + for (i=0; i<w; i++) { + if (S[i>>3] & (1 << (i&7))) { + D[0] = color.r; + D[1] = color.g; + D[2] = color.b; + } + + D += 3; + } +} + static void Bop_a1_lsb_set_alphapixel_Aop_rgb32( GenefxState *gfxs ) { int i; @@ -7349,6 +7463,7 @@ static const GenefxFunc Bop_a1_lsb_set_alphapixel_Aop_PFI[DFB_NUM_PIXELFORMATS] [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = Bop_a1_lsb_set_alphapixel_Aop_bgr24, }; /**************************** Bop_translate_to_Aop ****************************/ @@ -8208,6 +8323,7 @@ static const GenefxFunc Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[DFB_NUM_P [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = NULL, }; /**********************************************************************************************************************/ @@ -8372,6 +8488,7 @@ static const GenefxFunc Bop_argb_blend_alphachannel_one_invsrc_premultiply_Aop_P [DFB_PIXELFORMAT_INDEX(DSPF_A1_LSB)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_YV16)] = NULL, [DFB_PIXELFORMAT_INDEX(DSPF_LUT4)] = NULL, + [DFB_PIXELFORMAT_INDEX(DSPF_BGR24)] = NULL, }; /**********************************************************************************************************************/ @@ -8897,6 +9014,9 @@ gAcquireSetup( CardState *state, DFBAccelerationMask accel ) case DSPF_RGB24: gfxs->Cop = PIXEL_RGB32( color.r, color.g, color.b ); break; + case DSPF_BGR24: + gfxs->Cop = PIXEL_RGB32( color.b, color.g, color.r ); + break; case DSPF_RGB32: gfxs->Cop = PIXEL_RGB32( color.r, color.g, color.b ); break; @@ -9029,6 +9149,7 @@ gAcquireSetup( CardState *state, DFBAccelerationMask accel ) case DSPF_RGB16: case DSPF_RGB18: case DSPF_RGB24: + case DSPF_BGR24: case DSPF_RGB32: case DSPF_ARGB: case DSPF_ABGR: -- 1.7.9.5 _______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev