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

📄 ccvt_c2.c

📁 Video4Linux_test.rar 接視訊的範例程式
💻 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 + -