X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=theme.cpp;h=84f37ba0002d07db95983828944c66bc6777d7c7;hb=f7f5d076b3a81fccfb559b547b24721bbd9a15c2;hp=bcdd6f37bad5d69cd6462f6d0732064c21896a9d;hpb=a0083c1e4712a6e9f7c468f0961b292cfd9b69b0;p=nageru diff --git a/theme.cpp b/theme.cpp index bcdd6f3..84f37ba 100644 --- a/theme.cpp +++ b/theme.cpp @@ -963,12 +963,28 @@ int Theme::map_signal(int signal_num) if (signal_to_card_mapping.count(signal_num)) { return signal_to_card_mapping[signal_num]; } - if (signal_num >= int(num_cards)) { - fprintf(stderr, "WARNING: Theme asked for input %d, but we only have %u card(s).\n", signal_num, num_cards); - fprintf(stderr, "Mapping to card %d instead.\n", signal_num % num_cards); + + int card_index; + if (global_flags.output_card != -1 && num_cards > 1) { + // Try to exclude the output card from the default card_index. + card_index = signal_num % (num_cards - 1); + if (card_index >= global_flags.output_card) { + ++card_index; + } + if (signal_num >= int(num_cards - 1)) { + fprintf(stderr, "WARNING: Theme asked for input %d, but we only have %u input card(s) (card %d is busy with output).\n", + signal_num, num_cards - 1, global_flags.output_card); + fprintf(stderr, "Mapping to card %d instead.\n", card_index); + } + } else { + card_index = signal_num % num_cards; + if (signal_num >= int(num_cards)) { + fprintf(stderr, "WARNING: Theme asked for input %d, but we only have %u card(s).\n", signal_num, num_cards); + fprintf(stderr, "Mapping to card %d instead.\n", card_index); + } } - signal_to_card_mapping[signal_num] = signal_num % num_cards; - return signal_num % num_cards; + signal_to_card_mapping[signal_num] = card_index; + return card_index; } void Theme::set_signal_mapping(int signal_num, int card_num)