Changeset 850:b498ce53df3a in roaraudio for libroardsp/convert.c
- Timestamp:
- 09/28/08 12:45:25 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroardsp/convert.c
r849 r850 132 132 133 133 int roar_conv_chans (void * out, void * in, int samples, int from, int to, int bits) { 134 if ( from == 1 ) { 135 if ( bits == 8 ) { 136 return roar_conv_chans_1ton8(out, in, samples, to); 137 } else if ( bits == 16 ) { 138 return roar_conv_chans_1ton16(out, in, samples, to); 139 } else { 140 return -1; 141 } 142 } else if ( to == 1 ) { 143 if ( bits == 8 ) { 144 return roar_conv_chans_nto18(out, in, samples, from); 145 } else if ( bits == 16 ) { 146 return roar_conv_chans_nto116(out, in, samples, from); 147 } else { 148 return -1; 149 } 134 if ( from == to ) { 135 if ( in == out ) 136 return 0; 137 138 memcpy(out, in, samples * from * bits / 8); 139 return 0; 140 } 141 142 switch (bits) { 143 case 8: 144 switch (from) { 145 case 1: 146 switch (to) { 147 case 2: return roar_conv_chans_1to28(out, in, samples); 148 default: return roar_conv_chans_1ton8(out, in, samples, to); 149 } 150 break; 151 case 2: 152 switch (to) { 153 case 1: return roar_conv_chans_2to18(out, in, samples); 154 default: return -1; 155 } 156 break; 157 default: 158 switch (to) { 159 case 1: return roar_conv_chans_nto18(out, in, samples, from); 160 default: return -1; 161 } 162 } 163 break; 164 case 16: 165 switch (from) { 166 case 1: 167 switch (to) { 168 case 2: return roar_conv_chans_1to216(out, in, samples); 169 default: return roar_conv_chans_1ton16(out, in, samples, to); 170 } 171 break; 172 case 2: 173 switch (to) { 174 case 1: return roar_conv_chans_2to116(out, in, samples); 175 default: return -1; 176 } 177 break; 178 default: 179 switch (to) { 180 case 1: return roar_conv_chans_nto116(out, in, samples, from); 181 default: return -1; 182 } 183 } 184 break; 185 default: return -1; 150 186 } 151 187 … … 165 201 } 166 202 203 int roar_conv_chans_1to28 (void * out, void * in, int samples) { 204 char * ip = (char*) in, * op = (char*) out; 205 int i; 206 207 samples = (samples - 1) * 2; 208 209 for (i = samples; i >= 0; i -= 2) { 210 op[i + 0] = ip[i]; 211 op[i + 1] = ip[i]; 212 } 213 214 return 0; 215 } 216 167 217 int roar_conv_chans_1ton16 (void * out, void * in, int samples, int to) { 168 218 int16_t * ip = (int16_t*) in, * op = (int16_t*) out; … … 177 227 } 178 228 229 int roar_conv_chans_1to216 (void * out, void * in, int samples) { 230 int16_t * ip = (int16_t*) in, * op = (int16_t*) out; 231 int i; 232 233 samples = (samples - 1) * 2; 234 235 for (i = samples; i >= 0; i -= 2) { 236 op[i + 0] = ip[i]; 237 op[i + 1] = ip[i]; 238 } 239 240 return 0; 241 } 242 179 243 int roar_conv_chans_nto18 (void * out, void * in, int samples, int from) { 180 244 int8_t * ip = (int8_t*) in, * op = (int8_t*) out; … … 198 262 } 199 263 264 int roar_conv_chans_2to18 (void * out, void * in, int samples) { 265 int8_t * ip = (int8_t*) in, * op = (int8_t*) out; 266 int i; 267 268 samples -= 2; 269 270 for (i = samples; i >= 0; i -= 2) 271 op[i] = ((int)ip[i + 0] + (int)ip[i + 1]) / 2; 272 273 return 0; 274 } 275 200 276 int roar_conv_chans_nto116 (void * out, void * in, int samples, int from) { 201 277 int16_t * ip = (int16_t*) in, * op = (int16_t*) out; … … 215 291 op[i] = s; 216 292 } 293 294 return 0; 295 } 296 297 int roar_conv_chans_2to116 (void * out, void * in, int samples) { 298 int16_t * ip = (int16_t*) in, * op = (int16_t*) out; 299 int i; 300 301 samples -= 2; 302 303 for (i = samples; i >= 0; i -= 2) 304 op[i] = ((int)ip[i + 0] + (int)ip[i + 1]) / 2; 217 305 218 306 return 0;
Note: See TracChangeset
for help on using the changeset viewer.