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; }
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; }