struct vb2_queue

struct vb2_queue

queued_list
done_list保存准备出队到用户空间的缓冲区;

struct vb2_queue {
>---unsigned int>--->--->---type;
>---unsigned int>--->--->---io_modes;
      ...
>---const struct vb2_ops>--->---*ops;
>---const struct vb2_mem_ops>---*mem_ops;
>---const struct vb2_buf_ops>---*buf_ops;
      ...
    //保存视频数据和信息的核心结构体,每一帧的图像都对应一个struct vb2_buffer结构体,图像信息保存在struct v4l2_buffer结构中
>---struct vb2_buffer>-->---*bufs[VB2_MAX_FRAME];    //所有动态分配的struct vb2_buffer结构体保存到bufs数组中
               struct vb2_buffer {  // video缓冲区描述符
                       struct v4l2_buffer	v4l2_buf;  // 关联的缓冲区,可以被驱动read
                               // struct v4l2_buffer用来指定与描述一帧帧缓冲,应用可以设置
                              struct v4l2_buffer {
                                      __u32			index;  // buffer的编号
                                      __u32			type;   // buffer的类型,由enum v4l2_buf_type定义
                                                                 //V4L2_BUF_TYPE_VIDEO_CAPTURE
                                      struct timeval		timestamp;  // 视频帧时间戳
                                      struct v4l2_timecode timecode;  // 时间码
                                      __u32			sequence;  // 该帧的序列号
                                      __u32			memory;  // enum v4l2_memory枚举定义
  	                            ...
                              };
                       struct vb2_queue	*vb2_queue;  // 该vb2_buffer所属的vb2_queue
                       unsigned int		num_planes;  // 该buffer有多少个planes
                       enum vb2_buffer_state	state;   // buffer的当前状态
                              enum vb2_buffer_state {  // 缓冲区状态枚举
                                  VB2_BUF_STATE_DEQUEUED,  // 缓冲区出队,处于用户空间的控制下,默认状态
                                  VB2_BUF_STATE_PREPARING, // videobuf2正在准备缓冲区
                                  VB2_BUF_STATE_PREPARED,  // 缓冲区已准备好
                                  VB2_BUF_STATE_QUEUED,    // 缓冲区入队,处于videobuf2中,不处于驱动中
                                  VB2_BUF_STATE_ACTIVE,    // 缓冲区位于驱动中
                                  VB2_BUF_STATE_DONE,      // 缓冲区从驱动返回到videobuf2,但还没出队到用户空间
                                  VB2_BUF_STATE_ERROR,     // 出错,dequeued到用户空间会报错
                                  };
                      // queued buffer链表,保存所有从userspace queued进的buffers
                       struct list_head	queued_entry;
                       // 保存所有准备dequeued到userspace的buffers链表 
                       struct list_head	done_entry;
                        ......
                        };
>---unsigned int>--->--->---num_buffers;    //分配/使用的缓冲区数         
>---struct list_head>--->---queued_list;          //保存所有从用户空间入队的缓冲区;
>---unsigned int>--->--->---queued_count;         //入队并准备好进行流传输的缓冲区数。
>---struct list_head>--->---done_list;        保存准备出队到用户空间的缓冲区;    
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值