⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generic.c

📁 DirectFB-1.0.1可用于linux的嵌入式GUI
💻 C
📖 第 1 页 / 共 5 页
字号:
          D->YUV.y = Sy[i>>16];          D->YUV.u = Svu[i>>17] >> 8;          D->YUV.v = Svu[i>>17] & 0xFF;                    i += SperD;                    D++;     }}static void Sop_ayuv_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u32               *S = gfxs->Sop[0];     while (w--) {          u32 s = S[i>>16];                    D->YUV.a = (s >> 24);          D->YUV.y = (s >> 16) & 0xff;          D->YUV.u = (s >>  8) & 0xff;          D->YUV.v = (s      ) & 0xff;          i += SperD;                    D++;     }}static GenefxFunc Sop_PFI_Sto_Dacc[DFB_NUM_PIXELFORMATS] = {     Sop_argb1555_Sto_Dacc,        /* DSPF_ARGB1555 */     Sop_rgb16_Sto_Dacc,           /* DSPF_RGB16 */     Sop_rgb24_Sto_Dacc,           /* DSPF_RGB24 */     Sop_rgb32_Sto_Dacc,           /* DSPF_RGB32 */     Sop_argb_Sto_Dacc,            /* DSPF_ARGB */     Sop_a8_Sto_Dacc,              /* DSPF_A8 */     Sop_yuy2_Sto_Dacc,            /* DSPF_YUY2 */     Sop_rgb332_Sto_Dacc,          /* DSPF_RGB332 */     Sop_uyvy_Sto_Dacc,            /* DSPF_UYVY */     Sop_i420_Sto_Dacc,            /* DSPF_I420 */     Sop_i420_Sto_Dacc,            /* DSPF_YV12 */     Sop_lut8_Sto_Dacc,            /* DSPF_LUT8 */     Sop_alut44_Sto_Dacc,          /* DSPF_ALUT44 */     Sop_airgb_Sto_Dacc,           /* DSPF_AiRGB */     NULL,                         /* DSPF_A1 */     Sop_nv12_Sto_Dacc,            /* DSPF_NV12 */     Sop_nv12_Sto_Dacc,            /* DSPF_NV16 */     Sop_argb2554_Sto_Dacc,        /* DSPF_ARGB2554 */     Sop_argb4444_Sto_Dacc,        /* DSPF_ARGB4444 */     Sop_nv21_Sto_Dacc,            /* DSPF_NV21 */     Sop_ayuv_Sto_Dacc,            /* DSPF_AYUV */     NULL,                         /* DSPF_A4 */     Sop_argb1666_Sto_Dacc,        /* DSPF_ARGB1666 */     Sop_argb6666_Sto_Dacc,        /* DSPF_ARGB6666 */     Sop_rgb18_Sto_Dacc,           /* DSPF_RGB18 */     NULL,                         /* DSPF_LUT2 */     Sop_xrgb4444_Sto_Dacc,        /* DSPF_RGB444 */     Sop_xrgb1555_Sto_Dacc,        /* DSPF_RGB555 */};/********************************* Sop_PFI_SKto_Dacc **************************/static void Sop_argb6666_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     u32 Skey = gfxs->Skey;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          u8 s0 = S[pixelstart+0];          u8 s1 = S[pixelstart+1];          u8 s2 = S[pixelstart+2];          if (Skey != ((u32)(s2<<16 | s1<<8 | s0) & 0x3FFFF)) {               u8 b = s0 & 0x3F;               u8 g = ((s0 & 0xC0) >> 6) | ((s1 & 0x0F) << 2);               u8 r = ((s1 & 0xF0) >> 4) | ((s2 & 0x03) << 4);               u8 a = (s2 & 0xFC) >> 2;               D->RGB.a = EXPAND_6to8( a );               D->RGB.r = EXPAND_6to8( r );               D->RGB.g = EXPAND_6to8( g );               D->RGB.b = EXPAND_6to8( b );          }          else               D->RGB.a = 0xFF00;          i += SperD;          D++;     }}static void Sop_argb1666_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     u32                Skey = gfxs->Skey;     while (w--) {          int pixelstart = (i>>16)*3;          u8 s0 = S[pixelstart+0];          u8 s1 = S[pixelstart+1];          u8 s2 = S[pixelstart+2];          if (Skey != ((u32)(s2<<16 | s1<<8 | s0) & 0x3FFFF)) {               u8 b = s0 & 0x3F;               u8 g = ((s0 & 0xC0) >> 6) | ((s1 & 0x0F) << 2);               u8 r = ((s1 & 0xF0) >> 4) | ((s2 & 0x03) << 4);               u8 a = (s2 & 0x04) >> 2;               D->RGB.a = EXPAND_1to8( a );               D->RGB.r = EXPAND_6to8( r );               D->RGB.g = EXPAND_6to8( g );               D->RGB.b = EXPAND_6to8( b );          }          else               D->RGB.a = 0xFF00;          i += SperD;          D++;     }}static void Sop_rgb18_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     u32  Skey = gfxs->Skey;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          u8 s0 = S[pixelstart+0];          u8 s1 = S[pixelstart+1];          u8 s2 = S[pixelstart+2];          if (Skey != ((u32)(s2<<16 | s1<<8 | s0) & 0x3FFFF)) {               u8 b = s0 & 0x3F;               u8 g = ((s0 & 0xC0) >> 6) | ((s1 & 0x0F) << 2);               u8 r = ((s1 & 0xF0) >> 4) | ((s2 & 0x03) << 4);               D->RGB.a = 0xFF;               D->RGB.r = EXPAND_6to8( r );               D->RGB.g = EXPAND_6to8( g );               D->RGB.b = EXPAND_6to8( b );          }          else               D->RGB.a = 0xFF00;          i += SperD;          D++;     }}static void Sop_rgb24_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D    = gfxs->Dacc;     u8                *S    = gfxs->Sop[0];     u32                Skey = gfxs->Skey;     while (w--) {          int pixelstart = (i>>16)*3;          u8 b = S[pixelstart+0];          u8 g = S[pixelstart+1];          u8 r = S[pixelstart+2];          if (Skey != (u32)(r<<16 | g<<8 | b)) {               D->RGB.a = 0xFF;               D->RGB.r = r;               D->RGB.g = g;               D->RGB.b = b;          }          else               D->RGB.a = 0xFF00;          i += SperD;          D++;     }}static void Sop_a8_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     /* no color to key */     while (w--) {          u8 s = S[i>>16];          D->RGB.a = s;          D->RGB.r = 0xFF;          D->RGB.g = 0xFF;          D->RGB.b = 0xFF;          i += SperD;          D++;     }}static void Sop_lut8_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D    = gfxs->Dacc;     u8                *S    = gfxs->Sop[0];     u32                Skey = gfxs->Skey;     DFBColor *entries = gfxs->Slut->entries;     while (w--) {          u8 s = S[i>>16];          if (s != Skey) {               D->RGB.a = entries[s].a;               D->RGB.r = entries[s].r;               D->RGB.g = entries[s].g;               D->RGB.b = entries[s].b;          }          else               D->RGB.a = 0xF000;          i += SperD;          D++;     }}static void Sop_alut44_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D    = gfxs->Dacc;     u8                *S    = gfxs->Sop[0];     u32                Skey = gfxs->Skey;     DFBColor *entries = gfxs->Slut->entries;     while (w--) {          u8 s = S[i>>16];          if ((s & 0x0F) != Skey) {               D->RGB.a = ((s & 0xF0) >> 4) | (s & 0xF0);               s &= 0x0F;               D->RGB.r = entries[s].r;               D->RGB.g = entries[s].g;               D->RGB.b = entries[s].b;          }          else               D->RGB.a = 0xF000;          i += SperD;          D++;     }}static void Sop_yuy2_SKto_Dacc( GenefxState *gfxs ){     int   w     = gfxs->length>>1;     int   i     = gfxs->Xphase;     int   SperD = gfxs->SperD;     u32   Ky    = (gfxs->Skey & 0x000000FF);#ifdef WORDS_BIGENDIAN     u32   Kcb   = (gfxs->Skey & 0xFF000000) >> 24;     u32   Kcr   = (gfxs->Skey & 0x0000FF00) >>  8;#else     u32   Kcb   = (gfxs->Skey & 0x0000FF00) >>  8;     u32   Kcr   = (gfxs->Skey & 0xFF000000) >> 24;#endif     GenefxAccumulator *D = gfxs->Dacc;     u32               *S = gfxs->Sop[0];     while (w--) {          u32 s = S[i>>17];          u32 y0, cb, y1, cr;#ifdef WORDS_BIGENDIAN          cb = (s & 0xFF000000) >> 24;          cr = (s & 0x0000FF00) >>  8;#else          cb = (s & 0x0000FF00) >>  8;          cr = (s & 0xFF000000) >> 24;#endif          y0 = ((u16*)S)[i>>16]         & 0x00FF;          y1 = ((u16*)S)[(i+SperD)>>16] & 0x00FF;          if (y0 != Ky || cb != Kcb || cr != Kcr) {               D[0].YUV.a = 0xFF;               D[0].YUV.y = y0;               D[0].YUV.u = cb;               D[0].YUV.v = cr;          }          else               D[0].YUV.a = 0xF000;          if (y0 != Ky || cb != Kcb || cr != Kcr) {               D[1].YUV.a = 0xFF;               D[1].YUV.y = y1;               D[1].YUV.u = cb;               D[1].YUV.v = cr;          }          else               D[1].YUV.a = 0xF000;          D += 2;          i += SperD << 1;     }     if (gfxs->length & 1) {          u16 s = ((u16*)S)[i>>16];          if (s != (Ky | (Kcb << 8))) {               D->YUV.a = 0xFF;               D->YUV.y = s & 0xFF;               D->YUV.u = s >> 8;               D->YUV.v = 0x00;          }          else               D->YUV.a = 0xF000;     }}static void Sop_rgb332_SKto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D    = gfxs->Dacc;     u8                *S    = gfxs->Sop[0];     u8                 Skey = gfxs->Skey;     while (w--) {          u8 s = S[i>>16];          if (s != Skey) {               D->RGB.a = 0xFF;               D->RGB.r = EXPAND_3to8(s >> 5);               D->RGB.g = EXPAND_3to8((s & 0x1C) >> 2);               D->RGB.b = EXPAND_2to8(s & 0x03);          }          else               D->RGB.a = 0xF000;          i += SperD;          D++;     }}static void Sop_uyvy_SKto_Dacc( GenefxState *gfxs ){     int   w     = gfxs->length>>1;     int   i     = gfxs->Xphase;     int   SperD = gfxs->SperD;     u32 Ky      = (gfxs->Skey & 0x0000FF00) >>  8;#ifdef WORDS_BIGENDIAN     u32 Kcb     = (gfxs->Skey & 0x00FF0000) >> 16;     u32 Kcr     = (gfxs->Skey & 0x000000FF);#else     u32 Kcb     = (gfxs->Skey & 0x000000FF);     u32 Kcr     = (gfxs->Skey & 0x00FF0000) >> 16;#endif     GenefxAccumulator *D = gfxs->Dacc;     u32               *S = gfxs->Sop[0];     while (w--) {          u32 s = S[i>>17];          u32 cb, y0, cr, y1;#ifdef WORDS_BIGENDIAN          cb = (s & 0x00FF0000) >> 16;          cr = (s & 0x000000FF);#else          cb = (s & 0x000000FF);          cr = (s & 0x00FF0000) >> 16;#endif          y0 = (((u16*)S)[i>>16]         & 0xFF00) >> 8;          y1 = (((u16*)S)[(i+SperD)>>16] & 0xFF00) >> 8;          if (y0 != Ky || cb != Kcb || cr != Kcr) {               D[0].YUV.a = 0xFF;               D[0].YUV.y = y0;               D[0].YUV.u = cb;               D[0].YUV.v = cr;          }          else              D[0].YUV.a = 0xF000;          if (y0 != Ky || cb != Kcb || cr != Kcr) {               D[1].YUV.a = 0xFF;               D[1].YUV.y = y1;               D[1].YUV.u = cb;               D[1].YUV.v = cr;          }          else               D[1].YUV.a = 0xF000;          D += 2;          i += SperD << 1;     }     if (gfxs->length & 1) {          u16 s = ((u16*)S)[i>>16];          if (s != (Kcb | (Ky << 8))) {               D->YUV.a = 0xFF;               D->YUV.y = s >> 8;               D->YUV.u = s & 0xFF;               D->YUV.v = 0x00;          }          else               D->YUV.a = 0xF000;     }}static GenefxFunc Sop_PFI_SKto_Dacc[DFB_NUM_PIXELFORMATS] = {     Sop_argb1555_SKto_Dacc,       /* DSPF_ARGB1555 */     Sop_rgb16_SKto_Dacc,          /* DSPF_RGB16 */     Sop_rgb24_SKto_Dacc,          /* DSPF_RGB24 */     Sop_rgb32_SKto_Dacc,          /* DSPF_RGB32 */     Sop_argb_SKto_Dacc,           /* DSPF_ARGB */     Sop_a8_SKto_Dacc,             /* DSPF_A8 */     Sop_yuy2_SKto_Dacc,           /* DSPF_YUY2 */     Sop_rgb332_SKto_Dacc,         /* DSPF_RGB332 */     Sop_uyvy_SKto_Dacc,           /* DSPF_UYVY */     NULL,                         /* DSPF_I420 */     NULL,                         /* DSPF_YV12 */     Sop_lut8_SKto_Dacc,           /* DSPF_LUT8 */     Sop_alut44_SKto_Dacc,         /* DSPF_ALUT44 */     Sop_airgb_SKto_Dacc,          /* DSPF_AiRGB */     NULL,                         /* DSPF_A1 */     NULL,                         /* DSPF_NV12 */     NULL,                         /* DSPF_NV16 */     Sop_argb2554_SKto_Dacc,       /* DSPF_ARGB2554 */     Sop_argb4444_SKto_Dacc,       /* DSPF_ARGB4444 */     NULL,                         /* DSPF_NV21 */     NULL,                         /* DSPF_AYUV */     NULL,                         /* DSPF_A4 */     Sop_argb1666_SKto_Dacc,       /* DSPF_ARGB1666 */     Sop_argb6666_SKto_Dacc,       /* DSPF_ARGB6666 */     Sop_rgb18_SKto_Dacc,          /* DSPF_RGB18 */     NULL,                         /* DSPF_LUT2 */     Sop_xrgb4444_SKto_Dacc,       /* DSPF_RGB444 */     Sop_xrgb1555_SKto_Dacc,       /* DSPF_RGB555 */};/********************************* Sop_PFI_to_Dacc ******************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -