diff options
author | Lionel Landwerlin <llandwerlin@gmail.com> | 2014-06-07 07:30:12 +0100 |
---|---|---|
committer | Lionel Landwerlin <llandwerlin@gmail.com> | 2014-06-07 11:03:49 +0100 |
commit | 541e1078cbbe61c1a5da61ef53c848b2dc3f5fe3 (patch) | |
tree | a12d13ac6a56e531e9a1aefc747150f281b53643 /clutter-gst/clutter-gst-types.c | |
parent | 0ea06dec41f73a8ac59e72724a1c56a213796d5c (diff) | |
download | clutter-gst-541e1078cbbe61c1a5da61ef53c848b2dc3f5fe3.tar.gz |
video-sink: add overlay support
Diffstat (limited to 'clutter-gst/clutter-gst-types.c')
-rw-r--r-- | clutter-gst/clutter-gst-types.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/clutter-gst/clutter-gst-types.c b/clutter-gst/clutter-gst-types.c index bdfd827..a4ec6f4 100644 --- a/clutter-gst/clutter-gst-types.c +++ b/clutter-gst/clutter-gst-types.c @@ -70,6 +70,97 @@ G_DEFINE_BOXED_TYPE (ClutterGstFrame, clutter_gst_frame_copy, clutter_gst_frame_free); + +ClutterGstOverlay * +clutter_gst_overlay_new (void) +{ + return g_slice_new0 (ClutterGstOverlay); +} + +static gpointer +clutter_gst_overlay_copy (gpointer data) +{ + if (G_LIKELY (data)) + { + ClutterGstOverlay *overlay = g_slice_dup (ClutterGstOverlay, data); + + if (overlay->pipeline != COGL_INVALID_HANDLE) + overlay->pipeline = cogl_object_ref (overlay->pipeline); + + return overlay; + } + + return NULL; +} + +static void +clutter_gst_overlay_free (gpointer data) +{ + if (G_LIKELY (data)) + { + ClutterGstOverlay *overlay = (ClutterGstOverlay *) data; + + if (overlay->pipeline != COGL_INVALID_HANDLE) + { + cogl_object_unref (overlay->pipeline); + overlay->pipeline = COGL_INVALID_HANDLE; + } + g_slice_free (ClutterGstOverlay, overlay); + } +} + +G_DEFINE_BOXED_TYPE (ClutterGstOverlay, + clutter_gst_overlay, + clutter_gst_overlay_copy, + clutter_gst_overlay_free); + +ClutterGstOverlays * +clutter_gst_overlays_new (void) +{ + ClutterGstOverlays *overlays = g_slice_new0 (ClutterGstOverlays); + + overlays->overlays = g_ptr_array_new_with_free_func (clutter_gst_overlay_free); + + return overlays; +} + +static gpointer +clutter_gst_overlays_copy (gpointer data) +{ + if (G_LIKELY (data)) + { + ClutterGstOverlays *overlays = clutter_gst_overlays_new (); + GPtrArray *src_overlays = ((ClutterGstOverlays *) data)->overlays; + guint i; + + for (i = 0; i < src_overlays->len; i++) + g_ptr_array_add (overlays->overlays, + clutter_gst_overlay_copy (g_ptr_array_index (src_overlays, + i))); + return overlays; + } + + return NULL; +} + +static void +clutter_gst_overlays_free (gpointer data) +{ + if (G_LIKELY (data)) + { + ClutterGstOverlays *overlays = (ClutterGstOverlays *) data; + + g_ptr_array_unref (overlays->overlays); + + g_slice_free (ClutterGstOverlays, overlays); + } +} + +G_DEFINE_BOXED_TYPE (ClutterGstOverlays, + clutter_gst_overlays, + clutter_gst_overlays_copy, + clutter_gst_overlays_free); + static ClutterGstBox * clutter_gst_box_copy (const ClutterGstBox *box) { |