From: Steinar H. Gunderson Date: Sat, 29 Sep 2018 20:52:20 +0000 (+0200) Subject: Make it possible to scrub pts_in on a clip even if pts_out is not set. X-Git-Tag: 1.8.0~76^2~83 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a92c8452f398f95540a9c740e34267279fd00bd5;p=nageru Make it possible to scrub pts_in on a clip even if pts_out is not set. --- diff --git a/mainwindow.cpp b/mainwindow.cpp index fd94e89..0d9e80a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -321,6 +321,17 @@ void MainWindow::relayout() 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(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) { constexpr int dead_zone_pixels = 3; // To avoid that simple clicks get misinterpreted. @@ -398,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(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); @@ -411,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(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); @@ -460,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(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;