Jump to content

Birds Eye View - GstBEV Plugin

From RidgeRun Developer Wiki

Follow us on: YouTube Twitter LinkedIn Email Share this page

Share This Page

⇦ Calibration Guide Legacy Home GStreamer/Generic Pipelines ⇨


The GstBEV element is RidgeRun's GStreamer plugin for generating a single birds-eye-view output from multiple calibrated camera streams. In practice, the plugin takes multiple RGBA inputs through request sink pads, uses a calibration JSON file to map those inputs into a top-down composition, and produces one RGBA output stream that can be displayed, encoded, or fed into a larger video pipeline. This page will show you how to check if the plugin is installed, the caps and properties of the element, and a simple validation pipeline to verify its functionality.

For product context, start with Birds Eye View. For setup steps, see Quickstart Guide, Building and Installation, and Calibration Guide.

Quick validation

The fastest way to verify that the plugin is installed and registered is to inspect it with GStreamer:

gst-inspect-1.0 bev

A healthy installation should produce the following output:

 gst-inspect-1.0 bev
Factory Details:
  Rank                     none (0)
  Long-name                Bird's Eye View
  Klass                    Mixer/Video
  Description              Generates a bird's eye view transformation from N input images
  Author                   Jimena Salas <jimena.salas@ridgerun.com>

Plugin Details:
  Name                     panorama
  Description              GStreamer plugin for image transformations using libpanorama
  Filename                 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstpanorama.so
  Version                  0.2.0
  License                  Proprietary
  Source module            libpanorama
  Binary package           libpanorama
  Origin URL               www.ridgerun.com

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstAggregator
                         +----GstBev

Pad Templates:
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: RGBA
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]
    Type: GstAggregatorPad
    Pad Properties:
      emit-signals        : Send signals to signal data consumption
                            flags: readable, writable
                            Boolean. Default: false
  
  SINK template: 'sink_%u'
    Availability: On request
    Capabilities:
      video/x-raw
                 format: RGBA
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]
    Type: GstAggregatorPad
    Pad Properties:
      emit-signals        : Send signals to signal data consumption
                            flags: readable, writable
                            Boolean. Default: false

Element has no clocking capabilities.
Element has no URI handling capabilities.

Pads:
  SRC: 'src'
    Pad Template: 'src'

Element Properties:
  calibration-file    : Path to the calibration file containing all the bird's eye view parameters
                        flags: readable, writable, changeable only in NULL or READY state
                        String. Default: null
  latency             : Additional latency in live mode to allow upstream to take longer to produce buffers for the current position (in nanoseconds)
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
  min-upstream-latency: When sources with a higher latency are expected to be plugged in dynamically after the aggregator has started playing, this allows overriding the minimum latency reported by the initial source(s). This is only taken into account when larger than the actually reported minimum latency. (nanoseconds)
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "bev0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  start-time          : Start time to use if start-time-selection=set
                        flags: readable, writable
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 18446744073709551615 
  start-time-selection: Decides which start time is output
                        flags: readable, writable
                        Enum "GstAggregatorStartTimeSelection" Default: 0, "zero"
                           (0): zero             - Start at 0 running time (default)
                           (1): first            - Start at first observed input running time
                           (2): set              - Set start time with start-time property

Example Pipeline

Consider the pipeline depicted in Fig. 1, the GstBEV element receives a calibration file and the input of N cameras converted to RGBA format and outputs a single top-down birds eye view RGBA image.

A flowchart diagram of a Birds Eye View pipeline that captures from N cameras, converts each camera image to RGBA, all the converted images go into the GstBEV element and this element outputs the top-down birds eye view
Fig. 1: Birds Eye View flow chart diagram

Before testing with cameras, the simplest test is using GStreamer's videotestsrc and the calibration.json file that is provided in the evaluation package. In the following example, Birds Eye View will receive 6 video streams of 1280x720:

# Path to the calibration file provided with the evaluation package
CALIBRATION_FILE=birds_eye_view.json 

# Video resolution and format
 CAPS="video/x-raw,width=1280,height=720,format=RGBA"

# Pipeline
gst-launch-1.0 -e bev name=bev0 calibration-file=$CALIBRATION_FILE \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_0 \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_1 \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_2 \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_3 \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_4 \
 videotestsrc is-live=true ! $CAPS ! queue ! bev0.sink_5 \
bev0. ! queue ! nvvidconv ! nvv4l2h264enc bitrate=20000000 ! h264parse ! mp4mux ! filesink location=test.mp4

Note that the path to the calibration file is set using the calibration-file element property. Each video stream is connected to the bev element using the <element_name>.sink_<n> syntax.

The next step is to test with your own cameras. For this, make sure that your custom calibration.json and your pipeline use the same resolution caps for the inputs, otherwise the element output will be incorrect.

FAQ

What does the GstBEV plugin do?
It combines multiple calibrated camera streams into one birds-eye-view output stream using RidgeRun's BEV processing pipeline.
How do I check whether GstBEV is installed correctly?
Run gst-inspect-1.0 bev. A valid installation should list the element, its pads, and its properties.
Does the calibration file matter?
Yes. The calibration file is essential because it defines how the input images are transformed and stitched into the final top-down view.
Why should my caps match the calibration file?
The calibration data is tied to image geometry. If your runtime caps do not match the calibrated dimensions and format, the output may be distorted or unusable.
Where can I find tested performance numbers?
Use the dedicated RidgeRun performance pages for PC, NVIDIA Jetson, and NXP i.MX8.

Need help integrating GstBEV?

If you are moving from evaluation to product integration, contact RidgeRun for help with calibration workflows, platform bring-up, GStreamer optimization, and multi-camera pipeline tuning: Contact Us.

Related pages



⇦ Calibration Guide Legacy Home GStreamer/Generic Pipelines ⇨


Cookies help us deliver our services. By using our services, you agree to our use of cookies.