Changeset 2132:bc44d4901e33 in roaraudio for libroareio
- Timestamp:
- 07/24/09 00:04:50 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroareio/driver_oss.c
r2131 r2132 26 26 #include "driver.h" 27 27 28 #if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 29 30 #if defined(__OpenBSD__) || defined(__NetBSD__) 31 #include <soundcard.h> 32 #else 33 #include <sys/soundcard.h> 34 #endif 35 #include <sys/ioctl.h> 36 37 #define _err() roar_vio_close(calls); return -1 38 28 39 int roar_cdriver_oss(struct roar_vio_calls * calls, char * name, char * dev, struct roar_audio_info * info, int dir) { 29 return -1; 40 int fh; 41 int tmp, ctmp; 42 43 if ( dev == NULL ) 44 dev = ROAR_DEFAULT_OSS_DEV; 45 46 if ( dev == NULL ) 47 return -1; 48 49 if ( roar_vio_open_file(calls, dev, O_RDWR, 0644) == -1 ) 50 return -1; 51 52 if ( roar_vio_ctl(calls, ROAR_VIO_CTL_GET_FH, &fh) == -1 ) { 53 _err(); 54 } 55 56 // channels: 57 #ifdef SNDCTL_DSP_CHANNELS 58 tmp = info->channels; 59 60 if ( ioctl(fh, SNDCTL_DSP_CHANNELS, &tmp) == -1 ) { 61 _err(); 62 } 63 64 if ( tmp != info->channels ) { 65 _err(); 66 } 67 #else 68 switch (info->channels) { 69 case 1: tmp = 0; break; 70 case 2: tmp = 1; break; 71 default: _err(); 72 } 73 74 if ( ioctl(fh, SNDCTL_DSP_STEREO, &tmp) == -1 ) { 75 _err(); 76 } 77 #endif 78 79 // codec/bits: 80 if ( info->codec != ROAR_CODEC_ALAW && info->codec != ROAR_CODEC_MULAW && info->bits != 16 ) { 81 // other modes are currently not supported 82 _err(); 83 } 84 85 switch (info->codec) { 86 case ROAR_CODEC_PCM_S_LE: 87 tmp = AFMT_S16_LE; 88 case ROAR_CODEC_PCM_S_BE: 89 tmp = AFMT_S16_BE; 90 case ROAR_CODEC_PCM_U_LE: 91 tmp = AFMT_U16_LE; 92 case ROAR_CODEC_PCM_U_BE: 93 tmp = AFMT_U16_BE; 94 break; 95 case ROAR_CODEC_ALAW: 96 tmp = AFMT_A_LAW; 97 break; 98 case ROAR_CODEC_MULAW: 99 tmp = AFMT_MU_LAW; 100 break; 101 } 102 103 ctmp = tmp; 104 #ifdef SNDCTL_DSP_SETFMT 105 if ( ioctl(fh, SNDCTL_DSP_SETFMT, &tmp) == -1 ) { 106 #else 107 if ( ioctl(fh, SNDCTL_DSP_SAMPLESIZE, &tmp) == -1 ) { 108 #endif 109 _err(); 110 } 111 112 if ( tmp != ctmp ) { 113 _err(); 114 } 115 116 // rate: 117 tmp = info->rate; 118 119 if ( ioctl(fh, SNDCTL_DSP_SPEED, &tmp) == -1 ) { 120 _err(); 121 } 122 123 if ( tmp != info->rate ) { 124 _err(); 125 } 126 127 return 0; 30 128 } 31 129 130 #endif 131 32 132 //ll
Note: See TracChangeset
for help on using the changeset viewer.