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

📄 generic.c

📁 DirectFB-1.0.1可用于linux的嵌入式GUI
💻 C
📖 第 1 页 / 共 5 页
字号:
      u8   *D    = gfxs->Aop[0];      u8    Dkey = gfxs->Dkey;      while (w--) {           if (*D == Dkey) {                *D = *S;           }           D++;           S++;      }}static GenefxFunc Bop_PFI_toK_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_15_toK_Aop,          /* DSPF_ARGB1555 */     Bop_16_toK_Aop,          /* DSPF_RGB16 */     Bop_rgb24_toK_Aop,       /* DSPF_RGB24 */     Bop_32_toK_Aop,          /* DSPF_RGB32 */     Bop_32_toK_Aop,          /* DSPF_ARGB */     NULL,                    /* DSPF_A8 */     Bop_yuv422_toK_Aop,      /* DSPF_YUY2 */     Bop_rgb332_toK_Aop,      /* DSPF_RGB332 */     Bop_yuv422_toK_Aop,      /* DSPF_UYVY */     NULL,                    /* DSPF_I420 */     NULL,                    /* DSPF_YV12 */     NULL,                    /* DSPF_LUT8 */     NULL,                    /* DSPF_ALUT44 */     Bop_32_toK_Aop,          /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     NULL,                    /* DSPF_NV12 */     NULL,                    /* DSPF_NV16 */     Bop_14_toK_Aop,          /* DSPF_ARGB2554 */     Bop_12_toK_Aop,          /* DSPF_ARGB4444 */     NULL,                    /* DSPF_NV21 */     Bop_32_toK_Aop,          /* DSPF_AYUV */     NULL,                    /* DSPF_A4 */     Bop_rgb18_toK_Aop,       /* DSPF_ARGB1666 */     Bop_rgb18_toK_Aop,       /* DSPF_ARGB6666 */     Bop_rgb18_toK_Aop,       /* DSPF_RGB18 */     NULL,                    /* DSPF_LUT2 */     Bop_12_toK_Aop,          /* DSPF_RGB444 */     Bop_15_toK_Aop,          /* DSPF_RGB555 */};/********************************* Bop_PFI_KtoK_Aop_PFI ***********************/static GenefxFunc Bop_PFI_KtoK_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_15_KtoK_Aop,         /* DSPF_ARGB1555 */     Bop_16_KtoK_Aop,         /* DSPF_RGB16 */     NULL,                    /* DSPF_RGB24 */     Bop_32_KtoK_Aop,         /* DSPF_RGB32 */     Bop_32_KtoK_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_KtoK_Aop,         /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     NULL,                    /* DSPF_NV12 */     NULL,                    /* DSPF_NV16 */     Bop_14_KtoK_Aop,         /* DSPF_ARGB2554 */     Bop_12_KtoK_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_KtoK_Aop,         /* DSPF_RGB444 */     Bop_15_KtoK_Aop,         /* DSPF_RGB555 */};/********************************* Bop_PFI_Sto_Aop_PFI ************************/static void Bop_16_Sto_Aop( GenefxState *gfxs ){     int    w2;     int    w      = gfxs->length;     int    i      = gfxs->Xphase;     u32   *D      = gfxs->Aop[0];     u16   *S      = gfxs->Bop[0];     int    SperD  = gfxs->SperD;     int    SperD2 = SperD << 1;     if (((long)D)&2) {          *(u16*)D = *S;          i += SperD;          w--;          D = gfxs->Aop[0] + 2;     }     w2 = (w >> 1);     while (w2--) {#ifdef WORDS_BIGENDIAN          *D++ =  S[i>>16] << 16 | S[(i+SperD)>>16];#else          *D++ = (S[(i+SperD)>>16] << 16) | S[i>>16];#endif          i += SperD2;     }     if (w&1) {          *(u16*)D = S[i>>16];     }}static void Bop_24_Sto_Aop( GenefxState *gfxs ){     int   w     = gfxs->length;     int   i     = gfxs->Xphase;     u8   *D     = gfxs->Aop[0];     u8   *S     = gfxs->Bop[0];     int   SperD = gfxs->SperD;     while (w--) {          int pixelstart = (i>>16)*3;          *D++ = S[pixelstart+0];          *D++ = S[pixelstart+1];          *D++ = S[pixelstart+2];          i += SperD;     }}static void Bop_32_Sto_Aop( GenefxState *gfxs ){     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u32   *D     = gfxs->Aop[0];     u32   *S     = gfxs->Bop[0];     int    SperD = gfxs->SperD;     while (w--) {          *D++ = S[i>>16];          i += SperD;     }}static void Bop_yuy2_Sto_Aop( GenefxState *gfxs ){     int    l;     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u16   *D     = gfxs->Aop[0];     u16   *S     = gfxs->Bop[0];     int    SperD = gfxs->SperD;     if ((long)D & 2) {          *D++ = *S;          i = SperD;          w--;     }     for (l = w>>1; l--;) {          register u32 d;          d  = ((u32*)S)[i>>17] & 0xff00ff00;#ifdef WORDS_BIGENDIAN          d |= (S[i>>16]          & 0x00ff) << 16;          d |= (S[(i+SperD)>>16]  & 0x00ff);#else          d |= (S[i>>16]          & 0x00ff);          d |= (S[(i+SperD)>>16]  & 0x00ff) << 16;#endif          *((u32*)D) = d;          D += 2;          i += SperD << 1;     }     if (w & 1)          *D = S[i>>16];}static void Bop_8_Sto_Aop( GenefxState *gfxs ){     int   w     = gfxs->length;     int   i     = gfxs->Xphase;     u8   *D     = gfxs->Aop[0];     u8   *S     = gfxs->Bop[0];     int   SperD = gfxs->SperD;     while (w--) {          *D++ = S[i>>16];          i += SperD;     }}static void Bop_uyvy_Sto_Aop( GenefxState *gfxs ){     int    l;     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u16   *D     = gfxs->Aop[0];     u16   *S     = gfxs->Bop[0];     int    SperD = gfxs->SperD;     if ((long)D & 2) {          *D++ = *S;          i = SperD;          w--;     }     for (l = w>>1; l--;) {          register u32 d;          d  = ((u32*)S)[i>>17] & 0x00ff00ff;#ifdef WORDS_BIGENDIAN          d |= (S[i>>16]          & 0xff00) << 16;          d |= (S[(i+SperD)>>16]  & 0xff00);#else          d |= (S[i>>16]          & 0xff00);          d |= (S[(i+SperD)>>16]  & 0xff00) << 16;#endif          *((u32*)D) = d;          D += 2;          i += SperD << 1;     }     if (w & 1)          *D = S[i>>16];}static void Bop_i420_Sto_Aop( GenefxState *gfxs ){     int   w     = gfxs->length;     int   i     = gfxs->Xphase;     u8   *Dy    = gfxs->Aop[0];     u8   *Sy    = gfxs->Bop[0];     int   SperD = gfxs->SperD;         while (w--) {          *Dy++ = Sy[i>>16];          i += SperD;     }          if (gfxs->AopY & 1) {          u8 *Du = gfxs->Aop[1];          u8 *Dv = gfxs->Aop[2];          u8 *Su = gfxs->Bop[1];          u8 *Sv = gfxs->Bop[2];              for (w = gfxs->length>>1, i = 0; w--;) {               *Du++ = Su[i>>16];               i += SperD;          }          for (w = gfxs->length>>1, i = 0; w--;) {               *Dv++ = Sv[i>>16];               i += SperD;          }     }}static void Bop_NV_Sto_Aop( GenefxState *gfxs ){     int   w     = gfxs->length;     int   i     = gfxs->Xphase;     u8   *Dy    = gfxs->Aop[0];     u8   *Sy    = gfxs->Bop[0];     int   SperD = gfxs->SperD;          while (w--) {          *Dy++ = Sy[i>>16];          i += SperD;     }               if (gfxs->dst_format == DSPF_NV16 || gfxs->AopY & 1) {          u16 *Duv = gfxs->Aop[1];          u16 *Suv = gfxs->Bop[1];          for (w = gfxs->length>>1, i = 0; w--;) {               *Duv++ = Suv[i>>16];               i += SperD;          }     }}static GenefxFunc Bop_PFI_Sto_Aop_PFI[DFB_NUM_PIXELFORMATS] = {     Bop_16_Sto_Aop,          /* DSPF_ARGB1555 */     Bop_16_Sto_Aop,          /* DSPF_RGB16 */     Bop_24_Sto_Aop,          /* DSPF_RGB24 */     Bop_32_Sto_Aop,          /* DSPF_RGB32 */     Bop_32_Sto_Aop,          /* DSPF_ARGB */     Bop_8_Sto_Aop,           /* DSPF_A8 */     Bop_yuy2_Sto_Aop,        /* DSPF_YUY2 */     Bop_8_Sto_Aop,           /* DSPF_RGB332 */     Bop_uyvy_Sto_Aop,        /* DSPF_UYVY */     Bop_i420_Sto_Aop,        /* DSPF_I420 */     Bop_i420_Sto_Aop,        /* DSPF_YV12 */     Bop_8_Sto_Aop,           /* DSPF_LUT8 */     Bop_8_Sto_Aop,           /* DSPF_ALUT44 */     Bop_32_Sto_Aop,          /* DSPF_AiRGB */     NULL,                    /* DSPF_A1 */     Bop_NV_Sto_Aop,          /* DSPF_NV12 */     Bop_NV_Sto_Aop,          /* DSPF_NV16 */     Bop_16_Sto_Aop,          /* DSPF_ARGB2554 */     Bop_16_Sto_Aop,          /* DSPF_ARGB4444 */     Bop_NV_Sto_Aop,          /* DSPF_NV21 */     Bop_32_Sto_Aop,          /* DSPF_AYUV */     NULL,                    /* DSPF_A4 */     Bop_24_Sto_Aop,          /* DSPF_ARGB1666 */     Bop_24_Sto_Aop,          /* DSPF_ARGB6666 */     Bop_24_Sto_Aop,          /* DSPF_RGB18 */     Bop_16_Sto_Aop,          /* DSPF_ARGB4444 */     Bop_16_Sto_Aop,          /* DSPF_ARGB1555 */};/********************************* Bop_PFI_SKto_Aop_PFI ***********************/static void Bop_rgb18_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--) {          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)) {               D[0] = s0;               D[1] = s1;               D[2] = s2;          }          i += SperD;          D += 3;     }}static void Bop_rgb24_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--) {          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     = b;               *(D+1) = g;               *(D+2) = r;          }          D += 3;          i += SperD;     }}static void Bop_a8_SKto_Aop( GenefxState *gfxs ){     int   w     = gfxs->length;     int   i     = gfxs->Xphase;     u8   *D     = gfxs->Aop[0];     u8   *S     = gfxs->Bop[0];     int   SperD = gfxs->SperD;     /* no color to key */     while (w--) {          *D++ = S[i>>16];          i += SperD;     }}static void Bop_yuy2_SKto_Aop( GenefxState *gfxs ){     int    l;     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u16   *D     = gfxs->Aop[0];     u16   *S     = gfxs->Bop[0];     u32    Skey  = gfxs->Skey;#ifdef WORDS_BIGENDIAN     u16    Skey0 = gfxs->Skey >> 16;     u16    Skey1 = gfxs->Skey & 0xffff;#else     u16    Skey0 = gfxs->Skey & 0xffff;     u16    Skey1 = gfxs->Skey >> 16;#endif     int    SperD = gfxs->SperD;     if ((long)D & 2) {          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] & 0xff00ff00;#ifdef WORDS_BIGENDIAN          s |= (S[i>>16]          & 0x00ff) << 16;          s |= (S[(i+SperD)>>16]  & 0x00ff);#else          s |= (S[i>>16]          & 0x00ff);          s |= (S[(i+SperD)>>16]  & 0x00ff) << 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_8_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 != Skey)               *D = s;          D++;          i += SperD;     }}static void Bop_uyvy_SKto_Aop( GenefxState *gfxs ){     int    l;     int    w     = gfxs->length;     int    i     = gfxs->Xphase;     u16   *D     = gfxs->Aop[0];     u16   *S     = gfxs->Bop[0];     u32    Skey  = gfxs->Skey;#ifdef WORDS_BIGENDIAN     u16    Skey0 = gfxs->Skey >> 16;     u16    Skey1 = gfxs->Skey & 0xffff;#else     u16    Skey0 = gfxs->Skey & 0xffff;     u16    Skey1 = gfxs->Skey >> 16;#endif     int    SperD = gfxs->SperD;     if ((long)D & 2) {

⌨️ 快捷键说明

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