diff --git a/gst/gstevent.c b/gst/gstevent.c index 338e769a22..35a878e801 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -83,6 +83,30 @@ gst_event_new (GstEventType type) return event; } +/** + * gst_event_copy: + * @event: The event to copy + * + * Copy the event + * + * Returns: A copy of the event. + */ +GstEvent* +gst_event_copy (GstEvent *event) +{ + GstEvent *copy; + + g_mutex_lock (_gst_event_chunk_lock); + copy = g_mem_chunk_alloc (_gst_event_chunk); + g_mutex_unlock (_gst_event_chunk_lock); + + memcpy (copy, event, sizeof (GstEvent)); + + /* FIXME copy/ref additional fields */ + + return copy; +} + /** * gst_event_free: * @event: The event to free diff --git a/gst/gstevent.h b/gst/gstevent.h index fad2978ab5..4c3d72d2e6 100644 --- a/gst/gstevent.h +++ b/gst/gstevent.h @@ -99,7 +99,8 @@ struct _GstEvent { void _gst_event_initialize (void); GstEvent* gst_event_new (GstEventType type); -void gst_event_free (GstEvent* event); +GstEvent* gst_event_copy (GstEvent *event); +void gst_event_free (GstEvent *event); /* seek events */ GstEvent* gst_event_new_seek (GstSeekType type, gint64 offset, gboolean flush);