summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2021-08-16 10:19:07 +0300
committerNicolas Dufresne <nicolas@ndufresne.ca>2021-08-16 21:13:27 +0000
commita14f4f48c42cf679f7e96a690c393528b20ab4ec (patch)
tree61aec0242e7b28a549f604068f7896bd013bedb5
parent535c02c73b62eb1d9d72e77be873e11e6c94051e (diff)
downloadgstreamer-plugins-base-a14f4f48c42cf679f7e96a690c393528b20ab4ec.tar.gz
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1256>
-rw-r--r--gst-libs/gst/video/video-overlay-composition.c21
1 files 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 9b6c31f34..de47a2b39 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;
}