v4l-ctl

media-ctl

media-ctl.c

-p: 打印 device topology

$ media-ctl -p

--print-dot: 输出 graphviz DOT 格式图形描述。

# 将输出保存到文件并转换为图像
$ media-ctl --print-dot > topology.dot
$ dot -Tpng topology.dot -o topology.png

-e: 指定某个 entity name, 打印属于哪个 device

$ media-ctl -e rtsisp_video0
/dev/video0

--get-v4l2 or --get-format: 查看某个 pad 的格式

# 使用entity ID
$ media-ctl --get-v4l2 0:1         # entity 0的pad 1
$ media-ctl --get-v4l2 5:0       # entity 5的pad 0

# 使用entity 名称
$ media-ctl --get-v4l2 '"sensor":1'   # 名为"sensor"的entity的pad 1
$ media-ctl --get-v4l2 '"isp":0'    # 名为"isp"的entity的pad 0

-r: reset all links to inactive

media-ctl -r

-l: 设置 links

media-ctl -l "0:1 -> 5:0 [1]" # 基本link设置 - entity 0的pad1连接到entity 5的pad0,设置为active
media-ctl -l '"sensor":0 -> "isp":0 [1]' # 使用entity名称
media-ctl -l "0:1 -> 5:0 [1], 5:1 -> 6:0 [1]" # 多个link设置,用逗号隔开
media-ctl -l "0:1 -> 5:0 [0]" # 禁用链接

-V:设置 pad 格式

media-ctl -V '"sensor":0 [fmt:YUYV8_2X8/1920x1080]' # 设置基本格式
media-ctl -V '"sensor":0 [fmt:YUYV8_2X8/1920x1080], "isp":0 [fmt:YUYV/1920x1080]' # 设置多个 pad 的格式
media-ctl -V '"sensor":0 [fmt:YUYV8_2X8/1920x1080, colorspace:srgb]' # 设置格式和颜色空间
media-ctl -V '"sensor":0 [fmt:YUYV8_2X8/1920x1080, field:none, @30/1]' # 设置格式、field 和帧间隔
media-ctl -V '"isp":1 [fmt:YUYV8_2X8/1920x1080, crop:(100,100)/1720x880, compose:(0,0)/1920x1080]' # 设置格式、裁剪和合成区域

--known-mbus-fmts: 枚举出所有的 mbus formats

v4l2-ctl

$ v4l2-ctl --help

$ v4l2-ctl --all # 列出很多信息
$ v4l2-ctl --device /dev/video0 # 指定 device
$ v4l2-ctl --out-device
$ v4l2-ctl --export-device
$ v4l2-ctl --media-bus-info
$ v4l2-ctl --get-fmt-video # VIDIOC_G_FMT
$ v4l2-ctl --set-fmt-video width=2560,height=1440,pixelformat=YUYV # VIDIOC_S_FMT 可以指定width,height,pixelformat,field,colorspace,ycbcr等等
$ v4l2-ctl --try-fmt-video width=2560,height=1440,pixelformat=YUYV # VIDIOC_TRY_FMT

$ v4l2-ctl --list-formats # 列出支持的格式 VIDIOC_ENUM_FMT
$ v4l2-ctl --list-formats-ext #  除了格式还有frame size&interval信息, 但interval这里只会打印discrete的 VIDIOC_ENUM_FMT+VIDIOC_ENUM_FRAMESIZES+VIDIOC_ENUM_FRAMEINTERVALS
$ v4l2-ctl --list-fields # 支持的fields
$ v4l2-ctl --list-framesizes YUYV # 列出指定格式的frame size 信息 VIDIOC_ENUM_FRAMESIZES
$ v4l2-ctl --list-frameintervals width=1920,height=1080,pixelformat=YUYV # 列出指定格式的frame size 信息 VIDIOC_ENUM_FRAMEINTERVALS
$ v4l2-ctl --list-formats-meta # meta device format VIDIOC_ENUM_FMT
$ v4l2-ctl -d /dev/v4l-subdev0 --list-subdev-mbus-code # VIDIOC_SUBDEV_ENUM_MBUS_CODE
$ v4l2-ctl -d /dev/v4l-subdev0 --list-subdev-framesizes pad=0,code=0x2008 # code为上面打印出来的format code. VIDIOC_SUBDEV_ENUM_FRAME_SIZE
$ v4l2-ctl -d /dev/v4l-subdev6 --list-subdev-frameintervals pad=0,width=2560,height=1440,code=0x3008 # width和height为上面返回的framesizes VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL
$ v4l2-ctl --subset
$ v4l2-ctl --get-parm # get fps
$ v4l2-ctl --set-parm 60 # set fps
$ v4l2-ctl --info # 获取 device 信息

$ v4l2-ctl --list-ctrls
$ v4l2-ctl --list-ctrls-menus
$ v4l2-ctl --set-ctrl
$ v4l2-ctl --get-ctrl


$ v4l2-ctl --list-devices



$ v4l2-ctl --stream-mmap/user/dambuf