v4l2驱动框架——media 文章目录mediamedia相关命令media参考文章用于运行时数据流的管理一个 V4L2 device 下属可能有非常多同类型的子设备subdevdphycsiisp这些那么在设备运行的时候我怎么知道我的数据流需要用到哪一个类型的哪一个子设备呢。这个时候就轮到 media_device 出手了它为这一坨的子设备建立一条虚拟的连线建立起来一个运行时的 pipeline管道并且可以在运行时动态改变、管理接入的设备。media_entity media_device基本构件块media_padpad是一个连接端点通过它可以保证entity之间通信pad分source pad和sink padmedia_linklink在两个pad之间定向连接数据由source pad 流向 sink pad概念作用类比实际对应文件media_device管理一组相关硬件单元的容器一块PCB板/dev/mediaXmedia_entity一个硬件功能模块板上的一个芯片/dev/v4l-subdevX或/dev/videoXmedia_padEntity的输入/输出端点芯片的引脚无设备文件仅内核抽象media_linkPad之间的定向连接PCB上的走线无设备文件可通过IOCTL设置media相关命令media-ctl -d /dev/media1 --print-topology 打印拓扑树下面的示例处理单元是ISP的entityrkisp-isp-subdev 有2输入2输出rootRK3588F-HiAT:~# media-ctl -d /dev/media1 --print-topologyMedia controller API version5.10.160 Media device information ------------------------ driver rkisp1-vir0 model rkisp0 serial bus info hw revision 0x0 driver version5.10.160 Device topology - entity1: rkisp-isp-subdev(4pads,10links)typeV4L2 subdev subtype Unknown flags0devicenodename /dev/v4l-subdev4 pad0: Sink[fmt:SBGGR10_1X10/2112x1568 field:none crop.bounds:(0,0)/2112x1568 crop:(0,0)/2112x1568]-rkisp_rawrd0_m:0[]-rkisp_rawrd2_s:0[]-rkisp_rawrd1_l:0[]-rkcif-mipi-lvds4:0[ENABLED]//启动cif输入的 pad1: Sink-rkisp-input-params:0[ENABLED]//3A处理参数 pad2: Source[fmt:YUYV8_2X8/2112x1568 field:none colorspace:smpte170m quantization:full-range crop.bounds:(0,0)/2112x1568 crop:(0,0)/2112x1568]-rkisp_mainpath:0[ENABLED]//主路径、自路径、FBC压缩路径和IQ工具路径 -rkisp_selfpath:0[ENABLED]-rkisp_fbcpath:0[ENABLED]-rkisp_iqtool:0[ENABLED]pad3: Source -rkisp-statistics:0[ENABLED]//isp统计信息 //6121824视频节点输出 - entity6: rkisp_mainpath(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video11 pad0: Sink-rkisp-isp-subdev:2[ENABLED]- entity12: rkisp_selfpath(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video12 pad0: Sink-rkisp-isp-subdev:2[ENABLED]- entity18: rkisp_fbcpath(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video13 pad0: Sink-rkisp-isp-subdev:2[ENABLED]- entity24: rkisp_iqtool(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video14 pad0: Sink-rkisp-isp-subdev:2[ENABLED]//实体303642原始数据输入节点 - entity30: rkisp_rawrd0_m(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video15 pad0: Source -rkisp-isp-subdev:0[]- entity36: rkisp_rawrd2_s(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video16 pad0: Source -rkisp-isp-subdev:0[]- entity42: rkisp_rawrd1_l(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video17 pad0: Source -rkisp-isp-subdev:0[]//实体48rkisp-statistics(统计数据节点)- entity48: rkisp-statistics(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video18 pad0: Sink-rkisp-isp-subdev:3[ENABLED]//实体54rkisp-input-params(参数输入节点)- entity54: rkisp-input-params(1pad,1link)typeNode subtype V4L flags0devicenodename /dev/video19 pad0: Source -rkisp-isp-subdev:1[ENABLED]//实体60rkcif-mipi-lvds4(MIPI CSI-2 接收器)- entity60: rkcif-mipi-lvds4(1pad,1link)typeV4L2 subdev subtype Unknown flags0devicenodename /dev/v4l-subdev5 pad0: Source[fmt:SBGGR10_1X10/2112x156810000/600000 field:none]-rkisp-isp-subdev:0[ENABLED]