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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#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.