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:
parent
9fa61c528d
commit
1d37b272ce
@ -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:
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user