在 Raspberry-Pi 代码中,有一个s5p-jpeg
编解码器驱动程序。
drivers/media/platform/s5p-jpeg/jpeg-core.c
有人可以告诉我在哪里可以找到如何使用它的示例吗?或任何其他 v4l2 编解码器驱动程序?
我已经搜索过它,但我找不到任何使用 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 输出设备,以下是我所知道的一些:
afaik,这些应用程序没有任何特定代码来处理“v4l2 编解码器设备”,但可以写入/读取 v4l2 设备,这就是您所需要的。
还要检查v4l-utils.git:查看 utils/v4l2-ctl/v4l2-ctl-streaming.cpp
v4l2 在格式方面非常自由:例如,捕获设备可以传送几乎任何格式的帧。
因此,如果您正在编写用户级工具(应用程序、库……;而不是内核驱动程序),但不应摆弄编解码器(如果可以避免的话)。想象一下世界上每一个想要读取 v4l2-streams 的应用程序,都必须添加代码来解码帧SQ905C
或MJPEG
其他编解码器(每个应用程序都添加自己的一组错误实现)
取而代之的是,聪明人创建了一个库,该库将解压缩捕获设备传递的帧并以标准方式提供这些帧:libv4l2。
顺便说一句,如果你坚持编写自己的代码,libv4l2
是一个很好的参考实现。
哦,如果您正在考虑简单地将模块加载到内核空间中的编码/解码中(例如,您有网络摄像头“foo”,它以“XYZ”格式提供图像,但您希望它以“ABC”格式提供图像添加内核模块的方法)那么你就不走运了。
Linus T. 非常清楚 [缺少参考] 编解码器转换代码不能在内核空间内运行。