📄 generic.c
字号:
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 + -