1/* GStreamer
2 * Copyright (C) 2014 Collabora
3 * Author: Olivier Crete <olivier.crete@collabora.com>
4 *
5 * gstaudioaggregator.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., 51 Franklin St, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 */
22
23#ifndef __GST_AUDIO_AGGREGATOR_H__
24#define __GST_AUDIO_AGGREGATOR_H__
25
26#include <gst/gst.h>
27#include <gst/base/gstaggregator.h>
28#include <gst/audio/audio.h>
29
30G_BEGIN_DECLS
31
32/*******************************
33 * GstAudioAggregator Structs *
34 *******************************/
35
36typedef struct _GstAudioAggregator GstAudioAggregator;
37typedef struct _GstAudioAggregatorPrivate GstAudioAggregatorPrivate;
38typedef struct _GstAudioAggregatorClass GstAudioAggregatorClass;
39
40
41/************************
42 * GstAudioAggregatorPad API *
43 ***********************/
44
45#define GST_TYPE_AUDIO_AGGREGATOR_PAD (gst_audio_aggregator_pad_get_type())
46#define GST_AUDIO_AGGREGATOR_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_AGGREGATOR_PAD, GstAudioAggregatorPad))
47#define GST_AUDIO_AGGREGATOR_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_AGGREGATOR_PAD, GstAudioAggregatorPadClass))
48#define GST_AUDIO_AGGREGATOR_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_AGGREGATOR_PAD, GstAudioAggregatorPadClass))
49#define GST_IS_AUDIO_AGGREGATOR_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_AGGREGATOR_PAD))
50#define GST_IS_AUDIO_AGGREGATOR_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_AGGREGATOR_PAD))
51
52/****************************
53 * GstAudioAggregatorPad Structs *
54 ***************************/
55
56typedef struct _GstAudioAggregatorPad GstAudioAggregatorPad;
57typedef struct _GstAudioAggregatorPadClass GstAudioAggregatorPadClass;
58typedef struct _GstAudioAggregatorPadPrivate GstAudioAggregatorPadPrivate;
59
60/**
61 * GstAudioAggregatorPad:
62 * @info: The audio info for this pad set from the incoming caps
63 *
64 * The default implementation of GstPad used with #GstAudioAggregator
65 *
66 * Since: 1.14
67 */
68struct _GstAudioAggregatorPad
69{
70 GstAggregatorPad parent;
71
72 /*< public >*/
73 /* read-only, with OBJECT_LOCK */
74 GstAudioInfo info;
75
76 /*< private >*/
77 GstAudioAggregatorPadPrivate *priv;
78
79 gpointer _gst_reserved[GST_PADDING];
80};
81
82/**
83 * GstAudioAggregatorPadClass:
84 * @convert_buffer: Convert a buffer from one format to another.
85 * @update_conversion_info: Called when either the input or output
86 * formats have changed.
87 *
88 * Since: 1.14
89 */
90struct _GstAudioAggregatorPadClass
91 {
92 GstAggregatorPadClass parent_class;
93
94 GstBuffer * (* convert_buffer) (GstAudioAggregatorPad * pad,
95 GstAudioInfo *in_info,
96 GstAudioInfo *out_info,
97 GstBuffer * buffer);
98
99 void (* update_conversion_info) (GstAudioAggregatorPad *pad);
100
101 /*< private >*/
102 gpointer _gst_reserved[GST_PADDING_LARGE];
103};
104
105GST_AUDIO_API
106GType gst_audio_aggregator_pad_get_type (void);
107
108#define GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD (gst_audio_aggregator_convert_pad_get_type())
109#define GST_AUDIO_AGGREGATOR_CONVERT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD, GstAudioAggregatorConvertPad))
110#define GST_AUDIO_AGGREGATOR_CONVERT_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD, GstAudioAggregatorConvertPadClass))
111#define GST_AUDIO_AGGREGATOR_CONVERT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD, GstAudioAggregatorConvertPadClass))
112#define GST_IS_AUDIO_AGGREGATOR_CONVERT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD))
113#define GST_IS_AUDIO_AGGREGATOR_CONVERT_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_AGGREGATOR_CONVERT_PAD))
114
115/****************************
116 * GstAudioAggregatorPad Structs *
117 ***************************/
118
119typedef struct _GstAudioAggregatorConvertPad GstAudioAggregatorConvertPad;
120typedef struct _GstAudioAggregatorConvertPadClass GstAudioAggregatorConvertPadClass;
121typedef struct _GstAudioAggregatorConvertPadPrivate GstAudioAggregatorConvertPadPrivate;
122
123/**
124 * GstAudioAggregatorConvertPad:
125 *
126 * An implementation of GstPad that can be used with #GstAudioAggregator.
127 *
128 * See #GstAudioAggregator for more details.
129 *
130 * Since: 1.14
131 */
132struct _GstAudioAggregatorConvertPad
133{
134 /*< private >*/
135 GstAudioAggregatorPad parent;
136
137 GstAudioAggregatorConvertPadPrivate *priv;
138
139 gpointer _gst_reserved[GST_PADDING];
140};
141
142/**
143 * GstAudioAggregatorConvertPadClass:
144 *
145 * Since: 1.14
146 */
147struct _GstAudioAggregatorConvertPadClass
148{
149 GstAudioAggregatorPadClass parent_class;
150
151 /*< private >*/
152 gpointer _gst_reserved[GST_PADDING];
153};
154
155GST_AUDIO_API
156GType gst_audio_aggregator_convert_pad_get_type (void);
157
158/**************************
159 * GstAudioAggregator API *
160 **************************/
161
162#define GST_TYPE_AUDIO_AGGREGATOR (gst_audio_aggregator_get_type())
163#define GST_AUDIO_AGGREGATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_AGGREGATOR,GstAudioAggregator))
164#define GST_AUDIO_AGGREGATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_AGGREGATOR,GstAudioAggregatorClass))
165#define GST_AUDIO_AGGREGATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_AGGREGATOR,GstAudioAggregatorClass))
166#define GST_IS_AUDIO_AGGREGATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_AGGREGATOR))
167#define GST_IS_AUDIO_AGGREGATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_AGGREGATOR))
168
169/**
170 * GstAudioAggregator:
171 * @current_caps: The caps set by the subclass
172 *
173 * GstAudioAggregator object
174 *
175 * Since: 1.14
176 */
177struct _GstAudioAggregator
178{
179 GstAggregator parent;
180
181 /*< public >*/
182 GstCaps *current_caps;
183
184 /*< private >*/
185 GstAudioAggregatorPrivate *priv;
186
187 gpointer _gst_reserved[GST_PADDING];
188};
189
190/**
191 * GstAudioAggregatorClass:
192 * @create_output_buffer: Create a new output buffer contains num_frames frames.
193 * @aggregate_one_buffer: Aggregates one input buffer to the output
194 * buffer. The in_offset and out_offset are in "frames", which is
195 * the size of a sample times the number of channels. Returns TRUE if
196 * any non-silence was added to the buffer
197 *
198 * Since: 1.14
199 */
200struct _GstAudioAggregatorClass {
201 GstAggregatorClass parent_class;
202
203 /*< public >*/
204 GstBuffer * (* create_output_buffer) (GstAudioAggregator * aagg,
205 guint num_frames);
206 gboolean (* aggregate_one_buffer) (GstAudioAggregator * aagg,
207 GstAudioAggregatorPad * pad, GstBuffer * inbuf, guint in_offset,
208 GstBuffer * outbuf, guint out_offset, guint num_frames);
209
210 /*< private >*/
211 gpointer _gst_reserved[GST_PADDING_LARGE];
212};
213
214/*************************
215 * GstAggregator methods *
216 ************************/
217
218GST_AUDIO_API
219GType gst_audio_aggregator_get_type(void);
220
221GST_AUDIO_API
222void gst_audio_aggregator_set_sink_caps (GstAudioAggregator * aagg,
223 GstAudioAggregatorPad * pad,
224 GstCaps * caps);
225
226G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioAggregator, gst_object_unref)
227G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioAggregatorPad, gst_object_unref)
228G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioAggregatorConvertPad, gst_object_unref)
229
230G_END_DECLS
231
232#endif /* __GST_AUDIO_AGGREGATOR_H__ */
233

source code of include/gstreamer-1.0/gst/audio/gstaudioaggregator.h