summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <edward@collabora.com>2012-09-25 14:21:55 +0200
committerEdward Hervey <edward.hervey@collabora.co.uk>2012-11-01 16:43:38 +0100
commit094bc36d0ed20b37ad8d2f710eb53ceb969c6987 (patch)
treeaa4c9520c4516af825aaa3c6c3a636d71c5639b4
parent308c9690448d53e94dfcdf13af040fb7f8136041 (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.c38
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;