cmodel_permutation.h
来自「这个库实现了录象功能」· C头文件 代码 · 共 1,907 行 · 第 1/4 页
H
1,907 行
(*output) += 4; }}// ******************************** RGB161616 -> *********************************static inline void transfer_RGB161616_to_BGR565(uint16_t *(*output), uint16_t *input){ PACK_16_TO_BGR16(input[0], input[1], input[2], *(*output)) (*output) ++;}static inline void transfer_RGB161616_to_RGB565(uint16_t *(*output), uint16_t *input){ PACK_16_TO_RGB16(input[0], input[1], input[2], *(*output)) (*output) ++;}static inline void transfer_RGB161616_to_BGR888(unsigned char *(*output), uint16_t *input){ (*output)[0] = input[2] >> 8; (*output)[1] = input[1] >> 8; (*output)[2] = input[0] >> 8; (*output) += 3;}static inline void transfer_RGB161616_to_RGB888(unsigned char *(*output), uint16_t *input){ (*output)[0] = input[0] >> 8; (*output)[1] = input[1] >> 8; (*output)[2] = input[2] >> 8; (*output) += 3;}static inline void transfer_RGB161616_to_RGBA8888(unsigned char *(*output), uint16_t *input){ (*output)[0] = input[0] >> 8; (*output)[1] = input[1] >> 8; (*output)[2] = input[2] >> 8; (*output)[3] = 0xff; (*output) += 4;}static inline void transfer_RGB161616_to_BGR8888(unsigned char *(*output), uint16_t *input){ (*output)[0] = input[2] >> 8; (*output)[1] = input[1] >> 8; (*output)[2] = input[0] >> 8; (*output) += 4;}static inline void transfer_RGB161616_to_YUVA8888(unsigned char *(*output), uint16_t *input){ int y, u, v, r, g, b; r = input[0] >> 8; g = input[1] >> 8; b = input[2] >> 8; RGB_24_TO_YUV_8(r, g, b, y, u, v); (*output)[0] = y; (*output)[1] = u; (*output)[2] = v; (*output)[3] = 255; (*output) += 4;}static inline void transfer_RGB161616_to_YUV420P_YUV422P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, uint16_t *input, int output_column){ int y, u, v, r, g, b; r = input[0] >> 8; g = input[1] >> 8; b = input[2] >> 8; RGB_24_TO_YUV_8(r, g, b, y, u, v); output_y[output_column] = y; output_u[output_column / 2] = u; output_v[output_column / 2] = v;}static inline void transfer_RGB161616_to_YUV422P16(uint16_t *output_y, uint16_t *output_u, uint16_t *output_v, uint16_t *input, int output_column){ int y, u, v; RGB_48_TO_YUV_16(input[0], input[1], input[2], y, u, v); output_y[output_column] = y; output_u[output_column / 2] = u; output_v[output_column / 2] = v;}static inline void transfer_RGB161616_to_YUV444P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, uint16_t *input, int output_column){ int y, u, v, r, g, b; r = input[0] >> 8; g = input[1] >> 8; b = input[2] >> 8; RGB_24_TO_YUV_8(r, g, b, y, u, v); output_y[output_column] = y; output_u[output_column] = u; output_v[output_column] = v;}static inline void transfer_RGB161616_to_YUV444P16(uint16_t *output_y, uint16_t *output_u, uint16_t *output_v, uint16_t *input, int output_column){ int y, u, v; RGB_48_TO_YUV_16(input[0], input[1], input[2], y, u, v); output_y[output_column] = y; output_u[output_column] = u; output_v[output_column] = v;}// ****************************** RGBA16161616 -> *****************************static inline void transfer_RGBA16161616_to_BGR565(uint16_t *(*output), uint16_t *input){ unsigned int r, g, b, a; a = (input)[3] >> 8; r = (unsigned int)(input)[0] * a; g = (unsigned int)(input)[1] * a; b = (unsigned int)(input)[2] * a; *(uint16_t*)(*output) = (uint16_t)(((b & 0xf80000) >> 8) + ((g & 0xfc0000) >> 13) + ((r & 0xf80000) >> 19)); (*output) ++;}static inline void transfer_RGBA16161616_to_RGB565(uint16_t *(*output), uint16_t *input){ unsigned int r, g, b, a; a = (input)[3] >> 8; r = (unsigned int)(input)[0] * a; g = (unsigned int)(input)[1] * a; b = (unsigned int)(input)[2] * a; *(uint16_t*)(*output) = (uint16_t)(((r & 0xf80000) >> 8) + ((g & 0xfc0000) >> 13) + ((b & 0xf80000) >> 19)); (*output) ++;}static inline void transfer_RGBA16161616_to_BGR888(unsigned char *(*output), uint16_t *input){ unsigned int r, g, b, a; a = (input)[3] >> 8; r = (unsigned int)(input)[0] * a; g = (unsigned int)(input)[1] * a; b = (unsigned int)(input)[2] * a; (*output)[0] = (unsigned char)(b >> 16); (*output)[1] = (unsigned char)(g >> 16); (*output)[2] = (unsigned char)(r >> 16); (*output) += 3;}static inline void transfer_RGBA16161616_to_RGB888(unsigned char *(*output), uint16_t *input){ unsigned int r, g, b, a; a = (input)[3] >> 8; r = (unsigned int)(input)[0] * a; g = (unsigned int)(input)[1] * a; b = (unsigned int)(input)[2] * a; (*output)[0] = (unsigned char)(r >> 16); (*output)[1] = (unsigned char)(g >> 16); (*output)[2] = (unsigned char)(b >> 16); (*output) += 3;}static inline void transfer_RGBA16161616_to_RGBA8888(unsigned char *(*output), uint16_t *input){ (*output)[0] = input[0] >> 8; (*output)[1] = input[1] >> 8; (*output)[2] = input[2] >> 8; (*output)[3] = input[3] >> 8; (*output) += 4;}static inline void transfer_RGBA16161616_to_BGR8888(unsigned char *(*output), uint16_t *input){ unsigned int r, g, b, a; a = (input)[3] >> 8; r = (input)[0] * a; g = (input)[1] * a; b = (input)[2] * a; (*output)[0] = (unsigned char)(b >> 16); (*output)[1] = (unsigned char)(g >> 16); (*output)[2] = (unsigned char)(r >> 16); (*output) += 4;}static inline void transfer_RGBA16161616_to_YUV420P_YUV422P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, uint16_t *input, int output_column){ int y, u, v, r, g, b; int64_t a; a = input[3]; r = (int64_t)input[0] * a / 0xffffff; g = (int64_t)input[1] * a / 0xffffff; b = (int64_t)input[2] * a / 0xffffff; RGB_24_TO_YUV_8(r, g, b, y, u, v); output_y[output_column] = y; output_u[output_column / 2] = u; output_v[output_column / 2] = v;}static inline void transfer_RGBA16161616_to_YUV444P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, uint16_t *input, int output_column){ int y, u, v, r, g, b; int64_t a; a = input[3]; r = (int64_t)input[0] * a / 0xffffff; g = (int64_t)input[1] * a / 0xffffff; b = (int64_t)input[2] * a / 0xffffff; RGB_24_TO_YUV_8(r, g, b, y, u, v); output_y[output_column] = y; output_u[output_column] = u; output_v[output_column] = v;}static inline void transfer_BGR8888_to_RGB888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[2]; (*output)[1] = input[1]; (*output)[2] = input[0]; (*output) += 3;}static inline void transfer_BGR8888_to_BGR8888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[0]; (*output)[1] = input[1]; (*output)[2] = input[2]; (*output) += 4;}// ******************************** BGR888 -> *********************************static inline void transfer_BGR888_to_RGB888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[2]; (*output)[1] = input[1]; (*output)[2] = input[0]; (*output) += 3;}static inline void transfer_BGR888_to_BGR888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[0]; (*output)[1] = input[1]; (*output)[2] = input[2]; (*output) += 3;}static inline void transfer_BGR888_to_BGR565(uint16_t *(*output), unsigned char *input){ PACK_8_TO_BGR16(input[2], input[1], input[0], *(*output)); (*output) ++;}static inline void transfer_BGR888_to_RGB565(uint16_t *(*output), unsigned char *input){ PACK_8_TO_RGB16(input[2], input[1], input[0], *(*output)); (*output) ++;}static inline void transfer_BGR888_to_RGBA8888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[2]; (*output)[1] = input[1]; (*output)[2] = input[0]; (*output)[3] = 0xff; (*output) += 4;}static inline void transfer_BGR888_to_RGB161616(uint16_t *(*output), unsigned char *input){ (*output)[0] = (input[2] << 8) | input[2]; (*output)[1] = (input[1] << 8) | input[1]; (*output)[2] = (input[0] << 8) | input[0]; (*output) += 3;}static inline void transfer_BGR888_to_RGBA16161616(uint16_t *(*output), unsigned char *input){ (*output)[0] = (input[2] << 8) | input[2]; (*output)[1] = (input[1] << 8) | input[1]; (*output)[2] = (input[0] << 8) | input[0]; (*output)[3] = 0xffff; (*output) += 4;}static inline void transfer_BGR888_to_BGR8888(unsigned char *(*output), unsigned char *input){ (*output)[0] = input[0]; (*output)[1] = input[1]; (*output)[2] = input[2]; (*output) += 4;}static inline void transfer_BGR888_to_YUVA8888(unsigned char *(*output), unsigned char *input){ int y, u, v; RGB_24_TO_YUV_8(input[2], input[1], input[0], y, u, v); (*output)[0] = y; (*output)[1] = u; (*output)[2] = v; (*output)[3] = 255; (*output) += 4;}static inline void transfer_BGR888_to_YUV420P_YUV422P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, unsigned char *input, int output_column){ int y, u, v; RGB_24_TO_YUV_8(input[2], input[1], input[0], y, u, v); output_y[output_column] = y; output_u[output_column / 2] = u; output_v[output_column / 2] = v;}static inline void transfer_BGR888_to_YUV444P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, unsigned char *input, int output_column){ int y, u, v; RGB_24_TO_YUV_8(input[2], input[1], input[0], y, u, v); output_y[output_column] = y; output_u[output_column] = u; output_v[output_column] = v;}static inline void transfer_BGR888_to_YUV422(unsigned char *(*output), unsigned char *input, int j){ int y, u, v; RGB_24_TO_YUV_8(input[2], input[1], input[0], y, u, v); if(!(j & 1)) { // Store U and V for even pixels only (*output)[1] = u; (*output)[3] = v; (*output)[0] = y; } else { // Store Y and advance output for odd pixels only (*output)[2] = y; (*output) += 4; }}// ******************************** YUVA8888 -> *******************************static inline void transfer_YUVA8888_to_BGR565(uint16_t *(*output), unsigned char *input){ int a, i_tmp; int r, g, b; a = input[3]; YUV_8_TO_RGB_24(input[0], input[1], input[2], r, g, b); r *= a; g *= a; b *= a; PACK_16_TO_BGR16(r, g, b, *(*output)); (*output) ++;}static inline void transfer_YUVA8888_to_RGB565(uint16_t *(*output), unsigned char *input){ int a, i_tmp; int r, g, b; a = input[3]; YUV_8_TO_RGB_24(input[0], input[1], input[2], r, g, b); r *= a; g *= a; b *= a; PACK_16_TO_RGB16(r, g, b, *(*output)); (*output) ++;}static inline void transfer_YUVA8888_to_BGR888(unsigned char *(*output), unsigned char *input){ int a, i_tmp; int r, g, b;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?