Changeset 4389:346c516e9ce1 in roaraudio


Ignore:
Timestamp:
09/15/10 01:47:01 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

get substreams based on subnames working

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/hwmixer_oss.c

    r4388 r4389  
    3939} g_subdevs[] = { 
    4040 {"Volume", {.bit = SOUND_MASK_VOLUME, .cmd_read = SOUND_MIXER_READ_VOLUME, .cmd_write = SOUND_MIXER_WRITE_VOLUME}}, 
     41 {"PCM",    {.bit = SOUND_MASK_PCM,    .cmd_read = SOUND_MIXER_READ_PCM,    .cmd_write = SOUND_MIXER_WRITE_PCM}}, 
    4142 {NULL} 
    4243}; 
     
    4647 struct subdev * source_subdev = NULL; 
    4748 struct roar_stream_server * ss; 
     49 const char * reqname = subname->value; 
    4850 int i; 
     51 char name[80]; 
    4952 
    5053 for (i = 0; g_subdevs[i].name != NULL; i++) { 
    5154  if ( !strcasecmp(subname->key, g_subdevs[i].name) ) { 
    5255   source_subdev = &(g_subdevs[i].subdev); 
     56   if ( reqname == NULL ) 
     57    reqname = g_subdevs[i].name; 
    5358   break; 
    5459  } 
     
    7176 
    7277 stream->ud     = subdev; 
     78 
     79 if ( basename == NULL ) { 
     80  streams_set_name(stream->stream, reqname); 
     81 } else { 
     82  snprintf(name, sizeof(name)-1, "%s/%s", basename, reqname); 
     83  name[sizeof(name)-1] = 0; 
     84  streams_set_name(stream->stream, name); 
     85 } 
    7386 
    7487 if (streams_get(stream->stream, &ss) != -1) { 
     
    8699 struct roar_vio_sysio_ioctl ctl; 
    87100 struct roar_keyval kv; 
     101 struct hwmixer_stream * cstream; 
    88102 int devmask, sdevmask; 
     103 size_t i; 
    89104 
    90105 if ( vio == NULL ) { 
     
    138153 } 
    139154 
    140  kv.key   = "Volume"; 
    141  kv.value = NULL; 
    142  
    143  if ( hwmixer_oss_open_stream(stream, devmask, sdevmask, basename, &kv) == -1 ) { 
    144   roar_vio_close(vio); 
    145   roar_mm_free(vio); 
    146   return -1; 
     155 if ( subnamelen == 0 ) { 
     156  kv.key   = "Volume"; 
     157  kv.value = NULL; 
     158 
     159  if ( hwmixer_oss_open_stream(stream, devmask, sdevmask, basename, &kv) == -1 ) { 
     160   roar_vio_close(vio); 
     161   roar_mm_free(vio); 
     162   return -1; 
     163  } 
     164 } else { 
     165  if ( hwmixer_oss_open_stream(stream, devmask, sdevmask, basename, subnames) == -1 ) { 
     166   roar_vio_close(vio); 
     167   roar_mm_free(vio); 
     168   return -1; 
     169  } 
     170 
     171  for (i = 1; i < subnamelen; i++) { 
     172   cstream = hwmixer_substream_new(stream); 
     173   if ( hwmixer_oss_open_stream(cstream, devmask, sdevmask, basename, &(subnames[i])) == -1 ) { 
     174    roar_vio_close(vio); 
     175    roar_mm_free(vio); 
     176    return -1; 
     177   } 
     178  } 
    147179 } 
    148180 
Note: See TracChangeset for help on using the changeset viewer.