gst-indent run on core
[platform/upstream/gstreamer.git] / gst / gstquery.h
1 /* GStreamer
2  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
3  *                    2000 Wim Taymans <wim.taymans@chello.be>
4  *
5  * gstquery.h: GstQuery API declaration
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22
23
24 #ifndef __GST_QUERY_H__
25 #define __GST_QUERY_H__
26
27 #include <glib.h>
28
29 G_BEGIN_DECLS typedef enum
30 {
31   GST_QUERY_NONE = 0,
32   GST_QUERY_TOTAL,
33   GST_QUERY_POSITION,
34   GST_QUERY_LATENCY,
35   GST_QUERY_JITTER,
36   GST_QUERY_START,
37   GST_QUERY_SEGMENT_END,
38   GST_QUERY_RATE
39 } GstQueryType;
40
41 /* rate is relative to 1000000  */
42 #define GST_QUERY_TYPE_RATE_DEN          G_GINT64_CONSTANT (1000000)
43
44 typedef struct _GstQueryTypeDefinition GstQueryTypeDefinition;
45
46 struct _GstQueryTypeDefinition
47 {
48   GstQueryType value;
49   gchar *nick;
50   gchar *description;
51 };
52
53 #ifdef G_HAVE_ISO_VARARGS
54 #define GST_QUERY_TYPE_FUNCTION(type, functionname, ...)        \
55 static const GstQueryType*                              \
56 functionname (type object)                              \
57 {                                                       \
58   static const GstQueryType types[] = {                 \
59     __VA_ARGS__,                                        \
60     0                                                   \
61   };                                                    \
62   return types;                                         \
63 }
64 #elif defined(G_HAVE_GNUC_VARARGS)
65 #define GST_QUERY_TYPE_FUNCTION(type, functionname, a...)       \
66 static const GstQueryType*                              \
67 functionname (type object)                              \
68 {                                                       \
69   static const GstQueryType types[] = {                 \
70     a,                                                  \
71     0                                                   \
72   };                                                    \
73   return types;                                         \
74 }
75 #endif
76
77 void _gst_query_type_initialize (void);
78
79 /* register a new query */
80 GstQueryType gst_query_type_register (const gchar * nick,
81     const gchar * description);
82 GstQueryType gst_query_type_get_by_nick (const gchar * nick);
83
84 /* check if a query is in an array of querys */
85 gboolean gst_query_types_contains (const GstQueryType * types,
86     GstQueryType type);
87
88 /* query for query details */
89 G_CONST_RETURN GstQueryTypeDefinition *gst_query_type_get_details (GstQueryType
90     type);
91 G_CONST_RETURN GList *gst_query_type_get_definitions (void);
92
93 G_END_DECLS
94 #endif /* __GST_QUERY_H__ */