Changeset 958:06746d10d7a9 in roaraudio for roard/driver_ao.c
- Timestamp:
- 12/08/08 21:24:57 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver_ao.c
r668 r958 26 26 #ifdef ROAR_HAVE_LIBAO 27 27 28 int driver_ao_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 28 int _driver_ao_usage_counter = 0; 29 30 void driver_ao_init (void) { 31 if ( _driver_ao_usage_counter++ == 0 ) 32 ao_initialize(); 33 } 34 35 void driver_ao_uninit (void) { 36 if ( _driver_ao_usage_counter-- == 1 ) 37 ao_shutdown(); 38 } 39 40 int driver_ao_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh) { 41 //int driver_ao_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 29 42 ao_device * aodevice; 30 43 ao_sample_format format; 31 44 int driver; 32 45 33 ao_initialize(); 46 if ( fh != -1 ) 47 return -1; 48 49 driver_ao_init(); 34 50 35 51 if ( device == NULL ) { … … 38 54 if ( (driver = ao_driver_id(device)) == -1 ) { 39 55 ROAR_ERR("Can not open audio device via libao's driver '%s'", device); 56 driver_ao_uninit(); 40 57 return -1; 41 58 } … … 51 68 if ( aodevice == NULL ) { 52 69 ROAR_ERR("Can not open audio device via libao."); 70 driver_ao_uninit(); 53 71 return -1; 54 72 } 55 73 56 *((ao_device**)inst) = aodevice; 74 memset(inst, 0, sizeof(struct roar_vio_calls)); 75 inst->inst = (void*) aodevice; 76 inst->write = driver_ao_write; 57 77 58 78 return 0; … … 61 81 int driver_ao_close(DRIVER_USERDATA_T inst) { 62 82 63 ao_close((ao_device*) inst);83 ao_close((ao_device*)(((struct roar_vio_calls *)inst)->inst)); 64 84 65 ao_shutdown();85 driver_ao_uninit(); 66 86 67 return -1;87 return 0; 68 88 } 69 89 70 int driver_ao_pause(DRIVER_USERDATA_T inst, int newstate) { 71 return -1; 72 } 73 74 int driver_ao_write(DRIVER_USERDATA_T inst, char * buf, int len) { 75 return ao_play((ao_device*)inst, buf, len); 76 } 77 78 int driver_ao_read(DRIVER_USERDATA_T inst, char * buf, int len) { 79 return -1; 80 } 81 82 int driver_ao_flush(DRIVER_USERDATA_T inst) { 83 return 0; 90 ssize_t driver_ao_write(struct roar_vio_calls * vio, void *buf, size_t count) { 91 if ( ao_play((ao_device*)(vio->inst), buf, count) == 0 ) 92 return -1; 93 return count; 84 94 } 85 95
Note: See TracChangeset
for help on using the changeset viewer.