Changeset 5615:980750396d94 in roaraudio
- Timestamp:
- 08/08/12 16:26:00 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5614 r5615 1 1 v. 1.0beta5 - ? 2 2 * Fixed pa_xfree() (Closes: #293) 3 * Allow passing of extra parameters to cdrivers (Closes: #290) 3 4 4 5 v. 1.0beta4 - Mon Aug 06 2012 16:43 CEST -
include/libroareio/driver.h
r5381 r5615 46 46 int roar_cdriver_open(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir); 47 47 48 int roar_cdriver_open2(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir, struct roar_keyval * para, ssize_t paralen); 49 50 ssize_t roar_cdriver_list (const char ** list, size_t len, size_t offset) _LIBROAR_STREAM_STDATTRS; 51 48 52 // driver prototypes: 49 53 int roar_cdriver_oss (struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir); -
libroareio/driver.c
r5388 r5615 32 32 #endif 33 33 34 int roar_cdriver_null(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir) {34 static int roar_cdriver_null(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir, struct roar_keyval * para, ssize_t paralen) { 35 35 ROAR_DBG("roar_cdriver_null(calls=%p, name='%s', dev='%s', info=%p{...}, dir=%i(?)) = ?", calls, name, dev, info, dir); 36 36 37 (void)name, (void)dev, (void)info, (void)dir ;37 (void)name, (void)dev, (void)info, (void)dir, (void)para, (void)paralen; 38 38 39 39 memset(calls, 0, sizeof(struct roar_vio_calls)); … … 47 47 } 48 48 49 struct roar_cdriver _g_roar_cdriver[] = { 50 {"null", roar_cdriver_null}, 51 {"roar", roar_cdriver_roar}, 49 struct { 50 const char * name; 51 int (*open)(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir); 52 int (*open2)(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir, struct roar_keyval * para, ssize_t paralen); 53 } _g_roar_cdriver[] = { 54 {"null", NULL, roar_cdriver_null}, 55 {"roar", roar_cdriver_roar, NULL}, 52 56 #if defined(ROAR_HAVE_OSS_BSD) || defined(ROAR_HAVE_OSS) 53 {"oss", roar_cdriver_oss },57 {"oss", roar_cdriver_oss, NULL}, 54 58 #endif 55 59 #ifdef ROAR_HAVE_AD_ESDFW 56 60 #include "driver_esdfw.c" 57 61 #endif 58 {NULL, NULL }62 {NULL, NULL, NULL} 59 63 }; 60 64 61 65 62 static int roar_cdriver_open_default(struct roar_vio_calls * calls, const char * dev, struct roar_audio_info * info, int dir ) {66 static int roar_cdriver_open_default(struct roar_vio_calls * calls, const char * dev, struct roar_audio_info * info, int dir, struct roar_keyval * para, ssize_t paralen) { 63 67 const char * names[] = { 64 68 // native APIs: … … 77 81 78 82 for (i = 0; i < (sizeof(names)/sizeof(*names)); i++) { 79 ret = roar_cdriver_open (calls, names[i], dev, info, dir);83 ret = roar_cdriver_open2(calls, names[i], dev, info, dir, para, paralen); 80 84 if ( ret != -1 ) 81 85 return ret; 82 86 } 83 87 88 // roar_error is still set to the error of the last tested driver. 84 89 return -1; 85 90 } 86 91 87 int roar_cdriver_open(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir) { 92 int roar_cdriver_open2(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int 93 dir, struct roar_keyval * para, ssize_t paralen) { 88 94 int i; 89 95 char *delm; 90 96 91 97 if ( name == NULL ) 92 return roar_cdriver_open_default(calls, dev, info, dir );98 return roar_cdriver_open_default(calls, dev, info, dir, para, paralen); 93 99 94 100 for (i = 0; _g_roar_cdriver[i].name != NULL; i++) { 95 101 ROAR_DBG("roar_cdriver_open(*): _g_roar_cdriver[i].name='%s' <cmp> name='%s'", _g_roar_cdriver[i].name, name); 96 102 97 if ( !strcmp(_g_roar_cdriver[i].name, name) ) 98 return _g_roar_cdriver[i].open(calls, name, dev, info, dir); 103 if ( !strcmp(_g_roar_cdriver[i].name, name) ) { 104 if ( _g_roar_cdriver[i].open2 != NULL ) 105 return _g_roar_cdriver[i].open2(calls, name, dev, info, dir, para, paralen); 106 if ( _g_roar_cdriver[i].open != NULL ) 107 return _g_roar_cdriver[i].open(calls, name, dev, info, dir); 108 } 99 109 100 110 if ( (delm = strstr(_g_roar_cdriver[i].name, ":")) != NULL ) { 101 111 ROAR_DBG("roar_cdriver_open(*): delm+1='%s' <cmp> name='%s'", delm+1, name); 102 if ( !strcmp(delm+1, name) ) 103 return _g_roar_cdriver[i].open(calls, name, dev, info, dir); 112 if ( !strcmp(delm+1, name) ) { 113 if ( _g_roar_cdriver[i].open2 != NULL ) 114 return _g_roar_cdriver[i].open2(calls, name, dev, info, dir, para, paralen); 115 if ( _g_roar_cdriver[i].open != NULL ) 116 return _g_roar_cdriver[i].open(calls, name, dev, info, dir); 117 } 104 118 } 105 119 106 120 } 107 121 122 roar_err_set(ROAR_ERROR_NOENT); 108 123 return -1; 109 124 } 110 125 126 ssize_t roar_profiles_list (const char ** list, size_t len, size_t offset) { 127 size_t i; 128 size_t idx = 0; 129 130 if ( list == NULL ) { 131 roar_err_set(ROAR_ERROR_FAULT); 132 return -1; 133 } 134 135 if ( len == 0 ) 136 return 0; 137 138 if ( offset >= (sizeof(_g_roar_cdriver)/sizeof(*_g_roar_cdriver)) ) 139 return 0; 140 141 for (i = offset; _g_roar_cdriver[i].name != NULL; i++) { 142 list[idx++] = _g_roar_cdriver[i].name; 143 } 144 145 return idx; 146 } 147 148 int roar_cdriver_open(struct roar_vio_calls * calls, const char * name, const char * dev, struct roar_audio_info * info, int dir) { 149 return roar_cdriver_open2(calls, name, dev, info, dir, NULL, -1); 150 } 151 111 152 //ll
Note: See TracChangeset
for help on using the changeset viewer.