1/* GStreamer
2 * Copyright (C) 1999 Erik Walthinsen <[email protected]>
3 * Copyright (C) 2004 Wim Taymans <[email protected]>
4 * Copyright (C) 2007 Peter Kjellerstedt <[email protected]>
5 *
6 * gstpoll.h: File descriptor set
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22 */
23
24#ifndef __GST_POLL_H__
25#define __GST_POLL_H__
26
27#include <glib.h>
28#include <glib-object.h>
29
30#include <gst/gstclock.h>
31
32G_BEGIN_DECLS
33
34/**
35 * GstPoll:
36 *
37 * A set of file/network descriptors.
38 */
39typedef struct _GstPoll GstPoll;
40
41/**
42 * GstPollFD:
43 * @fd: a file descriptor
44 *
45 * A file descriptor object.
46 */
47typedef struct {
48 int fd;
49
50 /*< private >*/
51 gint idx;
52} GstPollFD;
53
54/**
55 * GST_POLL_FD_INIT:
56 *
57 * A #GstPollFD must be initialized with this macro, before it can be
58 * used. This macro can used be to initialize a variable, but it cannot
59 * be assigned to a variable. In that case you have to use
60 * gst_poll_fd_init().
61 */
62#define GST_POLL_FD_INIT { -1, -1 }
63
64GST_API
65GstPoll* gst_poll_new (gboolean controllable) G_GNUC_MALLOC;
66
67GST_API
68GstPoll* gst_poll_new_timer (void) G_GNUC_MALLOC;
69
70GST_API
71void gst_poll_free (GstPoll *set);
72
73GST_API
74void gst_poll_get_read_gpollfd (GstPoll *set, GPollFD *fd);
75
76GST_API
77void gst_poll_fd_init (GstPollFD *fd);
78
79GST_API
80gboolean gst_poll_add_fd (GstPoll *set, GstPollFD *fd);
81
82GST_API
83gboolean gst_poll_remove_fd (GstPoll *set, GstPollFD *fd);
84
85GST_API
86gboolean gst_poll_fd_ctl_write (GstPoll *set, GstPollFD *fd, gboolean active);
87
88GST_API
89gboolean gst_poll_fd_ctl_read (GstPoll *set, GstPollFD *fd, gboolean active);
90
91GST_API
92gboolean gst_poll_fd_ctl_pri (GstPoll *set, GstPollFD *fd, gboolean active);
93
94GST_API
95void gst_poll_fd_ignored (GstPoll *set, GstPollFD *fd);
96
97GST_API
98gboolean gst_poll_fd_has_closed (const GstPoll *set, GstPollFD *fd);
99
100GST_API
101gboolean gst_poll_fd_has_error (const GstPoll *set, GstPollFD *fd);
102
103GST_API
104gboolean gst_poll_fd_can_read (const GstPoll *set, GstPollFD *fd);
105
106GST_API
107gboolean gst_poll_fd_can_write (const GstPoll *set, GstPollFD *fd);
108
109GST_API
110gboolean gst_poll_fd_has_pri (const GstPoll *set, GstPollFD *fd);
111
112GST_API
113gint gst_poll_wait (GstPoll *set, GstClockTime timeout);
114
115GST_API
116gboolean gst_poll_set_controllable (GstPoll *set, gboolean controllable);
117
118GST_API
119void gst_poll_restart (GstPoll *set);
120
121GST_API
122void gst_poll_set_flushing (GstPoll *set, gboolean flushing);
123
124GST_API
125gboolean gst_poll_write_control (GstPoll *set);
126
127GST_API
128gboolean gst_poll_read_control (GstPoll *set) G_GNUC_WARN_UNUSED_RESULT;
129
130G_END_DECLS
131
132#endif /* __GST_POLL_H__ */
133