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

输入和输出#
输入
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