Merge branch 'master' into 0.11
[platform/upstream/gstreamer.git] / gst-libs / gst / audio / gstaudioringbuffer.h
1 /* GStreamer
2  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
3  *                    2005 Wim Taymans <wim@fluendo.com>
4  *
5  * gstaudioringbuffer.h:
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 #ifndef __GST_AUDIO_RING_BUFFER_H__
24 #define __GST_AUDIO_RING_BUFFER_H__
25
26 #include <gst/gst.h>
27 #include <gst/audio/gstringbuffer.h>
28
29 G_BEGIN_DECLS
30
31 #define GST_TYPE_AUDIO_RING_BUFFER             (gst_audio_ring_buffer_get_type())
32 #define GST_AUDIO_RING_BUFFER(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBuffer))
33 #define GST_AUDIO_RING_BUFFER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBufferClass))
34 #define GST_AUDIO_RING_BUFFER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_RING_BUFFER,GstAudioRingBufferClass))
35 #define GST_IS_AUDIO_RING_BUFFER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RING_BUFFER))
36 #define GST_IS_AUDIO_RING_BUFFER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RING_BUFFER))
37 #define GST_AUDIO_RING_BUFFER_CAST(obj)        ((GstAudioRingBuffer *)obj)
38
39 typedef struct _GstAudioRingBuffer GstAudioRingBuffer;
40 typedef struct _GstAudioRingBufferClass GstAudioRingBufferClass;
41
42 #include <gst/audio/gstringbufferthread.h>
43
44 typedef enum {
45   GST_AUDIO_RING_BUFFER_MODE_UNKNOWN,
46   GST_AUDIO_RING_BUFFER_MODE_PLAYBACK,
47   GST_AUDIO_RING_BUFFER_MODE_CAPTURE
48 } GstAudioRingBufferMode;
49 /**
50  * GstAudioRingBuffer:
51  *
52  * Opaque #GstAudioRingBuffer.
53  */
54 struct _GstAudioRingBuffer {
55   GstRingBuffer       element;
56
57   /*< protected >*/
58   GstAudioRingBufferMode  mode;
59   GstRingBufferThread    *thread;
60
61   GstAudioRingBuffer     *link;
62
63   /*< private >*/
64   gpointer _gst_reserved[GST_PADDING];
65 };
66
67 /**
68  * GstAudioRingBufferClass:
69  * @parent_class: the parent class structure.
70  * @process: Write/Read data to/from the device.
71  * @reset: Returns as quickly as possible from a write/read and flush any pending
72  *         samples from the device.
73  *
74  * #GstAudioRingBuffer class. Override the vmethods to implement functionality.
75  */
76 struct _GstAudioRingBufferClass {
77   GstRingBufferClass parent_class;
78
79   /* vtable */
80
81   /* write/read samples to the device */
82   gint      (*process)   (GstAudioRingBuffer *buf, gpointer data, guint length);
83   /* reset the audio device, unblock from a read/write */
84   void      (*reset)     (GstAudioRingBuffer *buf);
85
86   /*< private >*/
87   gpointer _gst_reserved[GST_PADDING];
88 };
89
90 GType gst_audio_ring_buffer_get_type(void);
91
92 gboolean gst_audio_ring_buffer_link       (GstAudioRingBuffer *buf1, GstAudioRingBuffer *buf2);
93
94 gboolean gst_audio_ring_buffer_set_thread (GstAudioRingBuffer *buf, GstRingBufferThread *thread);
95
96 G_END_DECLS
97
98 #endif /* __GST_AUDIO_RING_BUFFER_H__ */