Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
GStreamer
gstreamer
Commits
ac9e5533
Commit
ac9e5533
authored
Nov 09, 2011
by
Wim Taymans
Browse files
pad: add more queries
Add more query functions to prepare for doing more with queries
parent
642a4697
Changes
3
Hide whitespace changes
Inline
Side-by-side
gst/gstghostpad.c
View file @
ac9e5533
...
...
@@ -142,16 +142,23 @@ gboolean
gst_proxy_pad_query_default
(
GstPad
*
pad
,
GstQuery
*
query
)
{
gboolean
res
;
GstPad
*
target
;
g_return_val_if_fail
(
GST_IS_PROXY_PAD
(
pad
),
FALSE
);
g_return_val_if_fail
(
GST_IS_QUERY
(
query
),
FALSE
);
if
(
!
(
target
=
gst_proxy_pad_get_target
(
pad
)))
goto
no_target
;
switch
(
GST_QUERY_TYPE
(
query
))
{
default:
{
GstPad
*
target
;
res
=
gst_pad_query
(
target
,
query
);
gst_object_unref
(
target
);
if
(
!
(
target
=
gst_proxy_pad_get_target
(
pad
)))
goto
no_target
;
res
=
gst_pad_query
(
target
,
query
);
gst_object_unref
(
target
);
break
;
}
}
return
res
;
...
...
plugins/elements/gstinputselector.c
View file @
ac9e5533
...
...
@@ -181,6 +181,7 @@ static void gst_selector_pad_reset (GstSelectorPad * pad);
static
gboolean
gst_selector_pad_event
(
GstPad
*
pad
,
GstEvent
*
event
);
static
GstCaps
*
gst_selector_pad_getcaps
(
GstPad
*
pad
,
GstCaps
*
filter
);
static
gboolean
gst_selector_pad_acceptcaps
(
GstPad
*
pad
,
GstCaps
*
caps
);
static
gboolean
gst_selector_pad_query
(
GstPad
*
pad
,
GstQuery
*
query
);
static
GstIterator
*
gst_selector_pad_iterate_linked_pads
(
GstPad
*
pad
);
static
GstFlowReturn
gst_selector_pad_chain
(
GstPad
*
pad
,
GstBuffer
*
buf
);
...
...
@@ -491,6 +492,33 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
return
res
;
}
static
gboolean
gst_selector_pad_query
(
GstPad
*
pad
,
GstQuery
*
query
)
{
gboolean
res
=
FALSE
;
GstInputSelector
*
sel
;
GstPad
*
otherpad
;
sel
=
GST_INPUT_SELECTOR
(
gst_pad_get_parent
(
pad
));
if
(
G_UNLIKELY
(
sel
==
NULL
))
return
FALSE
;
otherpad
=
gst_input_selector_get_linked_pad
(
sel
,
pad
,
TRUE
);
switch
(
GST_QUERY_TYPE
(
query
))
{
default:
if
(
otherpad
)
res
=
gst_pad_peer_query
(
otherpad
,
query
);
break
;
}
if
(
otherpad
)
gst_object_unref
(
otherpad
);
gst_object_unref
(
sel
);
return
res
;
}
static
GstCaps
*
gst_selector_pad_getcaps
(
GstPad
*
pad
,
GstCaps
*
filter
)
{
...
...
@@ -1126,7 +1154,7 @@ gst_input_selector_event (GstPad * pad, GstEvent * event)
static
gboolean
gst_input_selector_query
(
GstPad
*
pad
,
GstQuery
*
query
)
{
gboolean
res
=
TRU
E
;
gboolean
res
=
FALS
E
;
GstInputSelector
*
sel
;
GstPad
*
otherpad
;
...
...
@@ -1147,9 +1175,6 @@ gst_input_selector_query (GstPad * pad, GstQuery * query)
resmax
=
-
1
;
reslive
=
FALSE
;
/* assume FALSE, we become TRUE if one query succeeds */
res
=
FALSE
;
/* perform the query on all sinkpads and combine the results. We take the
* max of min and the min of max for the result latency. */
GST_INPUT_SELECTOR_LOCK
(
sel
);
...
...
@@ -1201,6 +1226,7 @@ gst_input_selector_query (GstPad * pad, GstQuery * query)
}
if
(
otherpad
)
gst_object_unref
(
otherpad
);
gst_object_unref
(
sel
);
return
res
;
...
...
@@ -1299,6 +1325,8 @@ gst_input_selector_request_new_pad (GstElement * element,
GST_DEBUG_FUNCPTR
(
gst_selector_pad_getcaps
));
gst_pad_set_acceptcaps_function
(
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_selector_pad_acceptcaps
));
gst_pad_set_query_function
(
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_selector_pad_query
));
gst_pad_set_chain_function
(
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_selector_pad_chain
));
gst_pad_set_iterate_internal_links_function
(
sinkpad
,
...
...
plugins/elements/gstmultiqueue.c
View file @
ac9e5533
...
...
@@ -1518,6 +1518,21 @@ was_eos:
}
}
static
gboolean
gst_multi_queue_sink_query
(
GstPad
*
pad
,
GstQuery
*
query
)
{
GstSingleQueue
*
sq
=
gst_pad_get_element_private
(
pad
);
gboolean
res
;
switch
(
GST_QUERY_TYPE
(
query
))
{
default:
/* default handling */
res
=
gst_pad_peer_query
(
sq
->
srcpad
,
query
);
break
;
}
return
res
;
}
static
GstCaps
*
gst_multi_queue_getcaps
(
GstPad
*
pad
,
GstCaps
*
filter
)
{
...
...
@@ -1586,27 +1601,16 @@ static gboolean
gst_multi_queue_src_query
(
GstPad
*
pad
,
GstQuery
*
query
)
{
GstSingleQueue
*
sq
=
gst_pad_get_element_private
(
pad
);
GstPad
*
peerpad
;
gboolean
res
;
/* FIXME, Handle position offset depending on queue size */
/* default handling */
if
(
!
(
peerpad
=
gst_pad_get_peer
(
sq
->
sinkpad
)))
goto
no_peer
;
res
=
gst_pad_query
(
peerpad
,
query
);
gst_object_unref
(
peerpad
);
return
res
;
/* ERRORS */
no_peer:
{
GST_LOG_OBJECT
(
sq
->
sinkpad
,
"Couldn't send query because we have no peer"
);
return
FALSE
;
switch
(
GST_QUERY_TYPE
(
query
))
{
default:
/* default handling */
res
=
gst_pad_peer_query
(
sq
->
sinkpad
,
query
);
break
;
}
return
res
;
}
/*
...
...
@@ -1951,6 +1955,8 @@ gst_single_queue_new (GstMultiQueue * mqueue, guint id)
GST_DEBUG_FUNCPTR
(
gst_multi_queue_getcaps
));
gst_pad_set_acceptcaps_function
(
sq
->
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_multi_queue_acceptcaps
));
gst_pad_set_query_function
(
sq
->
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_multi_queue_sink_query
));
gst_pad_set_iterate_internal_links_function
(
sq
->
sinkpad
,
GST_DEBUG_FUNCPTR
(
gst_multi_queue_iterate_internal_links
));
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment