GstPad *otherpad;
GstCaps *result;
- queue = GST_QUEUE (GST_PAD_PARENT (pad));
+ queue = GST_QUEUE (gst_pad_get_parent (pad));
+ if (G_UNLIKELY (queue == NULL))
+ return gst_caps_new_any ();
otherpad = (pad == queue->srcpad ? queue->sinkpad : queue->srcpad);
result = gst_pad_peer_get_caps (otherpad);
if (result == NULL)
result = gst_caps_new_any ();
+ gst_object_unref (queue);
+
return result;
}
gst_queue_handle_src_event (GstPad * pad, GstEvent * event)
{
gboolean res = TRUE;
- GstQueue *queue = GST_QUEUE (GST_PAD_PARENT (pad));
+ GstQueue *queue = GST_QUEUE (gst_pad_get_parent (pad));
+ if (G_UNLIKELY (queue == NULL)) {
+ gst_event_unref (event);
+ return FALSE;
+ }
#ifndef GST_DISABLE_GST_DEBUG
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue, "got event %p (%d)",
event, GST_EVENT_TYPE (event));
res = gst_pad_push_event (queue->sinkpad, event);
+ gst_object_unref (queue);
return res;
}
static gboolean
gst_queue_handle_src_query (GstPad * pad, GstQuery * query)
{
- GstQueue *queue = GST_QUEUE (GST_PAD_PARENT (pad));
+ GstQueue *queue = GST_QUEUE (gst_pad_get_parent (pad));
GstPad *peer;
gboolean res;
- if (!(peer = gst_pad_get_peer (queue->sinkpad)))
+ if (G_UNLIKELY (queue == NULL))
+ return FALSE;
+
+ if (!(peer = gst_pad_get_peer (queue->sinkpad))) {
+ gst_object_unref (queue);
return FALSE;
+ }
res = gst_pad_query (peer, query);
gst_object_unref (peer);
- if (!res)
+ if (!res) {
+ gst_object_unref (queue);
return FALSE;
+ }
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
break;
}
+ gst_object_unref (queue);
return TRUE;
}