Changeset 919:0d97efb0782c in roaraudio for roard/driver_oss.c
- Timestamp:
- 12/06/08 23:28:06 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver_oss.c
r917 r919 26 26 #if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 27 27 28 #define er() close(fh); return -1 29 28 30 int 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; 29 83 } 30 84 31 85 int driver_oss_close(DRIVER_USERDATA_T inst) { 86 return close(roar_vio_get_fh((struct roar_vio_calls *)inst)); 32 87 } 33 88
Note: See TracChangeset
for help on using the changeset viewer.