Changeset 3530:8ca4bb4cc5b0 in roaraudio
- Timestamp:
- 02/19/10 18:09:41 (14 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/ctl.c
r3529 r3530 221 221 m.cmd = ROAR_CMD_SET_VOL; 222 222 m.datalen = (3 + channels) * 2; 223 info[0] = 0; 224 info[1] = ROAR_HOST2NET16(id); 223 m.stream = id; 224 info[0] = ROAR_HOST2NET16(1); 225 info[1] = ROAR_HOST2NET16(mixer->scale); 225 226 info[2] = ROAR_HOST2NET16(ROAR_SET_VOL_ALL); 226 227 -
roarclients/roarctl.c
r3529 r3530 435 435 436 436 if ( roar_get_vol(con, stream, &mixer, &channels) == -1 ) { 437 fprintf(stderr, "Error: can not get stream mixer info \n");437 fprintf(stderr, "Error: can not get stream mixer info for stream %i\n", stream); 438 438 return -1; 439 439 } … … 465 465 } 466 466 467 static unsigned int set_mixer_parse_volume (char * k, int len) { 467 static unsigned int set_mixer_parse_volume (char * k, int len, uint16_t scale) { 468 float fs = scale; 469 468 470 switch (k[len - 1]) { 469 471 case '%': 470 472 k[len - 1] = 0; 471 return (atof(k)* 65535.f)/100;473 return (atof(k)*fs)/100.; 472 474 break; 473 475 #ifdef ROAR_HAVE_LIBM … … 479 481 480 482 k[len - 2] = 0; 481 return powf(10, atof(k)/20.f)* 65535.f;483 return powf(10, atof(k)/20.f)*fs; 482 484 break; 483 485 #endif … … 488 490 489 491 int set_mixer (struct roar_connection * con, int * cur, int max, char * arg[]) { 492 uint16_t scale = 65535; 490 493 int chans = 0; 491 494 int id; … … 506 509 507 510 if ( roar_get_vol(con, id, &old_mixer, &old_chans) == -1 ) { 508 fprintf(stderr, "Error: can not get stream mixer info\n"); 509 return -1; 510 } 511 511 fprintf(stderr, "Error: can not get stream mixer info for stream %i\n", id); 512 return -1; 513 } 514 515 if ( !strcmp(arg[*cur + 1], "scale") ) { 516 (*cur)++; // 'scale' 517 scale = atoi(arg[++(*cur)]); 518 } 512 519 513 520 // TODO: clean up code here as the % vs. abs code is very duplicate... … … 522 529 len = strlen(k); 523 530 524 vol_mono = set_mixer_parse_volume(k, len );531 vol_mono = set_mixer_parse_volume(k, len, scale); 525 532 526 533 for (i = 0; i < old_chans; i++) … … 538 545 len = strlen(k); 539 546 540 vol_l = set_mixer_parse_volume(k, len );547 vol_l = set_mixer_parse_volume(k, len, scale); 541 548 542 549 k = arg[++(*cur)]; 543 550 len = strlen(k); 544 551 545 vol_r = set_mixer_parse_volume(k, len );552 vol_r = set_mixer_parse_volume(k, len, scale); 546 553 547 554 vol_mono = (vol_l + vol_r) / 2; … … 597 604 len = strlen(k); 598 605 599 mixer.mixer[i] = set_mixer_parse_volume(k, len );600 } 601 } 602 603 mixer.scale = 65535;606 mixer.mixer[i] = set_mixer_parse_volume(k, len, scale); 607 } 608 } 609 610 mixer.scale = scale; 604 611 605 612 return roar_set_vol(con, id, &mixer, chans); -
roard/req.c
r3529 r3530 737 737 738 738 int req_on_set_vol (int client, struct roar_message * mes, char * data) { 739 struct roar_stream_server * s; 739 740 uint16_t * info = (uint16_t *) mes->data; 741 uint16_t version; 742 uint16_t scale = 65535; 740 743 int stream; 741 struct roar_stream_server * s;742 744 int i; 743 745 int chans; … … 749 751 return -1; 750 752 751 if ( info[0] != 0 ) // version 752 return -1; 753 754 stream = ROAR_NET2HOST16(info[1]); 753 version = ROAR_NET2HOST16(info[0]); 754 ROAR_DBG("req_on_set_vol(*): version=%i", (int)version); 755 756 switch (version) { 757 case 0: 758 stream = ROAR_NET2HOST16(info[1]); 759 break; 760 case 1: 761 stream = mes->stream; 762 scale = ROAR_NET2HOST16(info[1]); 763 break; 764 default: 765 return -1; 766 break; 767 } 755 768 ROAR_DBG("req_on_set_vol(*): stream=%i", stream); 756 769 … … 785 798 } 786 799 800 s->mixer.scale = scale; 801 787 802 ROAR_DBG("req_on_set_vol(*): mixer changed!"); 788 803 … … 793 808 794 809 s->mixer.mixer[ROAR_NET2HOST16(info[3])] = ROAR_NET2HOST16(info[4]); 810 811 s->mixer.scale = scale; 795 812 } else { 796 813 return -1;
Note: See TracChangeset
for help on using the changeset viewer.