X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mainwindow.cpp;h=537f8810acad38c26d4fdba0e3d3a2e60a08358a;hb=c574aef4437253dcf0e6c1fed4c9cab1033b33f9;hp=fc7b6eaa196fab68e4f226072620a70e2c85a688;hpb=44200fe13eb353851916adbf22126373c4fd05c3;p=nageru diff --git a/mainwindow.cpp b/mainwindow.cpp index fc7b6ea..537f881 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -46,7 +46,9 @@ #include "aboutdialog.h" #include "alsa_pool.h" +#include "analyzer.h" #include "clickable_label.h" +#include "context_menus.h" #include "correlation_meter.h" #include "disk_space_estimator.h" #include "ellipsis_label.h" @@ -199,17 +201,28 @@ MainWindow::MainWindow() connect(ui->exit_action, &QAction::triggered, this, &MainWindow::exit_triggered); connect(ui->manual_action, &QAction::triggered, this, &MainWindow::manual_triggered); connect(ui->about_action, &QAction::triggered, this, &MainWindow::about_triggered); + connect(ui->open_analyzer_action, &QAction::triggered, this, &MainWindow::open_analyzer_triggered); connect(ui->simple_audio_mode, &QAction::triggered, this, &MainWindow::simple_audio_mode_triggered); connect(ui->multichannel_audio_mode, &QAction::triggered, this, &MainWindow::multichannel_audio_mode_triggered); connect(ui->input_mapping_action, &QAction::triggered, this, &MainWindow::input_mapping_triggered); connect(ui->midi_mapping_action, &QAction::triggered, this, &MainWindow::midi_mapping_triggered); + connect(ui->timecode_stream_action, &QAction::triggered, this, &MainWindow::timecode_stream_triggered); + connect(ui->timecode_stdout_action, &QAction::triggered, this, &MainWindow::timecode_stdout_triggered); - if (global_flags.x264_video_to_http) { + ui->timecode_stream_action->setChecked(global_flags.display_timecode_in_stream); + ui->timecode_stdout_action->setChecked(global_flags.display_timecode_on_stdout); + + if (global_flags.x264_video_to_http && isinf(global_flags.x264_crf)) { connect(ui->x264_bitrate_action, &QAction::triggered, this, &MainWindow::x264_bitrate_triggered); } else { ui->x264_bitrate_action->setEnabled(false); } + connect(ui->video_menu, &QMenu::aboutToShow, [this]{ + fill_hdmi_sdi_output_device_menu(ui->hdmi_sdi_output_device_menu); + fill_hdmi_sdi_output_resolution_menu(ui->hdmi_sdi_output_resolution_menu); + }); + // Hook up the transition buttons. (Keyboard shortcuts are set in set_transition_names().) // TODO: Make them dynamic. connect(ui->transition_btn1, &QPushButton::clicked, bind(&MainWindow::transition_clicked, this, 0)); @@ -369,6 +382,8 @@ void MainWindow::mixer_created(Mixer *mixer) midi_mapper.refresh_lights(); midi_mapper.start_thread(); + analyzer.reset(new Analyzer); + struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = schedule_cut_signal; @@ -538,11 +553,14 @@ void MainWindow::setup_audio_expanded_view() void MainWindow::mixer_shutting_down() { - ui->me_live->clean_context(); - ui->me_preview->clean_context(); + ui->me_live->shutdown(); + ui->me_preview->shutdown(); + for (Ui::Display *display : previews) { - display->display->clean_context(); + display->display->shutdown(); } + + analyzer->mixer_shutting_down(); } void MainWindow::cut_triggered() @@ -579,6 +597,11 @@ void MainWindow::about_triggered() AboutDialog().exec(); } +void MainWindow::open_analyzer_triggered() +{ + analyzer->show(); +} + void MainWindow::simple_audio_mode_triggered() { if (global_audio_mixer->get_mapping_mode() == AudioMixer::MappingMode::SIMPLE) { @@ -631,6 +654,16 @@ void MainWindow::midi_mapping_triggered() MIDIMappingDialog(&midi_mapper).exec(); } +void MainWindow::timecode_stream_triggered() +{ + global_mixer->set_display_timecode_in_stream(ui->timecode_stream_action->isChecked()); +} + +void MainWindow::timecode_stdout_triggered() +{ + global_mixer->set_display_timecode_on_stdout(ui->timecode_stdout_action->isChecked()); +} + void MainWindow::gain_staging_knob_changed(unsigned bus_index, int value) { if (bus_index == 0) { @@ -1221,6 +1254,8 @@ void MainWindow::update_channel_name(Mixer::Output output, const string &name) unsigned channel = output - Mixer::OUTPUT_INPUT0; previews[channel]->label->setText(name.c_str()); } + + analyzer->update_channel_name(output, name); } void MainWindow::update_channel_color(Mixer::Output output, const string &color) @@ -1270,6 +1305,12 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) return false; } +void MainWindow::closeEvent(QCloseEvent *event) +{ + analyzer->hide(); + event->accept(); +} + namespace { double srgb_to_linear(double x)