aboutsummaryrefslogtreecommitdiff
path: root/src/aolayer.cpp
diff options
context:
space:
mode:
authorRosemary Witchaven <32779090+in1tiate@users.noreply.github.com>2021-08-24 19:37:13 -0500
committerGitHub <noreply@github.com>2021-08-24 19:37:13 -0500
commit8b82f5d592a9f76b1edbaa1efdf09366e41b266c (patch)
tree6f567ec72a1e152cfff25acf2b08a1656177ca41 /src/aolayer.cpp
parent9d2e00ee11900c7a599b4bc6652a28445987a142 (diff)
Fix an infinite hang when loading the pair character, fix strange undesired behavior of the pair character (#586)
* sanity check if the frame we're waiting on isnt nonexistent * consolidate conditionals
Diffstat (limited to 'src/aolayer.cpp')
-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();