Difference between revisions of "NVIDIA Jetson Orin/GStreamer Pipelines/Capture and Display"

From RidgeRun Developer Connection
Jump to: navigation, search
Line 4: Line 4:
 
__toc__
 
__toc__
  
This section presents GStreamer pipelines to capture from MIPI CSI-2 and USB cameras and render the video to the display connected to the Orin. You can find information about how the performance metrics were extracted in the Performance Measurement subsection.
+
This section presents GStreamer pipelines to capture from MIPI CSI-2 and USB cameras and render the video to the display connected to the Orin. Key performance indicators are measured using three power profiles (operation modes). You can find information on how the performance metrics were extracted in the Performance Measurement subsection.
  
  
 
==MIPI CSI-2 Camera==
 
==MIPI CSI-2 Camera==
 
For the pipelines in this section, we used the IMX477 camera.
 
For the pipelines in this section, we used the IMX477 camera.
 +
  
 
''' 1920x1080@30 using nv3dsink '''
 
''' 1920x1080@30 using nv3dsink '''
Line 90: Line 91:
 
== USB Camera ==
 
== USB Camera ==
 
For the pipelines in this section, we used the LI-10635 USB camera.  
 
For the pipelines in this section, we used the LI-10635 USB camera.  
 +
  
 
''' 1280x720@30 using xvimagesink '''
 
''' 1280x720@30 using xvimagesink '''
Line 171: Line 173:
  
 
==Performance Measurement ==
 
==Performance Measurement ==
 +
