moved sleep prevention code for further abstraction, implemented macOS

This commit is contained in:
itsmattkc
2021-11-11 16:14:37 -08:00
parent 65446fd70b
commit ab8d9e14e8
5 changed files with 53 additions and 10 deletions
+4
View File
@@ -156,6 +156,10 @@ else()
endif()
endif()
if (APPLE)
list(APPEND OLIVE_LIBRARIES "-framework IOKit")
endif()
# Generate Git hash
set(PROJECT_LONG_VERSION ${PROJECT_VERSION})
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
+2
View File
@@ -26,6 +26,8 @@ set(OLIVE_SOURCES
widget/viewer/viewerdisplay.h
widget/viewer/viewerplaybacktimer.cpp
widget/viewer/viewerplaybacktimer.h
widget/viewer/viewerpreventsleep.cpp
widget/viewer/viewerpreventsleep.h
widget/viewer/viewerqueue.h
widget/viewer/viewersafemargininfo.h
widget/viewer/viewersizer.cpp
+3 -10
View File
@@ -30,10 +30,6 @@
#include <QtMath>
#include <QVBoxLayout>
#ifdef _WIN32
#include "winbase.h"
#endif
#include "audio/audiomanager.h"
#include "common/clamp.h"
#include "common/power.h"
@@ -44,6 +40,7 @@
#include "node/project/project.h"
#include "render/rendermanager.h"
#include "task/taskmanager.h"
#include "viewerpreventsleep.h"
#include "widget/menu/menu.h"
#include "window/mainwindow/mainwindow.h"
@@ -707,9 +704,7 @@ void ViewerWidget::PlayInternal(int speed, bool in_to_out_only)
}
}
// Force screen to stay awake
#ifdef _WIN32
SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_CONTINUOUS);
#endif
PreventSleep(true);
}
void ViewerWidget::PauseInternal()
@@ -752,9 +747,7 @@ void ViewerWidget::PauseInternal()
prequeuing_audio_ = 0;
// Reset screen timeout timer
#ifdef _WIN32
SetThreadExecutionState(ES_CONTINUOUS);
#endif
PreventSleep(false);
}
void ViewerWidget::PushScrubbedAudio()
+34
View File
@@ -0,0 +1,34 @@
#include "viewerpreventsleep.h"
#include <QtGlobal>
#if defined(Q_OS_WINDOWS)
#include <winbase.h>
#elif defined(Q_OS_MAC)
#include <IOKit/pwr_mgt/IOPMLib.h>
#endif
namespace olive {
#if defined(Q_OS_MAC)
IOPMAssertionID assertionID = 0;
#endif
void PreventSleep(bool on)
{
#if defined(Q_OS_WINDOWS)
SetThreadExecutionState(on ? ES_DISPLAY_REQUIRED | ES_CONTINUOUS : ES_CONTINUOUS);
#elif defined(Q_OS_MAC)
if (on) {
static const CFStringRef reasonForActivity = CFSTR("Video Playback");
IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
} else if (assertionID) {
IOPMAssertionRelease(assertionID);
assertionID = 0;
}
#endif
}
}
+10
View File
@@ -0,0 +1,10 @@
#ifndef VIEWERPREVENTSLEEP_H
#define VIEWERPREVENTSLEEP_H
namespace olive {
void PreventSleep(bool on);
}
#endif // VIEWERPREVENTSLEEP_H