avformat_network_init();
global_httpd = new HTTPD;
- global_httpd->start(DEFAULT_HTTPD_PORT);
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
// TODO: Delete the surface, too.
}
- MainWindow mainWindow;
- mainWindow.show();
+ MainWindow main_window;
+ main_window.show();
+
+ global_httpd->add_endpoint("/queue_status", bind(&MainWindow::get_queue_status, &main_window), HTTPD::NO_CORS_POLICY);
+ global_httpd->start(DEFAULT_HTTPD_PORT);
init_jpeg_vaapi();
live_player_clip_progress(played_this_clip, total_length);
});
});
+ set_output_status("paused");
defer_timeout = new QTimer(this);
defer_timeout->setSingleShot(true);
{
int row = playlist_clips->get_currently_playing();
if (row == -1 || row == int(playlist_clips->size()) - 1) {
- ui->live_label->setText("Current output (paused)");
+ set_output_status("paused");
playlist_clips->set_currently_playing(-1, 0.0f);
} else {
playlist_clips->set_currently_playing(row + 1, 0.0f);
int m = remaining_ms;
char buf[256];
- snprintf(buf, sizeof(buf), "Current output (%d:%02d.%03d left)", m, s, ms);
- ui->live_label->setText(buf);
+ snprintf(buf, sizeof(buf), "%d:%02d.%03d left", m, s, ms);
+ set_output_status(buf);
}
void MainWindow::resizeEvent(QResizeEvent *event)
ui->input4_frame->setStyleSheet("");
}
}
+
+void MainWindow::set_output_status(const string &status)
+{
+ ui->live_label->setText(QString::fromStdString("Current output (" + status + ")"));
+
+ lock_guard<mutex> lock(queue_status_mu);
+ queue_status = status;
+}
+
+pair<string, string> MainWindow::get_queue_status() const {
+ lock_guard<mutex> lock(queue_status_mu);
+ return {queue_status, "text/plain"};
+}
#include "db.h"
#include "state.pb.h"
+#include <mutex>
#include <QLabel>
#include <QMainWindow>
#include <stdbool.h>
#include <sys/types.h>
+#include <string>
+#include <utility>
namespace Ui {
class MainWindow;
public:
MainWindow();
+ // HTTP callback. TODO: Does perhaps not belong to MainWindow?
+ std::pair<std::string, std::string> get_queue_status() const;
+
//private:
Ui::MainWindow *ui;
bool currently_deferring_model_changes = false;
std::string current_change_id;
+ mutable std::mutex queue_status_mu;
+ std::string queue_status; // Under queue_status_mu.
+
void cue_in_clicked();
void cue_out_clicked();
void queue_clicked();
void live_player_clip_done();
Clip live_player_get_next_clip();
void live_player_clip_progress(double played_this_clip, double total_length);
+ void set_output_status(const std::string &status);
void playlist_duplicate();
void playlist_remove();
void playlist_move(int delta);