Birds Eye View - Performance on NXP i.MX8
| ⇦ Performance/NVIDIA Jetson | Home | Contact us ⇨ |
| Getting Started |
|---|
| How BEV Works |
| User Guide |
| Calibration Guide |
| Calibration Guide Legacy |
| GStreamer |
| Performance |
| Contact Us |
RidgeRun's Birds Eye View (BEV) is designed for multi-camera surround-view processing on embedded Linux systems, and this page shows how it performs on an NXP i.MX8M Plus using the GstBEV plugin. In the benchmarked setup, BEV processed 4 and 6 H.264 input streams delivered over UDP/RTP at resolutions from 1024x768 to 1920x1080 and sustained about 25 fps in most cases, with CPU, memory, GPU, and latency measurements included for sizing reference. These results help developers estimate how BEV scales on i.MX8-based designs, especially when comparing 4-camera and 6-camera pipelines and evaluating the tradeoff between framerate, latency, and memory usage.
Benchmark Environment
Hardware:
- NXP i.MX8M Plus
Software:
- GStreamer
Methodology
The measurements were performed using four UDP streams of RTP H.264 video on the i.MX8M Plus which are decoded and processed with RidgeRun's Birds Eye View. The video streams used for the tests are sent by a PC in the same network as the i.MX8M Plus, and with resolutions of 1024x768, 1280x720 and 1920x1080 at 30 fps.
The following pipeline was used to send the video streams from the PC:
# Sender pipeline on the PC GST_DEBUG=2 gst-launch-1.0 \ videotestsrc pattern=ball ! $CAPS1 ! queue ! x264enc speed-preset=ultrafast tune=zerolatency ! $CAPS2 ! h264parse config-interval=1 ! rtph264pay ! udpsink host=<ip-address> port=3000 \ videotestsrc pattern=ball ! $CAPS1 ! queue ! x264enc speed-preset=ultrafast tune=zerolatency ! $CAPS2 ! h264parse config-interval=1 ! rtph264pay ! udpsink host=<ip-address> port=3001 \ videotestsrc pattern=ball ! $CAPS1 ! queue ! x264enc speed-preset=ultrafast tune=zerolatency ! $CAPS2 ! h264parse config-interval=1 ! rtph264pay ! udpsink host=<ip-address> port=3002 \ videotestsrc pattern=ball ! $CAPS1 ! queue ! x264enc speed-preset=ultrafast tune=zerolatency ! $CAPS2 ! h264parse config-interval=1 ! rtph264pay ! udpsink host=<ip-address> port=3003 -v
The following pipeline was used to receive the video streams on the i.MX8M Plus, decode them and generate the birds eye view:
GST_DEBUG=2 gst-launch-1.0 \ udpsrc port=3000 ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! \ queue max-size-buffers=3 leaky=downstream ! v4l2h264dec ! $CAPS3 ! queue max-size-buffers=3 leaky=downstream ! \ imxvideoconvert_g2d ! $CAPS4 ! queue max-size-buffers=3 leaky=downstream ! bev.sink_0 \ udpsrc port=3001 ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! \ queue max-size-buffers=3 leaky=downstream ! v4l2h264dec ! $CAPS3 ! queue max-size-buffers=3 leaky=downstream ! \ imxvideoconvert_g2d ! $CAPS4 ! queue max-size-buffers=3 leaky=downstream ! bev.sink_1 \ udpsrc port=3002 ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! \ queue max-size-buffers=3 leaky=downstream ! v4l2h264dec ! $CAPS3 ! queue max-size-buffers=3 leaky=downstream ! \ imxvideoconvert_g2d ! $CAPS4 ! queue max-size-buffers=3 leaky=downstream ! bev.sink_2 \ udpsrc port=3003 ! application/x-rtp,media=video,encoding-name=H264 ! rtph264depay ! h264parse ! \ queue max-size-buffers=3 leaky=downstream ! v4l2h264dec ! $CAPS3 ! queue max-size-buffers=3 leaky=downstream ! \ imxvideoconvert_g2d ! $CAPS4 ! queue max-size-buffers=3 leaky=downstream ! bev.sink_3 \ bev name=bev calibration-file=<calibration_file> ! \ queue max-size-buffers=3 leaky=downstream ! imxvideoconvert_g2d ! $CAPS4 ! glimagesink sync=false qos=false
To obtain the measurements on the different performance indicators, we used the following tools:
- CPU Usage and memory usage:
/proc/pid/stats - Latency: GstShark
- GPU Usage: GPU Top
- Framerate: GstShark
Performance Results
Table 1 presents the performance results for 4 input video streams, while Table 2 presents the results for 6 input video streams. The result shows that the CPU usage, latency, framerate and CPU usage is nearly the same for all the resolutions tested.
| Parameter | Result | ||
|---|---|---|---|
| Resolution | 1024x768 | 1280x720 | 1920x1080 |
| CPU Usage(%) | 23.15 | 23.34 | 23.53 |
| Memory Usage(MiB) | 187.22 | 183.91 | 190.34 |
| Latency(s) | 0.252585 | 0.250167 | 0.252863 |
| GPU Usage(%) | 24 | 26 | 26 |
| Framerate(fps) | 25.541 | 24.703 | 22.897 |
| Parameter | Result | ||
|---|---|---|---|
| Resolution | 1024x768 | 1280x720 | 1920x1080 |
| CPU Usage(%) | 35.41 | 34.93 | 36.54 |
| Memory Usage(MiB) | 333.37 | 341.82 | 409.06 |
| Latency(s) | 0.635835 | 0.610770 | 0.613545 |
| GPU Usage(%) | 42 | 44 | 45 |
| Framerate(fps) | 25.006 | 24.997 | 24.910 |
FAQ
/proc/pid/stats, latency and framerate were measured with GstShark, and GPU usage was measured with GPU Top.v4l2h264dec for H.264 decoding and imxvideoconvert_g2d for color conversion before passing each stream to the BEV element.