Jetson Linux API 参考

32.7.4 版本
07_video_convert (NvBuffer 转换)

概述

视频缩放和颜色格式转换示例 video_convert 演示了如何使用在 nvbuf_utils.h 中定义的 NvBuffer API,用于图像颜色格式化和缓冲区布局转换。

NVIDIA® Jetson® 提供线性平铺和块线性内存格式支持。块线性内存格式符合 Jetson 硬件。

此示例创建一个或多个线程来执行转换,每个线程从本地文件读取帧数据并将转换后的帧数据写入本地文件。为了更好的并行调度,当指定 '-s' 或 '–create-session' 选项时,每个线程都会创建自己的 NvBufferSession。

此示例也可用于视频转换性能基准测试。当指定 '–perf' 选项时,每个线程在从本地文件读取帧数据后,循环执行视频转换(3000 次)。为了减少文件 IO 造成的基准偏差,输入文件应为图像数据而不是视频数据。

由于此示例需要从本地文件读取帧数据并将转换后的帧数据写入本地文件,因此本示例中使用线性平铺内存(CPU 无法访问块线性缓冲区)。

此示例不需要摄像头。


构建和运行

前提条件

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

构建

  • 输入
     $ cd jetson_multimedia_api/samples/07_video_convert
     $ make
    

运行

  • 输入
     $ ./video_convert <in-file> <in-width> <in-height> <in-format> <out-file-prefix> <out-width> <out-height> <out-format> [OPTIONS]
    

示例

   $ ./video_convert ../../data/Picture/nvidia-logo.yuv 1920 1080 YUV420 test.yuv 1920 1080 YUYV
注意
video_convert 示例使用 YUV 文件。如果您还没有 YUV 文件,可以使用 jpeg_decode 示例生成一个。例如
 $ cd jetson_multimedia_api/samples/06_jpeg_decode/
 $ ./jpeg_decode num_files 1 ../../data/Picture/nvidia-logo.jpg ../../data/Picture/nvidia-logo.yuv

流程

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


关键结构和 API

nvbuf_utils.h 定义了所有关键结构和 API,用于通过 NvBuffer API 进行颜色转换。

结构体

结构体描述
NvBufferCreateParams 保存用于硬件缓冲区创建的输入参数。
NvBufferParams 保存硬件缓冲区的参数。
NvBufferTransformParams 保存缓冲区转换函数的参数。
NvBufferRect 保存矩形的坐标。

API

方法描述
NvBufferCreateEx() 分配硬件缓冲区。
NvBufferDestroy() 销毁硬件缓冲区。
NvBufferSessionCreate() 创建一个新的 NvBufferSession,用于并行调度缓冲区转换和合成。
NvBufferSessionDestroy() 销毁现有的 NvBufferSession。
NvBufferGetParams() 获取缓冲区参数。
NvBufferMemMap() 获取平面内存映射的虚拟地址。
NvBufferMemUnMap() 取消映射平面的映射虚拟地址。
NvBufferMemSyncForDevice() 同步设备的硬件内存缓存。
NvBufferMemSyncForCpu() 同步 CPU 的硬件内存缓存。
NvBufferTransform() 将一个 DMA 缓冲区转换为另一个 DMA 缓冲区。
. All rights reserved.