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

Reply via email to