]> git.sesse.net Git - nageru/commitdiff
Show the current resolution next to the inputs.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 30 Dec 2015 12:48:10 +0000 (13:48 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 30 Dec 2015 12:48:10 +0000 (13:48 +0100)
glwidget.cpp
glwidget.h
mainwindow.cpp
mainwindow.h
theme.lua

index e9b97d53ac42d748eea0e88f7efe37786376115f..06675f346c85211030d0712097aa0db138b1fef6 100644 (file)
@@ -51,6 +51,7 @@ void GLWidget::initializeGL()
        global_mixer->set_frame_ready_callback(output, [this]{
                QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
                emit transition_names_updated(global_mixer->get_transition_names());
+               emit resolution_updated(output);
        });
 
        glDisable(GL_BLEND);
index 2cf34eb0a50364f3dc523e38daacd9db4b5249e8..ae4902c12b1f51464981a6a2bd8c55fb78071e5d 100644 (file)
@@ -39,6 +39,7 @@ protected:
 signals:
        void clicked();
        void transition_names_updated(std::vector<std::string> transition_names);
+       void resolution_updated(Mixer::Output output);
 
 private:
        Mixer::Output output;
index 8a91a3f630dc031ac8414a07fda84af2feb5d768..9f293342e8deda072defe176ea8baf308083190b 100644 (file)
@@ -53,6 +53,7 @@ MainWindow::MainWindow()
        transition_btn3 = ui->transition_btn3;
        qRegisterMetaType<std::vector<std::string>>("std::vector<std::string>");
        connect(ui->me_preview, &GLWidget::transition_names_updated, this, &MainWindow::set_transition_names);
+       qRegisterMetaType<Mixer::Output>("Mixer::Output");
 }
 
 void MainWindow::resizeEvent(QResizeEvent* event)
@@ -83,6 +84,9 @@ void MainWindow::mixer_created(Mixer *mixer)
                // Hook up the click.
                connect(ui_display->display, &GLWidget::clicked, bind(&MainWindow::channel_clicked, this, i));
 
+               // Let the theme update the text whenever the resolution changed.
+               connect(ui_display->display, &GLWidget::resolution_updated, this, &MainWindow::update_channel_name);
+
                // Hook up the keyboard key.
                QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_1 + i), this);
                connect(shortcut, &QShortcut::activated, bind(&MainWindow::channel_clicked, this, i));
@@ -247,6 +251,14 @@ void MainWindow::set_transition_names(vector<string> transition_names)
        }
 }
 
+void MainWindow::update_channel_name(Mixer::Output output)
+{
+       if (output >= Mixer::OUTPUT_INPUT0) {
+               unsigned channel = output - Mixer::OUTPUT_INPUT0;
+               previews[channel]->label->setText(global_mixer->get_channel_name(output).c_str());
+       }
+}
+
 void MainWindow::transition_clicked(int transition_number)
 {
        global_mixer->transition_clicked(transition_number);
index 4c4c3f0a2c7290c7b8e1c12ef37720d685985398..8faa81299b0a542f8aafc7a0813886d81eef8bee 100644 (file)
@@ -6,6 +6,8 @@
 #include <vector>
 #include <sys/time.h>
 
+#include "mixer.h"
+
 class GLWidget;
 class QResizeEvent;
 
@@ -14,7 +16,6 @@ class Display;
 class MainWindow;
 }  // namespace Ui
 
-class Mixer;
 class QPushButton;
 
 class MainWindow : public QMainWindow
@@ -31,6 +32,7 @@ public slots:
        void channel_clicked(int channel_number);
        void wb_button_clicked(int channel_number);
        void set_transition_names(std::vector<std::string> transition_names);
+       void update_channel_name(Mixer::Output output);
        void cutoff_knob_changed(int value);
        void limiter_threshold_knob_changed(int value);
        void compressor_threshold_knob_changed(int value);
index ee7283882fbfc3e5ca237d519510897c2334aa96..1f00d52165aa4b7d5be0c042bd8028da734f4e5f 100644 (file)
--- a/theme.lua
+++ b/theme.lua
@@ -31,6 +31,9 @@ local STATIC_SIGNAL_NUM = 3
 -- to the next.
 local FADE_SIGNAL_NUM = 4
 
+-- Last width/height/resolution for each channel, if we have it.
+local last_resolution = {}
+
 -- Utility function to help creating many similar chains that can differ
 -- in a free set of chosen parameters.
 function make_cartesian_product(parms, callback)
@@ -244,13 +247,30 @@ function num_channels()
        return 4
 end
 
+-- Helper function to write e.g. ā€œ720pā€.
+function get_channel_resolution(signal_num)
+       if last_resolution[signal_num] then
+               if last_resolution[signal_num].height == 0 or
+                  last_resolution[signal_num].height == 525 then
+                       return "no signal"
+               elseif last_resolution[signal_num].interlaced then
+                       return (last_resolution[signal_num].height * 2) .. "i"
+               else
+                       return last_resolution[signal_num].height .. "p"
+               end
+       else
+               return "no signal"
+       end
+end
+
 -- Returns the name for each additional channel (starting from 2).
--- Called only once for each channel, at the start of the program.
+-- Called at the start of the program, and then each frame for live
+-- channels in case they change resolution.
 function channel_name(channel)
        if channel == 2 then
-               return "Input 1"
+               return "Input 1 (" .. get_channel_resolution(0) .. ")"
        elseif channel == 3 then
-               return "Input 2"
+               return "Input 2 (" .. get_channel_resolution(1) .. ")"
        elseif channel == 4 then
                return "Side-by-side"
        elseif channel == 5 then
@@ -430,6 +450,14 @@ end
 -- NOTE: The chain returned must be finalized with the Y'CbCr flag
 -- if and only if num==0.
 function get_chain(num, t, width, height, signals)
+       for signal_num=0,1 do
+               last_resolution[signal_num] = {
+                       width = signals:get_width(signal_num),
+                       height = signals:get_height(signal_num),
+                       interlaced = signals:get_interlaced(signal_num)
+               }
+       end
+
        if num == 0 then  -- Live.
                if live_signal_num == INPUT0_SIGNAL_NUM or live_signal_num == INPUT1_SIGNAL_NUM then  -- Plain input.
                        local input_type = get_input_type(signals, live_signal_num)