本示例演示了如何使用 libargus 设置相机类组件以进行捕获操作。还创建了一个 EGLStream 以连接到 V4L2 视频编码器,从而可以将编码的视频流捕获到文件中。
$ cd /usr/src/jetson_multimedia_api/samples/10_camera_recording $ make该示例在当前目录中创建 H.264 视频文件。
$ ./camera_recording [OPTIONS]
$ ./camera_recording -h
下图显示了数据流经此示例的流程。

本示例演示了相机生产者和消费者编程模型。图像输出是使用 EGLStream 执行的。这是一种高效且零拷贝的输出,适用于各种 EGLStream 消费者。可能的消费者包括:
使用了以下类。有关 libargus 和 EGLStream 的更多信息,请参阅 libargus 文档。
| 类 | 描述 |
|---|---|
| class NvVideoEncoder | 该类包含所有与视频编码相关的元素和函数。 |
NvVideoEncoder 类封装了所有与视频编码相关的元素和函数。示例中使用的主要成员如下:
| NvVideoEncoder | 描述 |
|---|---|
| output_plane (输出平面) | V4L2 输出平面。 |
| capture_plane (捕获平面) | V4L2 捕获平面。 |
| createVideoEncoder (创建视频编码器) | 用于创建视频编码对象的静态函数。 |
| setExtControls (设置外部控件) | 设置 V4L2 设备的外部控件。 |
| setOutputPlaneFormat (设置输出平面格式) | 设置输出平面格式。 |
| setCapturePlaneFormat (设置捕获平面格式) | 设置捕获平面格式。 |
| isInError (是否处于错误状态) | 检查是否处于错误状态。 |
NvVideoEncoder 类包含两个关键元素
output_plane (输出平面)capture_plane (捕获平面)NvVideoEncoder 对象派生自以下类类型
示例中使用的主要成员如下:
| NvV4l2ElementPlane | 描述 |
|---|---|
| setupPlane (设置平面) | 设置 V4L2 元素的平面。 |
| deinitPlane (取消初始化平面) | 销毁 V4L2 元素的平面。 |
| setStreamStatus (设置流状态) | 启动/停止流。 |
| setDQThreadCallback (设置出队缓冲区线程回调) | 设置出队缓冲区线程的回调函数。 |
| startDQThread (启动出队缓冲区线程) | 启动出队缓冲区线程。 |
| stopDQThread (停止出队缓冲区线程) | 停止出队缓冲区线程。 |
| qBuffer (入队缓冲区) | 将 V4L2 缓冲区入队。 |
| dqBuffer (出队缓冲区) | 将 V4L2 缓冲区出队。 |
| getNumBuffers (获取缓冲区数量) | 获取 V4L2 缓冲区的数量。 |
| getNthBuffer (获取第 N 个缓冲区) | 获取第 N 个 V4L2 缓冲区。 |