Changeset 912:e0480ffcba74 in roaraudio


Ignore:
Timestamp:
12/06/08 22:36:19 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got esd driver working via vio, changed driver interface a bit to get a memory leak away

Location:
roard
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • roard/driver.c

    r911 r912  
    2828 { "null", "null audio driver", "/dev/null", NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 
    2929#ifdef ROAR_HAVE_ESD 
    30  { "esd", "EsounD audio driver", "localhost, remote.host.dom", driver_esd_open, driver_esd_close, driver_esd_pause, driver_esd_write, driver_esd_read, driver_esd_flush, NULL}, 
     30 { "esd", "EsounD audio driver", "localhost, remote.host.dom", NULL, driver_esd_close, driver_esd_pause, NULL, NULL, driver_esd_flush, driver_esd_open_vio}, 
    3131#endif 
    3232 { "roar", "RoarAudio driver", "localhost, remote.host.dom", driver_roar_open, driver_roar_close, driver_roar_pause, driver_roar_write, driver_roar_read, driver_roar_flush, NULL}, 
     
    6262     return -1; 
    6363 
     64    memset(*inst, 0, sizeof(struct roar_vio_calls)); 
     65 
    6466    if ( (i = g_driver[i].vio_init(*inst, device, info)) == -1 ) { 
    6567     free(*inst); 
     
    6870    return i; 
    6971   } 
     72 
     73   ROAR_WARN("driver_open(*): driver uses old non-vio interface!"); 
    7074 
    7175   if ( g_driver[i].open ) 
     
    7983 
    8084int driver_close(DRIVER_USERDATA_T   inst, int driver) { 
     85 int ret = 0; 
    8186 ROAR_DBG("driver_close(inst=%p, driver=%i) = ?", inst, driver); 
    8287 
     
    8590 
    8691 if ( g_driver[driver].close ) 
    87   return g_driver[driver].close(inst); 
     92  ret = g_driver[driver].close(inst); 
    8893 
    89  return 0; 
     94 if ( g_driver[driver].vio_init != NULL ) 
     95  free(inst); 
     96 
     97 return ret; 
    9098} 
    9199 
  • roard/driver_esd.c

    r668 r912  
    3232*/ 
    3333 
    34 int driver_esd_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 
     34int driver_esd_open_sysio(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info) { 
    3535 esd_format_t format = ESD_STREAM | ESD_PLAY; 
    3636 char name[80] = "roard"; 
     
    6060} 
    6161 
     62int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info) { 
     63 inst->read  = driver_esd_read; 
     64 inst->write = driver_esd_write; 
     65 return driver_esd_open_sysio(&(inst->inst), device, info); 
     66} 
     67 
    6268int driver_esd_close(DRIVER_USERDATA_T   inst) { 
    63  int fh = *(int*)inst; 
     69 int fh; 
     70 
     71 inst = ((struct roar_vio_calls *)inst)->inst; 
     72 
     73 fh = *(int*)inst; 
    6474 
    6575 free((void*)inst); 
     
    7282} 
    7383 
    74 int driver_esd_write(DRIVER_USERDATA_T   inst, char * buf, int len) { 
    75  int * di = (int*)inst; 
     84int driver_esd_write(struct roar_vio_calls * inst, void * buf, size_t len) { 
     85 int * di = (int*)((struct roar_vio_calls *)inst)->inst; 
    7686 
    7787 if ( di[1] ) 
     
    8191} 
    8292 
    83 int driver_esd_read(DRIVER_USERDATA_T   inst, char * buf, int len) { 
    84  return read(*(int*)inst, buf, len); 
     93int driver_esd_read(struct roar_vio_calls * inst, void * buf, size_t len) { 
     94 return read(*(int*)((struct roar_vio_calls *)inst)->inst, buf, len); 
    8595} 
    8696 
  • roard/include/driver_esd.h

    r668 r912  
    2626#define _DRIVER_ESD_H_ 
    2727 
    28 int driver_esd_open(DRIVER_USERDATA_T * inst, char * device, struct roar_audio_info * info); 
     28int driver_esd_open_sysio(DRIVER_USERDATA_T * inst,   char * device, struct roar_audio_info * info); 
     29int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info); 
    2930int driver_esd_close(DRIVER_USERDATA_T   inst); 
    3031int driver_esd_pause(DRIVER_USERDATA_T   inst, int newstate); 
    31 int driver_esd_write(DRIVER_USERDATA_T   inst, char * buf, int len); 
    32 int driver_esd_read(DRIVER_USERDATA_T   inst, char * buf, int len); 
     32int driver_esd_write(struct roar_vio_calls * inst, void * buf, size_t len); 
     33int driver_esd_read(struct roar_vio_calls  * inst, void * buf, size_t len); 
    3334int driver_esd_flush(DRIVER_USERDATA_T   inst); 
    3435 
Note: See TracChangeset for help on using the changeset viewer.