diff --git a/ChangeLog b/ChangeLog index 4cbb28a14f..5e92dd19fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-07-31 Wim Taymans + + * plugins/elements/gstqueue.c: (gst_queue_init), + (gst_queue_acceptcaps): + Add and use a custom acceptcaps function instead of falling back to the + potentially less optimized default implementation. + 2008-07-29 Tim-Philipp Müller * gst/gstpad.c: (gst_pad_alloc_buffer_full): diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index 731a2ac1d7..c500c0b659 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -196,6 +196,7 @@ static gboolean gst_queue_handle_sink_event (GstPad * pad, GstEvent * event); static gboolean gst_queue_handle_src_event (GstPad * pad, GstEvent * event); static gboolean gst_queue_handle_src_query (GstPad * pad, GstQuery * query); +static gboolean gst_queue_acceptcaps (GstPad * pad, GstCaps * caps); static GstCaps *gst_queue_getcaps (GstPad * pad); static GstPadLinkReturn gst_queue_link_sink (GstPad * pad, GstPad * peer); static GstPadLinkReturn gst_queue_link_src (GstPad * pad, GstPad * peer); @@ -374,6 +375,8 @@ gst_queue_init (GstQueue * queue, GstQueueClass * g_class) GST_DEBUG_FUNCPTR (gst_queue_link_sink)); gst_pad_set_getcaps_function (queue->sinkpad, GST_DEBUG_FUNCPTR (gst_queue_getcaps)); + gst_pad_set_acceptcaps_function (queue->sinkpad, + GST_DEBUG_FUNCPTR (gst_queue_acceptcaps)); gst_pad_set_bufferalloc_function (queue->sinkpad, GST_DEBUG_FUNCPTR (gst_queue_bufferalloc)); gst_element_add_pad (GST_ELEMENT (queue), queue->sinkpad); @@ -384,6 +387,8 @@ gst_queue_init (GstQueue * queue, GstQueueClass * g_class) GST_DEBUG_FUNCPTR (gst_queue_src_activate_push)); gst_pad_set_link_function (queue->srcpad, GST_DEBUG_FUNCPTR (gst_queue_link_src)); + gst_pad_set_acceptcaps_function (queue->srcpad, + GST_DEBUG_FUNCPTR (gst_queue_acceptcaps)); gst_pad_set_getcaps_function (queue->srcpad, GST_DEBUG_FUNCPTR (gst_queue_getcaps)); gst_pad_set_event_function (queue->srcpad, @@ -435,6 +440,21 @@ gst_queue_finalize (GObject * object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static gboolean +gst_queue_acceptcaps (GstPad * pad, GstCaps * caps) +{ + gboolean result; + GstQueue *queue; + GstPad *otherpad; + + queue = GST_QUEUE (GST_PAD_PARENT (pad)); + + otherpad = (pad == queue->srcpad ? queue->sinkpad : queue->srcpad); + result = gst_pad_peer_accept_caps (otherpad, caps); + + return result; +} + static GstCaps * gst_queue_getcaps (GstPad * pad) {