From a14f4f48c42cf679f7e96a690c393528b20ab4ec Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 16 Aug 2021 10:19:07 +0300 Subject: [PATCH] video-overlay-composition: Allow empty overlay compositions Allowing to pass NULL to the constructor removes the need to special-case the first rectangle in calling code and generally simplifies application code. Part-of: --- gst-libs/gst/video/video-overlay-composition.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/gst-libs/gst/video/video-overlay-composition.c b/gst-libs/gst/video/video-overlay-composition.c index 9b6c31f..de47a2b 100644 --- a/gst-libs/gst/video/video-overlay-composition.c +++ b/gst-libs/gst/video/video-overlay-composition.c @@ -327,12 +327,14 @@ gst_video_overlay_composition_free (GstMiniObject * mini_obj) /** * gst_video_overlay_composition_new: - * @rectangle: (transfer none): a #GstVideoOverlayRectangle to add to the + * @rectangle: (transfer none) (nullable): a #GstVideoOverlayRectangle to add to the * composition * * Creates a new video overlay composition object to hold one or more * overlay rectangles. * + * Note that since 1.20 this allows to pass %NULL for @rectangle. + * * Returns: (transfer full): a new #GstVideoOverlayComposition. Unref with * gst_video_overlay_composition_unref() when no longer needed. */ @@ -341,11 +343,8 @@ gst_video_overlay_composition_new (GstVideoOverlayRectangle * rectangle) { GstVideoOverlayComposition *comp; - - /* FIXME: should we allow empty compositions? Could also be expressed as - * buffer without a composition on it. Maybe there are cases where doing - * an empty new + _add() in a loop is easier? */ - g_return_val_if_fail (GST_IS_VIDEO_OVERLAY_RECTANGLE (rectangle), NULL); + g_return_val_if_fail (GST_IS_VIDEO_OVERLAY_RECTANGLE (rectangle) + || NULL, NULL); comp = g_slice_new0 (GstVideoOverlayComposition); @@ -355,18 +354,16 @@ gst_video_overlay_composition_new (GstVideoOverlayRectangle * rectangle) NULL, (GstMiniObjectFreeFunction) gst_video_overlay_composition_free); comp->rectangles = g_new0 (GstVideoOverlayRectangle *, RECTANGLE_ARRAY_STEP); - comp->rectangles[0] = gst_video_overlay_rectangle_ref (rectangle); - gst_mini_object_add_parent (GST_MINI_OBJECT_CAST (rectangle), - GST_MINI_OBJECT_CAST (comp)); - comp->num_rectangles = 1; comp->seq_num = gst_video_overlay_get_seqnum (); /* since the rectangle was created earlier, its seqnum is smaller than ours */ comp->min_seq_num_used = rectangle->seq_num; - GST_LOG ("new composition %p: seq_num %u with rectangle %p", comp, - comp->seq_num, rectangle); + GST_LOG ("new composition %p: seq_num %u", comp, comp->seq_num); + + if (rectangle) + gst_video_overlay_composition_add_rectangle (comp, rectangle); return comp; } -- 2.7.4