Deepstream nvvidconv nvbuffer Payload Type not supported

• Jetson
• DeepStream 5.0 GA

i have this success pipeline:

gst-launch-1.0 nvarguscamerasrc wbmode=5 bufapi-version=1
! nvmux.sink_0 nvstreammux name=nvmux width=1920 height=1080 batch-size=1 live-source=1
! nvinfer config-file-path=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_infer_primary_nano.txt
! nvtracker ll-lib-file =/opt/nvidia/deepstream/deepstream/lib/libnvds_nvdcf.so
ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/tracker_config.yml
tracker-width=640 tracker-height=384
! nvdsanalytics config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-nvdsanalytics-test/config_nvdsanalytics.txt
! nvmultistreamtiler ! nvvideoconvert ! nvdsosd ! nvegltransform ! nveglglessink

insert a flip component, have a error:

nvbuf_utils: nvbuffer Payload Type not supported
NvBufferGetParams failed for src_dmabuf_fd
nvbuffer_transform Failed
gst_nvvconv_transform: NvBufferTransform Failed

gst-launch-1.0 nvarguscamerasrc wbmode=5 bufapi-version=1
! ‘video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, framerate=30/1, format=(string)NV12’
! nvvidconv flip-method=2
! ‘video/x-raw(memory:NVMM)’
! nvmux.sink_0 nvstreammux name=nvmux width=1920 height=1080 batch-size=1 live-source=1
! nvinfer config-file-path=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/config_infer_primary_nano.txt
! nvtracker ll-lib-file =/opt/nvidia/deepstream/deepstream/lib/libnvds_nvdcf.so
ll-config-file=/opt/nvidia/deepstream/deepstream/samples/configs/deepstream-app/tracker_config.yml
tracker-width=640 tracker-height=384
! nvdsanalytics config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-nvdsanalytics-test/config_nvdsanalytics.txt
! nvmultistreamtiler ! nvvideoconvert ! nvdsosd ! nvegltransform ! nveglglessink

Hi,
I don’t think the issue is related with DeepStream. You can reproduce it with this pipeline:

gst-launch-1.0 nvarguscamerasrc wbmode=5 bufapi-version=1  ! nvvidconv flip-method=2 ! fakesink

And changing the bufapi-version to 0 works:

gst-launch-1.0 nvarguscamerasrc wbmode=5 bufapi-version=0  ! nvvidconv flip-method=2 ! fakesink

Using nvvidconv will give you a problem with DeepStream though. You need to use nvvideoconvert instead. You can use this trick to force a memory copy with nvvideoconvert and avoid the problem:

... nvvidconv flip-method=2 ! "video/x-raw, format=NV12" ! nvvideoconvert ! "video/x-raw(memory:NVMM), format=NV12" !  ...

Here is the complete pipeline I used:

gst-launch-1.0 \
nvarguscamerasrc wbmode=5 bufapi-version=0  ! queue ! \
nvvidconv flip-method=2 ! "video/x-raw, format=NV12" ! nvvideoconvert ! "video/x-raw(memory:NVMM), format=NV12" ! \
nvstreammux0.sink_0 nvstreammux name=nvstreammux0 batch-size=1 batched-push-timeout=40000 width=1920 height=1080 live-source=TRUE ! queue ! \
nvvideoconvert ! queue ! \
nvinfer name=nvinfer1 config-file-path="dstest1_pgie_config.txt" ! queue ! \
nvdsosd ! queue ! fakesink sync=false

If someone from Nvidia could elaborate on why nvvideoconvert works with nvstreammux and nvvidconv doesn’t that would be awesome. My guess is that they both output NVMM but with different memory layout (NVBUF_LAYOUT_BLOCK_LINEAR and NVBUF_LAYOUT_PITCH) and nvstreammux only supports one of them.

2 Likes

solved.
thanks.

1 Like