Changeset 3530:8ca4bb4cc5b0 in roaraudio


Ignore:
Timestamp:
02/19/10 18:09:41 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

support to give scale parameter to roarctl

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libroar/ctl.c

    r3529 r3530  
    221221 m.cmd     = ROAR_CMD_SET_VOL; 
    222222 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); 
    225226 info[2] = ROAR_HOST2NET16(ROAR_SET_VOL_ALL); 
    226227 
  • roarclients/roarctl.c

    r3529 r3530  
    435435 
    436436 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); 
    438438  return -1; 
    439439 } 
     
    465465} 
    466466 
    467 static unsigned int set_mixer_parse_volume (char * k, int len) { 
     467static unsigned int set_mixer_parse_volume (char * k, int len, uint16_t scale) { 
     468 float fs = scale; 
     469 
    468470 switch (k[len - 1]) { 
    469471  case '%': 
    470472    k[len - 1] = 0; 
    471     return (atof(k)*65535.f)/100; 
     473    return (atof(k)*fs)/100.; 
    472474   break; 
    473475#ifdef ROAR_HAVE_LIBM 
     
    479481 
    480482    k[len - 2] = 0; 
    481     return powf(10, atof(k)/20.f)*65535.f; 
     483    return powf(10, atof(k)/20.f)*fs; 
    482484   break; 
    483485#endif 
     
    488490 
    489491int set_mixer (struct roar_connection * con, int * cur, int max, char * arg[]) { 
     492 uint16_t scale = 65535; 
    490493 int chans = 0; 
    491494 int id; 
     
    506509 
    507510 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 } 
    512519 
    513520// TODO: clean up code here as the % vs. abs code is very duplicate... 
     
    522529  len = strlen(k); 
    523530 
    524   vol_mono = set_mixer_parse_volume(k, len); 
     531  vol_mono = set_mixer_parse_volume(k, len, scale); 
    525532 
    526533  for (i = 0; i < old_chans; i++) 
     
    538545  len = strlen(k); 
    539546 
    540   vol_l = set_mixer_parse_volume(k, len); 
     547  vol_l = set_mixer_parse_volume(k, len, scale); 
    541548 
    542549  k   = arg[++(*cur)]; 
    543550  len = strlen(k); 
    544551 
    545   vol_r = set_mixer_parse_volume(k, len); 
     552  vol_r = set_mixer_parse_volume(k, len, scale); 
    546553 
    547554  vol_mono = (vol_l + vol_r) / 2; 
     
    597604   len = strlen(k); 
    598605 
    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; 
    604611 
    605612 return roar_set_vol(con, id, &mixer, chans); 
  • roard/req.c

    r3529 r3530  
    737737 
    738738int req_on_set_vol (int client, struct roar_message * mes, char * data) { 
     739 struct roar_stream_server * s; 
    739740 uint16_t * info = (uint16_t *) mes->data; 
     741 uint16_t   version; 
     742 uint16_t   scale = 65535; 
    740743 int stream; 
    741  struct roar_stream_server * s; 
    742744 int i; 
    743745 int chans; 
     
    749751  return -1; 
    750752 
    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 } 
    755768 ROAR_DBG("req_on_set_vol(*): stream=%i", stream); 
    756769 
     
    785798  } 
    786799 
     800  s->mixer.scale = scale; 
     801 
    787802  ROAR_DBG("req_on_set_vol(*): mixer changed!"); 
    788803 
     
    793808 
    794809  s->mixer.mixer[ROAR_NET2HOST16(info[3])] = ROAR_NET2HOST16(info[4]); 
     810 
     811  s->mixer.scale = scale; 
    795812 } else { 
    796813  return -1; 
Note: See TracChangeset for help on using the changeset viewer.