4 This file is part of polypaudio.
6 polypaudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published
8 by the Free Software Foundation; either version 2 of the License,
9 or (at your option) any later version.
11 polypaudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with polypaudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
30 #include <liboil/liboilfuncs.h>
31 #include <liboil/liboil.h>
33 #include "endianmacros.h"
37 #include "sconv-s16le.h"
38 #include "sconv-s16be.h"
40 static void u8_to_float32ne(unsigned n
, const void *a
, float *b
) {
41 const uint8_t *ca
= a
;
42 static const double add
= -128.0/127.0, factor
= 1.0/127.0;
47 oil_scaleconv_f32_u8(b
, ca
, n
, &add
, &factor
);
50 static void u8_from_float32ne(unsigned n
, const float *a
, void *b
) {
52 static const double add
= 128.0, factor
= 127.0;
57 oil_scaleconv_u8_f32(cb
, a
, n
, &add
, &factor
);
60 static void float32ne_to_float32ne(unsigned n
, const void *a
, float *b
) {
64 oil_memcpy(b
, a
, sizeof(float) * n
);
67 static void float32ne_from_float32ne(unsigned n
, const float *a
, void *b
) {
71 oil_memcpy(b
, a
, sizeof(float) * n
);
74 static void ulaw_to_float32ne(unsigned n
, const void *a
, float *b
) {
75 const uint8_t *ca
= a
;
81 *(b
++) = st_ulaw2linear16(*(ca
++)) * 1.0F
/ 0x7FFF;
84 static void ulaw_from_float32ne(unsigned n
, const float *a
, void *b
) {
99 *(cb
++) = st_14linear2ulaw((int16_t) (v
* 0x1FFF));
103 static void alaw_to_float32ne(unsigned n
, const void *a
, float *b
) {
104 const uint8_t *ca
= a
;
110 *(b
++) = st_alaw2linear16(*(ca
++)) * 1.0F
/ 0x7FFF;
113 static void alaw_from_float32ne(unsigned n
, const float *a
, void *b
) {
128 *(cb
++) = st_13linear2alaw((int16_t) (v
* 0xFFF));
132 pa_convert_to_float32ne_func_t
pa_get_convert_to_float32ne_function(pa_sample_format_t f
) {
135 return u8_to_float32ne
;
136 case PA_SAMPLE_S16LE
:
137 return pa_sconv_s16le_to_float32ne
;
138 case PA_SAMPLE_S16BE
:
139 return pa_sconv_s16be_to_float32ne
;
140 case PA_SAMPLE_FLOAT32NE
:
141 return float32ne_to_float32ne
;
143 return alaw_to_float32ne
;
145 return ulaw_to_float32ne
;
151 pa_convert_from_float32ne_func_t
pa_get_convert_from_float32ne_function(pa_sample_format_t f
) {
154 return u8_from_float32ne
;
155 case PA_SAMPLE_S16LE
:
156 return pa_sconv_s16le_from_float32ne
;
157 case PA_SAMPLE_S16BE
:
158 return pa_sconv_s16be_from_float32ne
;
159 case PA_SAMPLE_FLOAT32NE
:
160 return float32ne_from_float32ne
;
162 return alaw_from_float32ne
;
164 return ulaw_from_float32ne
;