Jetson Linux API 参考文档

32.7.4 版本
camera_unit_sample(使用 libv4l2_nvargus 捕获)

概述

camera_sample 应用程序是一个单元级实现,用于演示如何使用 libv4l2_nvargus 接口进行流传输。

该应用程序读取捕获的缓冲区,以便使用 EGL 渲染器进行预览,或者将原始缓冲区转储到文件中,而无需额外的内存复制。


构建和运行

前提条件

  • 您已按照构建和运行中的步骤 1-3 进行操作。
  • 如果您是从主机 Linux PC (x86) 进行构建,则您已按照构建和运行中的步骤 4 进行操作。
  • 您已连接摄像头。

构建

  • 输入
     $ cd /usr/src/jetson_multimedia_api/samples/unittest_samples/camera_unit_sample
     $ make
    

运行

  • 输入
    $ ./camera_sample [OPTIONS]
    

捕获的预览流可以通过 HDMI 显示。

示例

   $ ./camera_sample -r 1920 1080 -fps 30 1

查看支持的选项

   $ ./camera_sample -h


流程

以下图表显示了此示例的流程。

  • 创建 v4l2 libargus 实例。
  • 设置捕获平面。
  • 设置外部控件。
  • 分配缓冲区。
  • 将空缓冲区排队到捕获平面上。
  • 捕获平面以原始 YUV 格式将帧传输到应用程序。
  • 缓冲区被渲染,也可以写入文件。
  • 对于捕获平面,应用程序支持 MMAP 和 DMABUF 内存类型。


主要结构和类

该示例使用以下主要类和结构

元素描述
Buffer基于 v4l2_buffer 结构的类模型。
描述
class NvEGLRender该类包含将帧渲染到 EGL 窗口的元素和函数。

NvEGLRender 是封装所有视频渲染功能的类。示例中使用的主要成员如下:

NvEGLRender描述
NvEglRenderer::render 将 FD 渲染到 EGL 窗口。

示例中使用的主要结构和函数如下:

函数描述
dq_buffer从平面出队缓冲区。
capture_plane_callbackDQ 回调函数。
q_buffer在平面上排队缓冲区。
req_buffers_on_capture_plane在编码器捕获平面上请求缓冲区。
set_plane_format在编码器捕获平面上设置格式。
set_controls设置 Argus 属性和控件的值。
. All rights reserved.