Jetson Linux API 参考文档

32.7.4 版本
10_camera_recording (libargus 捕获)


概述

本示例演示了如何使用 libargus 设置相机类组件以进行捕获操作。还创建了一个 EGLStream 以连接到 V4L2 视频编码器,从而可以将编码的视频流捕获到文件中。


构建和运行

前提条件

  • 您需要有一个摄像头。
  • 您已完成构建和运行中的步骤 1-3。
  • 如果您是从主机 Linux PC (x86) 构建,则您已完成构建和运行中的步骤 4。

构建

  • 输入
     $ cd /usr/src/jetson_multimedia_api/samples/10_camera_recording
     $ make
    
    该示例在当前目录中创建 H.264 视频文件。

运行

  • 输入
     $ ./camera_recording [OPTIONS]
    

查看支持的选项

   $ ./camera_recording -h


流程

下图显示了数据流经此示例的流程。

本示例演示了相机生产者和消费者编程模型。图像输出是使用 EGLStream 执行的。这是一种高效且零拷贝的输出,适用于各种 EGLStream 消费者。可能的消费者包括:

  • OpenGL ES
  • CUDA
  • 直接 EGL 显示输出
  • JPEG


主要结构和类

使用了以下类。有关 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 缓冲区。
. All rights reserved.