Changeset 2386:0ff0440ba500 in roaraudio
- Timestamp:
- 08/16/09 05:36:30 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile.inc
r2380 r2386 7 7 # libroardsp: 8 8 DSP_CODECLIBS = $(lib_celt) $(lib_speex) 9 LIBROARDSP_NS = $(DSP_CODECLIBS) $(LIBROAR) $(lib_m) 9 DSP_AUXLIBS = $(lib_samplerate) 10 LIBROARDSP_NS = $(DSP_CODECLIBS) $(DSP_AUXLIBS) $(LIBROAR) $(lib_m) 10 11 LIBROARDSP = -lroardsp $(LIBROARDSP_NS) 11 12 -
include/libroardsp/convert.h
r2093 r2386 72 72 int roar_conv_rate_162zoh(void * out, void * in, int samples, int from, int to); 73 73 int roar_conv_rate_16nzoh(void * out, void * in, int samples, int from, int to, int channels); 74 int roar_conv_rate_SRC (void * out, void * in, int samples, int from, int to, int bits, int channels); 74 75 75 76 int roar_conv_codec (void * out, void * in, int samples, int from, int to, int bits); -
include/libroardsp/libroardsp.h
r2316 r2386 44 44 #ifdef ROAR_HAVE_LIBSPEEX 45 45 #include "transcode_speex.h" 46 #endif 47 48 #ifdef ROAR_HAVE_LIBSAMPLERATE 49 #include <samplerate.h> 46 50 #endif 47 51 -
libroardsp/convert.c
r2103 r2386 313 313 314 314 int roar_conv_rate (void * out, void * in, int samples, int from, int to, int bits, int channels) { 315 #ifdef ROAR_HAVE_LIBSAMPLERATE 316 return roar_conv_rate_SRC(out, in, samples, from, to, bits, channels); 317 #else 315 318 if ( bits == 8 ) 316 319 return roar_conv_rate_8(out, in, samples, from, to, channels); … … 320 323 321 324 return -1; 325 #endif 322 326 } 323 327 … … 371 375 ROAR_DBG("roar_conv_rate_162zoh(*): samples=%i", samples); 372 376 samples /= 2; 373 samples -= 1;377 // samples -= 1; 374 378 ROAR_DBG("roar_conv_rate_162zoh(*): samples=%i", samples); 375 379 … … 382 386 383 387 return 0; 388 } 389 390 int roar_conv_rate_SRC (void * out, void * in, int samples, int from, int to, int bits, int channels) { 391 #ifdef ROAR_HAVE_LIBSAMPLERATE 392 double radio = (double) to / (double) from; 393 int outsamples = radio * samples; 394 float * inf = malloc(samples*sizeof(float)); 395 float * outf = malloc(outsamples*sizeof(float)); 396 int i; 397 SRC_DATA srcdata; 398 399 ROAR_DBG("roar_conv_rate_SRC(*): radio=%lf, samples=%i, outsamples=%i", radio, samples, outsamples); 400 401 if ( inf == NULL ) { 402 if ( outf != NULL ) 403 free(outf); 404 405 return -1; 406 } 407 408 if ( outf == NULL ) { 409 if ( inf != NULL ) 410 free(inf); 411 412 return -1; 413 } 414 415 switch (bits) { 416 case 8: 417 for (i = 0; i < samples; i++) 418 inf[i] = *(((int8_t *)in)+i) / 128.0; 419 break; 420 case 16: 421 for (i = 0; i < samples; i++) 422 inf[i] = *(((int16_t*)in)+i) / 32768.0; 423 break; 424 case 32: 425 for (i = 0; i < samples; i++) 426 inf[i] = *(((int32_t*)in)+i) / 2147483648.0; 427 break; 428 default: 429 free(outf); 430 free(inf); 431 return -1; 432 } 433 434 srcdata.data_in = inf; 435 srcdata.data_out = outf; 436 srcdata.input_frames = samples/channels; 437 srcdata.output_frames = outsamples/channels; 438 srcdata.src_ratio = radio; 439 440 if ( src_simple(&srcdata, SRC_SINC_FASTEST, channels) != 0 ) { 441 free(outf); 442 free(inf); 443 return -1; 444 } 445 446 switch (bits) { 447 case 8: 448 for (i = 0; i < samples; i++) 449 *(((int8_t *)out)+i) = outf[i] * 128.0; 450 break; 451 case 16: 452 for (i = 0; i < samples; i++) 453 *(((int16_t*)out)+i) = outf[i] * 32768.0; 454 break; 455 case 32: 456 for (i = 0; i < samples; i++) 457 *(((int32_t*)out)+i) = outf[i] * 2147483648.0; 458 break; 459 // no errors here, they are handled above 460 } 461 462 free(outf); 463 free(inf); 464 465 return 0; 466 #else 467 return -1; 468 #endif 384 469 } 385 470 … … 743 828 744 829 memcpy(&cinfo, from, sizeof(cinfo)); 830 831 /* 832 if ( in != out ) { 833 memset(out, 0xA0, bufsize); 834 } else { 835 ROAR_WARN("roar_conv2(*): in==out!"); 836 } 837 */ 745 838 746 839 // calcumate number of input samples:
Note: See TracChangeset
for help on using the changeset viewer.