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 + -
显示快捷键?