annotate libaudacious/xconvert.c @ 2059:8aaf0f145578 trunk

[svn] - documentation fixups
author nenolod
date Mon, 04 Dec 2006 18:30:58 -0800
parents 6f1346ce2764
children 53a3d5db6b58
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
1 /* Audacious
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
2 * Copyright (C) 2005-2007 Audacious team
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
3 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
4 * XMMS - Cross-platform multimedia player
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
5 * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
6 * Thomas Nilsson and 4Front Technologies
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
7 * Copyright (C) 1999-2003 Haavard Kvaalen
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
8 *
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
9 * This program is free software; you can redistribute it and/or modify
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
10 * it under the terms of the GNU General Public License as published by
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
12 * (at your option) any later version.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
13 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
14 * This program is distributed in the hope that it will be useful,
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
17 * GNU General Public License for more details.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
18 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
19 * You should have received a copy of the GNU General Public License
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
20 * along with this program; if not, write to the Free Software
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
22 */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
23
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
24 #include "config.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
25 #include <stdlib.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
26 #include <audacious/plugin.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
27 #include "xconvert.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
28
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
29 #define IS_BIG_ENDIAN (G_BYTE_ORDER==G_BIG_ENDIAN)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
30
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
31 struct buffer {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
32 void *buffer;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
33 int size;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
34 };
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
35
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
36 struct xmms_convert_buffers {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
37 struct buffer format_buffer, stereo_buffer, freq_buffer;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
38 };
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
39
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
40 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
41 * xmms_convert_buffers_new:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
42 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
43 * Factory for an #xmms_convert_buffers struct.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
44 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
45 * Return value: An #xmms_convert_buffers struct.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
46 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
47 struct xmms_convert_buffers *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
48 xmms_convert_buffers_new(void)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
49 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
50 return g_malloc0(sizeof(struct xmms_convert_buffers));
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
51 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
52
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
53 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
54 * convert_get_buffer:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
55 * @buffer: A buffer to resize.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
56 * @size: The new size for that buffer.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
57 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
58 * Resizes a conversion buffer.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
59 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
60 static void *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
61 convert_get_buffer(struct buffer *buffer, size_t size)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
62 {
625
0a73d1faeb4e [svn] GCC 4.1 warning fixes by Diego 'Flameeyes' Petteno from Gentoo.
chainsaw
parents: 0
diff changeset
63 if (size > 0 && size <= (size_t)buffer->size)
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
64 return buffer->buffer;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
65
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
66 buffer->size = size;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
67 buffer->buffer = g_realloc(buffer->buffer, size);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
68 return buffer->buffer;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
69 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
70
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
71 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
72 * xmms_convert_buffers_free:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
73 * @buf: An xmms_convert_buffers structure to free.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
74 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
75 * Frees the actual buffers contained inside the buffer struct.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
76 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
77 void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
78 xmms_convert_buffers_free(struct xmms_convert_buffers *buf)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
79 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
80 convert_get_buffer(&buf->format_buffer, 0);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
81 convert_get_buffer(&buf->stereo_buffer, 0);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
82 convert_get_buffer(&buf->freq_buffer, 0);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
83 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
84
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
85 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
86 * xmms_convert_buffers_destroy:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
87 * @buf: An xmms_convert_buffers structure to destroy.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
88 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
89 * Destroys an xmms_convert_buffers structure.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
90 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
91 void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
92 xmms_convert_buffers_destroy(struct xmms_convert_buffers *buf)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
93 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
94 if (!buf)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
95 return;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
96 xmms_convert_buffers_free(buf);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
97 g_free(buf);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
98 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
99
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
100 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
101 convert_swap_endian(struct xmms_convert_buffers *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
102 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
103 guint16 *ptr = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
104 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
105 for (i = 0; i < length; i += 2, ptr++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
106 *ptr = GUINT16_SWAP_LE_BE(*ptr);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
107
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
108 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
109 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
110
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
111 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
112 convert_swap_sign_and_endian_to_native(struct
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
113 xmms_convert_buffers
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
114 *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
115 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
116 guint16 *ptr = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
117 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
118 for (i = 0; i < length; i += 2, ptr++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
119 *ptr = GUINT16_SWAP_LE_BE(*ptr) ^ 1 << 15;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
120
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
121 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
122 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
123
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
124 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
125 convert_swap_sign_and_endian_to_alien(struct
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
126 xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
127 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
128 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
129 guint16 *ptr = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
130 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
131 for (i = 0; i < length; i += 2, ptr++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
132 *ptr = GUINT16_SWAP_LE_BE(*ptr ^ 1 << 15);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
133
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
134 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
135 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
136
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
137 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
138 convert_swap_sign16(struct xmms_convert_buffers *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
139 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
140 gint16 *ptr = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
141 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
142 for (i = 0; i < length; i += 2, ptr++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
143 *ptr ^= 1 << 15;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
144
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
145 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
146 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
147
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
148 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
149 convert_swap_sign8(struct xmms_convert_buffers *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
150 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
151 gint8 *ptr = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
152 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
153 for (i = 0; i < length; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
154 *ptr++ ^= 1 << 7;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
155
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
156 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
157 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
158
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
159 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
160 convert_to_8_native_endian(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
161 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
162 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
163 gint8 *output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
164 gint16 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
165 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
166 for (i = 0; i < length / 2; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
167 *output++ = *input++ >> 8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
168
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
169 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
170 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
171
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
172 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
173 convert_to_8_native_endian_swap_sign(struct xmms_convert_buffers
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
174 *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
175 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
176 gint8 *output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
177 gint16 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
178 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
179 for (i = 0; i < length / 2; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
180 *output++ = (*input++ >> 8) ^ (1 << 7);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
181
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
182 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
183 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
184
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
185
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
186 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
187 convert_to_8_alien_endian(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
188 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
189 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
190 gint8 *output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
191 gint16 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
192 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
193 for (i = 0; i < length / 2; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
194 *output++ = *input++ & 0xff;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
195
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
196 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
197 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
198
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
199 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
200 convert_to_8_alien_endian_swap_sign(struct xmms_convert_buffers
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
201 *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
202 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
203 gint8 *output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
204 gint16 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
205 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
206 for (i = 0; i < length / 2; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
207 *output++ = (*input++ & 0xff) ^ (1 << 7);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
208
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
209 return i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
210 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
211
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
212 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
213 convert_to_16_native_endian(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
214 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
215 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
216 guint8 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
217 guint16 *output;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
218 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
219 *data = convert_get_buffer(&buf->format_buffer, length * 2);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
220 output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
221 for (i = 0; i < length; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
222 *output++ = *input++ << 8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
223
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
224 return i * 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
225 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
226
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
227 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
228 convert_to_16_native_endian_swap_sign(struct
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
229 xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
230 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
231 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
232 guint8 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
233 guint16 *output;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
234 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
235 *data = convert_get_buffer(&buf->format_buffer, length * 2);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
236 output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
237 for (i = 0; i < length; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
238 *output++ = (*input++ << 8) ^ (1 << 15);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
239
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
240 return i * 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
241 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
242
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
243
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
244 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
245 convert_to_16_alien_endian(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
246 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
247 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
248 guint8 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
249 guint16 *output;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
250 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
251 *data = convert_get_buffer(&buf->format_buffer, length * 2);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
252 output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
253 for (i = 0; i < length; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
254 *output++ = *input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
255
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
256 return i * 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
257 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
258
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
259 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
260 convert_to_16_alien_endian_swap_sign(struct xmms_convert_buffers
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
261 *buf, void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
262 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
263 guint8 *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
264 guint16 *output;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
265 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
266 *data = convert_get_buffer(&buf->format_buffer, length * 2);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
267 output = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
268 for (i = 0; i < length; i++)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
269 *output++ = *input++ ^ (1 << 7);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
270
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
271 return i * 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
272 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
273
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
274 static AFormat
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
275 unnativize(AFormat fmt)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
276 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
277 if (fmt == FMT_S16_NE) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
278 if (IS_BIG_ENDIAN)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
279 return FMT_S16_BE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
280 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
281 return FMT_S16_LE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
282 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
283 if (fmt == FMT_U16_NE) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
284 if (IS_BIG_ENDIAN)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
285 return FMT_U16_BE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
286 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
287 return FMT_U16_LE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
288 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
289 return fmt;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
290 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
291
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
292 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
293 * xmms_convert_get_func:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
294 * @output: A format to output data as.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
295 * @input: The format of the inbound data.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
296 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
297 * Looks up the proper conversion method to use.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
298 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
299 * Return value: A function pointer to the desired conversion function.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
300 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
301 convert_func_t
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
302 xmms_convert_get_func(AFormat output, AFormat input)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
303 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
304 output = unnativize(output);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
305 input = unnativize(input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
306
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
307 if (output == input)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
308 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
309
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
310 if ((output == FMT_U16_BE && input == FMT_U16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
311 (output == FMT_U16_LE && input == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
312 (output == FMT_S16_BE && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
313 (output == FMT_S16_LE && input == FMT_S16_BE))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
314 return convert_swap_endian;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
315
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
316 if ((output == FMT_U16_BE && input == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
317 (output == FMT_U16_LE && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
318 (output == FMT_S16_BE && input == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
319 (output == FMT_S16_LE && input == FMT_U16_LE))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
320 return convert_swap_sign16;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
321
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
322 if ((IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
323 ((output == FMT_U16_BE && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
324 (output == FMT_S16_BE && input == FMT_U16_LE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
325 (!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
326 ((output == FMT_U16_LE && input == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
327 (output == FMT_S16_LE && input == FMT_U16_BE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
328 return convert_swap_sign_and_endian_to_native;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
329
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
330 if ((!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
331 ((output == FMT_U16_BE && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
332 (output == FMT_S16_BE && input == FMT_U16_LE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
333 (IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
334 ((output == FMT_U16_LE && input == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
335 (output == FMT_S16_LE && input == FMT_U16_BE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
336 return convert_swap_sign_and_endian_to_alien;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
337
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
338 if ((IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
339 ((output == FMT_U8 && input == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
340 (output == FMT_S8 && input == FMT_S16_BE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
341 (!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
342 ((output == FMT_U8 && input == FMT_U16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
343 (output == FMT_S8 && input == FMT_S16_LE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
344 return convert_to_8_native_endian;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
345
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
346 if ((IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
347 ((output == FMT_U8 && input == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
348 (output == FMT_S8 && input == FMT_U16_BE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
349 (!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
350 ((output == FMT_U8 && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
351 (output == FMT_S8 && input == FMT_U16_LE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
352 return convert_to_8_native_endian_swap_sign;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
353
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
354 if ((!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
355 ((output == FMT_U8 && input == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
356 (output == FMT_S8 && input == FMT_S16_BE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
357 (IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
358 ((output == FMT_U8 && input == FMT_U16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
359 (output == FMT_S8 && input == FMT_S16_LE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
360 return convert_to_8_alien_endian;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
361
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
362 if ((!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
363 ((output == FMT_U8 && input == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
364 (output == FMT_S8 && input == FMT_U16_BE))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
365 (IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
366 ((output == FMT_U8 && input == FMT_S16_LE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
367 (output == FMT_S8 && input == FMT_U16_LE))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
368 return convert_to_8_alien_endian_swap_sign;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
369
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
370 if ((output == FMT_U8 && input == FMT_S8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
371 (output == FMT_S8 && input == FMT_U8))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
372 return convert_swap_sign8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
373
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
374 if ((IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
375 ((output == FMT_U16_BE && input == FMT_U8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
376 (output == FMT_S16_BE && input == FMT_S8))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
377 (!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
378 ((output == FMT_U16_LE && input == FMT_U8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
379 (output == FMT_S16_LE && input == FMT_S8))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
380 return convert_to_16_native_endian;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
381
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
382 if ((IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
383 ((output == FMT_U16_BE && input == FMT_S8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
384 (output == FMT_S16_BE && input == FMT_U8))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
385 (!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
386 ((output == FMT_U16_LE && input == FMT_S8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
387 (output == FMT_S16_LE && input == FMT_U8))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
388 return convert_to_16_native_endian_swap_sign;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
389
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
390 if ((!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
391 ((output == FMT_U16_BE && input == FMT_U8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
392 (output == FMT_S16_BE && input == FMT_S8))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
393 (IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
394 ((output == FMT_U16_LE && input == FMT_U8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
395 (output == FMT_S16_LE && input == FMT_S8))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
396 return convert_to_16_alien_endian;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
397
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
398 if ((!IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
399 ((output == FMT_U16_BE && input == FMT_S8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
400 (output == FMT_S16_BE && input == FMT_U8))) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
401 (IS_BIG_ENDIAN &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
402 ((output == FMT_U16_LE && input == FMT_S8) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
403 (output == FMT_S16_LE && input == FMT_U8))))
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
404 return convert_to_16_alien_endian_swap_sign;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
405
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
406 g_warning("Translation needed, but not available.\n"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
407 "Input: %d; Output %d.", input, output);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
408 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
409 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
410
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
411 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
412 convert_mono_to_stereo(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
413 void **data, int length, int b16)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
414 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
415 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
416 void *outbuf = convert_get_buffer(&buf->stereo_buffer, length * 2);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
417
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
418 if (b16) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
419 guint16 *output = outbuf, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
420 for (i = 0; i < length / 2; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
421 *output++ = *input;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
422 *output++ = *input;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
423 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
424 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
425 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
426 else {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
427 guint8 *output = outbuf, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
428 for (i = 0; i < length; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
429 *output++ = *input;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
430 *output++ = *input;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
431 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
432 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
433 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
434 *data = outbuf;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
435
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
436 return length * 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
437 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
438
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
439 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
440 convert_mono_to_stereo_8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
441 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
442 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
443 return convert_mono_to_stereo(buf, data, length, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
444 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
445
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
446 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
447 convert_mono_to_stereo_16(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
448 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
449 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
450 return convert_mono_to_stereo(buf, data, length, TRUE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
451 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
452
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
453 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
454 convert_stereo_to_mono_u8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
455 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
456 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
457 guint8 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
458 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
459 for (i = 0; i < length / 2; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
460 guint16 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
461 tmp = *input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
462 tmp += *input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
463 *output++ = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
464 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
465 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
466 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
467 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
468 convert_stereo_to_mono_s8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
469 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
470 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
471 gint8 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
472 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
473 for (i = 0; i < length / 2; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
474 gint16 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
475 tmp = *input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
476 tmp += *input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
477 *output++ = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
478 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
479 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
480 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
481 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
482 convert_stereo_to_mono_u16le(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
483 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
484 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
485 guint16 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
486 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
487 for (i = 0; i < length / 4; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
488 guint32 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
489 guint16 stmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
490 tmp = GUINT16_FROM_LE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
491 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
492 tmp += GUINT16_FROM_LE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
493 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
494 stmp = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
495 *output++ = GUINT16_TO_LE(stmp);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
496 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
497 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
498 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
499
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
500 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
501 convert_stereo_to_mono_u16be(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
502 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
503 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
504 guint16 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
505 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
506 for (i = 0; i < length / 4; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
507 guint32 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
508 guint16 stmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
509 tmp = GUINT16_FROM_BE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
510 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
511 tmp += GUINT16_FROM_BE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
512 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
513 stmp = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
514 *output++ = GUINT16_TO_BE(stmp);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
515 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
516 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
517 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
518
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
519 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
520 convert_stereo_to_mono_s16le(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
521 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
522 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
523 gint16 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
524 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
525 for (i = 0; i < length / 4; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
526 gint32 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
527 gint16 stmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
528 tmp = GINT16_FROM_LE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
529 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
530 tmp += GINT16_FROM_LE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
531 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
532 stmp = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
533 *output++ = GINT16_TO_LE(stmp);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
534 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
535 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
536 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
537
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
538 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
539 convert_stereo_to_mono_s16be(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
540 void **data, int length)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
541 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
542 gint16 *output = *data, *input = *data;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
543 int i;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
544 for (i = 0; i < length / 4; i++) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
545 gint32 tmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
546 gint16 stmp;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
547 tmp = GINT16_FROM_BE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
548 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
549 tmp += GINT16_FROM_BE(*input);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
550 input++;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
551 stmp = tmp / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
552 *output++ = GINT16_TO_BE(stmp);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
553 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
554 return length / 2;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
555 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
556
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
557 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
558 * xmms_convert_get_channel_func:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
559 * @fmt: The format of the data.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
560 * @output: The number of channels to output as.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
561 * @input: The number of channels inbound.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
562 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
563 * Looks up the proper conversion method to use.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
564 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
565 * Return value: A function pointer to the desired conversion function.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
566 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
567 convert_channel_func_t
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
568 xmms_convert_get_channel_func(AFormat fmt, int output, int input)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
569 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
570 fmt = unnativize(fmt);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
571
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
572 if (output == input)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
573 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
574
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
575 if (input == 1 && output == 2)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
576 switch (fmt) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
577 case FMT_U8:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
578 case FMT_S8:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
579 return convert_mono_to_stereo_8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
580 case FMT_U16_LE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
581 case FMT_U16_BE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
582 case FMT_S16_LE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
583 case FMT_S16_BE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
584 return convert_mono_to_stereo_16;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
585 default:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
586 g_warning("Unknown format: %d" "No conversion available.", fmt);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
587 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
588 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
589 if (input == 2 && output == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
590 switch (fmt) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
591 case FMT_U8:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
592 return convert_stereo_to_mono_u8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
593 case FMT_S8:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
594 return convert_stereo_to_mono_s8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
595 case FMT_U16_LE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
596 return convert_stereo_to_mono_u16le;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
597 case FMT_U16_BE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
598 return convert_stereo_to_mono_u16be;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
599 case FMT_S16_LE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
600 return convert_stereo_to_mono_s16le;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
601 case FMT_S16_BE:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
602 return convert_stereo_to_mono_s16be;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
603 default:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
604 g_warning("Unknown format: %d. "
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
605 "No conversion available.", fmt);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
606 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
607
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
608 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
609
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
610 g_warning("Input has %d channels, soundcard uses %d channels\n"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
611 "No conversion is available", input, output);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
612 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
613 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
614
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
615
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
616 #define RESAMPLE_STEREO(sample_type, bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
617 const int shift = sizeof (sample_type); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
618 int i, in_samples, out_samples, x, delta; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
619 sample_type *inptr = *data, *outptr; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
620 guint nlen = (((length >> shift) * ofreq) / ifreq); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
621 void *nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
622 if (nlen == 0) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
623 return 0; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
624 nlen <<= shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
625 if (bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
626 convert_swap_endian(NULL, data, length); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
627 nbuf = convert_get_buffer(&buf->freq_buffer, nlen); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
628 outptr = nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
629 in_samples = length >> shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
630 out_samples = nlen >> shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
631 delta = (in_samples << 12) / out_samples; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
632 for (x = 0, i = 0; i < out_samples; i++) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
633 { \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
634 int x1, frac; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
635 x1 = (x >> 12) << 12; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
636 frac = x - x1; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
637 *outptr++ = \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
638 ((inptr[(x1 >> 12) << 1] * \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
639 ((1<<12) - frac) + \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
640 inptr[((x1 >> 12) + 1) << 1] * \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
641 frac) >> 12); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
642 *outptr++ = \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
643 ((inptr[((x1 >> 12) << 1) + 1] * \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
644 ((1<<12) - frac) + \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
645 inptr[(((x1 >> 12) + 1) << 1) + 1] * \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
646 frac) >> 12); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
647 x += delta; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
648 } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
649 if (bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
650 convert_swap_endian(NULL, &nbuf, nlen); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
651 *data = nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
652 return nlen; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
653
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
654
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
655 #define RESAMPLE_MONO(sample_type, bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
656 const int shift = sizeof (sample_type) - 1; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
657 int i, x, delta, in_samples, out_samples; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
658 sample_type *inptr = *data, *outptr; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
659 guint nlen = (((length >> shift) * ofreq) / ifreq); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
660 void *nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
661 if (nlen == 0) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
662 return 0; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
663 nlen <<= shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
664 if (bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
665 convert_swap_endian(NULL, data, length); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
666 nbuf = convert_get_buffer(&buf->freq_buffer, nlen); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
667 outptr = nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
668 in_samples = length >> shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
669 out_samples = nlen >> shift; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
670 delta = ((length >> shift) << 12) / out_samples; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
671 for (x = 0, i = 0; i < out_samples; i++) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
672 { \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
673 int x1, frac; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
674 x1 = (x >> 12) << 12; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
675 frac = x - x1; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
676 *outptr++ = \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
677 ((inptr[x1 >> 12] * ((1<<12) - frac) + \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
678 inptr[(x1 >> 12) + 1] * frac) >> 12); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
679 x += delta; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
680 } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
681 if (bswap) \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
682 convert_swap_endian(NULL, &nbuf, nlen); \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
683 *data = nbuf; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
684 return nlen; \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
685
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
686 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
687 convert_resample_stereo_s16ne(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
688 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
689 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
690 RESAMPLE_STEREO(gint16, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
691 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
692
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
693 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
694 convert_resample_stereo_s16ae(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
695 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
696 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
697 RESAMPLE_STEREO(gint16, TRUE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
698 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
699
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
700 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
701 convert_resample_stereo_u16ne(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
702 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
703 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
704 RESAMPLE_STEREO(guint16, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
705 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
706
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
707 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
708 convert_resample_stereo_u16ae(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
709 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
710 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
711 RESAMPLE_STEREO(guint16, TRUE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
712 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
713
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
714 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
715 convert_resample_mono_s16ne(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
716 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
717 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
718 RESAMPLE_MONO(gint16, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
719 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
720
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
721 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
722 convert_resample_mono_s16ae(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
723 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
724 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
725 RESAMPLE_MONO(gint16, TRUE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
726 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
727
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
728 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
729 convert_resample_mono_u16ne(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
730 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
731 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
732 RESAMPLE_MONO(guint16, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
733 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
734
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
735 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
736 convert_resample_mono_u16ae(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
737 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
738 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
739 RESAMPLE_MONO(guint16, TRUE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
740 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
741
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
742 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
743 convert_resample_stereo_u8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
744 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
745 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
746 RESAMPLE_STEREO(guint8, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
747 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
748
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
749 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
750 convert_resample_mono_u8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
751 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
752 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
753 RESAMPLE_MONO(guint8, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
754 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
755
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
756 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
757 convert_resample_stereo_s8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
758 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
759 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
760 RESAMPLE_STEREO(gint8, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
761 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
762
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
763 static int
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
764 convert_resample_mono_s8(struct xmms_convert_buffers *buf,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
765 void **data, int length, int ifreq, int ofreq)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
766 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
767 RESAMPLE_MONO(gint8, FALSE);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
768 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
769
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
770
2056
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
771 /**
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
772 * xmms_convert_get_frequency_func:
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
773 * @fmt: The format of the data.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
774 * @channels: The number of channels inbound.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
775 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
776 * Looks up the proper conversion method to use.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
777 *
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
778 * Return value: A function pointer to the desired conversion function.
6f1346ce2764 [svn] - document xconvert
nenolod
parents: 625
diff changeset
779 **/
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
780 convert_freq_func_t
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
781 xmms_convert_get_frequency_func(AFormat fmt, int channels)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
782 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
783 fmt = unnativize(fmt);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
784 g_message("fmt %d, channels: %d", fmt, channels);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
785
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
786 if (channels < 1 || channels > 2) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
787 g_warning("Unsupported number of channels: %d. "
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
788 "Resample function not available", channels);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
789 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
790 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
791 if ((IS_BIG_ENDIAN && fmt == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
792 (!IS_BIG_ENDIAN && fmt == FMT_U16_LE)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
793 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
794 return convert_resample_mono_u16ne;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
795 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
796 return convert_resample_stereo_u16ne;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
797 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
798 if ((IS_BIG_ENDIAN && fmt == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
799 (!IS_BIG_ENDIAN && fmt == FMT_S16_LE)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
800 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
801 return convert_resample_mono_s16ne;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
802 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
803 return convert_resample_stereo_s16ne;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
804 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
805 if ((!IS_BIG_ENDIAN && fmt == FMT_U16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
806 (IS_BIG_ENDIAN && fmt == FMT_U16_LE)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
807 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
808 return convert_resample_mono_u16ae;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
809 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
810 return convert_resample_stereo_u16ae;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
811 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
812 if ((!IS_BIG_ENDIAN && fmt == FMT_S16_BE) ||
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
813 (IS_BIG_ENDIAN && fmt == FMT_S16_LE)) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
814 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
815 return convert_resample_mono_s16ae;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
816 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
817 return convert_resample_stereo_s16ae;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
818 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
819 if (fmt == FMT_U8) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
820 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
821 return convert_resample_mono_u8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
822 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
823 return convert_resample_stereo_u8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
824 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
825 if (fmt == FMT_S8) {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
826 if (channels == 1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
827 return convert_resample_mono_s8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
828 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
829 return convert_resample_stereo_s8;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
830 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
831 g_warning("Resample function not available" "Format %d.", fmt);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
832 return NULL;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
833 }