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

📄 colorspace_macros.h

📁 这个库实现了录象功能
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -