📄 colorspace_macros.h
字号:
#define RGB_FLOAT_TO_YUV_8(r, g, b, y, u, v) \ RGB_FLOAT_TO_Y_8(r, g, b, y) \ u_tmp = r_float_to_u * r + g_float_to_u * g + b_float_to_u * b; \ v_tmp = r_float_to_v * r + g_float_to_v * g + b_float_to_v * b; \ u = UV_FLOAT_TO_8(u_tmp); \ v = UV_FLOAT_TO_8(v_tmp);#define RGB_FLOAT_TO_YJ_8(r, g, b, y) \ y_tmp = r_float_to_y * r + g_float_to_y * g + b_float_to_y * b; \ y = YJ_FLOAT_TO_8(y_tmp);#define RGB_FLOAT_TO_YUVJ_8(r, g, b, y, u, v) \ RGB_FLOAT_TO_YJ_8(r, g, b, y) \ u_tmp = r_float_to_u * r + g_float_to_u * g + b_float_to_u * b; \ v_tmp = r_float_to_v * r + g_float_to_v * g + b_float_to_v * b; \ u = UVJ_FLOAT_TO_8(u_tmp); \ v = UVJ_FLOAT_TO_8(v_tmp);/* Float -> 16 */#define RGB_FLOAT_TO_Y_16(r, g, b, y) \ y_tmp = r_float_to_y * r + g_float_to_y * g + b_float_to_y * b; \ y = Y_FLOAT_TO_16(y_tmp);#define RGB_FLOAT_TO_YUV_16(r, g, b, y, u, v) \ RGB_FLOAT_TO_Y_16(r, g, b, y) \ u_tmp = r_float_to_u * r + g_float_to_u * g + b_float_to_u * b; \ v_tmp = r_float_to_v * r + g_float_to_v * g + b_float_to_v * b; \ u = UV_FLOAT_TO_16(u_tmp); \ v = UV_FLOAT_TO_16(v_tmp);/* YUV (8bit) -> */#define YUV_8_TO_RGB_24(y,u,v,r,g,b) i_tmp=(y_to_rgb[y]+v_to_r[v])>>16;\ r=RECLIP_8(i_tmp);\ i_tmp=(y_to_rgb[y]+u_to_g[u]+v_to_g[v])>>16;\ g=RECLIP_8(i_tmp);\ i_tmp=(y_to_rgb[y]+u_to_b[u])>>16;\ b=RECLIP_8(i_tmp);#define YUVJ_8_TO_RGB_24(y,u,v,r,g,b) i_tmp=(yj_to_rgb[y]+vj_to_r[v])>>16;\ r=RECLIP_8(i_tmp);\ i_tmp=(yj_to_rgb[y]+uj_to_g[u]+vj_to_g[v])>>16;\ g=RECLIP_8(i_tmp);\ i_tmp=(yj_to_rgb[y]+uj_to_b[u])>>16;\ b=RECLIP_8(i_tmp);#define YUV_8_TO_RGB_48(y,u,v,r,g,b) i_tmp=(y_to_rgb[y]+v_to_r[v])>>8;\ r=RECLIP_16(i_tmp);\ i_tmp=(y_to_rgb[y]+u_to_g[u]+v_to_g[v])>>8;\ g=RECLIP_16(i_tmp);\ i_tmp=(y_to_rgb[y]+u_to_b[u])>>8;\ b=RECLIP_16(i_tmp);#define YUVJ_8_TO_RGB_48(y,u,v,r,g,b) i_tmp=(yj_to_rgb[y]+vj_to_r[v])>>8;\ r=RECLIP_16(i_tmp);\ i_tmp=(yj_to_rgb[y]+uj_to_g[u]+vj_to_g[v])>>8;\ g=RECLIP_16(i_tmp);\ i_tmp=(yj_to_rgb[y]+uj_to_b[u])>>8;\ b=RECLIP_16(i_tmp);#define YUV_8_TO_RGB_FLOAT(y,u,v,r,g,b) \ i_tmp=(y_to_rgb_float[y]+v_to_r_float[v]); \ r=RECLIP_FLOAT(i_tmp); \ i_tmp=(y_to_rgb_float[y]+u_to_g_float[u]+v_to_g_float[v]); \ g=RECLIP_FLOAT(i_tmp); \ i_tmp=(y_to_rgb_float[y]+u_to_b_float[u]); \ b=RECLIP_FLOAT(i_tmp);#define YUVJ_8_TO_RGB_FLOAT(y,u,v,r,g,b) \ i_tmp=(yj_to_rgb_float[y]+vj_to_r_float[v]); \ r=RECLIP_FLOAT(i_tmp); \ i_tmp=(yj_to_rgb_float[y]+uj_to_g_float[u]+vj_to_g_float[v]); \ g=RECLIP_FLOAT(i_tmp); \ i_tmp=(yj_to_rgb_float[y]+uj_to_b_float[u]); \ b=RECLIP_FLOAT(i_tmp);/* YUV (16 bit) -> 8 */#define y_16_to_rgb (int64_t)(255.0/219.0 * 0x10000)#define v_16_to_r (int64_t)( 1.40200*255.0/224.0 * 0x10000)#define u_16_to_g (int64_t)(-0.34414*255.0/224.0 * 0x10000)#define v_16_to_g (int64_t)(-0.71414*255.0/224.0 * 0x10000)#define u_16_to_b (int64_t)( 1.77200*255.0/224.0 * 0x10000)#define YUV_16_TO_RGB_24(y,u,v,r,g,b) \ i_tmp=(y_16_to_rgb * (y-0x1000) + v_16_to_r * (v-0x8000))>>24; \ r = RECLIP_8(i_tmp);\ i_tmp=(y_16_to_rgb * (y-0x1000) + u_16_to_g * (u-0x8000)+ v_16_to_g * (v-0x8000))>>24; \ g = RECLIP_8(i_tmp);\ i_tmp=(y_16_to_rgb * (y-0x1000) + u_16_to_b * (u-0x8000))>>24; \ b = RECLIP_8(i_tmp);/* YUV (16 bit) -> 16 */#define YUV_16_TO_RGB_48(y,u,v,r,g,b) \ i_tmp=(y_16_to_rgb * (y-0x1000) + v_16_to_r * (v-0x8000))>>16; \ r = RECLIP_16(i_tmp);\ i_tmp=(y_16_to_rgb * (y-0x1000) + u_16_to_g * (u-0x8000)+ v_16_to_g * (v-0x8000))>>16; \ g = RECLIP_16(i_tmp);\ i_tmp=(y_16_to_rgb * (y-0x1000) + u_16_to_b * (u-0x8000))>>16; \ b = RECLIP_16(i_tmp);/* YUV (16 bit) -> float */#define y_16_to_rgb_float (255.0/219.0/65535.0)#define v_16_to_r_float (1.40200*255.0/224.0/65535.0)#define u_16_to_g_float (-0.34414*255.0/224.0/65535.0)#define v_16_to_g_float (-0.71414*255.0/224.0/65535.0)#define u_16_to_b_float (1.77200*255.0/224.0/65535.0)#define YUV_16_TO_RGB_FLOAT(y,u,v,r,g,b) \ i_tmp=(y_16_to_rgb_float * (y-0x1000) + v_16_to_r_float * (v-0x8000)); \ r = RECLIP_FLOAT(i_tmp);\ i_tmp=(y_16_to_rgb_float * (y-0x1000) + u_16_to_g_float * (u-0x8000)+ v_16_to_g_float * (v-0x8000)); \ g = RECLIP_FLOAT(i_tmp);\ i_tmp=(y_16_to_rgb_float * (y-0x1000) + u_16_to_b_float * (u-0x8000)); \ b = RECLIP_FLOAT(i_tmp);/* Combine r, g and b values to a 16 bit rgb pixel (taken from avifile) */#define PACK_8_TO_RGB16(r,g,b,pixel) pixel=((((((r<<5)&0xff00)|g)<<6)&0xfff00)|b)>>3;#define PACK_8_TO_BGR16(r,g,b,pixel) pixel=((((((b<<5)&0xff00)|g)<<6)&0xfff00)|r)>>3;#define PACK_8_TO_RGB15(r,g,b,pixel) pixel=((((((r<<5)&0xff00)|g)<<5)&0xfff00)|b)>>3;#define PACK_8_TO_BGR15(r,g,b,pixel) pixel=((((((b<<5)&0xff00)|g)<<5)&0xfff00)|r)>>3;#define PACK_16_TO_RGB16(r,g,b,pixel) pixel=((((((r>>3)&0xff00)|(g>>8))<<6)&0xfff00)|(b>>8))>>3;#define PACK_16_TO_BGR16(r,g,b,pixel) pixel=((((((b>>3)&0xff00)|(g>>8))<<6)&0xfff00)|(r>>8))>>3;#define PACK_16_TO_RGB15(r,g,b,pixel) pixel=((((((r>>3)&0xff00)|(g>>8))<<5)&0xfff00)|(b>>8))>>3;#define PACK_16_TO_BGR15(r,g,b,pixel) pixel=((((((b>>3)&0xff00)|(g>>8))<<5)&0xfff00)|(r>>8))>>3;/* RGBA -> RGB */#define INIT_RGBA_32 uint32_t anti_alpha;\ int background_r=ctx->options->background_16[0] >> 8; \ int background_g=ctx->options->background_16[1] >> 8; \ int background_b=ctx->options->background_16[2] >> 8;#define INIT_RGBA_64 uint32_t anti_alpha;\ uint32_t background_r=ctx->options->background_16[0]; \ uint32_t background_g=ctx->options->background_16[1]; \ uint32_t background_b=ctx->options->background_16[2];#define INIT_RGBA_FLOAT float anti_alpha; \ float background_r=ctx->options->background_float[0]; \ float background_g=ctx->options->background_float[1]; \ float background_b=ctx->options->background_float[2];#define RGBA_32_TO_RGB_24(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \anti_alpha = 0xFF - src_a;\dst_r=((src_a*src_r)+(anti_alpha*background_r))>>8;\dst_g=((src_a*src_g)+(anti_alpha*background_g))>>8;\dst_b=((src_a*src_b)+(anti_alpha*background_b))>>8;#define RGBA_32_TO_RGB_48(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \anti_alpha = 0xFF - src_a;\dst_r=((src_a*src_r)+(anti_alpha*background_r));\dst_g=((src_a*src_g)+(anti_alpha*background_g));\dst_b=((src_a*src_b)+(anti_alpha*background_b));#define RGBA_64_TO_RGB_24(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 0xFFFF - src_a; \ dst_r=((src_a*src_r)+(anti_alpha*background_r))>>24; \ dst_g=((src_a*src_g)+(anti_alpha*background_g))>>24; \ dst_b=((src_a*src_b)+(anti_alpha*background_b))>>24;#define RGBA_64_TO_RGB_48(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 0xFFFF - src_a; \ dst_r=((src_a*src_r)+(anti_alpha*background_r))>>16; \ dst_g=((src_a*src_g)+(anti_alpha*background_g))>>16; \ dst_b=((src_a*src_b)+(anti_alpha*background_b))>>16;#define RGBA_64_TO_RGB_FLOAT(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 0xFFFF - src_a; \ dst_r=RGB_16_TO_FLOAT(((src_a*src_r)+(anti_alpha*background_r))>>16); \ dst_g=RGB_16_TO_FLOAT(((src_a*src_g)+(anti_alpha*background_g))>>16); \ dst_b=RGB_16_TO_FLOAT(((src_a*src_b)+(anti_alpha*background_b))>>16);#define RGBA_FLOAT_TO_RGB_24(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 1.0 - src_a; \ dst_r=RGB_FLOAT_TO_8(src_a*src_r+anti_alpha*background_r); \ dst_g=RGB_FLOAT_TO_8(src_a*src_g+anti_alpha*background_g); \ dst_b=RGB_FLOAT_TO_8(src_a*src_b+anti_alpha*background_b);#define RGBA_FLOAT_TO_RGB_48(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 1.0 - src_a; \ dst_r=RGB_FLOAT_TO_16(src_a*src_r+anti_alpha*background_r); \ dst_g=RGB_FLOAT_TO_16(src_a*src_g+anti_alpha*background_g); \ dst_b=RGB_FLOAT_TO_16(src_a*src_b+anti_alpha*background_b);#define RGBA_FLOAT_TO_RGB_FLOAT(src_r, src_g, src_b, src_a, dst_r, dst_g, dst_b) \ anti_alpha = 1.0 - src_a; \ dst_r=src_a*src_r+anti_alpha*background_r; \ dst_g=src_a*src_g+anti_alpha*background_g; \ dst_b=src_a*src_b+anti_alpha*background_b;/* YUVA 32 -> YUV */#define INIT_YUVA_32 uint32_t anti_alpha;\ int background_y; \ int background_u; \ int background_v; \ RGB_48_TO_YUV_8(ctx->options->background_16[0], \ ctx->options->background_16[1], \ ctx->options->background_16[2],\ background_y, background_u, background_v);#define YUVA_32_TO_YUV_8(src_y, src_u, src_v, src_a, dst_y, dst_u, dst_v) \ anti_alpha = 0xFF - src_a; \ dst_y=((src_a*src_y)+(anti_alpha*background_y))>>8; \ dst_u=((src_a*src_u)+(anti_alpha*background_u))>>8; \ dst_v=((src_a*src_v)+(anti_alpha*background_v))>>8; #define YUVA_32_TO_Y_8(src_y, src_a, dst_y) \ anti_alpha = 0xFF - src_a; \ dst_y=((src_a*src_y)+(anti_alpha*background_y))>>8;#define YUVA_32_TO_YUVJ_8(src_y, src_u, src_v, src_a, dst_y, dst_u, dst_v) \ anti_alpha = 0xFF - src_a; \ dst_y=Y_16_TO_YJ_8(((src_a*src_y)+(anti_alpha*background_y))); \ dst_u=UV_16_TO_UVJ_8(((src_a*src_u)+(anti_alpha*background_u))); \ dst_v=UV_16_TO_UVJ_8(((src_a*src_v)+(anti_alpha*background_v))); #define YUVA_32_TO_YJ_8(src_y, src_a, dst_y) \ anti_alpha = 0xFF - src_a; \ dst_y=Y_16_TO_YJ_8(((src_a*src_y)+(anti_alpha*background_y)));#define YUVA_32_TO_YUV_16(src_y, src_u, src_v, src_a, dst_y, dst_u, dst_v) \ anti_alpha = 0xFF - src_a; \ dst_y=((src_a*src_y)+(anti_alpha*background_y)); \ dst_u=((src_a*src_u)+(anti_alpha*background_u)); \ dst_v=((src_a*src_v)+(anti_alpha*background_v)); #define YUVA_32_TO_Y_16(src_y, src_a, dst_y) \ anti_alpha = 0xFF - src_a; \ dst_y=((src_a*src_y)+(anti_alpha*background_y));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -