亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? v4l2.c

?? sumsung s3c2440下的camera(OV7620)驅(qū)動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

	jpeg_stdio_dest(&cinfo, jpg_fp);

	cinfo.image_width = width;
	cinfo.image_height = height;
	cinfo.input_components = 3;
	cinfo.in_color_space = JCS_RGB;

	jpeg_set_defaults(&cinfo);

	jpeg_set_quality(&cinfo, quality, TRUE);

	jpeg_start_compress(&cinfo, TRUE);

	/* RGB565 -> RGB888, compress */
	for (y = 0; y < height; y++) {
		for (x = 0; x < width; x++) {
			*(rgb24 + x*3+0) = ((*(rgb16 + y*width + x) & 0xf800) >> 8) & 0xff;
			*(rgb24 + x*3+1) = ((*(rgb16 + y*width + x) & 0x07e0) >> 3) & 0xff;
			*(rgb24 + x*3+2) = ((*(rgb16 + y*width + x) & 0x001f) << 3) & 0xff;
		}
		jpeg_write_scanlines(&cinfo, row_pointer, 1);
	}

	jpeg_finish_compress(&cinfo);
	jpeg_destroy_compress(&cinfo);

	fclose(jpg_fp);

err:
	if (rgb24)
		free(rgb24);
	if (rgb16)
		free(rgb16);
}
#define XLATTABSIZE      256
#define MulDiv(x, y, z)	((long)((int) x * (int) y) / (int) z)

//#define CLIP(x)	min_t(int, 255, max_t(int, 0, (x)))
#define CLIP(x) {if(x<0) x=0;if(x>255) x=255;}

int XlatY[XLATTABSIZE] = { 0 };
int XlatV_B[XLATTABSIZE] = { 0 };
int XlatV_G[XLATTABSIZE] = { 0 };
int XlatU_G[XLATTABSIZE] = { 0 };
int XlatU_R[XLATTABSIZE] = { 0 };

#define MIN(a,b) ((a)>(b) ? (b):(a))
#define MAX(a,b) ((a)>(b) ? (a):(b))

static void inline init_yuvtable (void)
{
	int i, j;

	for (i = 0; i < XLATTABSIZE; i++) {
#if ORIG_XLAT
		j = MIN(253, MAX(16, i));
#else
		j = (255 * i + 110) / 220;	// scale up
		j = MIN(255, MAX(j, 16));
#endif
		// orig: XlatY[i] = (int ) j;
		XlatY[i] = j-16;
	}

	for (i = 0; i < XLATTABSIZE; i++) {
#if ORIG_XLAT
		j = MIN(240, MAX(16, i));
		j -= 128;
#else
		j = i - 128;		// make signed
		if (j < 0)
			j++;			// noise reduction
		j = (127 * j + 56) / 112;	// scale up
		j = MIN(127, MAX(-128, j));
#endif

		XlatV_B[i] = MulDiv (j, 1000, 564);	/* j*219/126 */
		XlatV_G[i] = MulDiv (j, 1100, 3328);
		XlatU_G[i] = MulDiv (j, 3100, 4207);
		XlatU_R[i] = MulDiv (j, 1000, 713);
	}
}

void inline yuv_convert_rgb24(unsigned char *rawY, unsigned char *rawU, 
		unsigned char *rawV, unsigned char *rgb, int size)
{
	unsigned short  buf1, buf3;
	int   red;
	int   blue;
	int   green;
	unsigned long   cnt;
	int    Y, U, V;

	for ( cnt = 0 ; cnt < size; cnt +=2){
		buf1 = *(rawY+cnt) & 0xff;  // Y data
		buf3 = *(rawY+cnt+1) & 0xff;  // Y data

		U = *(rawV+cnt/2) & 0xff;
		V = *(rawU+cnt/2) & 0xff;

#if MORE_QUALITY
		Y = buf1;
#else
		Y = ((buf1+buf3)/2);
#endif

		red = XlatY[Y] + XlatU_R[U];
		CLIP(red);
		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];
		CLIP(green);
		blue = XlatY[Y] + XlatV_B[V];
		CLIP(blue);

		*rgb ++ = red & 0xff;
		*rgb ++ = green & 0xff;
		*rgb ++ = blue & 0xff;

#if MORE_QUALITY
		Y = buf3;
		red = XlatY[Y] + XlatU_R[U];
		CLIP(red);
		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];
		CLIP(green);
		blue = XlatY[Y] + XlatV_B[V];
		CLIP(blue);
#endif
		*rgb ++ = red & 0xff;
		*rgb ++ = green & 0xff;
		*rgb ++ = blue & 0xff;
	}
}
static void v4l2_save_yuv420_to_jpg(int fd)
{
	char yuv420buf[640*480*2];
	char rgb24buf[640*480*3];
	char *yuv420 = &yuv420buf[0];
	char *rgb24 = &rgb24buf[0];
	FILE *jpg_fp = NULL;
	int i;

	JSAMPROW row_pointer[480];

	for (i=0; i<480; i++)
		row_pointer[i] = (JSAMPROW)&rgb24buf[640*i*3];

	if ((read (fd, &yuv420buf, 640*480*2)) < 0) {
		perror("read");
		return;
	}

	/*
	 * work-arround for CPU bug
	 *
	 * retry
	 */
	if ((read (fd, &yuv420buf, 640*480*2)) < 0) {
		perror("read");
		return;
	}

	jpg_fp = fopen(YUV420_FILE, "wb");
	if (!jpg_fp) {
		perror(YUV420_FILE);
		return;
	}

	cinfo.err = jpeg_std_error(&jerr);
	jpeg_create_compress(&cinfo);

	jpeg_stdio_dest(&cinfo, jpg_fp);

	cinfo.image_width = 640;
	cinfo.image_height = 480;
	cinfo.input_components = 3;
	cinfo.in_color_space = JCS_RGB;

	jpeg_set_defaults(&cinfo);

	jpeg_set_quality(&cinfo, quality, TRUE);
	
	jpeg_start_compress(&cinfo, TRUE);

	/* YUV420 -> RGB24 */
	yuv_convert_rgb24( 
			yuv420, yuv420 + 640*480, yuv420 + 640*480/2*3,
			rgb24, 640*480);

	jpeg_write_scanlines(&cinfo, row_pointer, 480);

	jpeg_finish_compress(&cinfo);
	jpeg_destroy_compress(&cinfo);

	if (jpg_fp)
		fclose(jpg_fp);

	printf("   save to \"%s\"\n", YUV420_FILE);
}

void v4l2_adjust_hw_to_default(int fd, V_QRYCTRL *qc)
{
	int i;
	V_QRYCTRL *qc_0 = qc;
	struct v4l2_control vc;

	/* integer */
	for (i=0; i<CTRL_NUM; i++) {
		if (!(qc->id))
			break;
		if (qc->type == V4L2_CTRL_TYPE_INTEGER) {

			vc.id = qc->id;

#if 0
			vc.value = qc->minimum;
			if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) {
				perror("VIDIOC_S_CTRL");
				continue;
			}
			vc.value = qc->maximum;
			if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) {
				perror("VIDIOC_S_CTRL");
				continue;
			}
#endif
			vc.value = qc->default_value;
			if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) {
				perror("VIDIOC_S_CTRL");
				continue;
			}
			printf("   set [%s] to %d\n", qc->name, vc.value);
		}
		qc++;
	}

	/* boolean */
	qc = qc_0;
	for (i=0; i<CTRL_NUM; i++) {
		if (!(qc->id))
			break;
		vc.id = qc->id;
		if (qc->type == V4L2_CTRL_TYPE_BOOLEAN) {
			vc.value = qc->default_value;
			if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) {
				perror("VIDIOC_S_CTRL");
				continue;
			}
			printf("   set [%s] to %s\n", qc->name, vc.value ? "TRUE":"FALSE");
		}
		qc++;
	}
}

static unsigned int fb_grab(int fd, char **fbmem)
{
	F_VINFO modeinfo;
	unsigned int length;

	if (ioctl(fd, FBIOGET_VSCREENINFO, &modeinfo) < 0) {
		perror("FBIOGET_VSCREENINFO");
		exit (EXIT_FAILURE);
	}
	length = modeinfo.xres * modeinfo.yres * (modeinfo.bits_per_pixel >> 3);

	printf("  %d x %d, %d bpp\n",
			modeinfo.xres, modeinfo.yres, modeinfo.bits_per_pixel);

	*fbmem = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
	if (*fbmem < 0) {
		perror("mmap()");
		length = 0;
	}

	return length;
}

static void fb_ungrab(char **fbmem, unsigned int length)
{
	if (*fbmem)
		munmap(*fbmem, length);
}


int main(int argc, char *argv[])
{
	int v4l2_fd = -1;
	int fb_fd = -1;
	char *fbmem = NULL;
	unsigned int fb_length = 0;
	V_FORMAT fmt;
	V_INPUT inp[INPUT_NUM];
	V_QRYCTRL qc[CTRL_NUM];
	V_FMTDESC pix[PIXFMT_NUM];
	int preview_frames = 180;
	int tmp;

	if (argc > 1) {
		if (sscanf(argv[1], "%d", &tmp) == 1)
			preview_frames = tmp;
	}

	printf("Start Main \n");
	v4l2_fd = open(V4L2_DEV_NODE, O_RDWR);
	if (v4l2_fd < 0) {
		perror(V4L2_DEV_NODE);
		goto out;
	}

	printf("Before openning FB \n");
	fb_fd = open(FB_DEV_NODE, O_RDWR);
	if (fb_fd < 0) {
		perror(FB_DEV_NODE);
		goto out;
	}

	printf("\n");
	printf("======================\n");
	printf("FB : Driver Capacities\n");
	printf("======================\n");
	fflush(stdout);
	if ((fb_length = fb_grab(fb_fd, &fbmem)) == 0)
		goto out;
	memset(fbmem, 0, fb_length);

	printf("\n");
	printf("========================\n");
	printf("V4L2 : Driver Capacities\n");
	printf("========================\n");
	fflush(stdout);
	v4l2_print_settings(v4l2_fd, &inp[0], &fmt, &pix[0], &qc[0]);

	printf("\n");

	printf("===================================\n");
	printf("V4L2 : Adjust Camera H/W to default\n");
	printf("===================================\n");
	fflush(stdout);
	v4l2_adjust_hw_to_default(v4l2_fd, &qc[0]);

	printf("\n");

	printf("============================\n");
	printf("V4L2 : Configure for Preview\n");
	printf("============================\n");
	fflush(stdout);
	v4l2_config_for_preview(v4l2_fd, &fmt, &pix[0]);

	printf("\n");

	printf("===============================\n");
	printf("V4L2 : Show %d frames on LCD\n", preview_frames);
	printf("===============================\n");
	fflush(stdout);
	v4l2_show_on_fb(v4l2_fd, fbmem, preview_frames);
	
	printf("\n");

	printf("===================================\n");
	printf("V4L2 : Configure for YUV420 Capture\n");
	printf("===================================\n");
	fflush(stdout);
	v4l2_config_for_yuv420_capture(v4l2_fd, &fmt, &pix[0]);

	printf("\n");

	printf("=====================================\n");
	printf("V4L2 : Capture 1 YUV420 frame to JPEG\n");
	printf("=====================================\n");
	fflush(stdout);
	init_yuvtable();
	v4l2_save_yuv420_to_jpg(v4l2_fd);
	
	printf("\n");

out:

	if (v4l2_fd > 0)
		close(v4l2_fd);

	fb_ungrab(&fbmem, fb_length);

	if (fb_fd > 0)
		close(fb_fd);

	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色图第一页| 不卡一区二区三区四区| 欧美精品一二三区| 亚洲国产视频在线| 欧美男人的天堂一二区| 日韩精品三区四区| 精品女同一区二区| 成人午夜伦理影院| 夜夜爽夜夜爽精品视频| 欧美喷水一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 91精品在线一区二区| 日产精品久久久久久久性色| 精品久久一区二区| 成人av在线资源| 亚洲主播在线观看| 精品国产人成亚洲区| 国产精品99久久久久| 亚洲欧美偷拍另类a∨色屁股| 欧美挠脚心视频网站| 国产美女久久久久| 一区二区三区 在线观看视频| 7777精品久久久大香线蕉 | 久久先锋影音av| 波多野结衣一区二区三区| 亚洲午夜免费电影| 久久免费午夜影院| 欧美视频你懂的| 国产福利一区二区三区视频| 一区二区三区日韩精品视频| 日韩美女一区二区三区| 色哟哟精品一区| 韩国欧美国产一区| 亚洲国产精品综合小说图片区| 久久久久久久久久久久电影 | 99久久99久久久精品齐齐| 午夜亚洲国产au精品一区二区| 久久久久9999亚洲精品| 欧美日韩久久一区二区| www.视频一区| 九色综合国产一区二区三区| 亚洲综合精品久久| 国产精品视频一二三区| 欧美电视剧免费全集观看| 日本韩国一区二区三区视频| 国产毛片精品视频| 老司机午夜精品99久久| 亚洲一区二区偷拍精品| 国产精品国产自产拍高清av王其| 日韩视频不卡中文| 欧美日韩国产乱码电影| 9人人澡人人爽人人精品| 国产又黄又大久久| 日日夜夜免费精品| 亚洲午夜精品一区二区三区他趣| 欧美激情一区二区三区在线| 精品日韩一区二区三区 | 久久国产精品99久久久久久老狼| 亚洲激情第一区| 亚洲天天做日日做天天谢日日欢| 国产清纯白嫩初高生在线观看91 | 蜜桃视频一区二区三区| 亚洲妇熟xx妇色黄| 一区二区三区日韩欧美精品 | 欧美日本一道本| 色综合久久中文字幕| 成人午夜视频在线| 波多野结衣在线aⅴ中文字幕不卡| 国产精品影音先锋| 国产精品99久久久久久久vr | 91农村精品一区二区在线| 国产成人自拍高清视频在线免费播放| 日本伊人色综合网| 视频一区二区三区中文字幕| 婷婷综合在线观看| 亚洲成人精品一区| 午夜不卡av免费| 日韩va亚洲va欧美va久久| 天天综合天天综合色| 免费人成黄页网站在线一区二区| 日韩中文字幕av电影| 日韩av电影天堂| 男人的天堂亚洲一区| 久久99蜜桃精品| 国产一区二区三区四| 国产成人免费xxxxxxxx| 99精品欧美一区二区三区小说| 成人午夜激情影院| 91蝌蚪porny| 欧美日韩视频在线一区二区| 日韩视频不卡中文| 国产视频一区不卡| 亚洲欧美日韩小说| 亚洲国产欧美另类丝袜| 热久久久久久久| 国产成人自拍在线| 一本色道久久综合亚洲aⅴ蜜桃 | 在线视频综合导航| 欧美一区二区三区在线视频| 精品sm捆绑视频| 中文字幕精品综合| 亚洲最大色网站| 国内一区二区视频| 一本色道久久综合精品竹菊| 777午夜精品免费视频| 久久天天做天天爱综合色| 国产精品电影一区二区| 天天影视涩香欲综合网| 国产一区二区三区精品视频| 91无套直看片红桃| 欧美mv日韩mv国产网站| 国产精品初高中害羞小美女文| 午夜日韩在线观看| 国产乱码精品一区二区三区五月婷| 99riav一区二区三区| 欧美一区二区三区男人的天堂| 久久色视频免费观看| 一区二区三区在线影院| 国产曰批免费观看久久久| 欧美性猛交一区二区三区精品 | 欧美性大战久久久久久久 | 99re66热这里只有精品3直播| 欧美精选一区二区| 欧美国产日韩亚洲一区| 日本 国产 欧美色综合| 91伊人久久大香线蕉| 久久久亚洲精品一区二区三区| 亚洲制服丝袜av| www.欧美亚洲| 国产午夜亚洲精品羞羞网站| 亚洲午夜成aⅴ人片| 国产成人精品免费视频网站| 欧美一级在线免费| 一区二区欧美精品| 成人精品免费网站| 欧美成人午夜电影| 亚洲国产一区二区a毛片| 99久久伊人精品| 久久久久久久网| 美女一区二区视频| 欧美影院精品一区| 亚洲天堂成人网| 成人动漫中文字幕| 久久综合色鬼综合色| 日韩经典一区二区| 欧美剧在线免费观看网站| 亚洲激情第一区| 91亚洲永久精品| 国产日韩欧美综合一区| 国产在线精品一区二区不卡了| 5566中文字幕一区二区电影 | 中文字幕亚洲精品在线观看| 国产在线观看一区二区| 欧美成人a在线| 青草av.久久免费一区| 91精品综合久久久久久| 亚洲第一成人在线| 欧美午夜电影在线播放| 一区二区三区四区激情| 色综合天天综合给合国产| 亚洲欧洲日产国码二区| 成人av在线一区二区三区| 亚洲国产精品av| eeuss鲁片一区二区三区 | 粉嫩13p一区二区三区| 国产性色一区二区| 国产a久久麻豆| 欧美激情一区在线| 99精品国产热久久91蜜凸| 亚洲欧美一区二区在线观看| 91首页免费视频| 亚洲欧美另类图片小说| 在线亚洲人成电影网站色www| 夜色激情一区二区| 在线播放日韩导航| 美女国产一区二区| 国产偷v国产偷v亚洲高清| 成人免费黄色大片| 一区二区三区色| 宅男在线国产精品| 经典三级在线一区| 国产精品嫩草影院com| 91丝袜美腿高跟国产极品老师| 亚洲色图20p| 欧美挠脚心视频网站| 久久精品国产精品亚洲红杏| 国产午夜精品福利| 色综合天天综合色综合av | 国产欧美精品日韩区二区麻豆天美| 国产成人免费视| 日韩理论片网站| 欧美日韩精品一区视频| 久久99久久精品| 国产精品久久国产精麻豆99网站| 色狠狠色狠狠综合| 麻豆精品视频在线观看免费| 国产欧美va欧美不卡在线| 在线观看一区不卡| 久久99精品国产麻豆婷婷| 国产精品久久久久久久久免费桃花|