]> git.sesse.net Git - nageru/blobdiff - theme.cpp
Make the default input mapping ignore the output card.
[nageru] / theme.cpp
index 24c6cdc261b93114a6a98a6ef222dfdcb9f8d18f..84f37ba0002d07db95983828944c66bc6777d7c7 100644 (file)
--- a/theme.cpp
+++ b/theme.cpp
@@ -261,7 +261,7 @@ int EffectChain_finalize(lua_State* L)
 
        if (is_main_chain) {
                YCbCrFormat output_ycbcr_format;
-               // We actually output 4:2:0 in the end, but chroma subsampling
+               // We actually output 4:2:0 and/or 4:2:2 in the end, but chroma subsampling
                // happens in a pass not run by Movit (see ChromaSubsampler::subsample_chroma()).
                output_ycbcr_format.chroma_subsampling_x = 1;
                output_ycbcr_format.chroma_subsampling_y = 1;
@@ -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)