How to rotate nvarguscamerasrc image in inference pipeline?

| •|Hardware Platform--------Jetson |
| •|DeepStream Version-------5.0 |
| •|JetPack Version -----------4.5 (L4T 32.5.1) |
| •|TensorRT Version----------7.1.3.0 |

Hello
I am trying to feed rotated nvarguscamerasrc image into inference pipeline.

Below is the shortest pipeline to reproduce the issue.

gst-launch-1.0 nvarguscamerasrc bufapi-version=TRUE sensor_id=0 ! 'video/x-raw(memory:NVMM),width=1280, height=720, format=NV12, framerate=30/1' ! nvvidconv flip-method=1 ! mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=720 height=1280 batched-push-timeout=40000 ! fpsdisplaysink video-sink=fakesink text-overlay=false -v

The error which I am getting is below
ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: Internal data stream error.

Note: The pipeline works fine without nvvidconv flip-method=1 element.

Use flip-method of nvvidconv for it.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/accelerated_gstreamer.html

Thanks

But I am already using it in the above pipeline.
Which is causing the error!!

It could be some others parameter cause the error.
I try below without problem.

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM)' ! nvvidconv flip-method=1 ! fpsdisplaysink video-sink=fakesink text-overlay=false -v

The problem arises when you add streammux element.
E.g. below pipeline causes the problem.

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM)' ! nvvidconv flip-method=1 ! mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=1080 height=1920 batched-push-timeout=40000 ! fpsdisplaysink video-sink=fakesink text-overlay=false -v

Even nvarguscamerasrc bufapi-version=TRUE is also not working.

Where to get nvstreammux?

Aim is make an inference pipeline.
For which, I think nvstreammux is mandatory (correct me if I am wrong).

Let me present my target pipeline.

gst-launch-1.0 nvarguscamerasrc bufapi-version=TRUE sensor_id=0 ! 
'video/x-raw(memory:NVMM),width=1280, height=720, format=NV12' ! nvvidconv flip-method=1 ! 
mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=720 height=1280 batched-push-timeout=40000 ! 
queue ! nvinfer config-file-path=config_infer_primary_vertical.txt batch-size=1 unique-id=1 interval=0 ! 
nvtracker ll-lib-file=libnvds_nvdcf.so tracker-width=352 tracker-height=640 ! 
nvvideoconvert ! nvdsosd name=nvdsosd0 ! nvvideoconvert name=image ! 
'video/x-raw,format=(string)BGRx' ! nveglglessink

I dont understand what you mean by asking ‘where’?

I don’t think nvarguscamerasrc support bufapi-version=TRUE have confirm the parameter by gst-inspect-1.0 nvarguscamerasrc for the input parameter.

What the error message after remove the bufapi-version=TRUE

This is the error message with no bufapi-version

nano@nano:~$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM)' ! nvvidconv flip-method=1 ! mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=1080 height=1920 batched-push-timeout=40000 ! fpsdisplaysink video-sink=fakesink text-overlay=false
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3264 x 2464 FR = 21,000000 fps Duration = 47619048 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 3264 x 1848 FR = 28,000001 fps Duration = 35714284 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1920 x 1080 FR = 29,999999 fps Duration = 33333334 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1640 x 1232 FR = 29,999999 fps Duration = 33333334 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1280 x 720 FR = 59,999999 fps Duration = 16666667 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1280 x 720 FR = 120,000005 fps Duration = 8333333 ; Analog Gain range min 1,000000, max 10,625000; Exposure Range min 13000, max 683709000;

GST_ARGUS: Running with following settings:
   Camera index = 0 
   Camera mode  = 2 
   Output Stream W = 1920 H = 1080 
   seconds to Run    = 0 
   Frame Rate = 29,999999 
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
ERROR: from element /GstPipeline:pipeline0/GstNvStreamMux:mux: Input buffer number of surfaces (0) must be equal to mux->num_surfaces_per_frame (1)
	Set nvstreammux property num-surfaces-per-frame appropriately

Additional debug info:
/dvs/git/dirty/git-master_linux/deepstream/sdk/src/gst-plugins/gst-nvmultistream/gstnvstreammux.c(354): gst_nvstreammux_chain (): /GstPipeline:pipeline0/GstNvStreamMux:mux
Execution ended after 0:00:00.769841427
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
GST_ARGUS: Cleaning up
CONSUMER: Done Success
GST_ARGUS: Done Success
Setting pipeline to NULL ...
Freeing pipeline ...
nano@nano:~$ 

Just to give this discussion a boost.
Following pipeline is good.

 gst-launch-1.0 nvarguscamerasrc bufapi-version=TRUE ! 'video/x-raw(memory:NVMM)' ! nvvidconv flip-method=0 ! mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=1920 height=1080 batched-push-timeout=40000 ! fpsdisplaysink video-sink=fakesink text-overlay=false -v

But following pipeline is not good

 gst-launch-1.0 nvarguscamerasrc bufapi-version=TRUE ! 'video/x-raw(memory:NVMM)' ! nvvidconv flip-method=1 ! mux.sink_0 nvstreammux live-source=0 name=mux batch-size=1 width=1080 height=1920 batched-push-timeout=40000 ! fpsdisplaysink video-sink=fakesink text-overlay=false -v

This may not be the optimal pipeline, but as workaround copying to CPU memory and then using videoconvert for new bufapi in subsequent nvstreammux pipeline may work:

gst-launch-1.0 -v nvarguscamerasrc ! 'video/x-raw(memory:NVMM),format=NV12,width=1920,height=1080,framerate=30/1' ! nvvidconv flip-method=1 ! video/x-raw,width=1080,height=1920,pixel-aspect-ratio=1/1 ! nvvideoconvert ! 'video/x-raw(memory:NVMM)' ! mux.sink_0     nvstreammux name=mux live-source=1 batch-size=1 width=1080 height=1920 ! queue ! fpsdisplaysink video-sink=fakesink text-overlay=false