Changeset 4891:7d1d30510aa6 in roaraudio
- Timestamp:
- 04/28/11 20:36:59 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libroararts/libartsc.c
r4708 r4891 43 43 44 44 struct _libroarartsc_stream { 45 struct roar_stream stream; 46 int fh; 47 int blocking; 45 roar_vs_t * vss; 46 struct roar_stream _stream; 47 int _fh; 48 int _blocking; 48 49 int block_size; 49 50 int dir; … … 82 83 */ 83 84 const char *arts_error_text(int errorcode) { 84 return strerror(errorcode); 85 return roar_vs_strerr(errorcode); 86 } 87 88 static arts_stream_t _arts_stream(int rate, int bits, int channels, const char *name, int dir) { 89 struct _libroarartsc_stream * s = roar_mm_malloc(sizeof(struct _libroarartsc_stream)); 90 struct roar_stream * stream; 91 struct roar_audio_info auinfo; 92 struct roar_stream_info info; 93 struct roar_keyval kv[1]; 94 int err = ROAR_ERROR_NONE; 95 96 if ( s == NULL ) 97 return NULL; 98 99 if ( (s->vss = roar_vs_new_from_con(_libroarartsc_connection, &err)) == NULL ) { 100 roar_mm_free(s); 101 return NULL; 102 } 103 104 memset(&auinfo, 0, sizeof(auinfo)); 105 auinfo.rate = rate; 106 auinfo.channels = channels; 107 auinfo.bits = bits; 108 auinfo.codec = ROAR_CODEC_DEFAULT; 109 110 if ( roar_vs_stream(s->vss, &auinfo, dir, &err) == -1 ) { 111 roar_vs_close(s->vss, ROAR_VS_TRUE, &err); 112 roar_mm_free(s); 113 return NULL; 114 } 115 116 s->dir = dir; 117 118 stream = roar_vs_stream_obj(s->vss, &err); 119 120 if ( roar_stream_get_info(_libroarartsc_connection, stream, &info) != -1 ) { 121 s->block_size = info.block_size; 122 } else { 123 roar_vs_close(s->vss, ROAR_VS_TRUE, &err); 124 roar_mm_free(s); 125 return NULL; 126 } 127 128 if ( name != NULL && *name ) { 129 kv[0].key = "description"; 130 kv[0].value = (char*)name; 131 132 roar_vs_meta(s->vss, kv, 1, &err); 133 } 134 135 return (arts_stream_t) s; 85 136 } 86 137 … … 97 148 */ 98 149 arts_stream_t arts_play_stream(int rate, int bits, int channels, const char *name) { 99 struct _libroarartsc_stream * s = roar_mm_malloc(sizeof(struct _libroarartsc_stream)); 100 struct roar_meta meta; 101 struct roar_stream_info info; 102 103 if ( !s ) 104 return NULL; 105 106 if ( (s->fh = roar_simple_new_stream_obj(_libroarartsc_connection, &(s->stream), 107 rate, channels, bits, ROAR_CODEC_DEFAULT, ROAR_DIR_PLAY)) == -1 ) { 108 roar_mm_free(s); 109 return NULL; 110 } 111 112 s->dir = ROAR_DIR_PLAY; 113 114 s->blocking = 1; 115 116 if ( roar_stream_get_info(_libroarartsc_connection, &(s->stream), &info) != -1 ) { 117 s->block_size = info.block_size; 118 } else { 119 close(s->fh); 120 roar_mm_free(s); 121 return NULL; 122 } 123 124 if ( name && *name ) { 125 meta.value = (char*)name; 126 meta.key[0] = 0; 127 meta.type = ROAR_META_TYPE_DESCRIPTION; 128 129 roar_stream_meta_set(_libroarartsc_connection, &(s->stream), ROAR_META_MODE_SET, &meta); 130 } 131 132 return (arts_stream_t) s; 150 return _arts_stream(rate, bits, channels, name, ROAR_DIR_PLAY); 133 151 } 134 152 … … 145 163 */ 146 164 arts_stream_t arts_record_stream(int rate, int bits, int channels, const char *name) { 147 struct _libroarartsc_stream * s = roar_mm_malloc(sizeof(struct _libroarartsc_stream)); 148 struct roar_meta meta; 149 struct roar_stream_info info; 150 151 if ( !s ) 152 return NULL; 153 154 if ( (s->fh = roar_simple_new_stream_obj(_libroarartsc_connection, &(s->stream), 155 rate, channels, bits, ROAR_CODEC_DEFAULT, ROAR_DIR_RECORD)) == -1 ) { 156 roar_mm_free(s); 157 return NULL; 158 } 159 160 s->dir = ROAR_DIR_RECORD; 161 162 s->blocking = 1; 163 164 if ( roar_stream_get_info(_libroarartsc_connection, &(s->stream), &info) != -1 ) { 165 s->block_size = info.block_size; 166 } else { 167 close(s->fh); 168 roar_mm_free(s); 169 return NULL; 170 } 171 172 if ( name && *name ) { 173 meta.value = (char*)name; 174 meta.key[0] = 0; 175 meta.type = ROAR_META_TYPE_DESCRIPTION; 176 177 roar_stream_meta_set(_libroarartsc_connection, &(s->stream), ROAR_META_MODE_SET, &meta); 178 } 179 180 return (arts_stream_t) s; 165 return _arts_stream(rate, bits, channels, name, ROAR_DIR_RECORD); 181 166 } 182 167 … … 186 171 void arts_close_stream(arts_stream_t stream) { 187 172 struct _libroarartsc_stream * s = (struct _libroarartsc_stream *) stream; 188 if ( !stream)173 if ( stream == NULL ) 189 174 return; 190 175 191 close(s->fh);176 roar_vs_close(s->vss, ROAR_VS_TRUE, NULL); 192 177 193 178 roar_mm_free(stream); … … 205 190 int arts_read(arts_stream_t stream, void *buffer, int count) { 206 191 struct _libroarartsc_stream * s = (struct _libroarartsc_stream *) stream; 207 if ( !stream)208 return -1; 209 210 return r ead(s->fh, buffer, count);192 if ( stream == NULL ) 193 return -1; 194 195 return roar_vs_read(s->vss, buffer, count, NULL); 211 196 } 212 197 … … 225 210 return -1; 226 211 227 return write(s->fh, buffer, count);212 return roar_vs_write(s->vss, buffer, count, NULL); 228 213 } 229 214 … … 240 225 int arts_stream_set(arts_stream_t stream, arts_parameter_t param, int value) { 241 226 struct _libroarartsc_stream * s = (struct _libroarartsc_stream *) stream; 242 if ( !stream)227 if ( stream == NULL ) 243 228 return -1; 244 229 245 230 if ( param == ARTS_P_BLOCKING ) { 246 if ( roar_ socket_nonblock(s->fh, value ? ROAR_SOCKET_BLOCK : ROAR_SOCKET_NONBLOCK) == -1 )231 if ( roar_vs_blocking(s->vss, value ? ROAR_VS_TRUE : ROAR_VS_FALSE, NULL) == -1 ) 247 232 return -1; 248 233 return arts_stream_get(stream, param); … … 262 247 int arts_stream_get(arts_stream_t stream, arts_parameter_t param) { 263 248 struct _libroarartsc_stream * s = (struct _libroarartsc_stream *) stream; 264 fd_set sl; 265 struct timeval tv; 266 267 if ( !stream ) 249 struct roar_vio_select vios; 250 struct roar_vio_selecttv rtv; 251 int events; 252 253 if ( stream == NULL ) 268 254 return -1; 269 255 … … 271 257 return s->block_size; 272 258 } else if ( param == ARTS_P_BUFFER_SPACE ) { 273 FD_ZERO(&sl); 274 FD_SET(s->fh, &sl); 275 276 tv.tv_sec = 0; 277 tv.tv_usec = 1; 278 279 if ( s->dir == ROAR_DIR_PLAY ) { 280 if (select(s->fh + 1, NULL, &sl, NULL, &tv) > 0) 281 return s->block_size; 282 } else { 283 if (select(s->fh + 1, &sl, NULL, NULL, &tv) > 0) 284 return s->block_size; 285 } 259 rtv.sec = 0; 260 rtv.nsec = 1000; 261 262 events = s->dir == ROAR_DIR_PLAY ? ROAR_VIO_SELECT_WRITE : ROAR_VIO_SELECT_READ; 263 264 ROAR_VIO_SELECT_SETVIO(&vios, roar_vs_vio_obj(s->vss, NULL), events); 265 266 if ( roar_vio_select(&vios, 1, &rtv, NULL) == 1 ) 267 return s->block_size; 286 268 287 269 return 0; … … 291 273 return 1; 292 274 } else if ( param == ARTS_P_BLOCKING ) { 293 return s->blocking;275 return roar_vs_blocking(s->vss, ROAR_VS_ASK, NULL) == ROAR_VS_TRUE ? 1 : 0; 294 276 } 295 277 -
libroarsndio/para.c
r4708 r4891 173 173 return 0; 174 174 175 if ( roar_server_oinfo (&(hdl->con), &s) == -1 )175 if ( roar_server_oinfo2(&(hdl->con), &s, ROAR_DIR_PLAY) == -1 ) 176 176 return 0; 177 177
Note: See TracChangeset
for help on using the changeset viewer.