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

📄 generic.c

📁 DirectFB-1.0.1可用于linux的嵌入式GUI
💻 C
📖 第 1 页 / 共 5 页
字号:
          u16 s = *S;          if (s != Skey0)               *D = s;          D++;          i = SperD;          w--;     }     for (l = w>>1; l--;) {          register u32 s;          s  = ((u32*)S)[i>>17] & 0x00ff00ff;#ifdef WORDS_BIGENDIAN          s |= (S[i>>16]          & 0xff00) << 16;          s |= (S[(i+SperD)>>16]  & 0xff00);#else          s |= (S[i>>16]          & 0xff00);          s |= (S[(i+SperD)>>16]  & 0xff00) << 16;#endif          if (s != Skey)               *((u32*)D) = s;          D += 2;          i += SperD << 1;     }     if (w & 1) {          u16 s = S[i>>16];          if (i & 0x20000) {               if (s != Skey1)                    *D = s;          } else {               if (s != Skey0)                    *D = s;          }     }}static void Bop_alut44_SKto_Aop( GenefxState *gfxs ){     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u8    *D     = gfxs->Aop[0];     u8    *S     = gfxs->Bop[0];     u32    Skey  = gfxs->Skey;     int    SperD = gfxs->SperD;     while (w--) {          u8 s = S[i>>16];          if ((s & 0x0f) != Skey)               *D = s;          D++;          i += SperD;     }}static GenefxFunc Bop_PFI_SKto_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_15_SKto_Aop,         /* DSPF_ARGB1555 */     Bop_16_SKto_Aop,         /* DSPF_RGB16 */     Bop_rgb24_SKto_Aop,      /* DSPF_RGB24 */     Bop_32_SKto_Aop,         /* DSPF_RGB32 */     Bop_32_SKto_Aop,         /* DSPF_ARGB */     Bop_a8_SKto_Aop,         /* DSPF_A8 */     Bop_yuy2_SKto_Aop,       /* DSPF_YUY2 */     Bop_8_SKto_Aop,          /* DSPF_RGB332 */     Bop_uyvy_SKto_Aop,       /* DSPF_UYVY */     NULL,                    /* DSPF_I420 */     NULL,                    /* DSPF_YV12 */     Bop_8_SKto_Aop,          /* DSPF_LUT8 */     Bop_alut44_SKto_Aop,     /* DSPF_ALUT44 */     Bop_32_SKto_Aop,         /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     NULL,                    /* DSPF_NV12 */     NULL,                    /* DSPF_NV16 */     Bop_14_SKto_Aop,         /* DSPF_ARGB2554 */     Bop_12_SKto_Aop,         /* DSPF_ARGB4444 */     NULL,                    /* DSPF_NV21 */     Bop_32_SKto_Aop,         /* DSPF_AYUV */     NULL,                    /* DSPF_A4 */     Bop_rgb18_SKto_Aop,      /* DSPF_ARGB1666 */     Bop_rgb18_SKto_Aop,      /* DSPF_ARGB6666 */     Bop_rgb18_SKto_Aop,      /* DSPF_RGB18 */     NULL,                    /* DSPF_LUT2 */     Bop_12_SKto_Aop,         /* DSPF_RGB444 */     Bop_15_SKto_Aop,         /* DSPF_RGB555 */};/********************************* Bop_PFI_StoK_Aop_PFI ***********************/static GenefxFunc Bop_PFI_StoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_15_StoK_Aop,         /* DSPF_ARGB1555 */     Bop_16_StoK_Aop,         /* DSPF_RGB16 */     NULL,                    /* DSPF_RGB24 */     Bop_32_StoK_Aop,         /* DSPF_RGB32 */     Bop_32_StoK_Aop,         /* DSPF_ARGB */     NULL,                    /* DSPF_A8 */     NULL,                    /* DSPF_YUY2 */     NULL,                    /* DSPF_RGB332 */     NULL,                    /* DSPF_UYVY */     NULL,                    /* DSPF_I420 */     NULL,                    /* DSPF_YV12 */     NULL,                    /* DSPF_LUT8 */     NULL,                    /* DSPF_ALUT44 */     Bop_32_StoK_Aop,         /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     NULL,                    /* DSPF_NV12 */     NULL,                    /* DSPF_NV16 */     Bop_14_StoK_Aop,         /* DSPF_ARGB2554 */     Bop_12_StoK_Aop,         /* DSPF_ARGB4444 */     NULL,                    /* DSPF_NV21 */     NULL,                    /* DSPF_AYUV */     NULL,                    /* DSPF_A4 */     NULL,                    /* DSPF_ARGB1666 */     NULL,                    /* DSPF_ARGB6666 */     NULL,                    /* DSPF_RGB18 */     NULL,                    /* DSPF_LUT2 */     Bop_12_StoK_Aop,         /* DSPF_RGB444 */     Bop_15_StoK_Aop,         /* DSPF_RGB555 */};/********************************* Bop_PFI_SKtoK_Aop_PFI **********************/static GenefxFunc Bop_PFI_SKtoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_15_SKtoK_Aop,        /* DSPF_ARGB1555 */     Bop_16_SKtoK_Aop,        /* DSPF_RGB16 */     NULL,                    /* DSPF_RGB24 */     Bop_32_SKtoK_Aop,        /* DSPF_RGB32 */     Bop_32_SKtoK_Aop,        /* DSPF_ARGB */     NULL,                    /* DSPF_A8 */     NULL,                    /* DSPF_YUY2 */     NULL,                    /* DSPF_RGB332 */     NULL,                    /* DSPF_UYVY */     NULL,                    /* DSPF_I420 */     NULL,                    /* DSPF_YV12 */     NULL,                    /* DSPF_LUT8 */     NULL,                    /* DSPF_ALUT44 */     Bop_32_SKtoK_Aop,        /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     NULL,                    /* DSPF_NV12 */     NULL,                    /* DSPF_NV16 */     Bop_14_SKtoK_Aop,        /* DSPF_ARGB2554 */     Bop_12_SKtoK_Aop,        /* DSPF_ARGB4444 */     NULL,                    /* DSPF_NV21 */     NULL,                    /* DSPF_AYUV */     NULL,                    /* DSPF_A4 */     NULL,                    /* DSPF_ARGB1666 */     NULL,                    /* DSPF_ARGB6666 */     NULL,                    /* DSPF_RGB18 */     NULL,                    /* DSPF_LUT2 */     Bop_12_SKtoK_Aop,        /* DSPF_RGB444 */     Bop_15_SKtoK_Aop,        /* DSPF_RGB555 */};/********************************* Sop_PFI_Sto_Dacc ***************************/static void Sop_argb6666_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          u8 b = S[pixelstart+0] & 0x3F;          u8 g = ((S[pixelstart+0] & 0xC0) >> 6) | ((S[pixelstart+1] & 0x0F) << 2);          u8 r = ((S[pixelstart+1] & 0xF0) >> 4) | ((S[pixelstart+2] & 0x03) << 4);          u8 a = (S[pixelstart+2] & 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 );          i += SperD;          D++;     }}  static void Sop_argb1666_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          u8 b = S[pixelstart+0] & 0x3F;          u8 g = ((S[pixelstart+0] & 0xC0) >> 6) | ((S[pixelstart+1] & 0x0F) << 2);          u8 r = ((S[pixelstart+1] & 0xF0) >> 4) | ((S[pixelstart+2] & 0x03) << 4);          u8 a = (S[pixelstart+2] & 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 );          i += SperD;          D++;    }}static void Sop_rgb18_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          u8 b = S[pixelstart+0] & 0x3F;          u8 g = ((S[pixelstart+0] & 0xC0) >> 6) | ((S[pixelstart+1] & 0x0F) << 2);          u8 r = ((S[pixelstart+1] & 0xF0) >> 4) | ((S[pixelstart+2] & 0x03) << 4);          D->RGB.a = 0xFF;          D->RGB.r = EXPAND_6to8( r );          D->RGB.g = EXPAND_6to8( g );          D->RGB.b = EXPAND_6to8( b );          i += SperD;          D++;     }}static void Sop_rgb24_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          int pixelstart = (i>>16)*3;          D->RGB.a = 0xFF;          D->RGB.r = S[pixelstart+2];          D->RGB.g = S[pixelstart+1];          D->RGB.b = S[pixelstart+0];          i += SperD;          D++;     }}static void Sop_a8_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     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_yuy2_Sto_Dacc( GenefxState *gfxs ){     int  w     = gfxs->length>>1;     int  i     = gfxs->Xphase;     int  SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u32               *S = gfxs->Sop[0];     while (w--) {          u32 s = S[i>>17];          D[0].YUV.a = D[1].YUV.a = 0xFF;#ifdef WORDS_BIGENDIAN          D[0].YUV.u = D[1].YUV.u = (s & 0xFF000000) >> 24;          D[0].YUV.v = D[1].YUV.v = (s & 0x0000FF00) >>  8;#else          D[0].YUV.u = D[1].YUV.u = (s & 0x0000FF00) >>  8;          D[0].YUV.v = D[1].YUV.v = (s & 0xFF000000) >> 24;#endif          D[0].YUV.y = ((u16*)S)[i>>16]         & 0x00FF;          D[1].YUV.y = ((u16*)S)[(i+SperD)>>16] & 0x00FF;          D += 2;          i += SperD << 1;     }     if (gfxs->length & 1) {          u16 s = ((u16*)S)[i>>17];          D->YUV.a = 0xFF;          D->YUV.y = s & 0xFF;          D->YUV.u = s >> 8;          D->YUV.v = 0x00;     }}static void Sop_rgb332_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     while (w--) {          u8 s = S[i>>16];          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);          i += SperD;          D++;     }}static void Sop_uyvy_Sto_Dacc( GenefxState *gfxs ){     int  w     = gfxs->length>>1;     int  i     = gfxs->Xphase;     int  SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u32               *S = gfxs->Sop[0];     while (w--) {          u32 s = S[i>>17];          D[0].YUV.a = D[1].YUV.a = 0xFF;#ifdef WORDS_BIGENDIAN          D[0].YUV.u = D[1].YUV.u = (s & 0x00FF0000) >> 16;          D[0].YUV.v = D[1].YUV.v = (s & 0x000000FF);#else          D[0].YUV.u = D[1].YUV.u = (s & 0x000000FF);          D[0].YUV.v = D[1].YUV.v = (s & 0x00FF0000) >> 16;#endif          D[0].YUV.y = (((u16*)S)[i>>16]         & 0xFF00) >> 8;          D[1].YUV.y = (((u16*)S)[(i+SperD)>>16] & 0xFF00) >> 8;          D += 2;          i += SperD << 1;     }     if (gfxs->length & 1) {          u16 s = ((u16*)S)[i>>16];          D->YUV.a = 0xFF;          D->YUV.y = s >> 8;          D->YUV.u = s & 0xFF;          D->YUV.v = 0x00;     }}static void Sop_lut8_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     DFBColor *entries = gfxs->Slut->entries;     while (w--) {          u8 s = S[i>>16];          D->RGB.a = entries[s].a;          D->RGB.r = entries[s].r;          D->RGB.g = entries[s].g;          D->RGB.b = entries[s].b;          i += SperD;          D++;     }}static void Sop_alut44_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D = gfxs->Dacc;     u8                *S = gfxs->Sop[0];     DFBColor *entries = gfxs->Slut->entries;     while (w--) {          u8 s = S[i>>16];          D->RGB.a = s & 0xF0;          s &= 0x0F;          D->RGB.r = entries[s].r;          D->RGB.g = entries[s].g;          D->RGB.b = entries[s].b;          i += SperD;          D++;     }}static void Sop_i420_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D  = gfxs->Dacc;     u8                *Sy = gfxs->Sop[0];     u8                *Su = gfxs->Sop[1];     u8                *Sv = gfxs->Sop[2];     while (w--) {          D->YUV.a = 0xFF;          D->YUV.y = Sy[i>>16];          D->YUV.u = Su[i>>17];          D->YUV.v = Sv[i>>17];                    i += SperD;                    D++;     }}static void Sop_nv12_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D   = gfxs->Dacc;     u8                *Sy  = gfxs->Sop[0];     u16               *Suv = gfxs->Sop[1];          while (w--) {          D->YUV.a = 0xFF;          D->YUV.y = Sy[i>>16];          D->YUV.u = Suv[i>>17] & 0xFF;          D->YUV.v = Suv[i>>17] >> 8;                    i += SperD;                    D++;     }} static void Sop_nv21_Sto_Dacc( GenefxState *gfxs ){     int w     = gfxs->length;     int i     = gfxs->Xphase;     int SperD = gfxs->SperD;     GenefxAccumulator *D   = gfxs->Dacc;     u8                *Sy  = gfxs->Sop[0];     u16               *Svu = gfxs->Sop[1];          while (w--) {          D->YUV.a = 0xFF;

⌨️ 快捷键说明

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