4

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

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

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

我已经搜索过它,但我找不到任何使用 v4l2 编解码器驱动程序的示例。

4

3 回答 3

3

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

V4L2 规范中的“编解码器”API 是指硬件编解码器。这种编解码器是具有以下功能的设备:

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

  • 它有一个视频输入,你的用户态应用程序可以发送一个视频流 - 例如包含 JPEG 编码的视频帧 - 所以它有V4L2_CAP_VIDEO_OUTPUT能力和

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

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

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

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

于 2013-12-19T09:41:11.393 回答
2

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

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

取而代之的是,聪明人创建了一个库,该库将解压缩捕获设备传递的帧并以标准方式提供这些帧:libv4l2

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

哦,如果您正在考虑简单地将模块加载到内核空间中的编码/解码中(例如,您有网络摄像头“foo”,它以“XYZ”格式提供图像,但您希望它以“ABC”格式提供图像添加内核模块的方法)那么你就不走运了。

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

于 2013-12-17T09:43:24.597 回答
0

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

它确实检查了 V4L2_CAP_VIDEO_M2M 上限

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

于 2021-03-03T07:03:08.540 回答