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 ]

Presence – always

Direction – sink

Object type – GstPad


src

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

Presence – always

Direction – src

Object type – GstPad


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