Changeset 3853:b0150a5af2c7 in roaraudio for libroareio


Ignore:
Timestamp:
05/16/10 22:40:21 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

use new support for ROAR_VIO_CTL_SYSIO_IOCTL

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroareio/driver_oss.c

    r3811 r3853  
    3737 
    3838#ifdef SNDCTL_DSP_SETFRAGMENT 
    39 static void roar_cdriver_oss_try_buf_setups(int fh) { 
     39static void roar_cdriver_oss_try_buf_setups(struct roar_vio_calls * calls) { 
     40 struct roar_vio_sysio_ioctl ctl; 
    4041 int blocksizes[] = {11, 12, 13}; 
    4142 int blocks[]     = {4, 5, 6, 3, 7, 2, 8}; 
     
    4344 int tmp; 
    4445 
     46 ctl.cmd  = SNDCTL_DSP_SETFRAGMENT; 
     47 ctl.argp = &tmp; 
     48 
    4549 for (bs = 0; bs < sizeof(blocksizes)/sizeof(int); bs++) { 
    4650  for (b = 0; b  < sizeof(blocks)    /sizeof(int); b++ ) { 
    4751   tmp = blocksizes[bs] | (blocks[b] << 16); 
    48    if ( ioctl(fh, SNDCTL_DSP_SETFRAGMENT, &tmp) == 0 ) 
     52   if ( roar_vio_ctl(calls, ROAR_VIO_CTL_SYSIO_IOCTL, &ctl) == 0 ) 
    4953    return; 
    5054  } 
     
    5660 
    5761int roar_cdriver_oss(struct roar_vio_calls * calls, char * name, char * dev, struct roar_audio_info * info, int dir) { 
    58  int fh; 
     62 struct roar_vio_sysio_ioctl ctl; 
    5963 int tmp, ctmp; 
     64 
     65 // preinit ctl struct, we always pass ints in tmp. 
     66 ctl.argp = &tmp; 
    6067 
    6168 ROAR_DBG("roar_cdriver_oss(*) = ?"); 
     
    9299  return -1; 
    93100 
    94  if ( roar_vio_ctl(calls, ROAR_VIO_CTL_GET_FH, &fh) == -1 ) { 
    95   _err(); 
    96  } 
    97  
    98101// channels: 
    99102#ifdef SNDCTL_DSP_CHANNELS 
    100103 tmp = info->channels; 
    101104 
    102  if ( ioctl(fh, SNDCTL_DSP_CHANNELS, &tmp) == -1 ) { 
     105 ctl.cmd  = SNDCTL_DSP_CHANNELS; 
     106 
     107 if ( roar_vio_ctl(calls, ROAR_VIO_CTL_SYSIO_IOCTL, &ctl) == -1 ) { 
    103108  _err(); 
    104109 } 
     
    114119 } 
    115120 
    116  if ( ioctl(fh, SNDCTL_DSP_STEREO, &tmp) == -1 ) { 
     121 ctl.cmd = SNDCTL_DSP_STEREO; 
     122 
     123 if ( roar_vio_ctl(calls, ROAR_VIO_CTL_SYSIO_IOCTL, &ctl) == -1 ) { 
    117124  _err(); 
    118125 } 
     
    150157 ctmp = tmp; 
    151158#ifdef SNDCTL_DSP_SETFMT 
    152  if ( ioctl(fh, SNDCTL_DSP_SETFMT, &tmp) == -1 ) { 
     159 ctl.cmd = SNDCTL_DSP_SETFMT; 
    153160#else 
    154  if ( ioctl(fh, SNDCTL_DSP_SAMPLESIZE, &tmp) == -1 ) { 
     161 ctl.cmd = SNDCTL_DSP_SAMPLESIZE; 
    155162#endif 
     163 
     164 if ( roar_vio_ctl(calls, ROAR_VIO_CTL_SYSIO_IOCTL, &ctl) == -1 ) { 
    156165  _err(); 
    157166 } 
     
    164173 tmp = info->rate; 
    165174 
    166  if ( ioctl(fh, SNDCTL_DSP_SPEED, &tmp) == -1 ) { 
     175 ctl.cmd = SNDCTL_DSP_SPEED; 
     176 if ( roar_vio_ctl(calls, ROAR_VIO_CTL_SYSIO_IOCTL, &ctl) == -1 ) { 
    167177  _err(); 
    168178 } 
     
    173183 
    174184#ifdef SNDCTL_DSP_SETFRAGMENT 
    175  roar_cdriver_oss_try_buf_setups(fh); 
     185 roar_cdriver_oss_try_buf_setups(calls); 
    176186#endif 
    177187 
Note: See TracChangeset for help on using the changeset viewer.