aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/aolayer.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/aolayer.cpp b/src/aolayer.cpp
index 3791d66b..99524947 100644
--- a/src/aolayer.cpp
+++ b/src/aolayer.cpp
@@ -320,10 +320,7 @@ void AOLayer::start_playback(QString p_image)
for (int i = frame; i--;) {
if (i <= -1)
break;
- QPixmap l_pixmap = this->get_pixmap(m_reader.read());
- int l_delay = m_reader.nextImageDelay();
- movie_frames.append(l_pixmap);
- movie_delays.append(l_delay);
+ load_next_frame();
}
}
last_path = p_image;
@@ -344,7 +341,7 @@ void AOLayer::start_playback(QString p_image)
if (duration > 0 && cull_image == true)
shfx_timer->start(duration);
#ifdef DEBUG_MOVIE
- qDebug() << max_frames << "Setting image to " << image_path
+ qDebug() << max_frames << "Setting image to " << p_image
<< "Time taken to process image:" << actual_time.elapsed();
actual_time.restart();
@@ -532,7 +529,11 @@ void CharLayer::movie_ticker()
void AOLayer::movie_ticker()
{
++frame;
- if (frame >= max_frames) {
+ if (frame >= movie_frames.size() && frame < max_frames) { // need to load the image
+ future.waitForFinished(); // Do Not want this to be running twice
+ future = QtConcurrent::run(this, &AOLayer::load_next_frame);
+ }
+ else if (frame >= max_frames) {
if (play_once) {
if (cull_image)
this->stop();
@@ -544,19 +545,21 @@ void AOLayer::movie_ticker()
else
frame = 0;
}
- // qint64 difference = elapsed - movie_delays[frame];
- if (frame >= movie_frames.size()) {
- movie_frames.append(this->get_pixmap(m_reader.read()));
- movie_delays.append(m_reader.nextImageDelay());
- }
-
+ future.waitForFinished(); // don't set the frame before we definitely have it in memory
#ifdef DEBUG_MOVIE
qDebug() << frame << movie_delays[frame]
<< "actual time taken from last frame:" << actual_time.restart();
#endif
-
this->set_frame(movie_frames[frame]);
ticker->setInterval(this->get_frame_delay(movie_delays[frame]));
+ if (frame + 1 >= movie_frames.size() && frame + 1 < max_frames) { // load the next frame before we tick again
+ future = QtConcurrent::run(this, &AOLayer::load_next_frame);
+ }
+}
+
+void AOLayer::load_next_frame() {
+ movie_frames.append(this->get_pixmap(m_reader.read()));
+ movie_delays.append(m_reader.nextImageDelay());
}
void CharLayer::preanim_done()