Changeset 5276:0eb24ca6810e in roaraudio
- Timestamp:
- 11/20/11 18:36:49 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5275 r5276 1 1 v. 1.0beta0 - ? 2 * Updated API (SONAME change) (Closes: #184, #185, #128 )2 * Updated API (SONAME change) (Closes: #184, #185, #128, #135) 3 3 * Do not set errno to zero in ogg_vorbis codec filter (Closes: #191) 4 4 * Updated data types for struct roar_audio_info (Closes: #189) -
include/libroar/vio.h
r5260 r5276 53 53 ssize_t (*write )(struct roar_vio_calls * vio, void *buf, size_t count); 54 54 off_t (*lseek )(struct roar_vio_calls * vio, off_t offset, int whence); 55 int (*nonblock)(struct roar_vio_calls * vio, int state);55 // int (*nonblock)(struct roar_vio_calls * vio, int state); 56 56 int (*sync )(struct roar_vio_calls * vio); 57 57 int (*ctl )(struct roar_vio_calls * vio, int cmd, void * data); … … 104 104 ssize_t roar_vio_basic_write (struct roar_vio_calls * vio, void *buf, size_t count); 105 105 off_t roar_vio_basic_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 106 int roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state);107 106 int roar_vio_basic_sync (struct roar_vio_calls * vio); 108 107 int roar_vio_basic_ctl (struct roar_vio_calls * vio, int cmd, void * data); … … 120 119 ssize_t roar_vio_pass_write (struct roar_vio_calls * vio, void *buf, size_t count); 121 120 off_t roar_vio_pass_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 122 int roar_vio_pass_nonblock(struct roar_vio_calls * vio, int state);123 121 int roar_vio_pass_sync (struct roar_vio_calls * vio); 124 122 int roar_vio_pass_ctl (struct roar_vio_calls * vio, int cmd, void * data); -
include/libroar/vio_ctl.h
r4902 r5276 99 99 #define ROAR_VIO_CTL_GET_USERPASS (ROAR_VIO_CTL_GENERIC|ROAR_VIO_CTL_SET|0x0194) 100 100 #define ROAR_VIO_CTL_SET_USERPASS (ROAR_VIO_CTL_GENERIC|ROAR_VIO_CTL_SET|0x0194) 101 // NOTE: continue with 0x01A0 from here. 101 102 // Implement roar_vio_nonblock()... 103 #define ROAR_VIO_CTL_NONBLOCK (ROAR_VIO_CTL_GENERIC|0x01A0) /* roar_vio_nonblock(), int */ 102 104 103 105 // get or set data format used for read and write calls, see below -
include/libroar/vio_winsock.h
r4708 r5276 42 42 ssize_t roar_vio_winsock_read (struct roar_vio_calls * vio, void *buf, size_t count); 43 43 ssize_t roar_vio_winsock_write (struct roar_vio_calls * vio, void *buf, size_t count); 44 int roar_vio_winsock_nonblock(struct roar_vio_calls * vio, int state);45 44 int roar_vio_winsock_sync (struct roar_vio_calls * vio); 46 45 int roar_vio_winsock_ctl (struct roar_vio_calls * vio, int cmd, void * data); -
libroar/vio.c
r5270 r5276 65 65 calls->write = roar_vio_basic_write; 66 66 calls->lseek = roar_vio_basic_lseek; 67 calls->nonblock = roar_vio_basic_nonblock;68 67 calls->sync = roar_vio_basic_sync; 69 68 calls->ctl = roar_vio_basic_ctl; … … 179 178 180 179 int roar_vio_nonblock(struct roar_vio_calls * vio, int state) { 181 int ret;182 183 180 ROAR_DBG("roar_vio_nonblock(vio=%p, state=%i) = ?", vio, state); 184 181 … … 188 185 } 189 186 190 if ( vio->nonblock == NULL ) { 191 roar_err_set(ROAR_ERROR_NOSYS); 192 return -1; 193 } 194 195 roar_err_clear_all(); 196 ret = vio->nonblock(vio, state); 197 roar_err_update(); 198 199 return ret; 187 return roar_vio_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &state); 200 188 } 201 189 … … 346 334 calls->read = roar_vio_winsock_read; 347 335 calls->write = roar_vio_winsock_write; 348 calls->nonblock = roar_vio_winsock_nonblock;349 336 calls->sync = roar_vio_winsock_sync; 350 337 calls->ctl = roar_vio_winsock_ctl; … … 414 401 return -1; 415 402 #endif 416 }417 418 int roar_vio_basic_nonblock(struct roar_vio_calls * vio, int state) {419 if ( roar_socket_nonblock(roar_vio_get_fh(vio), state) == -1 )420 return -1;421 422 if ( state == ROAR_SOCKET_NONBLOCK )423 return 0;424 425 roar_vio_sync(vio);426 427 return 0;428 403 } 429 404 … … 666 641 break; 667 642 #endif 643 case ROAR_VIO_CTL_NONBLOCK: 644 if ( roar_socket_nonblock(roar_vio_get_fh(vio), *(int*)data) == -1 ) 645 return -1; 646 647 if ( *(int*)data == ROAR_SOCKET_NONBLOCK ) 648 return 0; 649 650 roar_vio_sync(vio); 651 return 0; 652 break; 668 653 } 669 654 … … 713 698 calls->write = roar_vio_pass_write; 714 699 calls->lseek = roar_vio_pass_lseek; 715 calls->nonblock = roar_vio_pass_nonblock;716 700 calls->sync = roar_vio_pass_sync; 717 701 calls->ctl = roar_vio_pass_ctl; … … 733 717 off_t roar_vio_pass_lseek(struct roar_vio_calls * vio, off_t offset, int whence) { 734 718 return roar_vio_lseek((struct roar_vio_calls *) vio->inst, offset, whence); 735 }736 737 int roar_vio_pass_nonblock(struct roar_vio_calls * vio, int state) {738 return roar_vio_nonblock((struct roar_vio_calls *) vio->inst, state);739 719 } 740 720 -
libroar/vio_buffer.c
r4708 r5276 63 63 calls->close = roar_vio_buffer_close; 64 64 calls->write = roar_vio_buffer_write; 65 calls->nonblock = roar_vio_buffer_nonblock;66 65 calls->ctl = roar_vio_buffer_ctl; 67 66 calls->sync = roar_vio_buffer_sync; … … 327 326 return 0; 328 327 break; 328 case ROAR_VIO_CTL_NONBLOCK: 329 if ( self->use_re ) { 330 return roar_vio_ctl(&(self->re_vio), ROAR_VIO_CTL_NONBLOCK, data); 331 } else { 332 return roar_vio_ctl(self->backend, ROAR_VIO_CTL_NONBLOCK, data); 333 } 334 break; 329 335 } 330 336 … … 342 348 } 343 349 344 int roar_vio_buffer_nonblock(struct roar_vio_calls * vio, int state) {345 struct roar_vio_buffer * self = vio->inst;346 347 if ( self->use_re ) {348 return roar_vio_nonblock(&(self->re_vio), state);349 } else {350 return roar_vio_nonblock(self->backend, state);351 }352 }353 354 350 //ll -
libroar/vio_buffer_store.c
r4708 r5276 56 56 calls->inst = self; 57 57 calls->close = roar_vio_buffer_store_close; 58 calls->nonblock = roar_vio_buffer_store_nonblock;59 58 calls->sync = roar_vio_buffer_store_sync; 60 59 calls->ctl = roar_vio_buffer_store_ctl; … … 138 137 } 139 138 140 int roar_vio_buffer_store_nonblock(struct roar_vio_calls * vio, int state) {141 return 0; // if we are in nonblock or not is the same for us.142 }143 144 139 int roar_vio_buffer_store_sync (struct roar_vio_calls * vio) { 145 140 return 0; // we are always sync. … … 160 155 return 0; 161 156 break; 157 case ROAR_VIO_CTL_NONBLOCK: 158 return 0; // if we are in nonblock or not is the same for us. 159 break; 162 160 } 163 161 -
libroar/vio_cmd.c
r5111 r5276 80 80 calls->read = roar_vio_cmd_read; 81 81 calls->write = roar_vio_cmd_write; 82 calls->nonblock = roar_vio_cmd_nonblock;83 82 calls->sync = roar_vio_cmd_sync; 84 83 calls->ctl = roar_vio_cmd_ctl; … … 514 513 } 515 514 516 int roar_vio_cmd_nonblock(struct roar_vio_calls * vio, int state) {517 struct roar_vio_cmd_state * self = (struct roar_vio_cmd_state *)vio->inst;518 519 self->options |= ROAR_VIO_CMD_OPTS_NONBLOCK;520 521 if ( state == ROAR_SOCKET_BLOCK )522 self->options -= ROAR_VIO_CMD_OPTS_NONBLOCK;523 524 _LIBROAR_IGNORE_RET(roar_vio_nonblock(self->next, state)); // this should help, but may not nessessery.525 526 return 0;527 }528 529 515 int roar_vio_cmd_sync (struct roar_vio_calls * vio) { 530 516 struct roar_vio_cmd_state * state = (struct roar_vio_cmd_state *)vio->inst; 517 int newblock = ROAR_SOCKET_BLOCK; 531 518 int oldblock; 532 519 int ret = 0; … … 534 521 oldblock = state->options & ROAR_VIO_CMD_OPTS_NONBLOCK ? ROAR_SOCKET_NONBLOCK : ROAR_SOCKET_BLOCK; 535 522 536 if ( roar_vio_cmd_ nonblock(vio, ROAR_SOCKET_BLOCK) == -1 )523 if ( roar_vio_cmd_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &newblock) == -1 ) 537 524 return -1; 538 525 … … 543 530 ret = -1; 544 531 545 if ( roar_vio_cmd_ nonblock(vio,oldblock) == -1 )532 if ( roar_vio_cmd_ctl(vio, ROAR_VIO_CTL_NONBLOCK, &oldblock) == -1 ) 546 533 return -1; 547 534 … … 586 573 return -1; 587 574 break; 575 case ROAR_VIO_CTL_NONBLOCK: 576 state->options |= ROAR_VIO_CMD_OPTS_NONBLOCK; 577 578 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 579 state->options -= ROAR_VIO_CMD_OPTS_NONBLOCK; 580 581 _LIBROAR_IGNORE_RET(roar_vio_ctl(state->next, cmd, data)); // this should help, but may not necessarily. 582 break; 588 583 default: 589 584 return -1; -
libroar/vio_jumbo.c
r5270 r5276 58 58 calls->write = roar_vio_jumbo_write; 59 59 calls->lseek = roar_vio_jumbo_lseek; 60 calls->nonblock = roar_vio_jumbo_nonblock;61 60 calls->sync = roar_vio_jumbo_sync; 62 61 calls->ctl = roar_vio_jumbo_ctl; … … 130 129 } 131 130 132 int roar_vio_jumbo_nonblock(struct roar_vio_calls * vio, int state) {133 struct roar_vio_jumbo * self = vio->inst;134 135 return roar_vio_nonblock(self->backend, state);136 }137 138 131 int roar_vio_jumbo_sync (struct roar_vio_calls * vio) { 139 132 struct roar_vio_jumbo * self = vio->inst; … … 156 149 157 150 int roar_vio_jumbo_ctl (struct roar_vio_calls * vio, int cmd, void * data) { 151 struct roar_vio_jumbo * self = vio->inst; 152 153 switch (cmd) { 154 case ROAR_VIO_CTL_NONBLOCK: 155 return roar_vio_ctl(self->backend, cmd, data); 156 break; 157 } 158 159 roar_err_set(ROAR_ERROR_BADRQC); 158 160 return -1; 159 161 } -
libroar/vio_misc.c
r5270 r5276 59 59 } 60 60 61 static int roar_vio_misc_nonblock(struct roar_vio_calls * vio, int state) {62 struct roar_vio_misc * self = vio->inst;63 64 if ( self->support_nonblocking )65 return 0;66 67 if ( state == ROAR_SOCKET_BLOCK )68 return 0;69 70 return -1;71 }72 73 61 static int roar_vio_misc_sync (struct roar_vio_calls * vio) { 74 62 (void)vio; … … 94 82 return 0; 95 83 break; 84 case ROAR_VIO_CTL_NONBLOCK: 85 if ( self->support_nonblocking ) 86 return 0; 87 88 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 89 return 0; 90 91 return -1; 92 break; 96 93 } 97 94 … … 112 109 calls->write = roar_vio_misc_write; 113 110 calls->lseek = roar_vio_misc_lseek; 114 calls->nonblock = roar_vio_misc_nonblock;115 111 calls->sync = roar_vio_misc_sync; 116 112 calls->ctl = roar_vio_misc_ctl; -
libroar/vio_pipe.c
r5270 r5276 119 119 #ifndef ROAR_WITHOUT_VIO_PIPE 120 120 int roar_vio_pipe_init (struct roar_vio_calls * s, struct roar_vio_pipe * self, int flags) { 121 int nonblock = ROAR_SOCKET_NONBLOCK; 122 121 123 if ( s == NULL || self == NULL ) 122 124 return -1; … … 127 129 s->read = roar_vio_pipe_read; 128 130 s->write = roar_vio_pipe_write; 129 s->nonblock = roar_vio_pipe_nonblock;130 131 s->sync = roar_vio_pipe_sync; 131 132 … … 133 134 134 135 if ( flags & O_NONBLOCK ) { 135 roar_vio_pipe_ nonblock(s, ROAR_SOCKET_NONBLOCK);136 roar_vio_pipe_ctl(s, ROAR_VIO_CTL_NONBLOCK, &nonblock); 136 137 } 137 138 … … 187 188 } 188 189 189 int roar_vio_pipe_nonblock(struct roar_vio_calls * vio, int state) {190 struct roar_vio_pipe * self;191 192 if ( vio == NULL )193 return -1;194 195 if ( (self = (struct roar_vio_pipe *)vio->inst) == NULL )196 return -1;197 198 switch (self->type) {199 case ROAR_VIO_PIPE_TYPE_PIPE:200 if ( roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)*2], state) == -1 )201 return -1;202 return roar_socket_nonblock(self->b.p[(ROAR_VIO_PIPE_SR(self,vio)*2)+1], state);203 break;204 #ifdef ROAR_HAVE_UNIX205 case ROAR_VIO_PIPE_TYPE_SOCKET:206 return roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)], state);207 break;208 #endif209 }210 211 return -1;212 }213 214 190 int roar_vio_pipe_sync (struct roar_vio_calls * vio) { 215 191 // we may add fdatasync() calls here depending on the type … … 276 252 return 0; 277 253 break; 254 } 255 break; 256 case ROAR_VIO_CTL_NONBLOCK: 257 switch (self->type) { 258 case ROAR_VIO_PIPE_TYPE_PIPE: 259 if ( roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)*2], *(int*)data) == -1 ) 260 return -1; 261 return roar_socket_nonblock(self->b.p[(ROAR_VIO_PIPE_SR(self,vio)*2)+1], *(int*)data); 262 break; 263 #ifdef ROAR_HAVE_UNIX 264 case ROAR_VIO_PIPE_TYPE_SOCKET: 265 return roar_socket_nonblock(self->b.p[ROAR_VIO_PIPE_S(self,vio)], *(int*)data); 266 break; 267 #endif 278 268 } 279 269 break; -
libroar/vio_proto.c
r5254 r5276 121 121 calls->write = roar_vio_proto_write; 122 122 // calls->lseek = roar_vio_proto_lseek; // TODO: this is currently not supported 123 calls->nonblock = roar_vio_proto_nonblock;124 123 calls->sync = roar_vio_proto_sync; 125 124 calls->ctl = roar_vio_proto_ctl; … … 232 231 // TODO: this is currently not implemented as this is hard to implement with buffers: 233 232 off_t roar_vio_proto_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 234 235 int roar_vio_proto_nonblock(struct roar_vio_calls * vio, int state) {236 struct roar_vio_proto * self = vio->inst;237 238 /* we can simply use the next layer's nonblock as all we do in addtion *239 * to call there functions are our buffers which do not block normaly */240 241 return roar_vio_nonblock(self->next, state);242 }243 233 244 234 int roar_vio_proto_sync (struct roar_vio_calls * vio) { -
libroar/vio_rtp.c
r5111 r5276 115 115 calls->write = roar_vio_rtp_write; 116 116 // calls->lseek = roar_vio_rtp_lseek; 117 calls->nonblock = roar_vio_rtp_nonblock;118 117 calls->sync = roar_vio_rtp_sync; 119 118 calls->ctl = roar_vio_rtp_ctl; … … 316 315 off_t roar_vio_rtp_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 317 316 318 int roar_vio_rtp_nonblock(struct roar_vio_calls * vio, int state) {319 struct roar_rtp_inst * self = vio->inst;320 321 ROAR_DBG("roar_vio_rtp_nonblock(vio=%p, state=%i) = ?", vio, state);322 323 return roar_vio_nonblock(self->vio, state);324 }325 326 317 int roar_vio_rtp_sync (struct roar_vio_calls * vio) { 327 318 struct roar_rtp_inst * self = vio->inst; -
libroar/vio_stack.c
r4975 r5276 65 65 calls->write = roar_vio_stack_write; 66 66 calls->lseek = roar_vio_stack_lseek; 67 calls->nonblock = roar_vio_stack_nonblock;68 67 calls->sync = roar_vio_stack_sync; 69 68 … … 184 183 } 185 184 186 int roar_vio_stack_nonblock(struct roar_vio_calls * vio, int state) {187 if ( vio == NULL )188 return -1;189 190 if ( vio->inst == NULL )191 return -1;192 193 if ( ((struct roar_vio_stack*)(vio->inst))->cur == NULL )194 return -1;195 196 return roar_vio_nonblock(((struct roar_vio_stack*)(vio->inst))->cur, state);197 }198 199 185 int roar_vio_stack_sync (struct roar_vio_calls * vio) { 200 186 if ( vio == NULL ) -
libroar/vio_stdvios.c
r4708 r5276 43 43 .write = roar_vio_basic_write, 44 44 .lseek = roar_vio_basic_lseek, 45 .nonblock = roar_vio_basic_nonblock,46 45 .sync = roar_vio_basic_sync, 47 46 .ctl = roar_vio_basic_ctl, … … 54 53 .write = roar_vio_basic_write, 55 54 .lseek = roar_vio_basic_lseek, 56 .nonblock = roar_vio_basic_nonblock,57 55 .sync = roar_vio_basic_sync, 58 56 .ctl = roar_vio_basic_ctl, … … 65 63 .write = roar_vio_basic_write, 66 64 .lseek = roar_vio_basic_lseek, 67 .nonblock = roar_vio_basic_nonblock,68 65 .sync = roar_vio_basic_sync, 69 66 .ctl = roar_vio_basic_ctl, -
libroar/vio_stream.c
r5238 r5276 47 47 return roar_vio_lseek(roar_get_connection_vio2(vio->inst), offset, whence); 48 48 } 49 static int _vio_stream_nonblock(struct roar_vio_calls * vio, int state) {50 return roar_vio_nonblock(roar_get_connection_vio2(vio->inst), state);51 }52 49 static int _vio_stream_sync (struct roar_vio_calls * vio) { 53 50 return roar_vio_sync(roar_get_connection_vio2(vio->inst)); … … 81 78 roar_err_set(ROAR_ERROR_NOTSUP); 82 79 return -1; 80 break; 81 case ROAR_VIO_CTL_NONBLOCK: 82 return roar_vio_ctl(roar_get_connection_vio2(vio->inst), ROAR_VIO_CTL_NONBLOCK, data); 83 83 break; 84 84 } … … 143 143 calls->write = _vio_stream_write; 144 144 calls->lseek = _vio_stream_lseek; 145 calls->nonblock = _vio_stream_nonblock;146 145 calls->sync = _vio_stream_sync; 147 146 calls->ctl = _vio_stream_ctl; -
libroar/vio_winsock.c
r4708 r5276 45 45 } 46 46 47 int roar_vio_winsock_nonblock(struct roar_vio_calls * vio, int state) {48 return -1;49 }50 47 int roar_vio_winsock_sync (struct roar_vio_calls * vio) { 51 48 return 0; … … 123 120 } 124 121 122 roar_err_set(ROAR_ERROR_BADRQC); 125 123 return -1; 126 124 } -
libroar/vio_zlib.c
r5270 r5276 435 435 } 436 436 437 static int roar_vio_zlib_nonblock(struct roar_vio_calls * vio, int state) {438 struct roar_vio_gzip * self = vio->inst;439 return roar_vio_nonblock(self->next, state);440 }441 442 437 static int roar_vio_zlib_sync (struct roar_vio_calls * vio) { 443 438 struct roar_vio_gzip * self = vio->inst; … … 483 478 return -1; 484 479 break; 480 case ROAR_VIO_CTL_NONBLOCK: 481 return roar_vio_ctl(self->next, cmd, data); 482 break; 485 483 default: 486 484 roar_err_set(ROAR_ERROR_BADRQC); … … 545 543 calls->write = roar_vio_zlib_write; 546 544 calls->lseek = roar_vio_zlib_lseek; 547 calls->nonblock = roar_vio_zlib_nonblock;548 545 calls->sync = roar_vio_zlib_sync; 549 546 calls->ctl = roar_vio_zlib_ctl; -
roard/container_framework.c
r4957 r5276 198 198 199 199 off_t cont_fw_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 200 int cont_fw_nonblock(struct roar_vio_calls * vio, int state);201 200 202 201 int cont_fw_sync (struct roar_vio_calls * vio) { … … 245 244 vio->write = cont_pvio_write; 246 245 vio->lseek = cont_pvio_lseek; 247 vio->nonblock = cont_pvio_nonblock;248 246 vio->sync = cont_pvio_sync; 249 247 vio->ctl = cont_pvio_ctl; … … 264 262 off_t cont_pvio_lseek (struct roar_vio_calls * vio, off_t offset, int whence) { 265 263 return roar_vio_lseek(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), offset, whence); 266 }267 268 int cont_pvio_nonblock(struct roar_vio_calls * vio, int state) {269 return roar_vio_nonblock(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), state);270 264 } 271 265 -
roard/driver.c
r5274 r5276 317 317 #endif 318 318 319 int driver_dummy_nonblock(struct roar_vio_calls * vio, int state) { 320 if ( state == ROAR_SOCKET_BLOCK ) 321 return 0; 322 323 roar_err_set(ROAR_ERROR_NOTSUP); 324 return -1; 319 int driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 320 switch (cmd) { 321 case ROAR_VIO_CTL_NONBLOCK: 322 if ( *(const int*)data == ROAR_SOCKET_BLOCK ) 323 return 0; 324 325 roar_err_set(ROAR_ERROR_NOTSUP); 326 return -1; 327 break; 328 default: 329 roar_err_set(ROAR_ERROR_BADRQC); 330 return -1; 331 break; 332 } 325 333 } 326 334 -
roard/driver_alsa.c
r5012 r5276 231 231 inst->sync = driver_alsa_sync; 232 232 inst->ctl = driver_alsa_ctl; 233 inst->nonblock = driver_dummy_nonblock;234 233 235 234 ROAR_DBG("driver_alsa_open_vio(inst=%p, device='%s', info=%p, fh=%i, sstream=%p) = 0", inst, device, info, fh, sstream); … … 333 332 switch (cmd) { 334 333 case ROAR_VIO_CTL_GET_DELAY: 335 if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 334 if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 335 return -1; 336 else { 337 *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 338 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 339 } 340 break; 341 342 case ROAR_VIO_CTL_SET_SSTREAMID: 343 device->ssid = *(int *)data; 344 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 345 break; 346 347 case ROAR_VIO_CTL_SET_SSTREAM: 348 device->sstream = data; 349 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 350 break; 351 352 case ROAR_VIO_CTL_GET_AUINFO: 353 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 354 memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 355 break; 356 357 case ROAR_VIO_CTL_SET_AUINFO: 358 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 359 memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 360 return driver_alsa_reopen_device(device); 361 break; 362 363 case ROAR_VIO_CTL_NONBLOCK: 364 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 365 return 0; 366 roar_err_set(ROAR_ERROR_NOTSUP); 336 367 return -1; 337 else { 338 *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 339 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 340 } 341 break; 342 343 case ROAR_VIO_CTL_SET_SSTREAMID: 344 device->ssid = *(int *)data; 345 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 346 break; 347 348 case ROAR_VIO_CTL_SET_SSTREAM: 349 device->sstream = data; 350 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 351 break; 352 353 case ROAR_VIO_CTL_GET_AUINFO: 354 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 355 memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 356 break; 357 358 case ROAR_VIO_CTL_SET_AUINFO: 359 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 360 memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 361 return driver_alsa_reopen_device(device); 368 break; 362 369 363 370 default: -
roard/driver_ao.c
r5056 r5276 134 134 inst->write = driver_ao_write; 135 135 inst->close = driver_ao_close; 136 inst-> nonblock = driver_dummy_nonblock;136 inst->ctl = driver_dummy_ctl; 137 137 138 138 return 0; -
roard/driver_artsc.c
r5108 r5276 124 124 inst->close = driver_artsc_close; 125 125 inst->ctl = driver_artsc_ctl; 126 inst->nonblock = driver_artsc_nonblock;127 126 128 127 ROAR_DBG("driver_artsc_open_vio(*) = 0"); … … 155 154 156 155 return driver_artsc_init_shutdown(SHUTDOWN); 157 }158 159 int driver_artsc_nonblock(struct roar_vio_calls * vio, int state) {160 struct roar_artsc * self = vio->inst;161 int ret;162 163 switch (state) {164 case ROAR_SOCKET_NONBLOCK:165 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0);166 if ( ret == 0 )167 return 0;168 break;169 case ROAR_SOCKET_BLOCK:170 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1);171 if ( ret == 1 )172 return 0;173 break;174 }175 176 return -1;177 156 } 178 157 … … 206 185 207 186 return 0; 187 case ROAR_VIO_CTL_NONBLOCK: 188 switch (*(int*)data) { 189 case ROAR_SOCKET_NONBLOCK: 190 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0); 191 if ( ret == 0 ) 192 return 0; 193 return -1; 194 break; 195 case ROAR_SOCKET_BLOCK: 196 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1); 197 if ( ret == 1 ) 198 return 0; 199 return -1; 200 break; 201 } 202 break; 208 203 default: 209 204 return -1; -
roard/driver_jack.c
r5259 r5276 65 65 inst->write = driver_jack_write; 66 66 inst->lseek = NULL; // no seeking on this device 67 inst->nonblock = driver_jack_nonblock;68 67 inst->sync = driver_jack_sync; 69 68 inst->ctl = driver_jack_ctl; … … 157 156 } 158 157 159 int driver_jack_nonblock(struct roar_vio_calls * vio, int state) {160 struct driver_jack * self = vio->inst;161 // control if read and write calls should block untill all data is read or written.162 // state could be:163 // ROAR_SOCKET_BLOCK - Block untill the data is read or written164 // ROAR_SOCKET_NONBLOCK - Return as soon as possible165 return -1;166 }167 168 158 int driver_jack_sync (struct roar_vio_calls * vio) { 169 159 struct driver_jack * self = vio->inst; … … 200 190 return 0; 201 191 break; 202 case ROAR_VIO_CTL_GET_AUINFO: 203 case ROAR_VIO_CTL_SET_AUINFO: 192 case ROAR_VIO_CTL_NONBLOCK: 193 // control if read and write calls should block untill all data is read or written. 194 // state is in *(int*)data and could be: 195 // ROAR_SOCKET_BLOCK - Block untill the data is read or written 196 // ROAR_SOCKET_NONBLOCK - Return as soon as possible 197 break; 198 case ROAR_VIO_CTL_GET_AUINFO: 199 case ROAR_VIO_CTL_SET_AUINFO: 204 200 // get or set audio info, data is a struct roar_audio_info*. 205 201 return -1; 206 202 break; 207 208 203 case ROAR_VIO_CTL_GET_DBLKSIZE: 204 case ROAR_VIO_CTL_SET_DBLKSIZE: 209 205 // get or set block size used, data is uint_least32_t*, number of bytes. 210 206 return -1; 211 207 break; 212 213 208 case ROAR_VIO_CTL_GET_DBLOCKS: 209 case ROAR_VIO_CTL_SET_DBLOCKS: 214 210 // get or set number of blocks used, data is uint_least32_t*. 215 211 return -1; 216 212 break; 217 213 case ROAR_VIO_CTL_SET_SSTREAM: 218 214 // set server stream object for this stream, data is struct roar_stream_server* 219 215 return -1; 220 216 break; 221 217 case ROAR_VIO_CTL_SET_SSTREAMID: 222 218 // set stream ID for this stream, data is int* 223 219 return -1; 224 220 break; 225 221 case ROAR_VIO_CTL_SET_VOLUME: 226 222 // set volume for this device, data is struct roar_mixer_settings* 227 223 return -1; 228 224 break; 229 225 case ROAR_VIO_CTL_GET_DELAY: 230 226 // get delay of this stream, data is uint_least32_t*, in bytes 231 227 // there is more about delay. please ask. -
roard/driver_oss.c
r5055 r5276 38 38 vio->write = driver_oss_write; 39 39 vio->read = driver_oss_read; 40 vio->nonblock = driver_oss_nonblock;41 40 vio->sync = driver_oss_sync; 42 41 vio->ctl = driver_oss_ctl; … … 448 447 } 449 448 450 int driver_oss_nonblock(struct roar_vio_calls * vio, int state) {451 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = ?", vio, state);452 453 if ( roar_socket_nonblock(_get(vio,fh), state) == -1 ) {454 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = -1", vio, state);455 return -1;456 }457 458 if ( state == ROAR_SOCKET_NONBLOCK ) {459 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state);460 return 0;461 }462 463 roar_vio_sync(vio);464 465 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state);466 467 return 0;468 }469 470 449 int driver_oss_sync(struct roar_vio_calls * vio) { 471 450 #ifdef SNDCTL_DSP_SYNC … … 558 537 break; 559 538 #endif 539 case ROAR_VIO_CTL_NONBLOCK: 540 if ( roar_socket_nonblock(_get(vio,fh), *(int*)data) == -1 ) { 541 return -1; 542 } 543 544 if ( *(int*)data == ROAR_SOCKET_NONBLOCK ) { 545 return 0; 546 } 547 548 roar_vio_sync(vio); 549 break; 560 550 default: 561 551 return -1; -
roard/driver_portaudio.c
r5134 r5276 124 124 inst->close = driver_portaudio_close; 125 125 inst->write = driver_portaudio_write; 126 inst-> nonblock = driver_dummy_nonblock;126 inst->ctl = driver_dummy_ctl; 127 127 128 128 Pa_Initialize(); -
roard/driver_pulsesimple.c
r5056 r5276 127 127 inst->sync = driver_pulsesimple_sync; 128 128 inst->ctl = driver_pulsesimple_ctl; 129 inst->nonblock = driver_dummy_nonblock;130 129 131 130 return 0; … … 167 166 ROAR_DBG("driver_pulsesimple_ctl(vio=%p) = ?", vio); 168 167 168 switch (cmd) { 169 case ROAR_VIO_CTL_NONBLOCK: 170 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 171 return 0; 172 roar_err_set(ROAR_ERROR_NOTSUP); 173 return -1; 174 break; 175 } 176 177 roar_err_set(ROAR_ERROR_NOSYS); 169 178 return -1; 170 179 } -
roard/driver_pwmled.c
r4957 r5276 62 62 inst->write = driver_pwmled_write; 63 63 inst->lseek = NULL; 64 inst->nonblock = NULL;65 64 inst->sync = NULL; 66 65 inst->ctl = driver_pwmled_ctl; -
roard/driver_rsound.c
r5107 r5276 171 171 inst->close = driver_rsound_close; 172 172 inst->write = driver_rsound_write; 173 inst-> nonblock = driver_dummy_nonblock;173 inst->ctl = driver_dummy_ctl; 174 174 175 175 return 0; -
roard/driver_shout.c
r5012 r5276 202 202 inst->write = driver_shout_write; 203 203 inst->close = driver_shout_close; 204 inst-> nonblock = driver_dummy_nonblock;204 inst->ctl = driver_dummy_ctl; 205 205 206 206 return 0; -
roard/driver_sndio.c
r5105 r5276 265 265 return sio_setvol(self->shandle, d) == 0 ? -1 : 0; 266 266 break; 267 case ROAR_VIO_CTL_NONBLOCK: 268 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 269 return 0; 270 roar_err_set(ROAR_ERROR_NOTSUP); 271 return -1; 272 break; 267 273 default: 268 274 return -1; -
roard/driver_sysclock.c
r5012 r5276 42 42 inst->inst = self; 43 43 inst->close = driver_sysclock_close; 44 inst->nonblock = driver_dummy_nonblock;45 44 inst->write = driver_sysclock_write; 45 inst->ctl = driver_dummy_ctl; 46 46 47 47 self->bps = roar_info2bitspersec(info)/8; -
roard/driver_wmm.c
r5062 r5276 191 191 inst->close = driver_wmm_close_vio; 192 192 inst->write = driver_wmm_write; 193 inst-> nonblock = driver_dummy_nonblock;193 inst->ctl = driver_dummy_ctl; 194 194 195 195 info->codec = ROAR_CODEC_PCM_S_LE; -
roard/include/driver.h
r5245 r5276 159 159 #endif 160 160 161 int driver_dummy_ nonblock(struct roar_vio_calls * vio, int state);161 int driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data); 162 162 163 163 #endif -
roard/include/driver_oss.h
r4815 r5276 46 46 ssize_t driver_oss_write (struct roar_vio_calls * vio, void *buf, size_t count); 47 47 ssize_t driver_oss_read (struct roar_vio_calls * vio, void *buf, size_t count); 48 int driver_oss_nonblock (struct roar_vio_calls * vio, int state);49 48 int driver_oss_close_vio(struct roar_vio_calls * vio); 50 49 int driver_oss_reopen_device(struct driver_oss * self); -
roard/include/midi.h
r5194 r5276 174 174 // dummys: 175 175 int midi_vio_set_dummy(int stream); 176 int midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data); 176 177 int midi_vio_ok(struct roar_vio_calls * vio, ...); 177 178 -
roard/midi.c
r5210 r5276 1058 1058 ss->vio.write = NULL; 1059 1059 ss->vio.lseek = NULL; 1060 ss->vio.nonblock = (int (*)(struct roar_vio_calls * vio, int state))midi_vio_ok;1061 1060 ss->vio.sync = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 1062 ss->vio.ctl = NULL;1061 ss->vio.ctl = midi_vio_ctl; 1063 1062 ss->vio.close = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 1064 1063 … … 1066 1065 } 1067 1066 1067 int midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 1068 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 1069 return 0; 1070 return -1; 1071 } 1072 1068 1073 int midi_vio_ok(struct roar_vio_calls * vio, ...) { 1069 1074 return 0; -
roard/sources.c
r5246 r5276 418 418 } 419 419 420 static int sources_radionoise_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 421 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 422 return 0; 423 424 roar_err_set(ROAR_ERROR_BADRQC); 425 return -1; 426 } 427 420 428 int sources_add_radionoise (int stream, const char * device, int fh, const char * driver) { 421 429 struct roar_stream_server * ss; … … 437 445 ss->vio.close = sources_radionoise_return_zero; 438 446 ss->vio.sync = sources_radionoise_return_zero; 439 ss->vio. nonblock = (int (*)(struct roar_vio_calls * vio, int state))sources_radionoise_return_zero;447 ss->vio.ctl = sources_radionoise_ctl; 440 448 441 449 return streams_set_fh(stream, -2);
Note: See TracChangeset
for help on using the changeset viewer.