Changeset 958:06746d10d7a9 in roaraudio


Ignore:
Timestamp:
12/08/08 21:24:57 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

ported libao driver to new vio interface :)

Location:
roard
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • roard/driver.c

    r951 r958  
    3939#endif 
    4040#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}, 
    4242#endif 
    4343#ifdef ROAR_HAVE_LIBSHOUT 
  • roard/driver_ao.c

    r668 r958  
    2626#ifdef ROAR_HAVE_LIBAO 
    2727 
    28 int driver_ao_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 
     28int _driver_ao_usage_counter = 0; 
     29 
     30void driver_ao_init (void) { 
     31 if ( _driver_ao_usage_counter++ == 0 ) 
     32  ao_initialize(); 
     33} 
     34 
     35void driver_ao_uninit (void) { 
     36 if ( _driver_ao_usage_counter-- == 1 ) 
     37  ao_shutdown(); 
     38} 
     39 
     40int 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) { 
    2942 ao_device        * aodevice; 
    3043 ao_sample_format     format; 
    3144 int driver; 
    3245 
    33  ao_initialize(); 
     46 if ( fh != -1 ) 
     47  return -1; 
     48 
     49 driver_ao_init(); 
    3450 
    3551 if ( device == NULL ) { 
     
    3854  if ( (driver = ao_driver_id(device)) == -1 ) { 
    3955   ROAR_ERR("Can not open audio device via libao's driver '%s'", device); 
     56   driver_ao_uninit(); 
    4057   return -1; 
    4158  } 
     
    5168 if ( aodevice == NULL ) { 
    5269  ROAR_ERR("Can not open audio device via libao."); 
     70  driver_ao_uninit(); 
    5371  return -1; 
    5472 } 
    5573 
    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; 
    5777 
    5878 return 0; 
     
    6181int driver_ao_close(DRIVER_USERDATA_T   inst) { 
    6282 
    63  ao_close((ao_device*)inst); 
     83 ao_close((ao_device*)(((struct roar_vio_calls *)inst)->inst)); 
    6484 
    65  ao_shutdown(); 
     85 driver_ao_uninit(); 
    6686 
    67  return -1; 
     87 return 0; 
    6888} 
    6989 
    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; 
     90ssize_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; 
    8494} 
    8595 
  • roard/include/driver_ao.h

    r668 r958  
    2626#define _DRIVER_AO_H_ 
    2727 
    28 int driver_ao_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info); 
     28int driver_ao_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh); 
    2929int 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); 
     30ssize_t driver_ao_write(struct roar_vio_calls * vio, void *buf, size_t count); 
    3431 
    3532#endif 
Note: See TracChangeset for help on using the changeset viewer.