26
26
#include "config.h"
29
30
#include "gstvorbisdeclib.h"
32
33
/* These samples can be outside of the float -1.0 -- 1.0 range, this
33
34
* is allowed, downstream elements are supposed to clip */
36
copy_samples_m (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
37
gint channels, gint width)
39
memcpy (out, in[0], samples * sizeof (float));
43
copy_samples_s (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
44
gint channels, gint width)
46
#ifdef GST_VORBIS_DEC_SEQUENTIAL
47
memcpy (out, in[0], samples * sizeof (float));
49
memcpy (out, in[1], samples * sizeof (float));
53
for (j = 0; j < samples; j++) {
35
61
copy_samples (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
36
62
gint channels, gint width)
40
g_assert (width == 4);
42
64
#ifdef GST_VORBIS_DEC_SEQUENTIAL
43
67
for (i = 0; i < channels; i++) {
44
68
memcpy (out, in[i], samples * sizeof (float));
48
74
for (j = 0; j < samples; j++) {
49
75
for (i = 0; i < channels; i++) {
86
copy_samples_32 (gint32 * out, ogg_int32_t ** in, guint samples, gint channels)
90
for (j = 0; j < samples; j++) {
91
for (i = 0; i < channels; i++) {
92
*out++ = CLIP_TO_15 (in[i][j] >> 9);
98
copy_samples_16 (gint16 * out, ogg_int32_t ** in, guint samples, gint channels)
102
for (j = 0; j < samples; j++) {
103
for (i = 0; i < channels; i++) {
104
*out++ = CLIP_TO_15 (in[i][j] >> 9);
110
copy_samples (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
111
gint channels, gint width)
134
copy_samples_32_m (vorbis_sample_t * _out, vorbis_sample_t ** _in,
135
guint samples, gint channels, gint width)
137
gint32 *out = (gint32 *) _out;
138
ogg_int32_t **in = (ogg_int32_t **) _in;
141
for (j = 0; j < samples; j++) {
142
*out++ = CLIP_TO_15 (in[0][j] >> 9);
147
copy_samples_32_s (vorbis_sample_t * _out, vorbis_sample_t ** _in,
148
guint samples, gint channels, gint width)
150
gint32 *out = (gint32 *) _out;
151
ogg_int32_t **in = (ogg_int32_t **) _in;
154
for (j = 0; j < samples; j++) {
155
*out++ = CLIP_TO_15 (in[0][j] >> 9);
156
*out++ = CLIP_TO_15 (in[1][j] >> 9);
161
copy_samples_32 (vorbis_sample_t * _out, vorbis_sample_t ** _in, guint samples,
162
gint channels, gint width)
164
gint32 *out = (gint32 *) _out;
165
ogg_int32_t **in = (ogg_int32_t **) _in;
168
for (j = 0; j < samples; j++) {
169
for (i = 0; i < channels; i++) {
170
*out++ = CLIP_TO_15 (in[i][j] >> 9);
176
copy_samples_16_m (vorbis_sample_t * _out, vorbis_sample_t ** _in,
177
guint samples, gint channels, gint width)
179
gint16 *out = (gint16 *) _out;
180
ogg_int32_t **in = (ogg_int32_t **) _in;
183
for (j = 0; j < samples; j++) {
184
*out++ = CLIP_TO_15 (in[0][j] >> 9);
189
copy_samples_16_s (vorbis_sample_t * _out, vorbis_sample_t ** _in,
190
guint samples, gint channels, gint width)
192
gint16 *out = (gint16 *) _out;
193
ogg_int32_t **in = (ogg_int32_t **) _in;
196
for (j = 0; j < samples; j++) {
197
*out++ = CLIP_TO_15 (in[0][j] >> 9);
198
*out++ = CLIP_TO_15 (in[1][j] >> 9);
203
copy_samples_16 (vorbis_sample_t * _out, vorbis_sample_t ** _in, guint samples,
204
gint channels, gint width)
206
gint16 *out = (gint16 *) _out;
207
ogg_int32_t **in = (ogg_int32_t **) _in;
210
for (j = 0; j < samples; j++) {
211
for (i = 0; i < channels; i++) {
212
*out++ = CLIP_TO_15 (in[i][j] >> 9);
218
get_copy_sample_func (gint channels, gint width)
220
CopySampleFunc f = NULL;
113
222
if (width == 4) {
114
copy_samples_32 ((gint32 *) out, in, samples, channels);
225
f = copy_samples_32_m;
228
f = copy_samples_32_s;
115
234
} else if (width == 2) {
116
copy_samples_16 ((gint16 *) out, in, samples, channels);
237
f = copy_samples_16_m;
240
f = copy_samples_16_s;
118
247
g_assert_not_reached ();