Changeset 4740:f3abf82e2ead in roaraudio for libroar


Ignore:
Timestamp:
01/31/11 02:21:19 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added support for UNMAPPED volume control (Closes: #55)

Location:
libroar
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libroar/ctl.c

    r4708 r4740  
    228228 
    229229int roar_set_vol      (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int channels) { 
     230 return roar_set_vol2(con, id, mixer, channels, ROAR_SET_VOL_ALL); 
     231} 
     232 
     233int roar_set_vol2     (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int   channels, int mode) { 
    230234 struct roar_message m; 
    231235 uint16_t * info = (uint16_t *) m.data; 
     
    239243 info[0] = ROAR_HOST2NET16(1); 
    240244 info[1] = ROAR_HOST2NET16(mixer->scale); 
    241  info[2] = ROAR_HOST2NET16(ROAR_SET_VOL_ALL); 
     245 info[2] = ROAR_HOST2NET16(mode); 
    242246 
    243247 for (i = 0; i < channels; i++) 
  • libroar/vs.c

    r4719 r4740  
    829829 int oldchannels; 
    830830 int handled; 
     831 int mode = ROAR_SET_VOL_ALL; 
    831832 
    832833 _ckvss(-1); 
     
    864865 mixer.scale = 65535; 
    865866 
    866  if ( channels != oldchannels ) { 
    867   handled = 0; 
    868   switch (oldchannels) { 
    869    case 1: 
    870      if ( channels == 2 ) { 
    871       mixer.mixer[0] = (mixer.mixer[0] + mixer.mixer[1]) / 2; 
    872       handled = 1; 
    873      } 
    874     break; 
    875    case 2: 
    876      if ( channels == 1 ) { 
    877       mixer.mixer[1] = mixer.mixer[0]; 
    878       handled = 1; 
    879      } 
    880     break; 
    881    case 4: 
    882      if ( channels == 1 ) { 
    883       mixer.mixer[1] = mixer.mixer[0]; 
    884       mixer.mixer[2] = mixer.mixer[0]; 
    885       mixer.mixer[3] = mixer.mixer[0]; 
    886       handled = 1; 
    887      } else if ( channels == 2 ) { 
    888       mixer.mixer[2] = mixer.mixer[0]; 
    889       mixer.mixer[3] = mixer.mixer[1]; 
    890       handled = 1; 
    891      } 
    892     break; 
    893   } 
    894   if ( handled ) { 
    895    channels = oldchannels; 
    896   } else { 
    897    _seterr(ROAR_ERROR_INVAL); 
    898    return -1; 
    899   } 
    900  } 
    901  
    902  if ( roar_set_vol(vss->con, roar_stream_get_id(&(vss->stream)), &mixer, channels) == -1 ) { 
     867 if ( channels != oldchannels ) 
     868  mode = ROAR_SET_VOL_UNMAPPED; 
     869 
     870 if ( roar_set_vol2(vss->con, roar_stream_get_id(&(vss->stream)), &mixer, channels, mode) == 0 ) 
     871  return 0; 
     872 
     873 if ( mode == ROAR_SET_VOL_ALL ) { 
     874  _seterrre(); 
     875  return -1; 
     876 } 
     877 
     878 if ( roar_conv_volume(&mixer, &mixer, oldchannels, channels) == -1 ) { 
     879  _seterrre(); 
     880  return -1; 
     881 } 
     882 
     883 channels = oldchannels; 
     884 mode     = ROAR_SET_VOL_ALL; 
     885 
     886 if ( roar_set_vol2(vss->con, roar_stream_get_id(&(vss->stream)), &mixer, channels, mode) == -1 ) { 
    903887  _seterrre(); 
    904888  return -1; 
Note: See TracChangeset for help on using the changeset viewer.