1 | /* GStreamer |
2 | * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net> |
3 | * (C) 2015 Wim Taymans <wim.taymans@gmail.com> |
4 | * |
5 | * audioconverter.h: audio format conversion library |
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_CONVERTER_H__ |
24 | #define __GST_AUDIO_CONVERTER_H__ |
25 | |
26 | #include <gst/gst.h> |
27 | #include <gst/audio/audio.h> |
28 | |
29 | G_BEGIN_DECLS |
30 | |
31 | typedef struct _GstAudioConverter GstAudioConverter; |
32 | |
33 | /** |
34 | * GST_AUDIO_CONVERTER_OPT_RESAMPLER_METHOD: |
35 | * |
36 | * #GST_TYPE_AUDIO_RESAMPLER_METHOD, The resampler method to use when |
37 | * changing sample rates. |
38 | * Default is #GST_AUDIO_RESAMPLER_METHOD_BLACKMAN_NUTTALL. |
39 | */ |
40 | #define GST_AUDIO_CONVERTER_OPT_RESAMPLER_METHOD "GstAudioConverter.resampler-method" |
41 | |
42 | /** |
43 | * GST_AUDIO_CONVERTER_OPT_DITHER_METHOD: |
44 | * |
45 | * #GST_TYPE_AUDIO_DITHER_METHOD, The dither method to use when |
46 | * changing bit depth. |
47 | * Default is #GST_AUDIO_DITHER_NONE. |
48 | */ |
49 | #define GST_AUDIO_CONVERTER_OPT_DITHER_METHOD "GstAudioConverter.dither-method" |
50 | |
51 | /** |
52 | * GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD: |
53 | * |
54 | * #GST_TYPE_AUDIO_NOISE_SHAPING_METHOD, The noise shaping method to use |
55 | * to mask noise from quantization errors. |
56 | * Default is #GST_AUDIO_NOISE_SHAPING_NONE. |
57 | */ |
58 | #define GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD "GstAudioConverter.noise-shaping-method" |
59 | |
60 | /** |
61 | * GST_AUDIO_CONVERTER_OPT_QUANTIZATION: |
62 | * |
63 | * #G_TYPE_UINT, The quantization amount. Components will be |
64 | * quantized to multiples of this value. |
65 | * Default is 1 |
66 | */ |
67 | #define GST_AUDIO_CONVERTER_OPT_QUANTIZATION "GstAudioConverter.quantization" |
68 | |
69 | /** |
70 | * GST_AUDIO_CONVERTER_OPT_MIX_MATRIX: |
71 | * |
72 | * #GST_TYPE_VALUE_LIST, The channel mapping matrix. |
73 | * |
74 | * The matrix coefficients must be between -1 and 1: the number of rows is equal |
75 | * to the number of output channels and the number of columns is equal to the |
76 | * number of input channels. |
77 | * |
78 | * ## Example matrix generation code |
79 | * To generate the matrix using code: |
80 | * |
81 | * |[ |
82 | * GValue v = G_VALUE_INIT; |
83 | * GValue v2 = G_VALUE_INIT; |
84 | * GValue v3 = G_VALUE_INIT; |
85 | * |
86 | * g_value_init (&v2, GST_TYPE_ARRAY); |
87 | * g_value_init (&v3, G_TYPE_DOUBLE); |
88 | * g_value_set_double (&v3, 1); |
89 | * gst_value_array_append_value (&v2, &v3); |
90 | * g_value_unset (&v3); |
91 | * [ Repeat for as many double as your input channels - unset and reinit v3 ] |
92 | * g_value_init (&v, GST_TYPE_ARRAY); |
93 | * gst_value_array_append_value (&v, &v2); |
94 | * g_value_unset (&v2); |
95 | * [ Repeat for as many v2's as your output channels - unset and reinit v2] |
96 | * g_object_set_property (G_OBJECT (audiomixmatrix), "matrix", &v); |
97 | * g_value_unset (&v); |
98 | * ]| |
99 | */ |
100 | #define GST_AUDIO_CONVERTER_OPT_MIX_MATRIX "GstAudioConverter.mix-matrix" |
101 | |
102 | /** |
103 | * GstAudioConverterFlags: |
104 | * @GST_AUDIO_CONVERTER_FLAG_NONE: no flag |
105 | * @GST_AUDIO_CONVERTER_FLAG_IN_WRITABLE: the input sample arrays are writable and can be |
106 | * used as temporary storage during conversion. |
107 | * @GST_AUDIO_CONVERTER_FLAG_VARIABLE_RATE: allow arbitrary rate updates with |
108 | * gst_audio_converter_update_config(). |
109 | * |
110 | * Extra flags passed to gst_audio_converter_new() and gst_audio_converter_samples(). |
111 | */ |
112 | typedef enum { |
113 | GST_AUDIO_CONVERTER_FLAG_NONE = 0, |
114 | GST_AUDIO_CONVERTER_FLAG_IN_WRITABLE = (1 << 0), |
115 | GST_AUDIO_CONVERTER_FLAG_VARIABLE_RATE = (1 << 1) |
116 | } GstAudioConverterFlags; |
117 | |
118 | GST_AUDIO_API |
119 | GstAudioConverter * gst_audio_converter_new (GstAudioConverterFlags flags, |
120 | GstAudioInfo *in_info, |
121 | GstAudioInfo *out_info, |
122 | GstStructure *config); |
123 | |
124 | GST_AUDIO_API |
125 | GType gst_audio_converter_get_type (void); |
126 | |
127 | GST_AUDIO_API |
128 | void gst_audio_converter_free (GstAudioConverter * convert); |
129 | |
130 | GST_AUDIO_API |
131 | void gst_audio_converter_reset (GstAudioConverter * convert); |
132 | |
133 | GST_AUDIO_API |
134 | gboolean gst_audio_converter_update_config (GstAudioConverter * convert, |
135 | gint in_rate, gint out_rate, |
136 | GstStructure *config); |
137 | |
138 | GST_AUDIO_API |
139 | const GstStructure * gst_audio_converter_get_config (GstAudioConverter * convert, |
140 | gint *in_rate, gint *out_rate); |
141 | |
142 | GST_AUDIO_API |
143 | gsize gst_audio_converter_get_out_frames (GstAudioConverter *convert, |
144 | gsize in_frames); |
145 | |
146 | GST_AUDIO_API |
147 | gsize gst_audio_converter_get_in_frames (GstAudioConverter *convert, |
148 | gsize out_frames); |
149 | |
150 | GST_AUDIO_API |
151 | gsize gst_audio_converter_get_max_latency (GstAudioConverter *convert); |
152 | |
153 | GST_AUDIO_API |
154 | gboolean gst_audio_converter_samples (GstAudioConverter * convert, |
155 | GstAudioConverterFlags flags, |
156 | gpointer in[], gsize in_frames, |
157 | gpointer out[], gsize out_frames); |
158 | |
159 | GST_AUDIO_API |
160 | gboolean gst_audio_converter_supports_inplace (GstAudioConverter *convert); |
161 | |
162 | GST_AUDIO_API |
163 | gboolean gst_audio_converter_is_passthrough (GstAudioConverter *convert); |
164 | |
165 | GST_AUDIO_API |
166 | gboolean gst_audio_converter_convert (GstAudioConverter * convert, |
167 | GstAudioConverterFlags flags, |
168 | gpointer in, gsize in_size, |
169 | gpointer *out, gsize *out_size); |
170 | |
171 | G_END_DECLS |
172 | |
173 | #endif /* __GST_AUDIO_CONVERTER_H__ */ |
174 | |