diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-01-04 21:41:07 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-01-04 21:41:07 +0000 |
| commit | 736f9d8154080ea5837b31af623ef863eea1a7c5 (patch) | |
| tree | ddb5c8118d57b9f55d507293b75e0d5fd9652811 /src/wx/timing_panel.cc | |
| parent | 11ac33e140f3aa9d6e992880a1e1b3a4ca649355 (diff) | |
Fix non-frame-aligned trims when using trim-to-playhead.
Reimplement Time::ceil and add a corresponding Time::floor with tests.
ceil returns slightly different results to previously with non-integer
frame rates.
Then use floor to round the playhead position when trimming.
Diffstat (limited to 'src/wx/timing_panel.cc')
| -rw-r--r-- | src/wx/timing_panel.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/wx/timing_panel.cc b/src/wx/timing_panel.cc index bd4177ffb..d7ed46f46 100644 --- a/src/wx/timing_panel.cc +++ b/src/wx/timing_panel.cc @@ -441,14 +441,15 @@ TimingPanel::film_changed (Film::Property p) void TimingPanel::trim_start_to_playhead_clicked () { - DCPTime const ph = _viewer->position (); + shared_ptr<const Film> film = _parent->film (); + DCPTime const ph = _viewer->position().floor (film->video_frame_rate ()); optional<DCPTime> new_ph; _viewer->set_coalesce_player_changes (true); BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) { if (i->position() < ph && ph < i->end ()) { - FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ()); + FrameRateChange const frc = film->active_frame_rate_change (i->position ()); i->set_trim_start (i->trim_start() + ContentTime (ph - i->position (), frc)); new_ph = i->position (); } @@ -464,10 +465,11 @@ TimingPanel::trim_start_to_playhead_clicked () void TimingPanel::trim_end_to_playhead_clicked () { - DCPTime const ph = _viewer->position (); + shared_ptr<const Film> film = _parent->film (); + DCPTime const ph = _viewer->position().floor (film->video_frame_rate ()); BOOST_FOREACH (shared_ptr<Content> i, _parent->selected ()) { if (i->position() < ph && ph < i->end ()) { - FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ()); + FrameRateChange const frc = film->active_frame_rate_change (i->position ()); i->set_trim_end (ContentTime (i->position() + i->full_length() - ph - DCPTime::from_frames (1, frc.dcp), frc) - i->trim_start()); } } |
