diff --git a/include/core/movie.hpp b/include/core/movie.hpp index 11274668..1cc0f0c8 100644 --- a/include/core/movie.hpp +++ b/include/core/movie.hpp @@ -263,11 +263,11 @@ public: /** * Recount frames. */ - void recount_frames() { frames_in_movie = movie_data.count_frames(); } + void recount_frames() { adjust_frame_count(movie_data.count_frames() - frames_in_movie); } /** * Adjust frame count. */ - void adjust_frame_count(int64_t adjust) { frames_in_movie += adjust; } + void adjust_frame_count(int64_t adjust); private: //TRUE if readonly mode is active. bool readonly; diff --git a/src/core/movie.cpp b/src/core/movie.cpp index 14af3859..405b7dfa 100644 --- a/src/core/movie.cpp +++ b/src/core/movie.cpp @@ -561,4 +561,17 @@ movie& movie::operator=(const movie& m) cached_subframe = m.cached_subframe; } +void movie::adjust_frame_count(int64_t adjust) +{ + uint64_t old_frames = frames_in_movie; + frames_in_movie += adjust; + //If current_frame_first_subframe is in part extended, recompute it. + if(current_frame > old_frames + 1) { + current_frame_first_subframe = 0; + if(current_frame > 0) + for(uint64_t i = 0; i < current_frame - 1; i++) + current_frame_first_subframe += count_changes(current_frame_first_subframe); + } +} + unsigned extended_mode = 0;