在哪里我可以找到使用v4l2编解码器驱动程序的示例



在Raspberry Pi代码中,有一个s5p-jpeg编解码器驱动程序。

drivers/media/platform/s5p-jpeg/jpeg-core.c

能告诉我在哪里可以找到如何使用它的例子吗?或者任何其他v4l2编解码器驱动程序?

我在谷歌上搜索过,但找不到任何使用v4l2编解码器驱动程序的例子。

(添加另一个答案,因为它完全不同:-)

V4L2规范中的"编解码器"API指的是硬件编解码器。这种编解码器是一种具有以下特征的设备:

  • 硬件编解码器显示为/dev/videoX设备

  • 它有一个视频输入,用户应用程序可以向其中发送视频流,例如包含JPEG编码的视频帧,因此它具有V4L2_CAP_VIDEO_OUTPUT功能和

  • 它有一个视频输出,用户应用程序可以从中读取视频流,例如包含未压缩的帧,因此它还具有V4L2_CAP_VIDEO_CAPTURE功能。

有许多应用程序可以将视频写入v4l2 OUTPUT设备,以下是我所知道的一些:

  • GStreamer的v4l2sink元素
  • LiVeS
  • 宝石

afaik,这些应用程序没有任何特定的代码来处理"v4l2编解码器设备",但可以向v4l2设备写入/从中读取,这就是您所需要的。

还要检查v4l-utils.git:Look in utils/v4l2 ctl/v4l2-ctl-streaming.cpp

v4l2在格式方面非常自由:例如,捕获设备几乎可以以任何格式发送帧。

因此,如果您正在编写一个用户端工具(应用程序、库…;而不是内核驱动程序),则不应篡改编解码器(如果可以避免的话)。想象一下,世界上每个想要读取v4l2流的应用程序,都必须添加代码来解码SQ905CMJPEG或whatnot编解码器中的帧(每个应用程序都添加了自己的一组错误实现)

相反,聪明人创建了一个库,该库将解压缩捕获设备提供的帧,并以标准方式提供这些帧:libv4l2。

顺便说一句,如果您坚持编写自己的代码,libv4l2是一个很好的参考实现。

哦,如果你想简单地将一个模块加载到内核空间中的编码/解码中(例如,你有一个网络摄像头"foo",它以"XYZ"格式提供图像,但你希望它通过添加内核模块来以"ABC"格式提供图像),那么你就倒霉了。

Linus T.已经非常清楚[缺少参考],编解码器转换代码不会在内核空间内运行。

此处的代码访问v4l2编解码器驱动程序

它独立检查V4L2_CAP_VIDEO_M2M CAP

它基于内核捕获示例,但带有一些额外的代码

最新更新