Changeset 1532:ce5df2df033d in roaraudio
- Timestamp:
- 04/12/09 01:07:24 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver_oss.c
r1530 r1532 94 94 int tmp, ctmp; 95 95 char * es; 96 int autoconfig = 0; 97 int need_update_server = 0; 96 98 97 99 if ( fh == -1 ) 98 100 return -1; 101 102 if ( self->ssid != -1 ) { 103 autoconfig = streams_get_flag(self->ssid, ROAR_FLAG_AUTOCONF); 104 } 105 106 ROAR_WARN("driver_oss_config_device(self=%p): ssid=%i, autoconfig=%i", self, self->ssid, autoconfig); 99 107 100 108 #ifdef SNDCTL_DSP_CHANNELS … … 107 115 108 116 if ( tmp != info->channels ) { 117 if ( autoconfig ) { 118 need_update_server = 1; 119 self->info.channels = tmp; 120 } else { 109 121 ROAR_ERR("driver_oss_open(*): can not set requested numer of channels, OSS suggested %i channels, to use this restart with -oO channels=%i or set codec manuelly via -oO channels=num", tmp, tmp); 110 return -1; 122 return -1; 123 } 111 124 } 112 125 #else … … 186 199 187 200 if ( tmp != ctmp ) { 188 es = NULL; 189 switch (tmp) { 190 case AFMT_S8 : es = "bits=8,codec=pcm"; break; 191 case AFMT_U8 : es = "bits=8,codec=pcm_u_le"; break; 192 case AFMT_S16_LE: es = "bits=16,codec=pcm_s_le"; break; 193 case AFMT_S16_BE: es = "bits=16,codec=pcm_s_be"; break; 194 case AFMT_U16_LE: es = "bits=16,codec=pcm_u_le"; break; 195 case AFMT_U16_BE: es = "bits=16,codec=pcm_u_be"; break; 201 if ( autoconfig ) { 202 need_update_server = 1; 203 switch (tmp) { 204 case AFMT_S8 : self->info.bits = 8; self->info.codec = ROAR_CODEC_PCM; break; 205 case AFMT_U8 : self->info.bits = 8; self->info.codec = ROAR_CODEC_PCM_U_LE; break; 206 case AFMT_S16_LE: self->info.bits = 16; self->info.codec = ROAR_CODEC_PCM_S_LE; break; 207 case AFMT_S16_BE: self->info.bits = 16; self->info.codec = ROAR_CODEC_PCM_S_BE; break; 208 case AFMT_U16_LE: self->info.bits = 16; self->info.codec = ROAR_CODEC_PCM_U_LE; break; 209 case AFMT_U16_BE: self->info.bits = 16; self->info.codec = ROAR_CODEC_PCM_U_BE; break; 196 210 #ifdef AFMT_S32_LE 197 case AFMT_S32_LE: es = "bits=32,codec=pcm_s_le"; break;211 case AFMT_S32_LE: self->info.bits = 32; self->info.codec = ROAR_CODEC_PCM_S_LE; break; 198 212 #endif 199 213 #ifdef AFMT_S32_BE 200 case AFMT_S32_BE: es = "bits=32,codec=pcm_s_be"; break;201 #endif 202 case AFMT_A_LAW : es = "codec=alaw";break;203 case AFMT_MU_LAW: es = "codec=mulaw";break;214 case AFMT_S32_BE: self->info.bits = 32; self->info.codec = ROAR_CODEC_PCM_S_BE; break; 215 #endif 216 case AFMT_A_LAW : self->info.bits = 8; self->info.codec = ROAR_CODEC_ALAW; break; 217 case AFMT_MU_LAW: self->info.bits = 8; self->info.codec = ROAR_CODEC_MULAW; break; 204 218 #ifdef AFMT_VORBIS 205 case AFMT_VORBIS: es = "codec=ogg_vorbis"; break; 206 #endif 207 } 208 209 if ( es != NULL ) { 210 ROAR_ERR("driver_oss_open(*): can not set requested codec, OSS retruned another codec than requested, to use this restart with -oO %s or set codec manuelly via -oO codec=somecodec", es); 219 case AFMT_VORBIS: self->info.codec = ROAR_CODEC_OGG_VORBIS; break; 220 #endif 221 default: 222 ROAR_WARN("driver_oss_config_device(*): Auto config failed: unknown OSS Codec %i", tmp); 223 ROAR_ERR("driver_oss_config_device(*): can not set requested codec, set codec manuelly via -oO codec=somecodec"); 224 break; 225 } 211 226 } else { 212 ROAR_ERR("driver_oss_open(*): can not set requested codec, set codec manuelly via -oO codec=somecodec"); 213 } 214 return -1; 227 es = NULL; 228 switch (tmp) { 229 case AFMT_S8 : es = "bits=8,codec=pcm"; break; 230 case AFMT_U8 : es = "bits=8,codec=pcm_u_le"; break; 231 case AFMT_S16_LE: es = "bits=16,codec=pcm_s_le"; break; 232 case AFMT_S16_BE: es = "bits=16,codec=pcm_s_be"; break; 233 case AFMT_U16_LE: es = "bits=16,codec=pcm_u_le"; break; 234 case AFMT_U16_BE: es = "bits=16,codec=pcm_u_be"; break; 235 #ifdef AFMT_S32_LE 236 case AFMT_S32_LE: es = "bits=32,codec=pcm_s_le"; break; 237 #endif 238 #ifdef AFMT_S32_BE 239 case AFMT_S32_BE: es = "bits=32,codec=pcm_s_be"; break; 240 #endif 241 case AFMT_A_LAW : es = "codec=alaw"; break; 242 case AFMT_MU_LAW: es = "codec=mulaw"; break; 243 #ifdef AFMT_VORBIS 244 case AFMT_VORBIS: es = "codec=ogg_vorbis"; break; 245 #endif 246 } 247 248 if ( es != NULL ) { 249 ROAR_ERR("driver_oss_open(*): can not set requested codec, OSS retruned another codec than requested, to use this restart with -oO %s or set codec manuelly via -oO codec=somecodec", es); 250 } else { 251 ROAR_ERR("driver_oss_open(*): can not set requested codec, set codec manuelly via -oO codec=somecodec"); 252 } 253 return -1; 254 } 215 255 } 216 256 … … 223 263 224 264 if ( tmp != info->rate ) { 225 ROAR_WARN("driver_oss_config_device(*): Device does not support requested sample rate: req=%iHz, sug=%iHz", 226 info->rate, tmp); 227 228 if ( tmp < info->rate * 0.98 || tmp > info->rate * 1.02 ) { 229 ROAR_ERR("driver_oss_open(*): sample rate out of acceptable accuracy"); 230 return -1; 265 if ( autoconfig ) { 266 need_update_server = 1; 267 self->info.rate = tmp; 268 } else { 269 ROAR_WARN("driver_oss_config_device(*): Device does not support requested sample rate: req=%iHz, sug=%iHz", 270 info->rate, tmp); 271 272 if ( tmp < info->rate * 0.98 || tmp > info->rate * 1.02 ) { 273 ROAR_ERR("driver_oss_open(*): sample rate out of acceptable accuracy"); 274 return -1; 275 } 231 276 } 232 277 } … … 268 313 #endif 269 314 315 if ( need_update_server ) { 316 if ( self->stream == NULL ) { 317 streams_get(self->ssid, &(self->stream)); 318 } 319 320 if ( self->stream == NULL ) { 321 ROAR_ERR("driver_oss_config_device(*): Auto config failed: can not set new values for stream: no stream object known"); 322 return -1; 323 } 324 325 memcpy(&(ROAR_STREAM(self->stream)->info), info, sizeof(struct roar_audio_info)); 326 } 327 270 328 self->need_config = 0; 271 329 … … 391 449 *(uint_least32_t *)data = self->blocksize; 392 450 break; 393 case ROAR_VIO_CTL_ GET_SSTREAMID:451 case ROAR_VIO_CTL_SET_SSTREAMID: 394 452 self->ssid = *(int *)data; 395 453 break;
Note: See TracChangeset
for help on using the changeset viewer.