Changeset 4740:f3abf82e2ead in roaraudio for libroar/vs.c


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)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.