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