Changeset 919:0d97efb0782c in roaraudio


Ignore:
Timestamp:
12/06/08 23:28:06 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote working(!) OSS driver

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/driver.c

    r912 r919  
    3232 { "roar", "RoarAudio driver", "localhost, remote.host.dom", driver_roar_open, driver_roar_close, driver_roar_pause, driver_roar_write, driver_roar_read, driver_roar_flush, NULL}, 
    3333 { "raw",  "RAW PCM driver", "/some/file", driver_raw_open, driver_raw_close, driver_roar_pause, driver_raw_write, driver_raw_read, driver_raw_flush, NULL}, 
     34#if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 
     35 { "oss", "Open Sound System", ROAR_DEFAULT_OSS_DEV, NULL, driver_oss_close, NULL, NULL, NULL, NULL, driver_oss_open}, 
     36#endif 
    3437#ifdef ROAR_HAVE_LIBAO 
    3538 { "ao", "libao audio driver", "DRIVER", driver_ao_open, driver_ao_close, driver_ao_pause, driver_ao_write, driver_ao_read, driver_ao_flush, NULL}, 
  • roard/driver_oss.c

    r917 r919  
    2626#if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 
    2727 
     28#define er() close(fh); return -1 
     29 
    2830int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info) { 
     31 int tmp; 
     32 int fh; 
     33 
     34 if ( device == NULL ) 
     35  device = ROAR_DEFAULT_OSS_DEV; 
     36 
     37 roar_vio_init_calls(inst); 
     38 
     39 if ( (fh = open(device, O_WRONLY, 0644)) == -1 ) { 
     40  ROAR_ERR("driver_oss_open(*): Can not open OSS device: %s: %s", device, strerror(errno)); 
     41  return -1; 
     42 } 
     43 
     44 roar_vio_set_fh(inst, fh); 
     45 
     46 switch (info->channels) { 
     47  case  1: tmp = 0; break; 
     48  case  2: tmp = 1; break; 
     49  default: er(); 
     50 } 
     51 
     52 if ( ioctl(fh, SNDCTL_DSP_STEREO, &tmp) == -1 ) { 
     53  er(); 
     54 } 
     55 
     56 switch (info->bits) { 
     57  case  8: tmp = AFMT_S8; break; 
     58  case 16: 
     59    switch (info->codec) { 
     60     case ROAR_CODEC_PCM_S_LE: tmp = AFMT_S16_LE; break; 
     61     case ROAR_CODEC_PCM_S_BE: tmp = AFMT_S16_BE; break; 
     62     default                 : er(); 
     63    } 
     64   break; 
     65  default: er(); 
     66 } 
     67 
     68 if ( ioctl(fh, SNDCTL_DSP_SAMPLESIZE, &tmp) == -1 ) { 
     69  er(); 
     70 } 
     71 
     72 tmp = info->rate; 
     73 
     74 if ( ioctl(fh, SNDCTL_DSP_SPEED, &tmp) == -1 ) { 
     75  er(); 
     76 } 
     77 
     78 if ( tmp < info->rate * 0.98 || tmp > info->rate * 1.02 ) { 
     79  er(); 
     80 } 
     81 
     82 return 0; 
    2983} 
    3084 
    3185int driver_oss_close(DRIVER_USERDATA_T   inst) { 
     86 return close(roar_vio_get_fh((struct roar_vio_calls *)inst)); 
    3287} 
    3388 
Note: See TracChangeset for help on using the changeset viewer.