耶比大雄 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 程序实在不会写,要秃了
    • ¥15 pycharm导入不了自己的包
    • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
    • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
    • ¥15 关于R语言单因素与多因素线性回归的平均值
    • ¥15 服务器清除BIOS之后引导不了
    • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
    • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
    • ¥15 前端预览docx文件,文件从后端传送过来。
    • ¥15 层次聚类和蛋白质相似度