Changeset 4384:58d6bf7eb6a6 in roaraudio for libroar/ctl.c
- Timestamp:
- 09/14/10 23:33:19 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/ctl.c
r4333 r4384 616 616 } 617 617 618 int roar_conv_volume (struct roar_mixer_settings * dst, struct roar_mixer_settings * src, int dstchans, int srcchans) { 619 int i; 620 uint_least32_t s; 621 622 if ( dst == NULL || src == NULL || dstchans < 0 || srcchans < 0 ) 623 return -1; 624 625 if ( dstchans == srcchans ) { 626 memcpy(dst, src, sizeof(struct roar_mixer_settings)); 627 return 0; 628 } 629 630 // sepcal handling for N->1: 631 if ( dstchans == 1 ) { 632 s = 0; 633 634 for (i = 0; i < srcchans; i++) 635 s += src->mixer[i]; 636 637 dst->mixer[0] = s / srcchans; 638 } else { 639 switch (srcchans) { 640 case 1: 641 for (i = 0; i < dstchans; i++) 642 dst->mixer[i] = src->mixer[0]; 643 break; 644 case 2: 645 switch (dstchans) { 646 case 3: 647 dst->mixer[0] = src->mixer[0]; 648 dst->mixer[1] = src->mixer[1]; 649 dst->mixer[2] = (src->mixer[0] + src->mixer[1]) / 2; 650 break; 651 case 4: 652 dst->mixer[0] = src->mixer[0]; 653 dst->mixer[1] = src->mixer[1]; 654 dst->mixer[2] = src->mixer[0]; 655 dst->mixer[3] = src->mixer[1]; 656 break; 657 case 5: 658 dst->mixer[0] = src->mixer[0]; 659 dst->mixer[1] = src->mixer[1]; 660 dst->mixer[2] = (src->mixer[0] + src->mixer[1]) / 2; 661 dst->mixer[3] = src->mixer[0]; 662 dst->mixer[4] = src->mixer[1]; 663 break; 664 case 6: 665 dst->mixer[0] = src->mixer[0]; 666 dst->mixer[1] = src->mixer[1]; 667 dst->mixer[2] = (src->mixer[0] + src->mixer[1]) / 2; 668 dst->mixer[3] = dst->mixer[2]; 669 dst->mixer[4] = src->mixer[0]; 670 dst->mixer[5] = src->mixer[1]; 671 break; 672 default: 673 return -1; 674 break; 675 } 676 break; 677 case 3: 678 switch (dstchans) { 679 case 2: 680 dst->mixer[0] = src->mixer[0]; 681 dst->mixer[1] = src->mixer[1]; 682 break; 683 case 4: 684 dst->mixer[0] = src->mixer[0]; 685 dst->mixer[1] = src->mixer[1]; 686 dst->mixer[2] = src->mixer[0]; 687 dst->mixer[3] = src->mixer[1]; 688 break; 689 case 5: 690 dst->mixer[0] = src->mixer[0]; 691 dst->mixer[1] = src->mixer[1]; 692 dst->mixer[2] = src->mixer[2]; 693 dst->mixer[3] = src->mixer[0]; 694 dst->mixer[4] = src->mixer[1]; 695 break; 696 case 6: 697 dst->mixer[0] = src->mixer[0]; 698 dst->mixer[1] = src->mixer[1]; 699 dst->mixer[2] = src->mixer[2]; 700 dst->mixer[3] = src->mixer[2]; 701 dst->mixer[4] = src->mixer[0]; 702 dst->mixer[5] = src->mixer[1]; 703 break; 704 default: 705 return -1; 706 break; 707 } 708 break; 709 case 4: 710 switch (dstchans) { 711 case 2: 712 dst->mixer[0] = (src->mixer[0] + src->mixer[2]) / 2; 713 dst->mixer[1] = (src->mixer[1] + src->mixer[3]) / 2; 714 break; 715 case 3: 716 dst->mixer[0] = (src->mixer[0] + src->mixer[2]) / 2; 717 dst->mixer[1] = (src->mixer[1] + src->mixer[3]) / 2; 718 dst->mixer[2] = (dst->mixer[0] + dst->mixer[1]) / 2; 719 break; 720 case 5: 721 dst->mixer[0] = src->mixer[0]; 722 dst->mixer[1] = src->mixer[1]; 723 dst->mixer[2] = (src->mixer[0] + src->mixer[2] + src->mixer[1] + src->mixer[3]) / 4; 724 dst->mixer[3] = src->mixer[2]; 725 dst->mixer[4] = src->mixer[3]; 726 break; 727 case 6: 728 dst->mixer[0] = src->mixer[0]; 729 dst->mixer[1] = src->mixer[1]; 730 dst->mixer[2] = (src->mixer[0] + src->mixer[2] + src->mixer[1] + src->mixer[3]) / 4; 731 dst->mixer[3] = dst->mixer[2]; 732 dst->mixer[4] = src->mixer[2]; 733 dst->mixer[5] = src->mixer[3]; 734 break; 735 default: 736 return -1; 737 break; 738 } 739 break; 740 case 5: 741 switch (dstchans) { 742 case 2: 743 dst->mixer[0] = (src->mixer[0] + src->mixer[3]) / 2; 744 dst->mixer[1] = (src->mixer[1] + src->mixer[4]) / 2; 745 break; 746 case 3: 747 dst->mixer[0] = (src->mixer[0] + src->mixer[3]) / 2; 748 dst->mixer[1] = (src->mixer[1] + src->mixer[4]) / 2; 749 dst->mixer[2] = src->mixer[2]; 750 break; 751 case 4: 752 dst->mixer[0] = src->mixer[0]; 753 dst->mixer[1] = src->mixer[1]; 754 dst->mixer[2] = src->mixer[3]; 755 dst->mixer[3] = src->mixer[4]; 756 break; 757 case 6: 758 dst->mixer[0] = src->mixer[0]; 759 dst->mixer[1] = src->mixer[1]; 760 dst->mixer[2] = src->mixer[2]; 761 dst->mixer[3] = src->mixer[2]; 762 dst->mixer[4] = src->mixer[3]; 763 dst->mixer[5] = src->mixer[4]; 764 break; 765 default: 766 return -1; 767 break; 768 } 769 break; 770 case 6: 771 switch (dstchans) { 772 case 2: 773 dst->mixer[0] = (src->mixer[0] + src->mixer[4]) / 2; 774 dst->mixer[1] = (src->mixer[1] + src->mixer[5]) / 2; 775 break; 776 case 3: 777 dst->mixer[0] = (src->mixer[0] + src->mixer[4]) / 2; 778 dst->mixer[1] = (src->mixer[1] + src->mixer[5]) / 2; 779 dst->mixer[2] = src->mixer[2]; 780 break; 781 case 4: 782 dst->mixer[0] = src->mixer[0]; 783 dst->mixer[1] = src->mixer[1]; 784 dst->mixer[2] = src->mixer[4]; 785 dst->mixer[3] = src->mixer[5]; 786 break; 787 case 5: 788 dst->mixer[0] = src->mixer[0]; 789 dst->mixer[1] = src->mixer[1]; 790 dst->mixer[2] = src->mixer[2]; 791 dst->mixer[3] = src->mixer[4]; 792 dst->mixer[4] = src->mixer[5]; 793 break; 794 default: 795 return -1; 796 break; 797 } 798 break; 799 default: 800 return -1; 801 break; 802 } 803 } 804 805 dst->scale = src->scale; 806 dst->rpg_mul = src->rpg_mul; 807 dst->rpg_div = src->rpg_div; 808 809 return 0; 810 } 811 618 812 //ll
Note: See TracChangeset
for help on using the changeset viewer.