耶比大雄 2023-11-03 11:58 采纳率: 100%
浏览 4
已结题

V4L2段错误,开发环境为LinuxC环境

问题遇到的现象和发生背景

使用的开发板是是眺望电子的RK3568,摄像头使用的是GC2053,且通过MIPI接口链接。

遇到的现象和发生背景,请写出第一个错误信息

第一个问题是不能设置格式

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

后面将类型改为V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE即可

img

运行结果及详细报错内容
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%

我尝试过不设置任何缓冲区,或者配置一个缓冲区,但是依旧不行

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

如果可以解决,奶茶奉上

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月11日
    • 创建了问题 11月3日

    悬赏问题

    • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
    • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
    • ¥30 c#打开word开启修订并实时显示批注
    • ¥15 如何解决ldsc的这条报错/index error
    • ¥15 VS2022+WDK驱动开发环境
    • ¥30 关于#java#的问题,请各位专家解答!
    • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
    • ¥20 pcf8563时钟芯片不启振
    • ¥20 pip2.40更新pip2.43时报错
    • ¥15 换yum源但仍然用不了httpd