cairooverlay

cairooverlay renders an overlay using a application provided render function.

The full example can be found in tests/examples/cairo/cairo_overlay.c

Example code


 #include <gst/gst.h>
 #include <gst/video/video.h>

 ...

 typedef struct {
   gboolean valid;
   int width;
   int height;
 } CairoOverlayState;

 ...

 static void
 prepare_overlay (GstElement * overlay, GstCaps * caps, gpointer user_data)
 {
   CairoOverlayState *state = (CairoOverlayState *)user_data;

   gst_video_format_parse_caps (caps, NULL, &state->width, &state->height);
   state->valid = TRUE;
 }

 static void
 draw_overlay (GstElement * overlay, cairo_t * cr, guint64 timestamp,
   guint64 duration, gpointer user_data)
 {
   CairoOverlayState *s = (CairoOverlayState *)user_data;
   double scale;

   if (!s->valid)
     return;

   scale = 2*(((timestamp/(int)1e7) % 70)+30)/100.0;
   cairo_translate(cr, s->width/2, (s->height/2)-30);
   cairo_scale (cr, scale, scale);

   cairo_move_to (cr, 0, 0);
   cairo_curve_to (cr, 0,-30, -50,-30, -50,0);
   cairo_curve_to (cr, -50,30, 0,35, 0,60 );
   cairo_curve_to (cr, 0,35, 50,30, 50,0 ); *
   cairo_curve_to (cr, 50,-30, 0,-30, 0,0 );
   cairo_set_source_rgba (cr, 0.9, 0.0, 0.1, 0.7);
   cairo_fill (cr);
 }

 ...

 cairo_overlay = gst_element_factory_make (&quot;cairooverlay&quot;, &quot;overlay&quot;);

 g_signal_connect (cairo_overlay, &quot;draw&quot;, G_CALLBACK (draw_overlay),
   overlay_state);
 g_signal_connect (cairo_overlay, &quot;caps-changed&quot;,
   G_CALLBACK (prepare_overlay), overlay_state);
 ...

Hierarchy

GObject
    ╰──GInitiallyUnowned
        ╰──GstObject
            ╰──GstElement
                ╰──GstBaseTransform
                    ╰──cairooverlay

Factory details

Authors: – Jon Nordby

Classification:Filter/Editor/Video

Rank – none

Plugin – cairo

Package – GStreamer Good Plug-ins

Pad Templates

sink

video/x-raw:
         format: { BGRx, BGRA, RGB16 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

Presencealways

Directionsink

Object typeGstPad


src

video/x-raw:
         format: { BGRx, BGRA, RGB16 }
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

Presencealways

Directionsrc

Object typeGstPad


Signals

caps-changed

caps_changed_callback (GstElement * overlay,
                       GstCaps * caps,
                       gpointer udata)
def caps_changed_callback (overlay, caps, udata):
    #python callback for the 'caps-changed' signal
function caps_changed_callback(overlay: GstElement * overlay, caps: GstCaps * caps, udata: gpointer udata): {
    // javascript callback for the 'caps-changed' signal
}

This signal is emitted when the caps of the element has changed.

Parameters:

overlay

Overlay element emitting the signal.

caps

The GstCaps of the element.

udata
No description available

Flags:


draw

draw_callback (GstElement * overlay,
               CairoContext * cr,
               guint64 timestamp,
               guint64 duration,
               gpointer udata)
def draw_callback (overlay, cr, timestamp, duration, udata):
    #python callback for the 'draw' signal
function draw_callback(overlay: GstElement * overlay, cr: CairoContext * cr, timestamp: guint64 timestamp, duration: guint64 duration, udata: gpointer udata): {
    // javascript callback for the 'draw' signal
}

This signal is emitted when the overlay should be drawn.

Parameters:

overlay

Overlay element emitting the signal.

cr

Cairo context to draw to.

timestamp

Timestamp (see GstClockTime) of the current buffer.

duration

Duration (see GstClockTime) of the current buffer.

udata
No description available

Flags:


Properties

draw-on-transparent-surface

“draw-on-transparent-surface” gboolean

Let the draw signal work on a transparent surface and blend the results with the video at a later time

Flags : Read / Write

Default value : false


The results of the search are