Changeset 1064:cc490b4af5df in roaraudio
- Timestamp:
- 12/25/08 17:06:29 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroardsp/convert.c
r1061 r1064 34 34 35 35 #include "libroar.h" 36 //#define free(p) {ROAR_WARN("free(%p) = ?", (p)); free((p)); ROAR_WARN("free(%p): OK", (p));} 36 37 37 38 int roar_conv_bits (void * out, void * in, int samples, int from, int to) { … … 299 300 int i, h; 300 301 302 ROAR_DBG("roar_conv_chans_2to116(out=%p, in=%p, samples=%i) = ?", out, in, samples); 303 301 304 samples -= 2; 302 305 303 for (h = (i = samples) / 2; i >= 0; i -= 2, h--) 306 for (h = (i = samples) / 2; i >= 0; i -= 2, h--) { 307 ROAR_DBG("roar_conv_chans_2to116(out=%p, in=%p, samples=%i): op[%i] = (ip[%i] + ip[%i])/2", out, in, samples, h, i, i+1); 304 308 op[h] = ((int)ip[i + 0] + (int)ip[i + 1]) / 2; 309 } 305 310 306 311 return 0; … … 327 332 return roar_conv_rate_161zoh(out, in, samples, from, to); 328 333 case 2: 334 return roar_conv_rate_162zoh(out, in, samples, from, to); 329 335 default: 330 336 return -1; … … 350 356 for (i= 0; i < samples; i++) { 351 357 op[(int)t] = ip[i]; 358 t += step; 359 } 360 361 return 0; 362 } 363 364 int roar_conv_rate_162zoh(void * out, void * in, int samples, int from, int to) { 365 int16_t * ip = in; 366 int16_t * op = out; 367 float t = 0; 368 float step = (float)to/from; 369 int i; 370 371 ROAR_DBG("roar_conv_rate_162zoh(*): samples=%i", samples); 372 samples /= 2; 373 samples -= 1; 374 ROAR_DBG("roar_conv_rate_162zoh(*): samples=%i", samples); 375 376 for (i= 0; i < samples; i++) { 377 ROAR_DBG("roar_conv_rate_162zoh(*): t=%f, i=%i // op[%i] = ip[%i]", t, i, 2*(int)t, 2*i); 378 op[2*(int)t ] = ip[2*i ]; 379 op[2*(int)t + 1] = ip[2*i + 1]; 352 380 t += step; 353 381 } … … 607 635 608 636 from_size = (from->bits * samples) / 8; 609 to_size = ( to->bits * samples) / 8; 637 to_size = ( to->bits * samples * to->rate * to->channels) / (8 * from->rate * from->channels); 638 639 ROAR_DBG("roar_conv(*): size: %i->%i", from_size, to_size); 610 640 611 641 if ( to_size < from_size ) { … … 663 693 if ( roar_conv_rate(out, ip, samples, from->rate, to->rate, to->bits, from->channels) == -1 ) { 664 694 ROAR_DBG("roar_conv(*): failed to convert rate %i->%i (%ich%ibits)", from->rate, to->rate, to->bits, from->channels); 695 if ( to_size < from_size ) 696 free(out); 665 697 return -1; 666 698 } else { 667 699 ip = out; 700 samples = (samples * to->rate) / from->rate; 668 701 } 669 702 } … … 693 726 memcpy(real_out, out, to_size); 694 727 free(out); 728 ROAR_DBG("roar_conv(*): free(%p): OK!", out); 695 729 } 696 730
Note: See TracChangeset
for help on using the changeset viewer.