cmodel_permutation.h
来自「这个库实现了录象功能」· C头文件 代码 · 共 1,907 行 · 第 1/4 页
H
1,907 行
output_v[j / 2] = UVJ_8_TO_UV_8(*input_v);}// ******************************** YUVJ420P -> ********************************static inline void transfer_YUVJ420P_to_RGB888(unsigned char *(*output), unsigned char *input_y, unsigned char *input_u, unsigned char *input_v){ int i_tmp; YUVJ_8_TO_RGB_24(*input_y, *input_u, *input_v, (*output)[0], (*output)[1], (*output)[2]) (*output) += 3;}// ******************************** YUV422 -> *********************************static inline void transfer_YUV422_to_BGR565(uint16_t *(*output), unsigned char *input, int column){ int y, i_tmp; int r, g, b;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], r, g, b); PACK_8_TO_BGR16(r, g, b, *(*output)); (*output)++;}static inline void transfer_YUV422_to_RGB565(uint16_t *(*output), unsigned char *input, int column){ int y, i_tmp; int r, g, b;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], r, g, b); PACK_8_TO_RGB16(r, g, b, *(*output)); (*output)++;}static inline void transfer_YUV422_to_BGR888(unsigned char *(*output), unsigned char *input, int column){ int y, i_tmp;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], (*output)[2], (*output)[1], (*output)[0]); (*output) += 3;}static inline void transfer_YUV422_to_RGB888(unsigned char *(*output), unsigned char *input, int column){ int y, i_tmp;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], (*output)[0], (*output)[1], (*output)[2]); (*output) += 3;}static inline void transfer_YUV422_to_RGBA8888(unsigned char *(*output), unsigned char *input, int column){ int y, i_tmp;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], (*output)[0], (*output)[1], (*output)[2]); (*output)[3] = 0xff; (*output) += 4;}static inline void transfer_YUV422_to_RGB161616(uint16_t *(*output), unsigned char *input, int column){ int y, i_tmp;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_48(y, input[1], input[3], (*output)[0], (*output)[1], (*output)[2]); (*output) += 3;}static inline void transfer_YUV422_to_RGBA16161616(uint16_t *(*output), unsigned char *input, int column){ int y, i_tmp;// Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], (*output)[0], (*output)[1], (*output)[2]); (*output)[3] = 0xffff; (*output) += 4;}static inline void transfer_YUV422_to_YUVA8888(unsigned char *(*output), unsigned char *input, int column){// Even pixel if(!(column & 1)) (*output)[0] = input[0]; else// Odd pixel (*output)[0] = input[2]; (*output)[1] = input[1]; (*output)[2] = input[3]; (*output)[3] = 255; (*output) += 4;}static inline void transfer_YUV422_to_BGR8888(unsigned char *(*output), unsigned char *input, int column){ int y, i_tmp; // Even pixel if(!(column & 1)) y = input[0]; else// Odd pixel y = input[2]; YUV_8_TO_RGB_24(y, input[1], input[3], (*output)[2], (*output)[1], (*output)[0]) (*output) += 4;}static inline void transfer_YUV422_to_YUV422P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, unsigned char *input, int output_column){// Store U and V for even pixels only if(!(output_column & 1)) { output_y[output_column] = input[0]; output_u[output_column / 2] = input[1]; output_v[output_column / 2] = input[3]; } else// Store Y and advance output for odd pixels only { output_y[output_column] = input[2]; }}static inline void transfer_YUV422_to_YUV420P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, unsigned char *input, int output_column, int output_row){// Even column if(!(output_column & 1)) { output_y[output_column] = input[0];// Store U and V for even columns and even rows only if(!(output_row & 1)) { output_u[output_column / 2] = input[1]; output_v[output_column / 2] = input[3]; } } else// Odd column { output_y[output_column] = input[2]; }}static inline void transfer_YUV422_to_YUV422(unsigned char *(*output), unsigned char *input, int j){// Store U and V for even pixels only if(!(j & 1)) { (*output)[0] = input[0]; (*output)[1] = input[1]; (*output)[3] = input[3]; } else// Store Y and advance output for odd pixels only { (*output)[2] = input[2]; (*output) += 4; }}static inline void transfer_YUV422_to_YUVJ422P(unsigned char *output_y, unsigned char *output_u, unsigned char *output_v, unsigned char *input, int output_column){// Store U and V for even pixels only if(!(output_column & 1)) { output_y[output_column] = Y_8_TO_YJ_8(input[0]); output_u[output_column / 2] = UV_8_TO_UVJ_8(input[1]); output_v[output_column / 2] = UV_8_TO_UVJ_8(input[3]); } else// Store Y and advance output for odd pixels only { output_y[output_column] = Y_8_TO_YJ_8(input[2]); }}// ******************************** Loops *************************************// #define TRANSFER_FRAME_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_row = input_rows[row_table[i]]; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_FRAME_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t*)(output_rows[i]); \ unsigned char *input_row = input_rows[row_table[i]]; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_FRAME_TAIL \ } \ }#define TRANSFER_YUV420P_OUT_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ unsigned char *output_y = output_rows[0] + i * out_rowspan; \ unsigned char *output_u = output_rows[1] + i / 2 * out_rowspan_uv; \ unsigned char *output_v = output_rows[2] + i / 2 * out_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P_OUT_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ unsigned char *output_y = output_rows[0] + i * out_rowspan; \ unsigned char *output_u = output_rows[1] + i * out_rowspan_uv; \ unsigned char *output_v = output_rows[2] + i * out_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P16_OUT_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ unsigned char *output_y = output_rows[0] + i * out_rowspan; \ unsigned char *output_u = output_rows[1] + i * out_rowspan_uv; \ unsigned char *output_v = output_rows[2] + i * out_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P16_OUT_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ uint16_t *output_y = (uint16_t *)(output_rows[0] + i * out_rowspan); \ uint16_t *output_u = (uint16_t *)(output_rows[1] + i * out_rowspan_uv); \ uint16_t *output_v = (uint16_t *)(output_rows[2] + i * out_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV411P_OUT_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ unsigned char *output_y = output_rows[0] + i * out_rowspan; \ unsigned char *output_u = output_rows[1] + i * out_rowspan_uv; \ unsigned char *output_v = output_rows[2] + i * out_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P_OUT_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ unsigned char *output_y = output_rows[0] + i * out_rowspan; \ unsigned char *output_u = output_rows[1] + i * out_rowspan_uv; \ unsigned char *output_v = output_rows[2] + i * out_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P16_OUT_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ unsigned char *input_row = input_rows[row_table[i]]; \ uint16_t *output_y = (uint16_t *)(output_rows[0] + i * out_rowspan); \ uint16_t *output_u = (uint16_t *)(output_rows[1] + i * out_rowspan_uv); \ uint16_t *output_v = (uint16_t *)(output_rows[2] + i * out_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV420P_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + (row_table[i] / 2) * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + (row_table[i] / 2) * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV411P_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV420P_IN_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t*)(output_rows[i]); \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + (row_table[i] / 2) * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + (row_table[i] / 2) * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P16_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ uint8_t * output_row = output_rows[i]; \ uint16_t * input_y = (uint16_t *)(input_rows[0] + row_table[i] * in_rowspan); \ uint16_t * input_u = (uint16_t *)(input_rows[1] + row_table[i] * in_rowspan_uv); \ uint16_t * input_v = (uint16_t *)(input_rows[2] + row_table[i] * in_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P_IN_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t *)(output_rows[i]); \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422P16_IN_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t *)(output_rows[i]); \ uint16_t * input_y = (uint16_t *)(input_rows[0] + row_table[i] * in_rowspan); \ uint16_t * input_u = (uint16_t *)(input_rows[1] + row_table[i] * in_rowspan_uv); \ uint16_t * input_v = (uint16_t *)(input_rows[2] + row_table[i] * in_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P16_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ uint16_t *input_y = (uint16_t *)(input_rows[0] + row_table[i] * in_rowspan); \ uint16_t *input_u = (uint16_t *)(input_rows[1] + row_table[i] * in_rowspan_uv); \ uint16_t *input_v = (uint16_t *)(input_rows[2] + row_table[i] * in_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P_IN_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t *)(output_rows[i]); \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV444P16_IN_HEAD_16 \ for(i = 0; i < out_h; i++) \ { \ uint16_t *output_row = (uint16_t *)(output_rows[i]); \ uint16_t *input_y = (uint16_t *)(input_rows[0] + row_table[i] * in_rowspan); \ uint16_t *input_u = (uint16_t *)(input_rows[1] + row_table[i] * in_rowspan_uv); \ uint16_t *input_v = (uint16_t *)(input_rows[2] + row_table[i] * in_rowspan_uv); \ for(j = 0; j < out_w; j++) \ {#define TRANSFER_YUV422_IN_HEAD \ for(i = 0; i < out_h; i++) \ { \ unsigned char *output_row = output_rows[i]; \ unsigned char *input_y = input_rows[0] + row_table[i] * in_rowspan; \ unsigned char *input_u = input_rows[1] + row_table[i] * in_rowspan_uv; \ unsigned char *input_v = input_rows[2] + row_table[i] * in_rowspan_uv; \ for(j = 0; j < out_w; j++) \ {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?