当前位置:   article > 正文

Video4Linux框架简介(7) - V4L2框架和v4l2_subdev_v4l2_subdev_call

v4l2_subdev_call

V4L2框架


译注:这是目前看到关于V4L2框架内众多结构关系最提纲挈领的一张图。



子设备:v4l2_subdev struct

通常芯片连接到i2cSPI总线,或通过GPIO引脚控制,但它们也可以表示SoC / FPGA内部模块。

子设备驱动程序可以由不同的桥驱动程序使用,因此它们不能依赖于任何特定的桥驱动程序。

不能进行探测,因此桥接器驱动程序必须显式加载子驱动程序。

必须可以寻址一个,一个子集或所有子驱动程序。

API必须与总线无关。

大量的硬件导致大量的API:如何保持高效?


译注:由于V4L2框架本身支持的设备类型众多,而每种设备的操作函数又大有不同,因此除了核心回调v4l2_subdev_core_ops以外,每一种都各自封装。此外框架也提供了一个宏v4l2_subdev_call巧妙地调用不同的操作。

  1. struct v4l2_subdev_ops {
  2. const struct v4l2_subdev_core_ops *core;
  3. const struct v4l2_subdev_tuner_ops *tuner;
  4. const struct v4l2_subdev_audio_ops *audio;
  5. const struct v4l2_subdev_video_ops *video;
  6. const struct v4l2_subdev_vbi_ops *vbi;
  7. const struct v4l2_subdev_ir_ops *ir;
  8. const struct v4l2_subdev_sensor_ops *sensor;
  9. const struct v4l2_subdev_pad_ops *pad;
  10. };
  11. struct v4l2_subdev_core_ops {
  12. int (*log_status)(struct v4l2_subdev *sd);
  13. int (*s_config)(struct v4l2_subdev *sd, int irq, void
  14. *platform_data);
  15. int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n,
  16. struct v4l2_subdev_io_pin_config *pincfg);
  17. };
  18. #define v4l2_subdev_call(sd, o, f, args...) \
  19. (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \
  20. (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD))
  21. ret = v4l2_subdev_call(sd, core, s_config, 0, &pdata);

实用工具

实用工具

v4l2-ctlv4l2的瑞士军刀。

v4l2兼容性:V4L2驱动程序兼容性测试。

v4l2-dbg:允许访问DBG_G_CHIP_INFODBG_G / S_REGISTER

qv4l2Qt测试应用程序。

核心调试:“echo 1> / sys / class / video4linux /videoX / debug'

- 1:显示ioctl名称

- 2:也显示参数


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/263245
推荐阅读
相关标签
  

闽ICP备14008679号