The performance measurements are extracted using the specified power profile (operation mode) and with the GStreamer pipeline running in the system.
  
  
To change the operation mode see the [https://developer.ridgerun.com/wiki/index.php/NVIDIA_Jetson_Orin/JetPack_5.0/Performance_Tuning/Tuning_Power Performance Tuning - Tuning Power] section.
+
'''Operation Mode:'''
 +
To change the Orin AGX power profile (operation mode), please check our [https://developer.ridgerun.com/wiki/index.php/NVIDIA_Jetson_Orin/JetPack_5.0/Performance_Tuning/Tuning_Power Performance Tuning - Tuning Power] section.
  
With the pipeline running, we took the following measurements:
 
  
 
'''CPU usage:'''
 
'''CPU usage:'''
* For the CPU percentage utilization, the tegrastats utility is used as follows: <code> sudo tegrastats -readall</code>. This command shows the percentage utilization of the 12 cores that the Jetson AGX Orin devkit has. For the measurement, we compute the average over 30 samples of the utilization values for the CPU cores.
+
* For the CPU percentage utilization, the tegrastats utility was used as follows: <code> sudo tegrastats -readall</code>. This command shows the percentage utilization of the 12 cores that the Jetson AGX Orin devkit has. For the measurement, we compute the average over 30 samples of the utilization values for the CPU cores.
 +
 
  
 
'''GPU Usage:'''
 
'''GPU Usage:'''
* The same is done in the case of GPU percentage. The board has 2 GPUs. So, 30 values of each one are taken, and then, the average is obtained.
+
* The same procedure described for the CPU usage is done in the case of GPU percentage. As the board has 2 GPUs, 30 samples of each one are taken, and then, the average is obtained.
 +
 
  
 
'''FPS:'''
 
'''FPS:'''
* For the FPS, the [https://github.com/RidgeRun/gst-perf RidgeRun gst-perf plugin] is used. This plugin computes the FPS means. For the measurement, we compute the average over 30 samples of the FPS means values. For example:
+
* For the FPS, [https://github.com/RidgeRun/gst-perf RidgeRun's gst-perf plugin] is used. This plugin computes the FPS mean. For the measurement, we compute the average over 30 samples of the FPS mean values. The following example shows a pipeline with the perf element incorporated:
 +
<pre>
 
  gst-launch-1.0 -v v4l2src device=/dev/video0 ! perf ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true
 
  gst-launch-1.0 -v v4l2src device=/dev/video0 ! perf ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true
 +
</pre>
 +
  
 
'''Latency:'''
 
'''Latency:'''
* In the case of the Latency parameter, the [https://developer.ridgerun.com/wiki/index.php?title=GstShark RidgeRun GstShark plugin] is used. For this measurement, it is important to take into account that the measurement is not a glass to glass calculation. What GstShark does is give the time needed by a buffer for travel from the source pad of the source element to the source pad of the remaining elements of the pipeline. For example:
+
* In the case of the Latency metric, the [https://developer.ridgerun.com/wiki/index.php?title=GstShark RidgeRun GstShark plugin] is used. For this metric, it is important to take into account that it is not a glass-to-glass measurement. GstShark provides the time needed by a buffer to travel from the source pad of the source element to the source pad of the remaining elements of the pipeline. The following pipeline shows an example of the GstShark interlatency tracer execution:
 +
<pre>
 
  GST_DEBUG="GST_TRACER:7" GST_TRACERS="interlatency" gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true
 
  GST_DEBUG="GST_TRACER:7" GST_TRACERS="interlatency" gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true
 +
</pre>
  
 
== Remote usage ==
 
== Remote usage ==

Revision as of 16:20, 22 July 2022



Previous: GStreamer Pipelines Index Next: GStreamer Pipelines/H264


Nvidia-preferred-partner-badge-rgb-for-screen.png



This section presents GStreamer pipelines to capture from MIPI CSI-2 and USB cameras and render the video to the display connected to the Orin. Key performance indicators are measured using three power profiles (operation modes). You can find information on how the performance metrics were extracted in the Performance Measurement subsection.


MIPI CSI-2 Camera

For the pipelines in this section, we used the IMX477 camera.


1920x1080@30 using nv3dsink

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1,format=NV12' ! nv3dsink
Table 1: Performance of pipeline at 1920x1080@30 using nv3dsink
Operation Mode CPU (%) GPU 1 (%) GPU 2 (%) FPS latency (ms)
0 (max performance)
1 (min power)
2 (30W)


1920x1080@30 using xvimagesink

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1,format=NV12' ! nvvidconv ! xvimagesink
Table 2: Performance of pipeline at 1920x1080@30 using xvimagesink
Operation Mode CPU (%) GPU 1 (%) GPU 2 (%) FPS latency (ms)
0 (max performance)
1 (min power)
2 (30W)


USB Camera

For the pipelines in this section, we used the LI-10635 USB camera.


1280x720@30 using xvimagesink

 gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! xvimagesink sync=true


Table 3: Performance of pipeline at 1280x720@30 using xvimagesink
Operation Mode CPU (%) GPU 1 (%) GPU 2 (%) FPS latency (ms)
0 (max performance) 32.27 22.2 23.87 30.01 0.13
1 (min power) 23.97 6.27 63.4 30.01 0.13
2 (30W) 27.6 5.87 64.87 30.01 0.16


1280x720@30 using nv3dsink

 gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true

Performance:

Table 4: Performance of pipeline at 1280x720@30 using nv3dsink
Operation Mode CPU (%) GPU 1 (%) GPU 2 (%) FPS latency (ms)
0 (max performance) 24.5 31.33 28.27 30.01 1.92
1 (min power) 32.87 17.93 52.17 30.01 2.47
2 (30W) 28.5 14.9 52.63 30.01 2.34


Performance Measurement

The performance measurements are extracted using the specified power profile (operation mode) and with the GStreamer pipeline running in the system.


Operation Mode: To change the Orin AGX power profile (operation mode), please check our Performance Tuning - Tuning Power section.


CPU usage:

  • For the CPU percentage utilization, the tegrastats utility was used as follows: sudo tegrastats -readall. This command shows the percentage utilization of the 12 cores that the Jetson AGX Orin devkit has. For the measurement, we compute the average over 30 samples of the utilization values for the CPU cores.


GPU Usage:

  • The same procedure described for the CPU usage is done in the case of GPU percentage. As the board has 2 GPUs, 30 samples of each one are taken, and then, the average is obtained.


FPS:

  • For the FPS, RidgeRun's gst-perf plugin is used. This plugin computes the FPS mean. For the measurement, we compute the average over 30 samples of the FPS mean values. The following example shows a pipeline with the perf element incorporated:
 gst-launch-1.0 -v v4l2src device=/dev/video0 ! perf ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true


Latency:

  • In the case of the Latency metric, the RidgeRun GstShark plugin is used. For this metric, it is important to take into account that it is not a glass-to-glass measurement. GstShark provides the time needed by a buffer to travel from the source pad of the source element to the source pad of the remaining elements of the pipeline. The following pipeline shows an example of the GstShark interlatency tracer execution:
 GST_DEBUG="GST_TRACER:7" GST_TRACERS="interlatency" gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nv3dsink sync=true

Remote usage

In case you would to work with the board in a remote way, you need to know the DISPLAY environment variable. For this, before you continue working in a remote way, you need to connect a mouse and keyboard to the board, open a terminal and look for the DISPLAY variable as follows:

echo $DISPLAY


After doing the above step, you can run the GStreamer Pipeline such as:

DISPLAY=:0 GST_DEBUG=2 gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=1280,height=720 ! nvvidconv ! xvimagesink sync=true


Previous: GStreamer Pipelines Index Next: GStreamer Pipelines/H264