GStreamer changing scale in tee branch

Hi,
I have a pipeline with source connected to tee which creates two branches. The thing I want is to be able to set different scale using nvvidconv on each branch without the need to stop the whole pipeline - the other brach which I don’t want to change should be still running. I understand that frame buffers are allocated on initialization and I can’t change scale dynamicaly while pipeline is running. I have no problem with stopping the branch I want to perform changes on.
Is there a way to achieve this? Thank you!

Hi,
A possible solution for this usecase is to run pipeline like:

... ! tee name=t ! queue ! nvvidconv ! fakesink t. ! queue ! appsink

In appsink plugin, you can call NvBufferTransform() to execute scaling with different setting for each frame. For accessing NvBuffer in appsink, please refer to
How to run RTP Camera in deepstream on Nano - #29 by DaneLLL

NvBuffer APIs are defined in

/usr/src/jetson_multimedia_api/include/nvbuf_utils.h

Thank you for reply.

What should I do if I want to scale in the middle of pipeline like this?

           -> NVVIDCONV -> RTP
SRC -> TEE 
           -> NVVIDCONV -> RTP

Thank you.

Hi,
The nvvidconv plugin does not support changing scale dynamically. Yo would need to re-initialize the pipeline if the setting changes.

Would it be possible to decouple sink branch from source by using appsink and appsrc (forward data from appsink to appsrc) and then re-initialize only sink pipeline? I also found proxysrc and proxysink plugins but I’m not sure which option is better. The thing I am trying to accomplish is to continue streaming in one branch while changing scale in another one.

              APPSINK -> APPSRC -> NVVIDCONV -> RTP
SRC -> TEE ->
              APPSINK -> APPSRC -> NVVIDCONV -> RTP

Hi,
Running into individual pipelines may be a solution. Here is a sample similar to this ue-case:
Starvation (?) of gstreamer threads - #12 by DaneLLL

Please take a look and then try to customize it to your use-case.