📄 ccvt_c2.c
字号:
/* * Convert an image from yuv colourspace to rgb * * Code by Tony Hague (C) 2001. */#include "ccvt.h"#include "ccvt_types.h"/* by suitable definition of PIXTYPE, can do yuv to rgb or bgr, with orwithout word alignment *//* This doesn't exactly earn a prize in a programming beauty contest. */#define WHOLE_FUNC2RGB(type) \ const unsigned char *y1, *y2, *u, *v; \ PIXTYPE_##type *l1, *l2; \ int r, g, b, cr, cg, cb, yp, j, i; \ \ if ((width & 1) || (height & 1)) \ return; \ \ l1 = (PIXTYPE_##type *)dst; \ l2 = l1 + width; \ y1 = (unsigned char *)src; \ y2 = y1 + width; \ u = (unsigned char *)src + width * height; \ v = u + (width * height) / 4; \ j = height / 2; \ while (j--) { \ i = width / 2; \ while (i--) { \ /* Since U & V are valid for 4 pixels, repeat code 4 \ times for different Y */ \ cb = ((*u-128) * 454)>>8; \ cr = ((*v-128) * 359)>>8; \ cg = ((*v-128) * 183 + (*u-128) * 88)>>8; \ \ yp = *(y1++); \ r = yp + cr; \ b = yp + cb; \ g = yp - cg; \ SAT(r); \ SAT(g); \ SAT(b); \ l1->b = b; \ l1->g = g; \ l1->r = r; \ l1++; \ \ yp = *(y1++); \ r = yp + cr; \ b = yp + cb; \ g = yp - cg; \ SAT(r); \ SAT(g); \ SAT(b); \ l1->b = b; \ l1->g = g; \ l1->r = r; \ l1++; \ \ yp = *(y2++); \ r = yp + cr; \ b = yp + cb; \ g = yp - cg; \ SAT(r); \ SAT(g); \ SAT(b); \ l2->b = b; \ l2->g = g; \ l2->r = r; \ l2++; \ \ yp = *(y2++); \ r = yp + cr; \ b = yp + cb; \ g = yp - cg; \ SAT(r); \ SAT(g); \ SAT(b); \ l2->b = b; \ l2->g = g; \ l2->r = r; \ l2++; \ \ u++; \ v++; \ } \ y1 = y2; \ y2 += width; \ l1 = l2; \ l2 += width; \ }void ccvt_420p_bgr32(int width, int height, const void *src, void *dst){ WHOLE_FUNC2RGB(bgr32)}void ccvt_420p_bgr24(int width, int height, const void *src, void *dst){ WHOLE_FUNC2RGB(bgr24)}void ccvt_420p_rgb32(int width, int height, const void *src, void *dst){ WHOLE_FUNC2RGB(rgb32)}void ccvt_420p_rgb24(int width, int height, const void *src, void *dst){ WHOLE_FUNC2RGB(rgb24)}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -