Jetson Linux API 参考文档

32.7.4 版本发布
13_multi_camera (多图像捕获 & 合成)

概述

multi_camera 示例捕获多个摄像头,并将它们合成为一个帧。在合成图像后,该示例将合成帧渲染到显示器上。

该示例使用 libargus 中的多会话功能来同时捕获多个摄像头。它按如下方式使用摄像头:

  • 摄像头 0 是基础摄像头,在最终图像中用作背景。
  • 摄像头 1-N (N <= 5) 用于窗口叠加。该示例将叠加层放置在背景之上,以创建画中画布局。

以下示意图显示了摄像头输出合成的结果。如果摄像头 1-5 不存在,则相应的窗口将不存在。

Composited Display

此示例需要

  • 带有多个传感器的摄像头板。
  • 显示器。

构建和运行

前提条件

构建

  • 输入
       $ cd 13_multi_camera
       $ make
    

运行

  • 输入
     $ ./multi_camera [-n <number of cameras>]
    


流程

下图显示了数据在示例中的流动。

Block Diagram


关键结构和类

下表描述了示例使用的关键 NvMedia 声明。

类和方法描述
NvEglRenderer 此类包含将帧渲染到 EGL 窗口的元素和函数。
NvEglRenderer::render() 将来自文件描述符的缓冲区渲染到 EGL 窗口。


函数描述
NvBufferCreateEx() 创建一个 DMA 缓冲区。该示例使用此函数为合成图像和输入图像创建缓冲区。
NvBufferDestroy() 销毁 DMA 缓冲区。
NvBufferComposite() 将多个输入缓冲区合成为一个 DMA 缓冲区。

有关 libargus API 的指南,请参阅 Libargus 摄像头 API

下表描述了关键示例元素。

元素描述
Execute生产者线程,用于创建输出流并提交捕获请求。
ConsumerThread::threadExecute消费者线程,用于从多个摄像头读取帧。
CaptureHolder表示单个摄像头的类。此类包含所有用于从该摄像头捕获帧的 Libargus 摄像头 API 资源。
CaptureHolder::initialize用于为单个摄像头创建和初始化 libargus 资源的方法,包括 Argus::ICaptureSessionArgus::OutputStreamArgus::Request(捕获请求)。
. All rights reserved.