diff --git a/panels/panels.cpp b/panels/panels.cpp index dbb22481a..3c4a2d057 100644 --- a/panels/panels.cpp +++ b/panels/panels.cpp @@ -113,6 +113,10 @@ void free_panels() { } void scroll_to_frame_internal(QScrollBar* bar, long frame, double zoom, int area_width) { + if (bar->value() == bar->minimum() || bar->value() == bar->maximum()) { + return; + } + int screen_point = getScreenPointFromFrame(zoom, frame) - bar->value(); int min_x = area_width*0.1; int max_x = area_width-min_x; diff --git a/rendering/audio.cpp b/rendering/audio.cpp index b27e73a98..183479683 100644 --- a/rendering/audio.cpp +++ b/rendering/audio.cpp @@ -419,5 +419,14 @@ QObject* GetAudioWakeObject() void SetAudioWakeObject(QObject *o) { + audio_wake_mutex.lock(); audio_wake_object = o; + audio_wake_mutex.unlock(); +} + +void WakeAudioWakeObject() { + QObject* audio_wake_object = GetAudioWakeObject(); + if (audio_wake_object != nullptr) { + QMetaObject::invokeMethod(audio_wake_object, "play_wake", Qt::QueuedConnection); + } } diff --git a/rendering/audio.h b/rendering/audio.h index 42af7975d..4721766cf 100644 --- a/rendering/audio.h +++ b/rendering/audio.h @@ -67,6 +67,7 @@ void clear_audio_ibuffer(); QObject *GetAudioWakeObject(); void SetAudioWakeObject(QObject* o); +void WakeAudioWakeObject(); int current_audio_freq(); diff --git a/rendering/cacher.cpp b/rendering/cacher.cpp index 1b793c186..a4df18c65 100644 --- a/rendering/cacher.cpp +++ b/rendering/cacher.cpp @@ -461,10 +461,7 @@ void Cacher::CacheAudioWorker() { } // If there's a QObject waiting for audio to be rendered, wake it now - QObject* audio_wake_object = GetAudioWakeObject(); - if (audio_wake_object != nullptr) { - QMetaObject::invokeMethod(audio_wake_object, "play_wake", Qt::QueuedConnection); - } + WakeAudioWakeObject(); } bool Cacher::IsReversed() diff --git a/rendering/renderfunctions.cpp b/rendering/renderfunctions.cpp index 889474e79..c4c45fcd2 100644 --- a/rendering/renderfunctions.cpp +++ b/rendering/renderfunctions.cpp @@ -630,8 +630,8 @@ GLuint olive::rendering::compose_sequence(ComposeSequenceParams ¶ms) { } } - if (audio_track_count == 0 && params.viewer != nullptr) { - params.viewer->play_wake(); + if (audio_track_count == 0) { + WakeAudioWakeObject(); } if (params.video) { diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index 96c07b66c..f39065b4f 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -67,9 +67,9 @@ TimelineHeader::TimelineHeader(QWidget *parent) : in_visible(0), fm(font()), dragging_markers(false), - scroll(0) + scroll(0), + height_actual(fm.height()) { - height_actual = fm.height(); setCursor(Qt::ArrowCursor); setMouseTracking(true); setFocusPolicy(Qt::ClickFocus);