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