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

📄 img.c

📁 freescale MX21 0V9650摄像头驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	return;}//      Transform RGB565 gray scalevoid RGB565ToGray565(char *r_ibuf, char *r_obuf, long size){	int i;	unsigned short *ibuf, *obuf;	unsigned int gray;	ibuf = (unsigned short *) r_ibuf;	obuf = (unsigned short *) r_obuf;	for (i = 0; i < size / 2; i++) {		gray = RGB565toGray(ibuf[i]);		//Combine r, g, b parts together		obuf[i] = gray << 11 | gray << 6 | gray;	}	return;}//transform buffer from 240x320 RGB444 to 104x80 RGB 444.void sizeTransform(char *buf){	//Now the screen buffer is 240x320 RGB444 data	//We'll transform it to 104x80	//Note we'll use only one buffer	int i, j;	for (i = 0; i < 80; i++)		for (j = 0; j < 104 * 3 / 2; j++)			buf[i * 104 * 3 / 2 + j] =			    buf[i * 240 * 3 / 2 + j];}//transform buffer from 240x320 RGB565 to 104x80 RGB 565.//left and right 22 are blank, only 60x80 used.//ibuf size should be 240x320x2//obuf size should be 104x80x2void sizeTransform2(char *r_ibuf, char *r_obuf){	int i, j, k;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	for (i = 0; i < 320; i += 4) {		//make left and right 22 colomns blank		for (k = 0; k < 22; k++)			obuf[(i / 4) * 104 + k] = 0xFFFF;		for (k = 82; k < 104; k++)			obuf[(i / 4) * 104 + k] = 0xFFFF;		//middle 60 columms use subsampling		for (j = 0; j < 240; j += 4) {			obuf[(i / 4) * 104 + j / 4 + 22] =			    ibuf[i * 240 + j];		}	}}//transform buffer from 240x320 RGB565 to 60x80 RGB 565.//ibuf size should be 240x320x2//obuf size should be 60x80x2void sizeTransform3(char *r_ibuf, char *r_obuf){	int x, y;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	for (y = 0; y < 320; y += 4) {		for (x = 0; x < 240; x += 4)			obuf[(y / 4) * 60 + x / 4] = ibuf[y * 240 + x];	}}//Add black margin to a pic of 60x80 RGB 565//ibuf size should be 60x80x2//obuf size should be 240x320x2void add_margin(char *r_ibuf, char *r_obuf){	int x, y;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	for (y = 0; y < 320; y++) {		for (x = 0; x < 240; x++) {			if (y < 80 && x < 60)				obuf[y * 240 + x] = ibuf[y * 60 + x];			else				obuf[y * 240 + x] = 0xFF;		}	}}//transform buffer from 60x80 RGB565 to 104x80 RGB 565.//ibuf size should be 60x80x2//obuf size should be 104x80x2void size_enlarge(char *r_ibuf, int iw, int ih, char *r_obuf, int ow,		  int oh){	int x, y;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	oh = 0;			//Not used	for (y = 0; y < ih; y++) {		for (x = 0; x < iw; x++)			obuf[y * ow + x] = ibuf[y * iw + x];	}}//Copy 104x80 window from 240x320void sizeTransform5(char *r_ibuf, char *r_obuf){	int row, col, row2, col2;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	int row_offset = 180;	int col_offset = 20;	//Copy 104x80 window from 240x320#if 0	for (row = row_offset; row < row_offset + 80; row++) {		row2 = row - row_offset;		for (col = col_offset; col < col_offset + 104; col++) {			col2 = col - col_offset;			obuf[row2 * 104 + col2] = ibuf[row * 240 + col];		}	}#else	for (row = 0; row < 80; row++) {		row2 = row + row_offset;		for (col = 0; col < 104; col++) {			col2 = col + col_offset;			obuf[row * 104 + col] = ibuf[row2 * 240 + col2];		}	}#endif}//240x320 to 208x160, resize to 104x80void QVGA2STN_RGB565(char *r_ibuf, char *r_obuf){	int row, col, row2, col2;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	int row_offset = 80;	int col_offset = 16;	for (row = 0; row < 80; row++) {		row2 = row * 2 + row_offset;		for (col = 0; col < 104; col++) {			col2 = col * 2 + col_offset;			obuf[row * 104 + col] = ibuf[row2 * 240 + col2];		}	}}//320x240 to 312x240, resize to 104x80void sizeTransform7(char *r_ibuf, char *r_obuf){	int row, col, row2, col2;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	int row_offset = 0;	int col_offset = 0;	for (col = 0; col < 104; col++) {		col2 = col * 3 + col_offset;		for (row = 0; row < 80; row++) {			row2 = row * 3 + row_offset;			obuf[row * 104 + col] = ibuf[row2 * 240 + col2];		}	}}//640x480 to 320x240void sizeTransform8(char *r_ibuf, char *r_obuf){	int row, col;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	for (row = 0; row < 240; row++) {		for (col = 0; col < 320; col++) {			obuf[row * 320 + col] =			    //ibuf[row * 4 * 1280 + col * 4];			    ibuf[row * 2 * 640 + col * 2];		}	}}//640x480 resize to 104x80void sizeTransform9(char *r_ibuf, char *r_obuf){	int row, col, row2, col2;	unsigned short *ibuf = (unsigned short *) r_ibuf;	unsigned short *obuf = (unsigned short *) r_obuf;	for (row = 0; row < 80; row++) {		row2 = row * 6;		for (col = 0; col < 104; col++) {			col2 = col * 6;			obuf[row * 104 + col] = ibuf[row2 * 640 + col2];		}	}}//transform small window to in left-up corner of big window,  RGB565.//ow>iw, oh>ih//obuf size should be ow*ohvoid show_in_corner(unsigned short *r_ibuf, int iw, int ih,		    unsigned short *r_obuf, int ow, int oh){	int x, y;	unsigned short *ibuf = r_ibuf;	unsigned short *obuf = r_obuf;#ifdef IMGDEBUG	printf("%s:iw:%d, ih:%d, ow:%d, oh:%d\n", __FUNCTION__, iw, ih, ow,	       oh);#endif	for (y = 0; y < ih; y++) {		for (x = 0; x < iw; x++)			obuf[y * ow + x] = ibuf[y * iw + x];	}}//show big window's left-up corner in small window,  RGB565.//ow<iw, oh<ih//obuf size should be ow*ohvoid show_corner(unsigned short *r_ibuf, int iw, int ih,		 unsigned short *r_obuf, int ow, int oh){	int x, y;	unsigned short *ibuf = r_ibuf;	unsigned short *obuf = r_obuf;#ifdef IMGDEBUG	printf("%s:iw:%d, ih:%d, ow:%d, oh:%d\n", __FUNCTION__, iw, ih, ow,	       oh);#endif	for (y = 0; y < oh; y++) {		for (x = 0; x < ow; x++)			obuf[y * ow + x] = ibuf[y * iw + x];	}}#ifdef FFPLAY//120x160 to 60x80, then fit in middle of 104x80, in yuv//r_ibuf size(120*160*3/2): y:120x160, u:60x80, v:60x80//r_obuf size(104*80*3/2): y:104x80,  u:52x40,  v:52x40void sizeTransform_qvga2stn_YUV(char *r_ibuf, char *r_obuf){	char *ibuf = r_ibuf;	char *obuf = r_obuf;	char *yin = ibuf;	char *uin = ibuf + 120 * 160;	char *vin = ibuf + 120 * 160 + 60 * 80;	char *yout = obuf;	char *uout = obuf + 104 * 80;	char *vout = obuf + 104 * 80 + 52 * 40;	int row, row2, col, col2;	int row_offset = 22;#ifdef IMGDEBUG	printf("yout:%p, uout:%p, vout:%p\n", yout, vout, uout);#endif#if 1	//printf("fill outbuf with zero.\n");	for (row = 0; row < 80; row++) {		for (col = 0; col < 104; col++) {			yout[row * 104 + col] = 0;			uout[row / 2 * 52 + col / 2] = 128;			vout[row / 2 * 52 + col / 2] = 128;		}	}#endif	for (row = 0; row < 80; row++) {		row2 = row * 2;		for (col = 22; col < 82; col++) {			col2 = (col - 22) * 2;			yout[row * 104 + col] = yin[row2 * 120 + col2];			vout[row / 2 * 52 + col / 2] =			    vin[row2 / 2 * 60 + col2 / 2];			uout[row / 2 * 52 + col / 2] =			    uin[row2 / 2 * 60 + col2 / 2];#if 0			if (debug_no == 4) {				yout[row * 104 + col] = 74;				uout[row / 2 * 52 + col / 2] = 252;				vout[row / 2 * 52 + col / 2] = 86;			}#endif		}	}}#endif//QVGA to QCIF(240x320 to 120x160)void QVGA2QCIF(char *buf){	int i, j;	unsigned short *ibuf = (unsigned short *) buf;	for (j = 0; j < 160; j++) {		for (i = 0; i < 120; i++)			ibuf[j * 120 + i] = ibuf[j * 2 * 240 + i * 2];	}}

⌨️ 快捷键说明

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