Deepstream nvvideoconvert and nvvidconv willl fail in same process but ok at diffrent process

HI, :

We have found a strange issue that seems nvvideoconvert and nvvidconv gst plugin conflict in the same process.

we have an gst application needs run two pipelines with deepsteam nvvideoconvert in one pipeline and a traditional nvvidconv plugin in another pipeline.

In order to make our problem more simple, we create a test application which very simple, use gst_parse_launch to create two pipelines with the below pipeline description.

#define PIPE_STR0 “videotestsrc ! nvvideoconvert ! video/x-raw, width=640, height=480 ! xvimagesink”
#define PIPE_STR1 “filesrc location=test0105.mp4 ! h264parse ! nvv4l2decoder ! nvvidconv ! xvimagesink”

And in my application call gst_parse_launch(pipe_str, NULL) launch these two pipe

Then the second pipe will fail and show “internal data stream error” and xwindows is not displayed correctly.

But if we use gst-launch to create this pipeline in a different process, it will succeed without any error.

Could you help us confirm this is a limitation or something we don’t know happen when nvvideoconvert and nvvidconv were used at the same process with the different pipelines? thanks


test_pipe.7z (2.3 KB)

sample code is attachment

Testing platform , NV Jetson NX Devkit ,with Jetpack 4.6 , L4T 32.6.1

The first pipeline looks wrong. nvvideoconvert plugin is for converting video/x-raw(memory:NVMM) to video/x-raw(memory:NVMM), video/x-raw(memory:NVMM) to video/x-raw, or video/x-raw to video/x-raw(memory:NVMM). You should be able to link videotestsrc with xvimagesink directly without nvvideoconvert.

For the second pipeline, we suggest set caps in source pad of nvvidconv:

filesrc location=test0105.mp4 ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,format=I420 ! xvimagesink

yes, videotestsrc actually is not our real case, we actually have a more completed deep stream pipeline before the nvvideoconvert , let me try to more test and simple our pipeline to you .

[quote=“DaneLLL, post:5, topic:199623”]

filesrc location=test0105.mp4 ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw,format=I420 ! xvimagesink

change pipe to this , still got same error nvbuffergetParams failed when second pipe created

please change PIPE_STR0 to “nvv4l2camerasrc bufapi-version=1 ! nvvideoconvert ! video/x-raw, width=640, height=480 ! xvimagesink”
you still will replicated this issue.


The nvvideoconvert plugin is used in DeepStream SDK. It is not compatible with nvvidconv plugin. If you use DeepStream SDK, please use nvviderconvert. If you run pure multimedia use-cases, please use nvvidconv plugin. As your observation, if you use the two plugins in single process, it does not work properly.

Thanks for your reply, we do have a use case, let say

  1. we have a pipeline uses a deep stream for some pose estimation and do actions.
  2. we also have another pipeline that uses do camera playback no any inferencing AI algorithm which is just multimedia playback
    and we will use in simultaneously at a single process and display same time (like side by side)

So far so good, what we do just make sure is that all pipelines use nvvideoconvert to solve this ,

But what we are worried about is it will still have other non-compatibility /conflicts show up in the future for others gst plugins

is there any background reason why it is not compatible? Any suggestion in our use case?


Please refer to this topic:
nvvidconv vs nvvideoconvert (DS 4.0 Nano) - #2 by DaneLLL

So if you use DeepStream SDK in your use-case, please always use nvvideoconvert plugin. And can use dsexample plugin to call NvBufSurface APIs to access the buffers.

we close this issue