diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index 05ef0848..0cd21445 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -1007,14 +1007,6 @@ void Session::exec(int displayOriginX, int displayOriginY) // sleep precision and more accurate callback timing. SDL_SetHint(SDL_HINT_TIMER_RESOLUTION, "1"); - // Raise the priority of the main thread, since it handles - // time-sensitive video rendering - if (SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH) < 0) { - SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, - "Unable to set main thread to high priority: %s", - SDL_GetError()); - } - int currentDisplayIndex = SDL_GetWindowDisplayIndex(m_Window); // Now that we're about to stream, any SDL_QUIT event is expected diff --git a/app/streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.cpp b/app/streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.cpp index 3f132ff8..fbb48e61 100644 --- a/app/streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.cpp +++ b/app/streaming/video/ffmpeg-renderers/pacer/dxvsyncsource.cpp @@ -76,7 +76,11 @@ int DxVsyncSource::vsyncThread(void* context) { DxVsyncSource* me = reinterpret_cast(context); +#if SDL_VERSION_ATLEAST(2, 0, 9) + SDL_SetThreadPriority(SDL_THREAD_PRIORITY_TIME_CRITICAL); +#else SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH); +#endif D3DKMT_OPENADAPTERFROMHDC openAdapterParams = {}; HMONITOR lastMonitor = nullptr; diff --git a/app/streaming/video/ffmpeg-renderers/pacer/nullthreadedvsyncsource.cpp b/app/streaming/video/ffmpeg-renderers/pacer/nullthreadedvsyncsource.cpp index 74c5c97d..806916ab 100644 --- a/app/streaming/video/ffmpeg-renderers/pacer/nullthreadedvsyncsource.cpp +++ b/app/streaming/video/ffmpeg-renderers/pacer/nullthreadedvsyncsource.cpp @@ -33,7 +33,11 @@ int NullThreadedVsyncSource::vsyncThread(void* context) { NullThreadedVsyncSource* me = reinterpret_cast(context); +#if SDL_VERSION_ATLEAST(2, 0, 9) + SDL_SetThreadPriority(SDL_THREAD_PRIORITY_TIME_CRITICAL); +#else SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH); +#endif; while (SDL_AtomicGet(&me->m_Stopping) == 0) { me->m_Pacer->vsyncCallback(1000 / me->m_DisplayFps); diff --git a/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp b/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp index 39aa472c..140464bd 100644 --- a/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp +++ b/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp @@ -65,6 +65,12 @@ int Pacer::renderThread(void* context) { Pacer* me = reinterpret_cast(context); + if (SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH) < 0) { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, + "Unable to set render thread to high priority: %s", + SDL_GetError()); + } + while (!me->m_Stopping) { // Acquire the frame queue lock to protect the queue and // the not empty condition