Changeset 4277:3d2c02fc7a50 in roaraudio for roard/req.c
- Timestamp:
- 08/28/10 19:26:29 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/req.c
r4273 r4277 668 668 struct roar_stream_server * ss; 669 669 struct roar_audio_info * audio_info; 670 uint16_t * d = (uint16_t *) mes->data; 671 int i; 670 struct roar_stream_ltm * ltm; 671 uint16_t * d = (uint16_t *) mes->data; 672 int64_t * d64 = ( int64_t *) mes->data; 673 int64_t * d64ptr; 674 int i, h, k; 672 675 char * str; 676 size_t needed; 677 int test, bits; 673 678 674 679 if ( mes->datalen != 4 ) … … 755 760 break; 756 761 762 case ROAR_STREAM_PARA_LTM: 763 if ( mes->datalen < (6 * 2) ) 764 return -1; 765 766 for (i = 2; i < mes->datalen/2; i++) { 767 d[i] = ROAR_NET2HOST16(d[i]); 768 } 769 770 if ( d[2] != ROAR_LTM_SST_GET_RAW ) 771 return -1; 772 773 test = d[5]; 774 bits = 0; 775 while (test) { 776 if ( test & 0x1 ) 777 bits++; 778 779 test >>= 1; 780 } 781 782 needed = 0; 783 784 if ( mes->stream == -1 ) { 785 for (i = 6; i < mes->datalen/2; i++) { 786 if ( (ltm = streams_lzm_get(d[i], d[5], d[3])) == NULL ) 787 return -1; 788 789 needed += ltm->channels; 790 } 791 } else { 792 if ( (ltm = streams_lzm_get(mes->stream, d[5], d[3])) == NULL ) 793 return -1; 794 795 needed = ltm->channels; 796 } 797 798 needed *= bits; 799 800 needed += mes->stream == -1 ? (mes->datalen/2) - 6 : 1; 801 needed += 2; // header 802 803 if ( needed > LIBROAR_BUFFER_MSGDATA ) { 804 return -1; 805 if ( (d64 = malloc(needed*8)) == NULL ) 806 return -1; 807 808 *data = (char*)d64; 809 } 810 811 d64 = (int64_t*)mes->data; 812 813 if ( (d = roar_mm_malloc(mes->datalen)) == NULL ) 814 return -1; 815 816 memcpy(d, mes->data, mes->datalen); 817 818 // TODO: copy requested data over 819 d64[0] = 0; 820 d64[1] = 0; 821 822 d64ptr = &(d64[2]); 823 824 if ( mes->stream == -1 ) { 825 for (i = 6; i < mes->datalen/2; i++) { 826 if ( (ltm = streams_lzm_get(d[i], d[5], d[3])) == NULL ) 827 return -1; 828 829 *d64ptr = ltm->channels & 0xFFFF; 830 d64ptr++; 831 832 for (h = 0; h < ltm->channels; h++) { 833 for (k = 0; k < ROAR_LTM_MTBITS; k++) { 834 if ( d[5] & (1<<k) ) { 835 switch (1<<k) { 836 case ROAR_LTM_MT_RMS: 837 *d64ptr = ltm->cur[h].rms; 838 break; 839 default: 840 ROAR_ERR("req_on_get_stream_para(client=%i, ...): client requets unknown MT for LTM: bit %i", client, k); 841 } 842 d64ptr++; 843 } 844 } 845 } 846 } 847 } else { 848 if ( (ltm = streams_lzm_get(mes->stream, d[5], d[3])) == NULL ) 849 return -1; 850 851 *d64ptr = ltm->channels & 0xFFFF; 852 d64ptr++; 853 854 for (h = 0; h < ltm->channels; h++) { 855 for (k = 0; k < ROAR_LTM_MTBITS; k++) { 856 if ( d[5] & (1<<k) ) { 857 switch (1<<k) { 858 case ROAR_LTM_MT_RMS: 859 *d64ptr = ltm->cur[h].rms; 860 break; 861 default: 862 ROAR_ERR("req_on_get_stream_para(client=%i, ...): client requets unknown MT for LTM: bit %i", client, k); 863 } 864 d64ptr++; 865 } 866 } 867 } 868 } 869 870 roar_mm_free(d); 871 872 for (i = 0; i < needed; i++) { 873 d64[i] = ROAR_HOST2NET64(d64[i]); 874 } 875 876 mes->datalen = needed * 8; 877 break; 878 757 879 default: 758 880 ROAR_WARN("req_on_get_stream_para(*): unsupported command: %i", d[1]); … … 810 932 break; 811 933 case ROAR_STREAM_PARA_LTM: 934 if ( mes->datalen < (6 * 2) ) 935 return -1; 936 812 937 for (i = 2; i < mes->datalen/2; i++) { 813 938 d[i] = ROAR_NET2HOST16(d[i]); … … 815 940 816 941 if ( mes->stream == -1 ) { 817 return -1;818 819 942 for (i = 6; i < mes->datalen/2; i++) 820 943 if ( streams_ltm_ctl(d[i], d[5], d[3], d[2]) == -1 )
Note: See TracChangeset
for help on using the changeset viewer.