Changeset 958:06746d10d7a9 in roaraudio
- Timestamp:
- 12/08/08 21:24:57 (15 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/driver.c
r951 r958 39 39 #endif 40 40 #ifdef ROAR_HAVE_LIBAO 41 { "ao", "libao audio driver", "DRIVER", driver_ao_open, driver_ao_close, driver_ao_pause, driver_ao_write, driver_ao_read, driver_ao_flush, NULL},41 { "ao", "libao audio driver", "DRIVER", NULL, driver_ao_close, NULL, NULL, NULL, NULL, driver_ao_open_vio}, 42 42 #endif 43 43 #ifdef ROAR_HAVE_LIBSHOUT -
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 -
roard/include/driver_ao.h
r668 r958 26 26 #define _DRIVER_AO_H_ 27 27 28 int driver_ao_open (DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info);28 int driver_ao_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh); 29 29 int driver_ao_close(DRIVER_USERDATA_T inst); 30 int driver_ao_pause(DRIVER_USERDATA_T inst, int newstate); 31 int driver_ao_write(DRIVER_USERDATA_T inst, char * buf, int len); 32 int driver_ao_read(DRIVER_USERDATA_T inst, char * buf, int len); 33 int driver_ao_flush(DRIVER_USERDATA_T inst); 30 ssize_t driver_ao_write(struct roar_vio_calls * vio, void *buf, size_t count); 34 31 35 32 #endif
Note: See TracChangeset
for help on using the changeset viewer.