Changeset 3548:f45c9bcfcf20 in roaraudio
- Timestamp:
- 02/20/10 02:38:05 (14 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroardsp/channels.h
r3543 r3548 140 140 int roardsp_chanmap_calc(struct roardsp_chanmap * map, int what, int err_on_none); 141 141 142 int roardsp_chanmap_mappcm8 (char * out, char * in, size_t len, size_t chans, char * map); 143 int roardsp_chanmap_mappcm16(int16_t * out, int16_t * in, size_t len, size_t chans, char * map); 144 int roardsp_chanmap_mappcm24(void * out, void * in, size_t len, size_t chans, char * map); 145 int roardsp_chanmap_mappcm32(int32_t * out, int32_t * in, size_t len, size_t chans, char * map); 146 int roardsp_chanmap_mappcm (void * out, void * in, size_t len, size_t chans, char * map, int bits); 147 142 148 #endif 143 149 -
libroardsp/channels.c
r3545 r3548 25 25 26 26 #include "libroardsp.h" 27 #include "roaraudio/units.h" 27 28 28 29 static struct { … … 393 394 } 394 395 396 int roardsp_chanmap_mappcm8 (char * out, char * in, size_t len, size_t chans, char * map) { 397 char buf[ROAR_MAX_CHANNELS]; 398 size_t frame; 399 size_t c; 400 401 if ( len == 0 ) 402 return 0; 403 404 if ( out == NULL || in == NULL || map == NULL ) 405 return -1; 406 407 if ( chans > ROAR_MAX_CHANNELS ) 408 return -1; 409 410 if ( in == out ) { 411 for (frame = 0; frame < len/(chans*_8BIT); frame++) { 412 memset(buf, 0, sizeof(buf)); 413 414 for (c = 0; c < chans; c++) { 415 buf[map[c]*_8BIT] = in[c]; 416 } 417 418 memcpy(out, buf, chans*_8BIT); 419 420 in += chans; 421 out += chans; 422 } 423 } else { 424 memset(out, 0, len); // silance channels we do not use 425 for (frame = 0; frame < len/(chans*_8BIT); frame++) { 426 for (c = 0; c < chans; c++) { 427 out[map[c]*_8BIT] = in[c]; 428 } 429 in += chans; 430 out += chans; 431 } 432 } 433 434 return 0; 435 } 436 437 int roardsp_chanmap_mappcm16(int16_t * out, int16_t * in, size_t len, size_t chans, char * map) { 438 int16_t buf[ROAR_MAX_CHANNELS]; 439 size_t frame; 440 size_t c; 441 442 if ( len == 0 ) 443 return 0; 444 445 if ( out == NULL || in == NULL || map == NULL ) 446 return -1; 447 448 if ( chans > ROAR_MAX_CHANNELS ) 449 return -1; 450 451 if ( in == out ) { 452 for (frame = 0; frame < len/(chans*_16BIT); frame++) { 453 memset(buf, 0, sizeof(buf)); 454 455 for (c = 0; c < chans; c++) { 456 buf[map[c]*_16BIT] = in[c]; 457 } 458 459 memcpy(out, buf, chans*_16BIT); 460 461 in += chans; 462 out += chans; 463 } 464 } else { 465 memset(out, 0, len); // silance channels we do not use 466 for (frame = 0; frame < len/(chans*_16BIT); frame++) { 467 for (c = 0; c < chans; c++) { 468 out[map[c]*_16BIT] = in[c]; 469 } 470 in += chans; 471 out += chans; 472 } 473 } 474 475 return 0; 476 } 477 478 int roardsp_chanmap_mappcm24(void * out, void * in, size_t len, size_t chans, char * map) { 479 return -1; 480 } 481 482 int roardsp_chanmap_mappcm32(int32_t * out, int32_t * in, size_t len, size_t chans, char * map) { 483 int32_t buf[ROAR_MAX_CHANNELS]; 484 size_t frame; 485 size_t c; 486 487 if ( len == 0 ) 488 return 0; 489 490 if ( out == NULL || in == NULL || map == NULL ) 491 return -1; 492 493 if ( chans > ROAR_MAX_CHANNELS ) 494 return -1; 495 496 if ( in == out ) { 497 for (frame = 0; frame < len/(chans*_32BIT); frame++) { 498 memset(buf, 0, sizeof(buf)); 499 500 for (c = 0; c < chans; c++) { 501 buf[map[c]*_32BIT] = in[c]; 502 } 503 504 memcpy(out, buf, chans*_32BIT); 505 506 in += chans; 507 out += chans; 508 } 509 } else { 510 memset(out, 0, len); // silance channels we do not use 511 for (frame = 0; frame < len/(chans*_32BIT); frame++) { 512 for (c = 0; c < chans; c++) { 513 out[map[c]*_32BIT] = in[c]; 514 } 515 in += chans; 516 out += chans; 517 } 518 } 519 520 return 0; 521 } 522 523 int roardsp_chanmap_mappcm (void * out, void * in, size_t len, size_t chans, char * map, int bits) { 524 if ( len == 0 ) 525 return 0; 526 527 if ( out == NULL || in == NULL || map == NULL ) 528 return -1; 529 530 if ( chans > ROAR_MAX_CHANNELS ) 531 return -1; 532 533 switch (bits) { 534 case 8: return roardsp_chanmap_mappcm8(out, in, len, chans, map); break; 535 case 16: return roardsp_chanmap_mappcm16(out, in, len, chans, map); break; 536 case 24: return roardsp_chanmap_mappcm24(out, in, len, chans, map); break; 537 case 32: return roardsp_chanmap_mappcm32(out, in, len, chans, map); break; 538 default: 539 return -1; 540 break; 541 } 542 } 543 395 544 //ll
Note: See TracChangeset
for help on using the changeset viewer.