gst/adder/gstadder.c: When using gst_element_iterate_pads() one has to unref every pad after usage.

Original commit message from CVS:
* gst/adder/gstadder.c: (gst_adder_query_duration),
(gst_adder_query_latency):
When using gst_element_iterate_pads() one has to unref every pad
after usage.
This commit is contained in:
Sebastian Dröge 2008-06-02 12:20:35 +00:00
parent 9fa61c528d
commit 1d37b272ce
2 changed files with 52 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2008-06-02 Sebastian Dröge <slomo@circular-chaos.org>
* gst/adder/gstadder.c: (gst_adder_query_duration),
(gst_adder_query_latency):
When using gst_element_iterate_pads() one has to unref every pad
after usage.
2008-05-31 Mark Nauwelaerts <mnauw@users.sf.net> 2008-05-31 Mark Nauwelaerts <mnauw@users.sf.net>
* gst-libs/gst/audio/gstbaseaudiosrc.c: * gst-libs/gst/audio/gstbaseaudiosrc.c:

View File

@ -115,12 +115,17 @@ GST_STATIC_PAD_TEMPLATE ("sink%d",
); );
static void gst_adder_class_init (GstAdderClass * klass); static void gst_adder_class_init (GstAdderClass * klass);
static void gst_adder_init (GstAdder * adder); static void gst_adder_init (GstAdder * adder);
static void gst_adder_finalize (GObject * object); static void gst_adder_finalize (GObject * object);
static gboolean gst_adder_setcaps (GstPad * pad, GstCaps * caps); static gboolean gst_adder_setcaps (GstPad * pad, GstCaps * caps);
static gboolean gst_adder_query (GstPad * pad, GstQuery * query); static gboolean gst_adder_query (GstPad * pad, GstQuery * query);
static gboolean gst_adder_src_event (GstPad * pad, GstEvent * event); static gboolean gst_adder_src_event (GstPad * pad, GstEvent * event);
static gboolean gst_adder_sink_event (GstPad * pad, GstEvent * event); static gboolean gst_adder_sink_event (GstPad * pad, GstEvent * event);
static GstPad *gst_adder_request_new_pad (GstElement * element, static GstPad *gst_adder_request_new_pad (GstElement * element,
@ -188,6 +193,7 @@ static GstCaps *
gst_adder_sink_getcaps (GstPad * pad) gst_adder_sink_getcaps (GstPad * pad)
{ {
GstAdder *adder; GstAdder *adder;
GstCaps *result, *peercaps, *sinkcaps; GstCaps *result, *peercaps, *sinkcaps;
adder = GST_ADDER (GST_PAD_PARENT (pad)); adder = GST_ADDER (GST_PAD_PARENT (pad));
@ -222,8 +228,11 @@ static gboolean
gst_adder_setcaps (GstPad * pad, GstCaps * caps) gst_adder_setcaps (GstPad * pad, GstCaps * caps)
{ {
GstAdder *adder; GstAdder *adder;
GList *pads; GList *pads;
GstStructure *structure; GstStructure *structure;
const char *media_type; const char *media_type;
adder = GST_ADDER (GST_PAD_PARENT (pad)); adder = GST_ADDER (GST_PAD_PARENT (pad));
@ -333,9 +342,13 @@ static gboolean
gst_adder_query_duration (GstAdder * adder, GstQuery * query) gst_adder_query_duration (GstAdder * adder, GstQuery * query)
{ {
gint64 max; gint64 max;
gboolean res; gboolean res;
GstFormat format; GstFormat format;
GstIterator *it; GstIterator *it;
gboolean done; gboolean done;
/* parse format */ /* parse format */
@ -348,6 +361,7 @@ gst_adder_query_duration (GstAdder * adder, GstQuery * query)
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
while (!done) { while (!done) {
GstIteratorResult ires; GstIteratorResult ires;
gpointer item; gpointer item;
ires = gst_iterator_next (it, &item); ires = gst_iterator_next (it, &item);
@ -358,6 +372,7 @@ gst_adder_query_duration (GstAdder * adder, GstQuery * query)
case GST_ITERATOR_OK: case GST_ITERATOR_OK:
{ {
GstPad *pad = GST_PAD_CAST (item); GstPad *pad = GST_PAD_CAST (item);
gint64 duration; gint64 duration;
/* ask sink peer for duration */ /* ask sink peer for duration */
@ -373,6 +388,7 @@ gst_adder_query_duration (GstAdder * adder, GstQuery * query)
else if (duration > max) else if (duration > max)
max = duration; max = duration;
} }
gst_object_unref (pad);
break; break;
} }
case GST_ITERATOR_RESYNC: case GST_ITERATOR_RESYNC:
@ -402,9 +418,13 @@ static gboolean
gst_adder_query_latency (GstAdder * adder, GstQuery * query) gst_adder_query_latency (GstAdder * adder, GstQuery * query)
{ {
GstClockTime min, max; GstClockTime min, max;
gboolean live; gboolean live;
gboolean res; gboolean res;
GstIterator *it; GstIterator *it;
gboolean done; gboolean done;
res = TRUE; res = TRUE;
@ -418,6 +438,7 @@ gst_adder_query_latency (GstAdder * adder, GstQuery * query)
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
while (!done) { while (!done) {
GstIteratorResult ires; GstIteratorResult ires;
gpointer item; gpointer item;
ires = gst_iterator_next (it, &item); ires = gst_iterator_next (it, &item);
@ -428,8 +449,11 @@ gst_adder_query_latency (GstAdder * adder, GstQuery * query)
case GST_ITERATOR_OK: case GST_ITERATOR_OK:
{ {
GstPad *pad = GST_PAD_CAST (item); GstPad *pad = GST_PAD_CAST (item);
GstQuery *peerquery; GstQuery *peerquery;
GstClockTime min_cur, max_cur; GstClockTime min_cur, max_cur;
gboolean live_cur; gboolean live_cur;
peerquery = gst_query_new_latency (); peerquery = gst_query_new_latency ();
@ -453,6 +477,7 @@ gst_adder_query_latency (GstAdder * adder, GstQuery * query)
} }
gst_query_unref (peerquery); gst_query_unref (peerquery);
gst_object_unref (pad);
break; break;
} }
case GST_ITERATOR_RESYNC: case GST_ITERATOR_RESYNC:
@ -485,6 +510,7 @@ static gboolean
gst_adder_query (GstPad * pad, GstQuery * query) gst_adder_query (GstPad * pad, GstQuery * query)
{ {
GstAdder *adder = GST_ADDER (gst_pad_get_parent (pad)); GstAdder *adder = GST_ADDER (gst_pad_get_parent (pad));
gboolean res = FALSE; gboolean res = FALSE;
switch (GST_QUERY_TYPE (query)) { switch (GST_QUERY_TYPE (query)) {
@ -553,6 +579,7 @@ static gboolean
forward_event (GstAdder * adder, GstEvent * event) forward_event (GstAdder * adder, GstEvent * event)
{ {
gboolean ret; gboolean ret;
GstIterator *it; GstIterator *it;
GValue vret = { 0 }; GValue vret = { 0 };
@ -578,6 +605,7 @@ static gboolean
gst_adder_src_event (GstPad * pad, GstEvent * event) gst_adder_src_event (GstPad * pad, GstEvent * event)
{ {
GstAdder *adder; GstAdder *adder;
gboolean result; gboolean result;
adder = GST_ADDER (gst_pad_get_parent (pad)); adder = GST_ADDER (gst_pad_get_parent (pad));
@ -590,7 +618,9 @@ gst_adder_src_event (GstPad * pad, GstEvent * event)
case GST_EVENT_SEEK: case GST_EVENT_SEEK:
{ {
GstSeekFlags flags; GstSeekFlags flags;
GstSeekType curtype; GstSeekType curtype;
gint64 cur; gint64 cur;
/* parse the seek parameters */ /* parse the seek parameters */
@ -638,6 +668,7 @@ static gboolean
gst_adder_sink_event (GstPad * pad, GstEvent * event) gst_adder_sink_event (GstPad * pad, GstEvent * event)
{ {
GstAdder *adder; GstAdder *adder;
gboolean ret; gboolean ret;
adder = GST_ADDER (gst_pad_get_parent (pad)); adder = GST_ADDER (gst_pad_get_parent (pad));
@ -670,6 +701,7 @@ static void
gst_adder_class_init (GstAdderClass * klass) gst_adder_class_init (GstAdderClass * klass)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GstElementClass *gstelement_class; GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
@ -737,8 +769,11 @@ gst_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
const gchar * unused) const gchar * unused)
{ {
gchar *name; gchar *name;
GstAdder *adder; GstAdder *adder;
GstPad *newpad; GstPad *newpad;
gint padcount; gint padcount;
if (templ->direction != GST_PAD_SINK) if (templ->direction != GST_PAD_SINK)
@ -813,11 +848,17 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
* - push out the output buffer * - push out the output buffer
*/ */
GstAdder *adder; GstAdder *adder;
guint size; guint size;
GSList *collected; GSList *collected;
GstBuffer *outbuf; GstBuffer *outbuf;
GstFlowReturn ret; GstFlowReturn ret;
gpointer outbytes; gpointer outbytes;
gboolean empty = TRUE; gboolean empty = TRUE;
adder = GST_ADDER (user_data); adder = GST_ADDER (user_data);
@ -840,8 +881,11 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
for (collected = pads->data; collected; collected = g_slist_next (collected)) { for (collected = pads->data; collected; collected = g_slist_next (collected)) {
GstCollectData *data; GstCollectData *data;
guint8 *bytes; guint8 *bytes;
guint len; guint len;
GstBuffer *inbuf; GstBuffer *inbuf;
data = (GstCollectData *) collected->data; data = (GstCollectData *) collected->data;
@ -976,6 +1020,7 @@ static GstStateChangeReturn
gst_adder_change_state (GstElement * element, GstStateChange transition) gst_adder_change_state (GstElement * element, GstStateChange transition)
{ {
GstAdder *adder; GstAdder *adder;
GstStateChangeReturn ret; GstStateChangeReturn ret;
adder = GST_ADDER (element); adder = GST_ADDER (element);