登录 注册
当前位置:主页 > 资源下载 > 10 > cameratest12_grab_20161101_1440.tar.gz下载

cameratest12_grab_20161101_1440.tar.gz下载

  • 更新:2024-10-30 17:27:57
  • 大小:163KB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:Android - 移动开发
  • 格式:GZ

资源介绍

cameratest12_grab_20161101_1440.tar.gz API接口的文件 R:\wyb\ov5640_parrot_r16_tinav2.0\package\allwinner\cameratest\src\cameratest.c R:\wyb\ov5640_parrot_r16_tinav2.0\package\allwinner\cameratest\src\videodev2.h 5.CSI接口的摄像头,用文工提供的方法,可以看到图片,但是我们仍然调用不了。因为文工提供的方法是Camera Test,我们仍然希望你们能提供一个从CSI接口获取图像的API接口函数。 CSI摄像头API接口,支持设置图像参数,支持捕捉图像帧数据。 API摄像头设置参数: 图像长:1280,640,320 图像高:720,480,240 R:\wyb\ov5640_parrot_r16_tinav2.0\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\ov5640.c static struct regval_list sensor_720p_regs[] = { //1280*720 static struct regval_list sensor_vga_regs[] = { //VGA: 640*480 由于驱动中没有320*240这个分辨率,建议直接通过软件取VGA: 640*480(横竖各隔一个点取一个),或者请OV提供QVGA(320*240)的寄存器配置。 例子给出来的是:640*480,可以很方便地修改为1280*720(生成的YUV的体积请做相应的修改)。 YUV格式现在配置为V4L2_PIX_FMT_NV12,也可以配置为其他格式,请根据需要配置。 修改: R:\wyb\ov5640_parrot_r16_tinav2.0\package\allwinner\cameratest\src\cameratest.c static int setVideoParams(void) { …… width1 = 640; height1 = 480; pixelformat1 = V4L2_PIX_FMT_NV12; } 亮度 [0,100] 对比度 [0,100] 饱和度 [0,100] 增益 [0,100] 曝光度 [1,100] 白平衡 [1,100] 通道 1 3, 默认1(灰度) 这些需要OV的FAE提供修改哪些寄存器,现阶段已经确认使用默认设置。 图像格式 RGB YUV,默认RGB ov5640默认出来的是YUV格式(cameratest中使用的是NV12),RGB请自行查找相关算法转换。 RGB和YUV.pdf 我找到的一个参考文档。YUYV格式转RGB格式。 https://www.douban.com/note/76361504/ RGB和YUV(请注意:这个算法适用于:V4L2_PIX_FMT_YUYV) 2.2.抓取图像信息,返回图像的内存地址。 测试步骤: 执行cameratest的时候,输入小写字母g回车。 程序的简要流程: command_thread1线程检测到g(grab)之后,通过iFlagGrab变量告知camera_thread2线程,将摄像头的当前帧图像放入到数组arrayVGANV12中。 已知会存在的效率问题: memcpy会消耗CPU资源!!!!如果对实时性要求不是特别高,调用memcpy是可以接受的。 如果对实时性要求特别高,建议直接把算法嵌入到capture_frame函数的相对应的位置。 void command_thread1(void) { …… while(1) { while((ch=getchar()) != '\n') { …… else if('g'==ch) { iFlagGrab = 1; printf("thread1=%d\n", iFlagGrab); // while(2==iFlagGrab) while(iFlagGrab) { if(2==iFlagGrab) { char image_name[30]; memset(image_name, 0, sizeof(image_name)); sprintf(image_name, "%s/grab_nv12d%s", "/tmp", iCameraCounter++, ".yuv"); // ret = save_frame_to_file(image_name, (void*)(vir_sub_start), width1, height1, pixelformat1, 1); int ret = save_frame_to_file(image_name, arrayVGANV12, width1, height1, pixelformat1, 1); iFlagGrab = 0; printf("****wyb %s:%d/%s()! \n", __FILE__, __LINE__, __func__); } else { usleep(2000); } } } } …… } static int capture_frame() { …… if(1==iFlagGrab) { //memcpy(d,s,(strlen(s)+1)); //buffers[buf.index].phy_addr = buf.m.offset - 0x20000000; memcpy( arrayVGANV12, buffers[buf.index].start, 640*480*3/2); iFlagGrab = 2; printf("****wyb %s:%d/%s()! iFlagGrab=%d\n", __FILE__, __LINE__, __func__, iFlagGrab); printf("****wyb %s:%d/%s()! 0xx buf.index=%d\n", __FILE__, __LINE__, __func__, buffers[buf.index].start, buf.index); //if(ret == 0){ // buffers[buf.index].phy_addr = buf.m.offset - 0x20000000; // hv_dbg("index: %d buffers[buf.index].start = %p\n", buf.index, buffers[buf.index].start); // do_save_sub_image(buf.index); // //SAVE_IMAGE--; // iFlagCamera--; //} } …… } 更多: V4L2方面的参考资料: Linux视频驱动接口V4L2视频采集编程.pdf Linux下V4L2编程小结--吴老师.doc 基于Linux视频驱动接口V4L2视频采集-初步完工.vsd (VISIO流程图)