]> git.sesse.net Git - nageru/blobdiff - mainwindow.cpp
Start of persistence work: Keep existing frames that are at frames/ at startup.
[nageru] / mainwindow.cpp
index d6353844b95dd7589f3c1a0c53b08d99b9417d69..0d9e80a4752a5d13cb882c7cdddf3a4e321ede55 100644 (file)
@@ -145,7 +145,10 @@ void MainWindow::queue_clicked()
        if (!selected->hasSelection()) {
                Clip clip = *cliplist_clips->back();
                clip.stream_idx = 0;
-               playlist_clips->add_clip(clip);
+               if (clip.pts_out != -1) {
+                       playlist_clips->add_clip(clip);
+                       playlist_selection_changed();
+               }
                return;
        }
 
@@ -158,8 +161,10 @@ void MainWindow::queue_clicked()
                clip.stream_idx = ui->preview_display->get_stream_idx();
        }
 
-       playlist_clips->add_clip(clip);
-       playlist_selection_changed();
+       if (clip.pts_out != -1) {
+               playlist_clips->add_clip(clip);
+               playlist_selection_changed();
+       }
 }
 
 void MainWindow::preview_clicked()
@@ -261,7 +266,7 @@ void MainWindow::play_clicked()
 
        const Clip &clip = *playlist_clips->clip(row);
        live_player->play_clip(clip, clip.stream_idx);
-       playlist_clips->set_currently_playing(row);
+       playlist_clips->set_currently_playing(row, 0.0f);
        playlist_selection_changed();
 }
 
@@ -272,15 +277,17 @@ void MainWindow::live_player_clip_done()
                ++row;
                const Clip &clip = *playlist_clips->clip(row);
                live_player->play_clip(clip, clip.stream_idx);
-               playlist_clips->set_currently_playing(row);
+               playlist_clips->set_currently_playing(row, 0.0f);
        } else {
-               playlist_clips->set_currently_playing(-1);
+               playlist_clips->set_currently_playing(-1, 0.0f);
                ui->live_label->setText("Current output (paused)");
        }
 }
 
 void MainWindow::live_player_clip_progress(double played_this_clip, double total_length)
 {
+       playlist_clips->set_currently_playing(playlist_clips->get_currently_playing(), played_this_clip / total_length);
+
        double remaining = total_length - played_this_clip;
        for (int row = playlist_clips->get_currently_playing() + 1; row < int(playlist_clips->size()); ++row) {
                const Clip clip = *playlist_clips->clip(row);
@@ -310,7 +317,19 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 
 void MainWindow::relayout()
 {
-       ui->live_display->setMinimumHeight(ui->live_display->width() * 9 / 16);
+       ui->live_display->setMinimumWidth(ui->live_display->height() * 16 / 9);
+       ui->preview_display->setMinimumWidth(ui->preview_display->height() * 16 / 9);
+}
+
+void set_pts_in(int64_t pts, int64_t current_pts, ClipProxy &clip)
+{
+       pts = std::max<int64_t>(pts, 0);
+       if (clip->pts_out == -1) {
+               pts = std::min(pts, current_pts);
+       } else {
+               pts = std::min(pts, clip->pts_out);
+       }
+       clip->pts_in = pts;
 }
 
 bool MainWindow::eventFilter(QObject *watched, QEvent *event)
@@ -390,9 +409,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
                        if (scrub_type == SCRUBBING_CLIP_LIST) {
                                ClipProxy clip = cliplist_clips->mutable_clip(scrub_row);
                                if (scrub_column == int(ClipList::Column::IN)) {
-                                       pts = std::max<int64_t>(pts, 0);
-                                       pts = std::min(pts, clip->pts_out);
-                                       clip->pts_in = pts;
+                                       set_pts_in(pts, current_pts, clip);
                                        preview_single_frame(pts, stream_idx, FIRST_AT_OR_AFTER);
                                } else {
                                        pts = std::max(pts, clip->pts_in);
@@ -403,9 +420,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
                        } else {
                                ClipProxy clip = playlist_clips->mutable_clip(scrub_row);
                                if (scrub_column == int(PlayList::Column::IN)) {
-                                       pts = std::max<int64_t>(pts, 0);
-                                       pts = std::min(pts, clip->pts_out);
-                                       clip->pts_in = pts;
+                                       set_pts_in(pts, current_pts, clip);
                                        preview_single_frame(pts, clip->stream_idx, FIRST_AT_OR_AFTER);
                                } else {
                                        pts = std::max(pts, clip->pts_in);
@@ -452,9 +467,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event)
                }
                if (column == in_column) {
                        int64_t pts = clip->pts_in + wheel->angleDelta().y() * wheel_sensitivity;
-                       pts = std::max<int64_t>(pts, 0);
-                       pts = std::min(pts, clip->pts_out);
-                       clip->pts_in = pts;
+                       set_pts_in(pts, current_pts, clip);
                        preview_single_frame(pts, stream_idx, FIRST_AT_OR_AFTER);
                } else if (column == out_column) {
                        int64_t pts = clip->pts_out + wheel->angleDelta().y() * wheel_sensitivity;