]> git.sesse.net Git - nageru/blobdiff - nageru/theme.cpp
Move texture uploading out of a lambda.
[nageru] / nageru / theme.cpp
index d04a580f2cd7bbaee8668792443931dd7f4766d4..2bb9e807495e32a2d316ee5287a6f25b45208dc8 100644 (file)
@@ -102,6 +102,7 @@ InputStateInfo::InputStateInfo(const InputState &input_state)
                last_is_connected[signal_num] = userdata->last_is_connected;
                last_frame_rate_nom[signal_num] = userdata->last_frame_rate_nom;
                last_frame_rate_den[signal_num] = userdata->last_frame_rate_den;
+               last_pixel_format[signal_num] = userdata->pixel_format;
                has_last_subtitle[signal_num] = userdata->has_last_subtitle;
                last_subtitle[signal_num] = userdata->last_subtitle;
        }
@@ -1201,7 +1202,14 @@ void LiveInputWrapper::connect_card(int card_idx, const InputState &input_state)
                        ycbcr_inputs[i]->set_texture_num(0, userdata->tex_y[frame.field_number]);
                        ycbcr_inputs[i]->set_texture_num(1, userdata->tex_cb[frame.field_number]);
                        ycbcr_inputs[i]->set_texture_num(2, userdata->tex_cr[frame.field_number]);
-                       ycbcr_inputs[i]->change_ycbcr_format(userdata->ycbcr_format);
+                       // YCbCrPlanar is used for video streams, where we can have metadata from the mux.
+                       // Prefer that if there's no override. (Overrides are only available when using
+                       // video as SRT cards.)
+                       if (input_state.ycbcr_coefficients_auto[card_idx]) {
+                               ycbcr_inputs[i]->change_ycbcr_format(userdata->ycbcr_format);
+                       } else {
+                               ycbcr_inputs[i]->change_ycbcr_format(input_ycbcr_format);
+                       }
                        ycbcr_inputs[i]->set_width(width);
                        ycbcr_inputs[i]->set_height(height);
                        break;