Changeset 1521:1ecaaea92527 in roaraudio
- Timestamp:
- 04/11/09 23:50:55 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver_oss.c
r1518 r1521 32 32 int blocksize; 33 33 struct roar_audio_info info; 34 int need_reopen; 35 int need_config; 34 36 }; 35 37 … … 222 224 } 223 225 226 // latency things: 227 #ifdef SNDCTL_DSP_SETFRAGMENT 228 229 // defaults 230 if ( self->blocksize < 1 ) 231 self->blocksize = 2048; 232 if ( self->blocks < 1 ) 233 self->blocks = 4; 234 235 tmp = 11; 236 237 tmp |= self->blocks << 16; 238 if ( ioctl(fh, SNDCTL_DSP_SETFRAGMENT, &tmp) == -1 ) { 239 ROAR_WARN("driver_oss_ctl(*): Can not set fragment size, sorry :("); 240 } 241 #endif 242 243 self->need_config = 0; 244 224 245 return 0; 225 246 } … … 253 274 } 254 275 276 self->need_config = 1; 277 278 /* 255 279 if ( driver_oss_config_device(self) == -1 ) { 256 280 ROAR_ERR("driver_oss_open(*): Can not configure audio device"); 257 281 er(); 258 282 } 283 */ 259 284 260 285 tmp32 = 4; … … 302 327 303 328 int driver_oss_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 329 struct driver_oss * self = vio->inst; 304 330 int d; 331 332 ROAR_WARN("driver_oss_ctl(vio=%p, cmd=%i, data=%p) = ?", vio, cmd, data); 305 333 306 334 if ( vio == NULL ) … … 322 350 case ROAR_VIO_CTL_SET_DBLOCKS: 323 351 #ifdef SNDCTL_DSP_SETFRAGMENT 324 d = (*(uint_least32_t *)data) << 16 | 11; // (*data) fragements of 2048 Bytes. 325 if ( ioctl(_get(vio,fh), SNDCTL_DSP_SETFRAGMENT, &d) == -1 ) { 326 ROAR_WARN("driver_oss_ctl(*): Can not set fragment size, sorry :("); 327 } 352 if ( !self->need_config ) { 353 ROAR_WARN("driver_oss_ctl(*): possible late ROAR_VIO_CTL_SET_DBLOCKS, setting anyway."); 354 } 355 356 self->blocks = *(uint_least32_t *)data; 328 357 #else 329 358 return -1; 330 359 #endif 331 360 break; 361 case ROAR_VIO_CTL_SET_DBLKSIZE: 362 #ifdef SNDCTL_DSP_SETFRAGMENT 363 if ( !self->need_config ) { 364 ROAR_WARN("driver_oss_ctl(*): possible late ROAR_VIO_CTL_SET_DBLKSIZE, setting anyway."); 365 } 366 367 self->blocksize = *(uint_least32_t *)data; 368 #else 369 return -1; 370 #endif 371 break; 332 372 case ROAR_VIO_CTL_GET_DBLKSIZE: 333 *(uint_least32_t *)data = 2048; 373 if ( !self->blocksize ) 374 return -1; 375 376 *(uint_least32_t *)data = self->blocksize; 334 377 return 0; 335 378 break; … … 342 385 343 386 ssize_t driver_oss_write (struct roar_vio_calls * vio, void *buf, size_t count) { 387 if ( _get(vio,need_config) ) { 388 if ( driver_oss_config_device(vio->inst) == -1 ) { 389 return -1; 390 } 391 } 392 344 393 return write(_get(vio,fh), buf, count); 345 394 }
Note: See TracChangeset
for help on using the changeset viewer.