本示例演示了如何使用 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 缓冲区。 |