Gst-nvdsvideotemplate#

OSS Gst-nvdsvideotemplate 插件是一个模板插件,它为单帧/批量视频帧处理提供了一个自定义库挂钩接口。自定义库实现可能具有根据用例转换或处理输入缓冲区的算法。它支持 NV12 和 RGBA 输入。该插件接受批处理的 NVMM HW 和 RAW SW 缓冲区,并输出批处理的 NVMM HW 缓冲区。

Gst-nvdsvideotemplate

输入和输出#

  • 输入

    • NVMM 或 RAW Gst 缓冲区。支持的格式为 NV12 和 RGBA

  • 控制参数

    • customlib-name

    • gpu-id

    • customlib-props

  • 输出

    • 转换后的 Gst 缓冲区

特性#

下表总结了该插件的特性。

Gst-nvdsvideotemplate 特性#

特性

描述

发布版本

简化的 API

简化的接口,用于实现自定义库以添加任何算法,而无需实现新的插件

DS 5.1

轻松数据访问

在自定义库内部轻松访问 GstBuffer 及其元数据

DS 5.1

同步和异步缓冲区处理

Buffer_Ok 是插件将缓冲区向下游推送的责任。

Buffer_Async 是自定义库将缓冲区向下游推送的责任。

Buffer_Error 和 Buffer_Drop 目前未实现

DS 5.1

参考实现

自定义库的参考实现提供了 transform、transform-ip、元数据处理等,可以根据用例进行修改。

DS 5.1

抽象 API

缓冲区池创建、caps 处理作为抽象 API 在 customlib 基类内部提供

DS 5.1

customlib_impl 接口#

  • SetInitParams => 基于协商的 caps,此 API 创建协商分辨率的输出缓冲区池

  • HandleEvent => 此 API 处理标准 Gstreamer 事件以及自定义事件,例如 PAD_ADDED PAD_DELETED 等。

  • GetCompatibleCaps => 此 API 返回要设置在插件的 SINK / SRC pad 上的固定 caps

  • ProcessBuffer => 此 API 将 GstBuffer 传递给 customlib 以进行进一步处理

  • SetProperty => 此 API 设置 customlib 属性,这些属性由底层库用于处理

Gst 属性#

下表描述了 Gst-nvdsvideotemplate 插件的 Gst 属性。

Gst-nvsvideotemplate gst 属性#

属性

含义

类型和 范围

示例/注释

平台

gpu-id

用于解码的 GPU 设备 ID。

整数,0 到 4,294,967,295

gpu-id=0

独立 GPU

customlib-name

要使用的自定义库名称

字符串

默认值:null

独立 GPU

customlib-props

自定义库属性(键:值)字符串,可以多次设置,内部维护向量

字符串

默认值:null

独立 GPU

dummy-meta-insert

设置为启用虚拟元数据插入

布尔值

默认值:false

独立 GPU

fill-dummy-batch-meta

设置为填充从 nvstreammux 发送的虚拟批次元数据

布尔值

默认值:false

独立 GPU

示例 pipeline#

对于单流

gst-launch-1.0 filesrc location=/home/nvidia/sample_720p.mp4 ! decodebin ! \

 nvvideoconvert ! nvdsvideotemplate customlib-name="libcustom_impl.so" \

 customlib-props="scale-factor:2.0" ! nveglglessink

对于多流

gst-launch-1.0 filesrc location= ~/sample_720p.mp4 ! decodebin ! m.sink_0 \
 nvstreammux name=m width=640 height=480 batch-size=4 ! nvinfer config-file-path=config_infer_primary.txt \

 ! nvdsvideotemplate customlib-name="libcustom_impl.so" customlib-props="scale-factor:2.0" \

 ! nvmultistreamtiler ! nvvideoconvert ! "video/x-raw(memory:NVMM),width=320, height=240" ! nvdsosd ! nveglglessink \

 filesrc location= ~/sample_720p.mp4 ! decodebin ! m.sink_1