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

📄 show.c

📁 在Linux下用于webeye的摄像头的驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
		write_rgb(cur_rgb+rgb_line, bpp, cur_bay[0], cur_bay[bay_line], cur_bay[bay_line-1]);		bay += bay_line2;		rgb += rgb_line2;	} while (--row_cnt);}		  /* Interpolate R,G,B fully. columns and rows must be even */static inline void bayer_to_rgb_ip(unsigned char *bay, int bay_line,		  unsigned char *rgb, int rgb_line,		  unsigned int columns, unsigned int rows, int bpp) {	unsigned char *cur_bay, *cur_rgb;	int bay_line2, rgb_line2;	int total_columns;	unsigned char red, green, blue;	unsigned int column_cnt, row_cnt;	/* Process 2 lines and rows per each iteration */	total_columns = (columns-2) / 2;	row_cnt = (rows-2) / 2;	bay_line2 = 2*bay_line;	rgb_line2 = 2*rgb_line;	/* First scanline is handled here as a special case */		write_rgb(rgb, bpp, bay[1], bay[0], bay[bay_line]);	cur_bay = bay + 1;	cur_rgb = rgb + bpp;	column_cnt = total_columns;	do {		green  = ((unsigned int)cur_bay[-1] + cur_bay[1] + cur_bay[bay_line]) / 3;		blue   = ((unsigned int)cur_bay[bay_line-1] + cur_bay[bay_line+1]) / 2;		write_rgb(cur_rgb, bpp, cur_bay[0], green, blue);		red    = ((unsigned int)cur_bay[0] + cur_bay[2]) / 2;		write_rgb(cur_rgb+bpp, bpp, red, cur_bay[1], cur_bay[bay_line+1]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--column_cnt);	green = ((unsigned int)cur_bay[-1] + cur_bay[bay_line]) / 2;	write_rgb(cur_rgb, bpp, cur_bay[0], green, cur_bay[bay_line-1]);	/* Process here all other scanlines except first and last */	bay += bay_line;	rgb += rgb_line;	do {		red = ((unsigned int)bay[-bay_line+1] + bay[bay_line+1]) / 2;		green = ((unsigned int)bay[-bay_line] + bay[1] + bay[bay_line]) / 3;		write_rgb(rgb+0, bpp, red, green, bay[0]);		blue = ((unsigned int)bay[0] + bay[bay_line2]) / 2;		write_rgb(rgb+rgb_line, bpp, bay[bay_line+1], bay[bay_line], blue);		cur_bay = bay + 1;		cur_rgb = rgb + bpp;		column_cnt = total_columns;		do {			red   = ((unsigned int)cur_bay[-bay_line]+cur_bay[bay_line]) / 2;			blue  = ((unsigned int)cur_bay[-1]+cur_bay[1]) / 2;			write_rgb(cur_rgb+0, bpp, red, cur_bay[0], blue);			red   = ((unsigned int)cur_bay[-bay_line]+cur_bay[-bay_line+2]+cur_bay[bay_line]+cur_bay[bay_line+2]) / 4;			green = ((unsigned int)cur_bay[0]+cur_bay[2]+cur_bay[-bay_line+1]+cur_bay[bay_line+1]) / 4;			write_rgb(cur_rgb+bpp, bpp, red, green, cur_bay[1]);			green = ((unsigned int)cur_bay[0]+cur_bay[bay_line2]+cur_bay[bay_line-1]+cur_bay[bay_line+1]) / 4;			blue  = ((unsigned int)cur_bay[-1]+cur_bay[1]+cur_bay[bay_line2-1]+cur_bay[bay_line2+1]) / 4;			write_rgb(cur_rgb+rgb_line, bpp, cur_bay[bay_line], green, blue);			red   = ((unsigned int)cur_bay[bay_line]+cur_bay[bay_line+2]) / 2;			blue  = ((unsigned int)cur_bay[1]+cur_bay[bay_line2+1]) / 2;			write_rgb(cur_rgb+rgb_line+bpp, bpp, red, cur_bay[bay_line+1], blue);			cur_bay += 2;			cur_rgb += 2*bpp;		} while (--column_cnt);		red = ((unsigned int)cur_bay[-bay_line] + cur_bay[bay_line]) / 2;		write_rgb(cur_rgb, bpp, red, cur_bay[0], cur_bay[-1]);		green = ((unsigned int)cur_bay[0] + cur_bay[bay_line-1] + cur_bay[bay_line2]) / 3;		blue = ((unsigned int)cur_bay[-1] + cur_bay[bay_line2-1]) / 2;		write_rgb(cur_rgb+rgb_line, bpp, cur_bay[bay_line], green, blue);		bay += bay_line2;		rgb += rgb_line2;	} while (--row_cnt);	/* Last scanline is handled here as a special case */		green = ((unsigned int)bay[-bay_line] + bay[1]) / 2;	write_rgb(rgb, bpp, bay[-bay_line+1], green, bay[0]);	cur_bay = bay + 1;	cur_rgb = rgb + bpp;	column_cnt = total_columns;	do {		blue   = ((unsigned int)cur_bay[-1] + cur_bay[1]) / 2;		write_rgb(cur_rgb, bpp, cur_bay[-bay_line], cur_bay[0], blue);		red    = ((unsigned int)cur_bay[-bay_line] + cur_bay[-bay_line+2]) / 2;		green  = ((unsigned int)cur_bay[0] + cur_bay[-bay_line+1] + cur_bay[2]) / 3;		write_rgb(cur_rgb+bpp, bpp, red, green, cur_bay[1]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--column_cnt);	write_rgb(cur_rgb, bpp, cur_bay[-bay_line], cur_bay[0], cur_bay[-1]);}		  static inline void bayer_to_rgb_cott(unsigned char *bay, int bay_line,		   unsigned char *rgb, int rgb_line,		   int columns, int rows, int bpp){	unsigned char *cur_bay, *cur_rgb;	int bay_line2, rgb_line2;	int total_columns;	/* Process 2 lines and rows per each iteration, but process the last row and column separately */	total_columns = (columns>>1) - 1;	rows = (rows>>1) - 1;	bay_line2 = 2*bay_line;	rgb_line2 = 2*rgb_line;	do {		cur_bay = bay;		cur_rgb = rgb;		columns = total_columns;		do {			write_rgb(cur_rgb+0,            bpp, cur_bay[1],           ((unsigned int)cur_bay[0] + cur_bay[bay_line+1])          /2, cur_bay[bay_line]);			write_rgb(cur_rgb+bpp,          bpp, cur_bay[1],           ((unsigned int)cur_bay[2] + cur_bay[bay_line+1])          /2, cur_bay[bay_line+2]);			write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[bay_line2+1], ((unsigned int)cur_bay[bay_line2] + cur_bay[bay_line+1])  /2, cur_bay[bay_line]);			write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[bay_line2+1], ((unsigned int)cur_bay[bay_line2+2] + cur_bay[bay_line+1])/2, cur_bay[bay_line+2]);			cur_bay += 2;			cur_rgb += 2*bpp;		} while (--columns);		write_rgb(cur_rgb+0,            bpp, cur_bay[1], ((unsigned int)cur_bay[0] + cur_bay[bay_line+1])/2, cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[bay_line2+1], ((unsigned int)cur_bay[bay_line2] + cur_bay[bay_line+1])/2, cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[bay_line2+1], cur_bay[bay_line+1], cur_bay[bay_line]);		bay += bay_line2;		rgb += rgb_line2;	} while (--rows);	/* Last scanline handled here as special case */	cur_bay = bay;	cur_rgb = rgb;	columns = total_columns;	do {		write_rgb(cur_rgb+0,            bpp, cur_bay[1], ((unsigned int)cur_bay[0] + cur_bay[bay_line+1])/2, cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], ((unsigned int)cur_bay[2] + cur_bay[bay_line+1])/2, cur_bay[bay_line+2]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line+2]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--columns);	/* Last lower-right pixel is handled here as special case */	write_rgb(cur_rgb+0,            bpp, cur_bay[1], ((unsigned int)cur_bay[0] + cur_bay[bay_line+1])/2, cur_bay[bay_line]);	write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);	write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);	write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);}		  static inline void bayer_to_rgb_cottnoip(unsigned char *bay, int bay_line,		   unsigned char *rgb, int rgb_line,		   int columns, int rows, int bpp){	unsigned char *cur_bay, *cur_rgb;	int bay_line2, rgb_line2;	int total_columns;	/* Process 2 lines and rows per each iteration, but process the last row and column separately */	total_columns = (columns>>1) - 1;	rows = (rows>>1) - 1;	bay_line2 = 2*bay_line;	rgb_line2 = 2*rgb_line;	do {		cur_bay = bay;		cur_rgb = rgb;		columns = total_columns;		do {			write_rgb(cur_rgb+0,            bpp, cur_bay[1],           cur_bay[0], cur_bay[bay_line]);			write_rgb(cur_rgb+bpp,          bpp, cur_bay[1],           cur_bay[2], cur_bay[bay_line+2]);			write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[bay_line2+1], cur_bay[bay_line+1], cur_bay[bay_line]);			write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[bay_line2+1], cur_bay[bay_line+1], cur_bay[bay_line+2]);			cur_bay += 2;			cur_rgb += 2*bpp;		} while (--columns);		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0], cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[bay_line2+1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[bay_line2+1], cur_bay[bay_line+1], cur_bay[bay_line]);		bay += bay_line2;		rgb += rgb_line2;	} while (--rows);	/* Last scanline handled here as special case */	cur_bay = bay;	cur_rgb = rgb;	columns = total_columns;	do {		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0], cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[2], cur_bay[bay_line+2]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line+2]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--columns);	/* Last lower-right pixel is handled here as special case */	write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0], cur_bay[bay_line]);	write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);	write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);	write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);}#if 0	/* Bilinear filtering */	static int wrg0 = 0;	/* Weight for Red on Green */	static int wbg0 = 0;	static int wgr0 = 0;	static int wbr0 = 0;	static int wgb0 = 0;	static int wrb0 = 0;#elif 1	/* Best PSNR */	static int wrg0 = 144;	static int wbg0 = 160;	static int wgr0 = 120;	static int wbr0 = 192;	static int wgb0 = 120;	static int wrb0 = 168;#elif 0	/* Very sharp */	static int wrg0 = ;	static int wbg0 = ;	static int wgr0 = ;	static int wbr0 = ;	static int wgb0 = ;	static int wrb0 = ;#else	/* Sharp with round multipliers */	static int wrg0 = 256;	static int wbg0 = 256;	static int wgr0 = 128;	static int wbr0 = 128;	static int wgb0 = 256;	static int wrb0 = 256;#endif	static unsigned int sharpness = 32767;	int wrg;	int wbg;	int wgr;	int wbr;	int wgb;	int wrb;static void bayer_to_rgb_gptm_printval(void) {	printf("0: wrg %i wbg %i wgr %i wbr %i wgb %i wrb %i\n", wrg0, wbg0, wgr0, wbr0, wgb0, wrb0);	printf("f: wrg %i wbg %i wgr %i wbr %i wgb %i wrb %i\n", wrg, wbg, wgr, wbr, wgb, wrb);	printf("sharpness = %i\n", sharpness);}static inline void bayer_to_rgb_gptm(unsigned char *bay, int bay_line,		   unsigned char *rgb, int rgb_line,		   int columns, int rows, int bpp){	/* 0.4 fixed point weights, should be between 0-16. Larger value = sharper */	unsigned int wu;	int r,g,b,w;	unsigned char *cur_bay, *cur_rgb;	int bay_line2, bay_line3, rgb_line2;	int total_columns;	/* Compute weights */	wu = (sharpness * sharpness) >> 16; 	wu = (wu * wu) >> 16;	wrg = (wrg0 * wu) >> 10;	wbg = (wbg0 * wu) >> 10;	wgr = (wgr0 * wu) >> 10;	wbr = (wbr0 * wu) >> 10;	wgb = (wgb0 * wu) >> 10;	wrb = (wrb0 * wu) >> 10;//	bayer_to_rgb_gptm_printval();	/* Process 2 lines and rows per each iteration, but process the first and last two columns and rows separately */	total_columns = (columns>>1) - 2;	rows = (rows>>1) - 2;	bay_line2 = 2*bay_line;	bay_line3 = 3*bay_line;	rgb_line2 = 2*rgb_line;	/* Process first two pixel rows here */	cur_bay = bay;	cur_rgb = rgb;	columns = total_columns + 2;	do {		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--columns);	bay += bay_line2;	rgb += rgb_line2;	do {		cur_bay = bay;		cur_rgb = rgb;		columns = total_columns;				/* Process first 2x2 pixel block in a row here */		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		cur_bay += 2;		cur_rgb += 2*bpp;		do {			w = 4*cur_bay[0] - (cur_bay[-bay_line-1] + cur_bay[-bay_line+1] + cur_bay[bay_line-1] + cur_bay[bay_line+1]);			r = (512*(cur_bay[-1] + cur_bay[1]) + w*wrg) >> 10;			b = (512*(cur_bay[-bay_line] + cur_bay[bay_line]) + w*wbg) >> 10;			write_rgb(cur_rgb+0, bpp, CLIP(r,0,255), cur_bay[0], CLIP(b,0,255));			w = 4*cur_bay[1] - (cur_bay[-bay_line2+1] + cur_bay[-1] + cur_bay[3] + cur_bay[bay_line2+1]);			g = (256*(cur_bay[-bay_line+1] + cur_bay[0] + cur_bay[2] + cur_bay[bay_line+1]) + w*wgr) >> 10;			b = (256*(cur_bay[-bay_line] + cur_bay[-bay_line+2] + cur_bay[bay_line] + cur_bay[bay_line+2]) + w*wbr) >> 10;			write_rgb(cur_rgb+bpp, bpp, cur_bay[1], CLIP(g,0,255), CLIP(b,0,255));			w = 4*cur_bay[bay_line] - (cur_bay[-bay_line] + cur_bay[bay_line-2] + cur_bay[bay_line+2] + cur_bay[bay_line3]);			r = (256*(cur_bay[-1] + cur_bay[1] + cur_bay[bay_line2-1] + cur_bay[bay_line2+1]) + w*wrb) >> 10;			g = (256*(cur_bay[0] + cur_bay[bay_line-1] + cur_bay[bay_line+1] + cur_bay[bay_line2]) + w*wgb) >> 10;			write_rgb(cur_rgb+rgb_line, bpp, CLIP(r,0,255), CLIP(g,0,255), cur_bay[bay_line]);			w = 4*cur_bay[bay_line+1] - (cur_bay[0] + cur_bay[2] + cur_bay[bay_line2] + cur_bay[bay_line2+2]);			r = (512*(cur_bay[1] + cur_bay[bay_line2+1]) + w*wrg) >> 10;			b = (512*(cur_bay[bay_line] + cur_bay[bay_line+2]) + w*wbg) >> 10;			write_rgb(cur_rgb+rgb_line+bpp, bpp, CLIP(r,0,255), cur_bay[bay_line+1], CLIP(b,0,255));			cur_bay += 2;			cur_rgb += 2*bpp;		} while (--columns);		/* Process last 2x2 pixel block in a row here */		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		bay += bay_line2;		rgb += rgb_line2;	} while (--rows);	/* Process last two pixel rows here */	cur_bay = bay;	cur_rgb = rgb;	columns = total_columns + 2;	do {		write_rgb(cur_rgb+0,            bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+bpp,          bpp, cur_bay[1], cur_bay[0],          cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line,     bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		write_rgb(cur_rgb+rgb_line+bpp, bpp, cur_bay[1], cur_bay[bay_line+1], cur_bay[bay_line]);		cur_bay += 2;		cur_rgb += 2*bpp;	} while (--columns);}/* faster version of bayer_to_rgb_gptm with fixed multipliers */static inline void bayer_to_rgb_gptm_fast(unsigned char *bay, int bay_line,		   unsigned char *rgb, int rgb_line,		   int columns, int rows, int bpp){	int r,g,b,w;	unsigned char *cur_bay, *cur_rgb;	int bay_line2, bay_line3, rgb_line2;	int total_columns;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -