コード例 #1
0
ファイル: aml_tvout.c プロジェクト: olegk0/aml_uboot
int tvout_opt_cmd(int argc, char *argv[])
{
	if(argc < 1)
	{
		opt_cmd_help();
		return 1;
	}

	if (strcmp(argv[0], "open") == 0)
		return tvout_open(argc, argv);
	if (strcmp(argv[0], "close") == 0)
		return tvout_close(argc, argv);
	if (strcmp(argv[0], "info") == 0)
		return get_cur_info(argc, argv);
	if (strcmp(argv[0], "tst") == 0)
		return tvout_tst(argc, argv);

	opt_cmd_help();
	return 1;
}
コード例 #2
0
ファイル: test_tvout_camera.c プロジェクト: sqcssp/adr.ldws
int main(int argc, char* argv[])
{
	int ret;
	char fn[32] = "/sdcard/car.config";

	if(atexit(exit_handler) != 0) {
		exit(EXIT_FAILURE);
	}

	if(signal(SIGINT, signal_init_handler) == SIG_ERR) {
		exit(EXIT_FAILURE);
	}

	i2c_download_adv7180_init();
	

	int width = 320;
	int height = 240;


	config.width = width;
	config.height = height;
	config.format = V4L2_PIX_FMT_YUV420;
	//config.format = V4L2_PIX_FMT_YUV422P;


	tvout_open(&config);

	fd_mem  = open( "/dev/mem", O_RDWR ); 
//	paddr_mem_tv = mmap( 0, size_mem, PROT_READ | PROT_WRITE, MAP_SHARED, fd_mem, addr_phy_tv );
//	memset(paddr_mem_tv, 0x80, size_mem);
	size_mem = width * height * 2;
	paddr_mem_tv = mmap( 0, size_mem, PROT_READ | PROT_WRITE, MAP_SHARED, fd_mem, addr_phy_tv );
	memset(paddr_mem_tv, 0x80, size_mem);


	camera.format.width = width;                            /* set output frame width */
	camera.format.height = height;                          /* set output frame height */
	camera.format.pixelformat = V4L2_PIX_FMT_YUV420;
	//camera.format.pixelformat = V4L2_PIX_FMT_YUYV;

	ret = camera_init(&camera);
	if(0 > ret) {
		perror("open camera device error");
		exit(EXIT_FAILURE);
	}

	unsigned char *paddr_camera;
	long	size_camera;

	struct timeval start,end;
	long timeuse = 0;
	long time_max = 0;
	long time_temp = 0;
	int i = 0;

	static struct car_parm_setting car_set;

	if(initlib(fn) >= 0) {
		if (isname("PARAM","carbody_width"))
			car_set.carbody_width = atoi(getvalue("carbody_width"));
		if (isname("PARAM","camera_high_degree"))
			car_set.camera_high_degree = atoi(getvalue("camera_high_degree"));
		tidyup();
	}
	else {
		car_set.carbody_width = 150;
		car_set.camera_high_degree = 50;
	}

	car_set.init_flag = 1;
	car_set.img_width = width;
	car_set.img_height = height;

	printf("/*......Car Setting......*/\n");
	printf("  carbody width = %d cm \n", car_set.carbody_width);
	printf("  camera high degree = %d cm \n", car_set.camera_high_degree);
	printf("  image width = %d pixel \n", car_set.img_width);
	printf("  image height = %d pixel \n", car_set.img_height);
	printf("/*.......................*/\n");


	while (1) {

//		paddr_camera = camera_get_one_frame_noneblock(&camera, &size_camera);
//
		gettimeofday( &start, NULL );

		paddr_camera = camera_get_one_frame(&camera, &size_camera);
		car_set.pIn_addr = paddr_camera;
		car_set.gps_speed = 70;
		car_set.light_signal = LIGHT_SIGNAL_OFF;

		paddr_camera = set_car_parm(&car_set);
		switch(car_set.car_event) {
			case WARNING_DRIVING_SAFE:
				printf("=\n");
				break;
			case WARNING_DRIVING_LEFT:
				printf("<\n");
				break;
			case WARNING_DRIVING_RIGHT:
				printf(">\n");
				break;
		}

		//car_event = car_set.car_event;
		paddr_camera = car_set.pOut_addr;

		memcpy(paddr_mem_tv, paddr_camera, width*height); 
		camera_get_one_frame_complete(&camera);

		config.addr_phy = addr_phy_tv;
		tvout_exe(&config);


		gettimeofday( &end, NULL );
		time_temp = 1000000 * ( end.tv_sec - start.tv_sec )+ (end.tv_usec - start.tv_usec);
		if (time_temp > time_max) {
			time_max = time_temp;
		}
		timeuse +=time_temp;
		DEBUG("time used: % 7ld us\n", time_temp);


		++i;
		if ( timeuse > 10*1000000) {
			printf("get %d frames spent % 7ld msec  average frame rate = %ld\n", i, timeuse, i*1000000/timeuse);
			i = 0;
			timeuse = 0;
		}
	}

	return 0;
}