问题遇到的现象和发生背景
使用的开发板是是眺望电子的RK3568,摄像头使用的是GC2053,且通过MIPI接口链接。
遇到的现象和发生背景,请写出第一个错误信息
第一个问题是不能设置格式
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
后面将类型改为V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE即可
运行结果及详细报错内容
struct v4l2_requestbuffers req_buff;
memset(&req_buff,0,sizeof(req_buff));
req_buff.count=4; /*预设要申请4个缓冲区*/
req_buff.type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; /*视频捕获设备*/
req_buff.memory=V4L2_MEMORY_MMAP; /*支持mmap内存映射*/
if(ioctl(uvc_video_fd,VIDIOC_REQBUFS,&req_buff)) /*申请缓冲区*/
{
printf("申请摄像头数据采集的缓冲区失败!\n");
return -4;
}
printf("摄像头缓冲区申请的数量: %d\n",req_buff.count);
/*4. 获取缓冲区的详细信息: 地址,编号*/
struct v4l2_buffer buff_info;
memset(&buff_info,0,sizeof(struct v4l2_buffer));
int i;
for(i=0;i<req_buff.count;i++)
{
buff_info.type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; /*视频捕获设备*/
buff_info.memory=V4L2_MEMORY_MMAP; /*支持mmap内存映射*/
if(ioctl(uvc_video_fd,VIDIOC_QUERYBUF,&buff_info))
{
printf("获取缓冲区的详细信息失败!\n");
return -5;
}
/*根据摄像头申请缓冲区信息: 使用mmap函数将内核的地址映射到进程空间*/
image_buffer[i]=mmap(NULL,buff_info.length,PROT_READ|PROT_WRITE,MAP_SHARED,uvc_video_fd,buff_info.m.offset);
if(image_buffer[i]==NULL)
{
printf("缓冲区映射失败!\n");
return -6;
}
}然后这里获取缓冲区会失败
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我尝试过不设置任何缓冲区,或者配置一个缓冲区,但是依旧不行
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
如果可以解决,奶茶奉上