Changeset 4545:47a468d8b448 in roaraudio
- Timestamp:
- 10/24/10 21:11:48 (14 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/include/streams.h
r4543 r4545 112 112 struct hwmixer_stream * mixerstream; 113 113 size_t single_sink_c; 114 size_t single_sink_self_c; 114 115 } * g_streams[ROAR_STREAMS_MAX]; 115 116 -
roard/streams.c
r4544 r4545 371 371 } 372 372 373 if ( (mixer = streams_get_mixer_stream(id)) != -1 ) { 374 if ( g_streams[mixer]->flags & ROAR_FLAG_SINGLESINK ) { 375 streams_set_mixer_stream(id, -1); 376 return -1; 373 if ( streams_get_ssdir(id) & STREAM_DIR_OUT ) { 374 if ( (mixer = streams_get_mixer_stream(id)) != -1 ) { 375 if ( g_streams[mixer]->flags & ROAR_FLAG_SINGLESINK ) { 376 streams_set_mixer_stream(id, -1); 377 return -1; 378 } 377 379 } 378 380 } … … 807 809 mixer = self_ss->mixer_stream; 808 810 811 ROAR_WARN("streams_set_single_sink(id=%i, reset=%i): mixer=%i", id, reset, mixer); 812 809 813 if ( id == mixer ) { 810 814 if ( reset ) { 811 if ( self_ss->single_sink_c > 1 ) { 815 if ( self_ss->single_sink_self_c ) { 816 ROAR_WARN("streams_set_single_sink(id=%i, reset=%i): mixer=%i", id, reset, mixer); 817 self_ss->single_sink_self_c--; 812 818 self_ss->single_sink_c--; 813 self_ss->flags |= ROAR_FLAG_SINGLESINK; 814 self_ss->flags -= ROAR_FLAG_SINGLESINK; 819 if ( self_ss->single_sink_c == 0 ) { 820 ROAR_WARN("streams_set_single_sink(id=%i, reset=%i): mixer=%i", id, reset, mixer); 821 self_ss->flags |= ROAR_FLAG_SINGLESINK; 822 self_ss->flags -= ROAR_FLAG_SINGLESINK; 823 } 815 824 return 0; 825 } else { 826 return -1; 816 827 } 817 828 } else { 818 829 if ( self_ss->single_sink_c ) { 830 self_ss->single_sink_self_c++; 819 831 self_ss->single_sink_c++; 820 832 return 0; … … 822 834 } 823 835 } else if ( reset ) { 836 ROAR_WARN("streams_set_single_sink(id=%i, reset=%i): mixer=%i", id, reset, mixer); 837 824 838 if ( (ss = g_streams[mixer])->single_sink_c == 0 ) 825 839 return -1; … … 859 873 ss = g_streams[mixer]; 860 874 875 if ( id == mixer ) 876 ss->single_sink_self_c++; 877 861 878 ss->single_sink_c++; 862 879 … … 889 906 if ( flag & ROAR_FLAG_SINGLESINK ) { 890 907 if ( streams_set_single_sink(id, 0) == -1 ) { 891 flag -= ROAR_FLAG_SINGLESINK;892 return -1;893 }908 return -1; 909 } 910 flag -= ROAR_FLAG_SINGLESINK; 894 911 } 895 912 … … 986 1003 if ( flag & ROAR_FLAG_SINGLESINK ) { 987 1004 if ( streams_set_single_sink(id, 1) == -1 ) { 988 flag -= ROAR_FLAG_SINGLESINK;989 return -1;990 }1005 return -1; 1006 } 1007 flag -= ROAR_FLAG_SINGLESINK; 991 1008 } 992 1009
Note: See TracChangeset
for help on using the changeset viewer.