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