The OSS Gst-nvdsaudiotemplate plugin is a template plugin which provides a custom library hooking interface for single/batched audio frame(s) processing. Custom lib implementation may have algorithms to transform or process input buffers depending upon the use case. It can support S16LE and F32LE inputs. The plugin accepts batched NVMM HW and RAW SW buffers, and outputs batched HW and SW buffers.
Inputs and Outputs¶
NVMM or RAW Gst Buffers. Supported formats are S16LE and F32LE
Transformed Gst Buffer
The following table summarizes the features of the plugin.
Simplified interface to implement custom library to add any algorithm without implementing new plugin
Easy Data Accessing
Easy access to GstBuffer and it’s metadata inside custom library
Synchronous and Asynchronous Buffer Processing
Buffer_Ok is the responsibility of the plugin to push the buffer downstream.
Buffer_Async is the responsibility of the custom library to push the buffer downstream.
Buffer_Error and Buffer_Drop are currently not implemented
Reference implementation of custom library provides transform, transform-ip, metadata handling etc. which can be modified as per the use case.
Bufferpool creation, caps handling provided as an abstraction API inside customlib base class
The following table describes the Gst properties of the Gst-nvdsaudiotemplate plugin.
Type and Range
Device ID of GPU to use for decoding.
Integer, 0 to 4,294,967,295
custom library Name to be used
Custom Library Properties (key:value) string, can be set multiple times,vector is maintained internally
For single stream:
gst-launch-1.0 audiotestsrc wave=0 num-buffers=1000 ! audioconvert ! nvdsaudiotemplate \ customlib-name="libcustom_impl.so" customlib-props="noise-factor:100" ! \ wavenc ! filesink location=audio.wav
For Multi-stream (Ensure that new nvstreammux is enabled):
export USE_NEW_NVSTREAMMUX=yes gst-launch-1.0 audiotestsrc wave=0 ! audioconvert ! m.sink_0 nvstreammux name=m \ ! nvdsaudiotemplate customlib-name="libcustom_impl.so" customlib-props="noise-factor:10" ! nvstreamdemux name=d d.src_0 \ ! wavenc ! filesink location=audio.wav audiotestsrc wave=1 ! audioconvert ! m.sink_1