diff options
author | Edward Hervey <edward@collabora.com> | 2012-09-25 14:21:55 +0200 |
---|---|---|
committer | Edward Hervey <edward.hervey@collabora.co.uk> | 2012-11-01 16:43:38 +0100 |
commit | 094bc36d0ed20b37ad8d2f710eb53ceb969c6987 (patch) | |
tree | aa4c9520c4516af825aaa3c6c3a636d71c5639b4 | |
parent | 308c9690448d53e94dfcdf13af040fb7f8136041 (diff) |
events: Don't leak segments and carry-over seqnums
Even though we transform events, we carry-over the seqnum
-rw-r--r-- | gnl/gnlghostpad.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/gnl/gnlghostpad.c b/gnl/gnlghostpad.c index ef6bfdd..1bd4c2a 100644 --- a/gnl/gnlghostpad.c +++ b/gnl/gnlghostpad.c @@ -50,6 +50,7 @@ translate_incoming_seek (GnlObject * object, GstEvent * event) guint64 ncur; gint64 stop; guint64 nstop; + guint32 seqnum = GST_EVENT_SEQNUM (event); gst_event_parse_seek (event, &rate, &format, &flags, &curtype, &cur, &stoptype, &stop); @@ -122,6 +123,7 @@ translate_incoming_seek (GnlObject * object, GstEvent * event) event2 = gst_event_new_seek (nrate, GST_FORMAT_TIME, flags, ncurtype, (gint64) ncur, GST_SEEK_TYPE_SET, (gint64) nstop); + GST_EVENT_SEQNUM (event2) = seqnum; gst_event_unref (event); @@ -148,6 +150,7 @@ translate_outgoing_seek (GnlObject * object, GstEvent * event) guint64 ncur; gint64 stop; guint64 nstop; + guint32 seqnum = GST_EVENT_SEQNUM (event); gst_event_parse_seek (event, &rate, &format, &flags, &curtype, &cur, &stoptype, &stop); @@ -208,6 +211,7 @@ translate_outgoing_seek (GnlObject * object, GstEvent * event) event2 = gst_event_new_seek (nrate, GST_FORMAT_TIME, flags, ncurtype, (gint64) ncur, GST_SEEK_TYPE_SET, (gint64) nstop); + GST_EVENT_SEQNUM (event2) = seqnum; gst_event_unref (event); @@ -225,8 +229,9 @@ static GstEvent * translate_outgoing_segment (GnlObject * object, GstEvent * event) { const GstSegment *orig; - GstSegment *segment; + GstSegment segment; GstEvent *event2; + guint32 seqnum = GST_EVENT_SEQNUM (event); /* only modify the streamtime */ gst_event_parse_segment (event, &orig); @@ -242,19 +247,20 @@ translate_outgoing_segment (GnlObject * object, GstEvent * event) return event; } - segment = gst_segment_copy (orig); + gst_segment_copy_into (orig, &segment); - gnl_media_to_object_time (object, orig->time, &segment->time); + gnl_media_to_object_time (object, orig->time, &segment.time); - if (G_UNLIKELY (segment->time > G_MAXINT64)) + if (G_UNLIKELY (segment.time > G_MAXINT64)) GST_WARNING_OBJECT (object, "Return value too big..."); GST_DEBUG_OBJECT (object, "Sending SEGMENT %" GST_TIME_FORMAT " -- %" GST_TIME_FORMAT " // %" - GST_TIME_FORMAT, GST_TIME_ARGS (segment->start), - GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->time)); + GST_TIME_FORMAT, GST_TIME_ARGS (segment.start), + GST_TIME_ARGS (segment.stop), GST_TIME_ARGS (segment.time)); - event2 = gst_event_new_segment (segment); + event2 = gst_event_new_segment (&segment); + GST_EVENT_SEQNUM (event2) = seqnum; gst_event_unref (event); return event2; @@ -265,7 +271,8 @@ translate_incoming_segment (GnlObject * object, GstEvent * event) { GstEvent *event2; const GstSegment *orig; - GstSegment *segment; + GstSegment segment; + guint32 seqnum = GST_EVENT_SEQNUM (event); /* only modify the streamtime */ gst_event_parse_segment (event, &orig); @@ -281,22 +288,23 @@ translate_incoming_segment (GnlObject * object, GstEvent * event) return event; } - segment = gst_segment_copy (orig); + gst_segment_copy_into (orig, &segment); - if (!gnl_object_to_media_time (object, orig->time, &segment->time)) { + if (!gnl_object_to_media_time (object, orig->time, &segment.time)) { GST_DEBUG ("Can't convert media_time, using 0"); - segment->time = 0; + segment.time = 0; }; - if (G_UNLIKELY (segment->time > G_MAXINT64)) + if (G_UNLIKELY (segment.time > G_MAXINT64)) GST_WARNING_OBJECT (object, "Return value too big..."); GST_DEBUG_OBJECT (object, "Sending SEGMENT %" GST_TIME_FORMAT " -- %" GST_TIME_FORMAT " // %" - GST_TIME_FORMAT, GST_TIME_ARGS (segment->start), - GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->time)); + GST_TIME_FORMAT, GST_TIME_ARGS (segment.start), + GST_TIME_ARGS (segment.stop), GST_TIME_ARGS (segment.time)); - event2 = gst_event_new_segment (segment); + event2 = gst_event_new_segment (&segment); + GST_EVENT_SEQNUM (event2) = seqnum; gst_event_unref (event); return event2; |