X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=futatabi%2Fmainwindow.h;h=d7e037c37ee7205a6c177d22509ce25f85fa990b;hp=9e77d629e7944c5dbbf80aebe4cd756baf66afa9;hb=f22a41cb05c5cc1bbe8ce391fa918707138afad3;hpb=94e776c2048ce5da187b605552cd15280b2c4275 diff --git a/futatabi/mainwindow.h b/futatabi/mainwindow.h index 9e77d62..d7e037c 100644 --- a/futatabi/mainwindow.h +++ b/futatabi/mainwindow.h @@ -5,21 +5,26 @@ #include "db.h" #include "state.pb.h" +#include +#include +#include #include #include #include -#include -#include #include -#include #include +#include #include namespace Ui { class MainWindow; } // namespace Ui +struct FrameOnDisk; +class JPEGFrameView; class Player; +class QPushButton; +class QTableView; class MainWindow : public QMainWindow { Q_OBJECT @@ -31,13 +36,15 @@ public: // HTTP callback. TODO: Does perhaps not belong to MainWindow? std::pair get_queue_status() const; -//private: - Ui::MainWindow *ui; + void display_frame(unsigned stream_idx, const FrameOnDisk &frame); private: + Ui::MainWindow *ui; + QLabel *disk_free_label; std::unique_ptr preview_player, live_player; DB db; + unsigned num_cameras; // State when doing a scrub operation on a timestamp with the mouse. bool scrubbing = false; @@ -45,7 +52,8 @@ private: int64_t scrub_pts_origin; // Which element (e.g. pts_in on clip 4) we are scrubbing. - enum ScrubType { SCRUBBING_CLIP_LIST, SCRUBBING_PLAYLIST } scrub_type; + enum ScrubType { SCRUBBING_CLIP_LIST, + SCRUBBING_PLAYLIST } scrub_type; int scrub_row; int scrub_column; @@ -75,6 +83,18 @@ private: mutable std::mutex queue_status_mu; std::string queue_status; // Under queue_status_mu. + struct FrameAndDisplay { + QFrame *frame; + JPEGFrameView *display; + QPushButton *preview_btn; + }; + std::vector displays; + + // Used to get tally information, if a tally URL is set. + QNetworkAccessManager http; + QNetworkReply *http_reply = nullptr; + + void change_num_cameras(); void cue_in_clicked(); void cue_out_clicked(); void queue_clicked(); @@ -82,9 +102,8 @@ private: void preview_angle_clicked(unsigned stream_idx); void play_clicked(); void stop_clicked(); - void live_player_clip_done(); - std::pair live_player_get_next_clip(); - void live_player_clip_progress(const std::map &progress); + void live_player_done(); + void live_player_clip_progress(const std::map &progress, double time_remaining); void set_output_status(const std::string &status); void playlist_duplicate(); void playlist_remove(); @@ -95,7 +114,8 @@ private: void state_changed(const StateProto &state); // Called post-filtering. void save_settings(); - enum Rounding { FIRST_AT_OR_AFTER, LAST_BEFORE }; + enum Rounding { FIRST_AT_OR_AFTER, + LAST_BEFORE }; void preview_single_frame(int64_t pts, unsigned stream_idx, Rounding rounding); // Also covers when the playlist itself changes. @@ -115,8 +135,16 @@ private: void undo_triggered(); void redo_triggered(); void quality_toggled(int quality, bool checked); + void padding_toggled(double seconds, bool checked); void highlight_camera_input(int stream_idx); + void enable_or_disable_preview_button(); + + template + void replace_model(QTableView *view, Model **model, Model *new_model); + + void start_tally(); + void tally_received(); private slots: void relayout();