Changeset 1842:8c8a003773ca in roaraudio
- Timestamp:
- 05/23/09 04:17:05 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/stream.h
r1813 r1842 109 109 110 110 int roar_stream_get_info (struct roar_connection * con, struct roar_stream * s, struct roar_stream_info * info); 111 int roar_stream_get_name (struct roar_connection * con, struct roar_stream * s, char * name, size_t len); 111 112 112 113 int roar_stream_set_flags (struct roar_connection * con, struct roar_stream * s, int flags, int reset); -
include/roaraudio/proto.h
r1162 r1842 112 112 #define ROAR_ATTACH_OUTPUT 3 /* attach a new output stream to the server */ 113 113 114 // modes for ROAR_CMD_?ET_STREAM_PARA... 115 #define ROAR_STREAM_PARA_INFO 1 116 #define ROAR_STREAM_PARA_FLAGS 2 117 #define ROAR_STREAM_PARA_NAME 3 114 118 115 119 struct roar_timeofday { -
libroar/stream.c
r1820 r1842 338 338 339 339 data[0] = 0; // Version and reserved 340 data[1] = 1; // stream340 data[1] = ROAR_STREAM_PARA_INFO; // stream 341 341 342 342 for (i = 0; i < m.datalen/2; i++) { … … 368 368 info->flags = data[6]; 369 369 info->delay = data[7]*1000; 370 371 return 0; 372 } 373 374 int roar_stream_get_name (struct roar_connection * con, struct roar_stream * s, char * name, size_t len) { 375 struct roar_message m; 376 uint16_t * data = (uint16_t *) m.data; 377 378 if ( con == NULL || s == NULL || name == NULL || len == 0 ) 379 return -1; 380 381 name[0] = 0; // just in case... 382 383 m.cmd = ROAR_CMD_GET_STREAM_PARA; 384 m.stream = s->id; 385 m.datalen = 4; 386 m.pos = 0; 387 388 data[0] = 0; // Version and reserved 389 data[1] = ROAR_STREAM_PARA_NAME; // stream 390 391 data[0] = ROAR_HOST2NET16(data[0]); 392 data[1] = ROAR_HOST2NET16(data[1]); 393 394 ROAR_DBG("roar_stream_get_name(*) = ?"); 395 396 if ( roar_req(con, &m, NULL) == -1 ) 397 return -1; 398 399 ROAR_DBG("roar_stream_get_name(*) = ?"); 400 401 if ( m.cmd != ROAR_CMD_OK ) 402 return -1; 403 404 ROAR_DBG("roar_stream_get_name(*) = ?"); 405 406 if ( m.datalen < 4 ) 407 return -1; 408 409 data[0] = ROAR_NET2HOST16(data[0]); 410 data[1] = ROAR_NET2HOST16(data[1]); 411 412 ROAR_DBG("roar_stream_get_name(*) = ?"); 413 414 if ( data[0] != 0 || data[1] != ROAR_STREAM_PARA_NAME ) 415 return -1; 416 417 m.datalen -= 4; 418 419 len--; 420 421 if ( len > m.datalen ) 422 len = m.datalen; 423 424 strncpy(name, ((char*)m.data)+4, len); 425 name[len] = 0; 426 427 ROAR_DBG("roar_stream_get_name(*) = 0"); 370 428 371 429 return 0; -
roarclients/roarctl.c
r1839 r1842 236 236 struct roar_stream_info info; 237 237 char flags[1024]; 238 char name[1024]; 238 239 239 240 … … 250 251 } 251 252 printf("Stream direction : %s\n", roar_dir2str(s.dir)); 253 254 if ( roar_stream_get_name(con, &s, name, 1024) == 0 ) 255 printf("Stream name : %s\n", name); 256 252 257 if ( s.pos_rel_id == -1 ) { 253 258 printf("Relativ position id : none (stream not synchronized)\n"); -
roard/include/streams.h
r1609 r1842 72 72 int flags; 73 73 uint_least32_t delay; 74 char * name; 74 75 } * g_streams[ROAR_STREAMS_MAX]; 75 76 … … 99 100 int streams_get_flag (int id, int flag); 100 101 102 int streams_set_name (int id, char * name); 103 char * streams_get_name (int id); 104 101 105 int streams_calc_delay (int id); 102 106 int streams_set_mixer (int id); -
roard/req.c
r1840 r1842 508 508 uint16_t * d = (uint16_t *) mes->data; 509 509 int i; 510 char * str; 510 511 511 512 if ( mes->datalen != 4 ) … … 516 517 } 517 518 518 if ( streams_get(mes->stream, &ss) == -1 ) { 519 ROAR_WARN("req_on_get_stream_para(*): request on non existing (or other error?) stream %i", mes->stream); 520 return -1; 521 } 522 523 if ( streams_calc_delay(mes->stream) == -1 ) { 524 ROAR_WARN("req_on_get_stream_para(*): can not calc delay for stream %i", mes->stream); 525 } 526 527 s = ROAR_STREAM(ss); 528 529 audio_info = &(s->info); 530 531 if ( d[0] != 0 || d[1] != 1 ) { 519 if ( d[0] != 0 ) { 532 520 ROAR_WARN("req_on_get_stream_para(*): unsupported command version: %i, %i", d[0], d[1]); 533 521 return -1; 534 522 } 535 523 536 mes->datalen = 2*8; 537 538 d[2] = ROAR_OUTPUT_CALC_OUTBUFSIZE(audio_info); 539 d[3] = ss->pre_underruns; 540 d[4] = ss->post_underruns; 541 d[5] = ss->codec_orgi; 542 d[6] = ss->flags | (ss->primary ? ROAR_FLAG_PRIMARY : 0) | (ss->driver_id != -1 ? ROAR_FLAG_OUTPUT : 0); 543 d[7] = ss->delay/1000; 544 545 ROAR_DBG("req_on_get_stream_para(*): ss->driver_id=%i", ss->driver_id); 546 547 ROAR_DBG("req_on_get_stream_para(*): delay=%i, send delay=%i", ss->delay, d[7]); 548 549 for (i = 0; i < mes->datalen/2; i++) { 550 d[i] = ROAR_HOST2NET16(d[i]); 551 } 552 553 mes->pos = s->pos; 524 switch (d[1]) { 525 case ROAR_STREAM_PARA_INFO: 526 if ( streams_get(mes->stream, &ss) == -1 ) { 527 ROAR_WARN("req_on_get_stream_para(*): request on non existing (or other error?) stream %i", mes->stream); 528 return -1; 529 } 530 531 if ( streams_calc_delay(mes->stream) == -1 ) { 532 ROAR_WARN("req_on_get_stream_para(*): can not calc delay for stream %i", mes->stream); 533 } 534 535 s = ROAR_STREAM(ss); 536 537 audio_info = &(s->info); 538 539 mes->datalen = 2*8; 540 541 d[2] = ROAR_OUTPUT_CALC_OUTBUFSIZE(audio_info); 542 d[3] = ss->pre_underruns; 543 d[4] = ss->post_underruns; 544 d[5] = ss->codec_orgi; 545 d[6] = ss->flags | (ss->primary ? ROAR_FLAG_PRIMARY : 0) | (ss->driver_id != -1 ? ROAR_FLAG_OUTPUT : 0); 546 d[7] = ss->delay/1000; 547 548 ROAR_DBG("req_on_get_stream_para(*): ss->driver_id=%i", ss->driver_id); 549 550 ROAR_DBG("req_on_get_stream_para(*): delay=%i, send delay=%i", ss->delay, d[7]); 551 552 for (i = 0; i < mes->datalen/2; i++) { 553 d[i] = ROAR_HOST2NET16(d[i]); 554 } 555 556 mes->pos = s->pos; 557 break; 558 559 case ROAR_STREAM_PARA_NAME: 560 str = streams_get_name(mes->stream); 561 562 if ( str == NULL ) 563 return -1; 564 565 mes->datalen = 4 + strlen(str); 566 567 if ( mes->datalen > LIBROAR_BUFFER_MSGDATA ) 568 return -1; 569 570 strncpy(((char*)&(mes->data))+4, str, mes->datalen); 571 572 d[0] = ROAR_HOST2NET16(d[0]); 573 d[1] = ROAR_HOST2NET16(d[1]); 574 break; 575 576 default: 577 ROAR_WARN("req_on_get_stream_para(*): unsupported command: %i", d[1]); 578 return -1; 579 } 554 580 555 581 mes->cmd = ROAR_CMD_OK; … … 568 594 } 569 595 570 if ( d[0] != 0 || d[1] != 2) {596 if ( d[0] != 0 || d[1] != ROAR_STREAM_PARA_FLAGS ) { 571 597 ROAR_WARN("req_on_set_stream_para(*): unsupported command version: %i, %i", d[0], d[1]); 572 598 return -1; -
roard/streams.c
r1837 r1842 80 80 n->pos = 0; 81 81 82 s->name = NULL; 83 82 84 s->client = -1; 83 85 s->socktype = ROAR_SOCKET_TYPE_UNKNOWN; … … 190 192 prim = s->primary; 191 193 194 if ( s->name != NULL ) 195 free(s->name); 196 192 197 free(s); 193 198 … … 419 424 return g_streams[id]->flags & flag ? 1 : 0; 420 425 } 426 427 int streams_set_name (int id, char * name) { 428 char * str; 429 430 if ( g_streams[id] == NULL ) 431 return -1; 432 433 if ( (str = strdup(name)) == NULL ) 434 return -1; 435 436 if ( g_streams[id]->name != NULL ) 437 free(g_streams[id]->name); 438 439 g_streams[id]->name = str; 440 } 441 442 char * streams_get_name (int id) { 443 if ( g_streams[id] == NULL ) 444 return NULL; 445 446 return g_streams[id]->name; 447 } 448 421 449 422 450 int streams_calc_delay (int id) {
Note: See TracChangeset
for help on using the changeset viewer.