aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aolayer.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/aolayer.cpp b/src/aolayer.cpp
index eb7853ca..30ff652b 100644
--- a/src/aolayer.cpp
+++ b/src/aolayer.cpp
@@ -304,11 +304,12 @@ void AOLayer::start_playback(QString p_image)
m_reader.setFileName(p_image);
if (m_reader.loopCount() == 0)
play_once = true;
- if (!continuous)
- frame = 0;
last_max_frames = max_frames;
max_frames = m_reader.imageCount();
- if (((continuous) && (max_frames != last_max_frames)) || max_frames == 0) {
+ if (!continuous
+ || ((continuous) && (max_frames != last_max_frames))
+ || max_frames == 0
+ || frame >= max_frames) {
frame = 0;
continuous = false;
}
@@ -519,11 +520,6 @@ void CharLayer::movie_ticker()
void AOLayer::movie_ticker()
{
++frame;
- mutex.lock();
- while (frame >= movie_frames.size() && frame < max_frames) { // oops! our frame isn't ready yet
- frameAdded.wait(&mutex);
- }
- mutex.unlock();
if (frame >= max_frames) {
if (play_once) {
if (cull_image)
@@ -536,6 +532,11 @@ void AOLayer::movie_ticker()
else
frame = 0;
}
+ mutex.lock();
+ while (frame >= movie_frames.size() && frame < max_frames) { // oops! our frame isn't ready yet
+ frameAdded.wait(&mutex);
+ }
+ mutex.unlock();
#ifdef DEBUG_MOVIE
qDebug() << "[AOLayer::movie_ticker] Frame:" << frame << "Delay:" << movie_delays[frame]
<< "Actual time taken from last frame:" << actual_time.restart();