]> git.sesse.net Git - nageru/blobdiff - nageru/mixer.cpp
Make the ImageInput cache store textures, not images.
[nageru] / nageru / mixer.cpp
index 5f38a673581ccbca276faf9a5d9992dafe06d2f5..83d6eada183d8f0f787c1f9703211915db790917 100644 (file)
@@ -44,6 +44,7 @@
 #include "shared/disk_space_estimator.h"
 #include "ffmpeg_capture.h"
 #include "flags.h"
+#include "image_input.h"
 #include "input_mapping.h"
 #include "shared/metrics.h"
 #include "mjpeg_encoder.h"
@@ -306,7 +307,8 @@ Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards)
          num_cards(num_cards),
          mixer_surface(create_surface(format)),
          h264_encoder_surface(create_surface(format)),
-         decklink_output_surface(create_surface(format))
+         decklink_output_surface(create_surface(format)),
+         image_update_surface(create_surface(format))
 {
        memcpy(ycbcr_interpretation, global_flags.ycbcr_interpretation, sizeof(ycbcr_interpretation));
        CHECK(init_movit(MOVIT_SHADER_DIR, MOVIT_DEBUG_OFF));
@@ -370,10 +372,10 @@ Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards)
        audio_mixer.reset(new AudioMixer(num_cards, video_inputs.size()));
 
        httpd.add_endpoint("/channels", bind(&Mixer::get_channels_json, this), HTTPD::ALLOW_ALL_ORIGINS);
-       for (int channel_idx = 2; channel_idx < theme->get_num_channels(); ++channel_idx) {
+       for (int channel_idx = 0; channel_idx < theme->get_num_channels(); ++channel_idx) {
                char url[256];
-               snprintf(url, sizeof(url), "/channels/%d/color", channel_idx);
-               httpd.add_endpoint(url, bind(&Mixer::get_channel_color_http, this, unsigned(channel_idx)), HTTPD::ALLOW_ALL_ORIGINS);
+               snprintf(url, sizeof(url), "/channels/%d/color", channel_idx + 2);
+               httpd.add_endpoint(url, bind(&Mixer::get_channel_color_http, this, unsigned(channel_idx + 2)), HTTPD::ALLOW_ALL_ORIGINS);
        }
 
        // Start listening for clients only once VideoEncoder has written its header, if any.
@@ -500,10 +502,14 @@ Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards)
        }
 
        output_jitter_history.register_metrics({{ "card", "output" }});
+
+       ImageInput::start_update_thread(image_update_surface);
 }
 
 Mixer::~Mixer()
 {
+       ImageInput::end_update_thread();
+
        if (mjpeg_encoder != nullptr) {
                mjpeg_encoder->stop();
        }