query: add new drain query

With the new serialized downstream queries we can implement a drain query that
makes an element waits until a downstream element replies to the query.
This commit is contained in:
Wim Taymans 2012-03-14 16:14:12 +01:00
parent 05cd564bea
commit 318baf4cd9
5 changed files with 31 additions and 3 deletions

View file

@ -56,7 +56,7 @@ static const gchar *_quark_strings[] = {
"GstEventReconfigure", "segment", "GstQueryScheduling", "pull-mode",
"allocator", "GstEventFlushStop", "options", "GstQueryAcceptCaps",
"result", "GstQueryCaps", "filter", "modes", "GstEventStreamConfig",
"setup-data", "stream-headers", "GstEventGap"
"setup-data", "stream-headers", "GstEventGap", "GstQueryDrain"
};
GQuark _priv_gst_quark_table[GST_QUARK_MAX];

View file

@ -162,7 +162,8 @@ typedef enum _GstQuarkId
GST_QUARK_SETUP_DATA = 133,
GST_QUARK_STREAM_HEADERS = 134,
GST_QUARK_EVENT_GAP = 135,
GST_QUARK_MAX = 136
GST_QUARK_QUERY_DRAIN = 136,
GST_QUARK_MAX = 137
} GstQuarkId;
extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];

View file

@ -121,6 +121,7 @@ static GstQueryQuarks query_quarks[] = {
{GST_QUERY_SCHEDULING, "scheduling", 0},
{GST_QUERY_ACCEPT_CAPS, "accept-caps", 0},
{GST_QUERY_CAPS, "caps", 0},
{GST_QUERY_DRAIN, "drain", 0},
{0, NULL, 0}
};
@ -2147,3 +2148,24 @@ gst_query_intersect_caps_result (GstQuery * query, GstCaps * filter,
gst_query_set_caps_result (query, res);
gst_caps_unref (res);
}
/**
* gst_query_new_drain:
*
* Constructs a new query object for querying the drain state.
*
* Free-function: gst_query_unref
*
* Returns: (transfer full): a new #GstQuery
*/
GstQuery *
gst_query_new_drain (void)
{
GstQuery *query;
GstStructure *structure;
structure = gst_structure_new_id_empty (GST_QUARK (QUERY_DRAIN));
query = gst_query_new_custom (GST_QUERY_DRAIN, structure);
return query;
}

View file

@ -101,6 +101,7 @@ typedef enum {
* @GST_QUERY_SCHEDULING: the scheduling properties
* @GST_QUERY_ACCEPT_CAPS: the accept caps query
* @GST_QUERY_CAPS: the caps query
* @GST_QUERY_DRAIN: wait till all serialized data is consumed downstream
*
* Standard predefined Query types
*/
@ -123,7 +124,8 @@ typedef enum {
GST_QUERY_ALLOCATION = GST_QUERY_MAKE_TYPE (140, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
GST_QUERY_SCHEDULING = GST_QUERY_MAKE_TYPE (150, FLAG(UPSTREAM)),
GST_QUERY_ACCEPT_CAPS = GST_QUERY_MAKE_TYPE (160, FLAG(BOTH)),
GST_QUERY_CAPS = GST_QUERY_MAKE_TYPE (170, FLAG(BOTH))
GST_QUERY_CAPS = GST_QUERY_MAKE_TYPE (170, FLAG(BOTH)),
GST_QUERY_DRAIN = GST_QUERY_MAKE_TYPE (180, FLAG(DOWNSTREAM) | FLAG(SERIALIZED))
} GstQueryType;
#undef FLAG
@ -456,6 +458,8 @@ void gst_query_parse_caps_result (GstQuery *query, GstCaps **c
void gst_query_intersect_caps_result (GstQuery *query, GstCaps *filter,
GstCapsIntersectMode mode);
/* drain query */
GstQuery * gst_query_new_drain (void) G_GNUC_MALLOC;
G_END_DECLS

View file

@ -825,6 +825,7 @@ EXPORTS
gst_query_new_caps
gst_query_new_convert
gst_query_new_custom
gst_query_new_drain
gst_query_new_duration
gst_query_new_formats
gst_query_new_latency