Changeset 4934:a88414aa5705 in roaraudio for roard/streams.c
- Timestamp:
- 05/09/11 01:39:41 (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/streams.c
r4896 r4934 33 33 int streams_recsource_id = -1; 34 34 35 static const struct rolestack * streams_rolestack = NULL; 36 static int streams_role_num = 0; 37 38 35 39 static void _streams_change_state(struct roar_stream_server * s, const int new, const char * func) { 36 40 register int id = ROAR_STREAM(s)->id; … … 122 126 int streams_init (void) { 123 127 int i; 128 129 streams_rolestack = rolestack_get_role(-1); // get default 124 130 125 131 for (i = 0; i < ROAR_STREAMS_MAX; i++) … … 263 269 roar_notify_core_emit_snoargs(ROAR_OE_BASICS_DELETE, -1, id, ROAR_OT_STREAM); 264 270 271 streams_set_role(id, -1); 272 265 273 prim = s->primary; 266 274 … … 513 521 } 514 522 523 static int streams_set_role_handle(int id) { 524 switch (streams_rolestack->action) { 525 case RS_ERROR: /* nothing to do */; break; 526 case RS_MIX: /* nothing to do */; break; 527 case RS_KICK: streams_delete(id); break; 528 case RS_MUTE: streams_set_flag(id, ROAR_FLAG_MUTE); break; 529 case RS_PAUSE: streams_set_flag(id, ROAR_FLAG_PAUSE); break; 530 } 531 return 0; 532 } 533 515 534 int streams_set_role (int id, int role) { 516 535 struct roar_stream_server * ss; 536 const struct rolestack * rs; 537 int old_role; 538 int i; 539 540 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 517 541 518 542 _CHECK_SID(id); … … 521 545 return -1; 522 546 547 old_role = ss->role; 523 548 ss->role = role; 524 549 550 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 551 552 if ( ROAR_STREAM(ss)->dir != ROAR_DIR_PLAY ) 553 return 0; 554 555 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 556 557 if ( old_role == role ) 558 return 0; 559 560 if ( old_role != role && old_role != -1 && role != -1 ) { 561 streams_set_role(id, -1); 562 streams_set_role(id, role); 563 } 564 565 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 566 567 if ( ss->role != -1 && ss->role == streams_rolestack->role ) { 568 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 569 570 streams_role_num--; 571 if ( streams_role_num == 0 ) { 572 streams_rolestack = rolestack_get_role(-1); // get default 573 for (i = 0; i < ROAR_STREAMS_MAX; i++) { 574 if ( (ss = g_streams[i]) == NULL ) 575 continue; 576 if ( ROAR_STREAM(ss)->dir != ROAR_DIR_PLAY ) 577 continue; 578 if ( ss->role == -1 ) 579 continue; 580 rs = rolestack_get_role(ss->role); 581 if ( rs->index > streams_rolestack->role ) { 582 streams_rolestack = rs; 583 } 584 } 585 for (i = 0; i < ROAR_STREAMS_MAX; i++) { 586 if ( (ss = g_streams[i]) == NULL ) 587 continue; 588 if ( ROAR_STREAM(ss)->dir != ROAR_DIR_PLAY ) 589 continue; 590 if ( ss->role == streams_rolestack->role ) 591 streams_role_num++; 592 } 593 } 594 } else if ( role != -1 ) { 595 ROAR_DBG("streams_set_role(id=%i, role=%i) = ?", id, role); 596 597 rs = rolestack_get_role(role); 598 ROAR_DBG("streams_set_role(id=%i, role=%i): rs->index=%i, streams_rolestack->index=%i", id, role, rs->index, streams_rolestack->index); 599 if ( rs->index == streams_rolestack->index ) { 600 ROAR_DBG("streams_set_role(id=%i, role=%i): rs->index=%i, streams_rolestack->index=%i", id, role, rs->index, streams_rolestack->index); 601 streams_role_num++; 602 } else if ( rs->index > streams_rolestack->index ) { 603 ROAR_DBG("streams_set_role(id=%i, role=%i): rs=%p{.index=%i, .action=%s}", id, role, rs, rs->index, rolestack_action2str(rs->action)); 604 streams_role_num = 1; 605 streams_rolestack = rs; 606 for (i = 0; i < ROAR_STREAMS_MAX; i++) { 607 if ( (ss = g_streams[i]) == NULL ) 608 continue; 609 if ( ROAR_STREAM(ss)->dir != ROAR_DIR_PLAY ) 610 continue; 611 rs = rolestack_get_role(ss->role); 612 ROAR_DBG("streams_set_role(id=%i, role=%i): i=%i, rs->index=%i, streams_rolestack->index=%i", id, role, i, rs->index, streams_rolestack->index); 613 if ( rs->index < streams_rolestack->index ) 614 streams_set_role_handle(i); 615 } 616 } else { 617 ROAR_DBG("streams_set_role(id=%i, role=%i): streams_rolestack->action=%s", id, role, rolestack_action2str(streams_rolestack->action)); 618 streams_set_role_handle(id); 619 } 620 } 621 622 ROAR_DBG("streams_set_role(id=%i, role=%i) = 0", id, role); 525 623 return 0; 526 624 }
Note: See TracChangeset
for help on using the changeset viewer.