| Top |
GObject ╰── GInitiallyUnowned ╰── GstObject ╰── GstElement ╰── GstBaseTransform ╰── GstVideoFilter ╰── GstCairoOverlay
cairooverlay renders an overlay using a application provided render function.
The full example can be found in tests/examples/cairo/cairo_overlay.c
#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 ("cairooverlay", "overlay");
g_signal_connect (cairo_overlay, "draw", G_CALLBACK (draw_overlay),
overlay_state);
g_signal_connect (cairo_overlay, "caps-changed",
G_CALLBACK (prepare_overlay), overlay_state);
...
name |
sink |
direction |
sink |
presence |
always |
details |
video/x-raw, format=(string){ BGRx, BGRA, RGB16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] |
name |
src |
direction |
source |
presence |
always |
details |
video/x-raw, format=(string){ BGRx, BGRA, RGB16 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] |
“caps-changed” signalvoid user_function (GstCairoOverlay *overlay, GstCaps *caps, gpointer user_data)
This signal is emitted when the caps of the element has changed.
“draw” signalvoid user_function (GstCairoOverlay *overlay, CairoContext *cr, guint64 timestamp, guint64 duration, gpointer user_data)
This signal is emitted when the overlay should be drawn.