diff options
Diffstat (limited to 'sys/wasapi/gstwasapisink.c')
-rw-r--r-- | sys/wasapi/gstwasapisink.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c index 0f0d299d4..8a9d3f89d 100644 --- a/sys/wasapi/gstwasapisink.c +++ b/sys/wasapi/gstwasapisink.c @@ -40,6 +40,8 @@ #include "gstwasapisink.h" +#include <avrt.h> + GST_DEBUG_CATEGORY_STATIC (gst_wasapi_sink_debug); #define GST_CAT_DEFAULT gst_wasapi_sink_debug @@ -472,6 +474,15 @@ gst_wasapi_sink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec) gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SINK (self)->ringbuffer, self->positions); +#if defined(_MSC_VER) || defined(GST_FORCE_WIN_AVRT) + /* Increase the thread priority to reduce glitches */ + { + DWORD taskIndex = 0; + self->thread_priority_handle = + AvSetMmThreadCharacteristics (TEXT ("Pro Audio"), &taskIndex); + } +#endif + res = TRUE; beach: @@ -489,6 +500,13 @@ gst_wasapi_sink_unprepare (GstAudioSink * asink) if (self->sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE) CoUninitialize (); +#if defined(_MSC_VER) || defined(GST_FORCE_WIN_AVRT) + if (self->thread_priority_handle != NULL) { + AvRevertMmThreadCharacteristics (self->thread_priority_handle); + self->thread_priority_handle = NULL; + } +#endif + if (self->client != NULL) { IAudioClient_Stop (self->client); } |