v4l2_subdev和video_device区分

相关规则

  • video_device是用户空间可见的设备节点,如摄像头、编解码器;
    v4l2_subdev是不可见于用户空间的中间硬件模块,比如sensor、ISP

  • 一个实体硬件(entity),也可以是 video_device或者v4l2_subdev;两者的结构体内都有media_entity;
    但是,v4l2_subdev内部也有video_device,说明v4l2_subdev和video_device并不是完全互斥的!
    比如一个v4l2_subdev,如果希望在调试或测试场景下被用户直接控制,就需要创建设备节点,此时该v4l2_subdev也是一个video_device!

  • 一个video_device,可能是捕获设备(V4L2_CAP_VIDEO_CAPTURE),也可能是输出设备(V4L2_CAP_VIDEO_OUTPUT);
    同样,它们也不是完全互斥的,少数硬件两者都是

  • 区分捕获设备和输出设备,是从用户的视角看的:
    用户往设备中灌图,用户对外提供数据给该设备,那该设备就是输出设备,比如显示设备;
    用户从设备中获取数据,那该设备就是输入设备,比如视频采集卡;

捕获设备和输出设备那么难区分,是因为在设备命名上有人故意混淆:
stitch_input表示相对于ISP来说,它是ISP stitch的输入,但是它的buf_type却是V4L2_CAP_VIDEO_OUTPUT;
同样,switch_out的buf_type是V4L2_CAP_VIDEO_CAPTURE!
因此,只需要:区分捕获和输出设备的概念即可,不用管设备名称。
 

pisp-be 中的设备分析

先看下图:http://https://linuxkernel.org.cn/doc/html/latest/admin-guide/media/raspberrypi-pisp-be.html
image
 
根据以上描述,可以得出:

  • pispbe整体是一个v4l2_device
  • 一个v4l2_device可以包含多个video_device和v4l2_subdev
  • 这里的pispbe有一个v4l2_subdev,4个input类型的video_device,4个output类型的video_device
posted @ 2025-11-11 21:05  moonのsun  阅读(4)  评论(0)    收藏  举报