wasapi: Remove code that sets thread priority

This is now handled directly in gstaudiosrc/sink, and we were setting
it in the wrong thread anyway. prepare() is not the same thread as
sink_write() or src_read().
This commit is contained in:
Nirbheek Chauhan 2018-09-11 01:00:21 +05:30
parent 8875fe49ec
commit f62b7fd712
6 changed files with 4 additions and 84 deletions

View file

@ -561,9 +561,6 @@ gst_wasapi_sink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec)
gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SINK
(self)->ringbuffer, self->positions);
/* Increase the thread priority to reduce glitches */
self->thread_priority_handle = gst_wasapi_util_set_thread_characteristics ();
res = TRUE;
beach:
@ -582,12 +579,6 @@ gst_wasapi_sink_unprepare (GstAudioSink * asink)
CoUninitialize ();
if (self->thread_priority_handle != NULL) {
gst_wasapi_util_revert_thread_characteristics
(self->thread_priority_handle);
self->thread_priority_handle = NULL;
}
if (self->client != NULL) {
IAudioClient_Stop (self->client);
}
@ -614,7 +605,8 @@ gst_wasapi_sink_write (GstAudioSink * asink, gpointer data, guint length)
GST_OBJECT_LOCK (self);
if (self->client_needs_restart) {
hr = IAudioClient_Start (self->client);
HR_FAILED_AND (hr, IAudioClient::Start, GST_OBJECT_UNLOCK (self); goto beach);
HR_FAILED_AND (hr, IAudioClient::Start, GST_OBJECT_UNLOCK (self);
goto beach);
self->client_needs_restart = FALSE;
}
GST_OBJECT_UNLOCK (self);
@ -636,8 +628,8 @@ gst_wasapi_sink_write (GstAudioSink * asink, gpointer data, guint length)
* GetBuffer will error out */
if (can_frames != have_frames) {
GST_ERROR_OBJECT (self,
"Need at %i frames to write for exclusive mode, but got %i",
can_frames, have_frames);
"Need at %i frames to write for exclusive mode, but got %i",
can_frames, have_frames);
written_len = -1;
goto beach;
}

View file

@ -44,7 +44,6 @@ struct _GstWasapiSink
IAudioClient *client;
IAudioRenderClient *render_client;
HANDLE event_handle;
HANDLE thread_priority_handle;
/* Client was reset, so it needs to be started again */
gboolean client_needs_restart;

View file

@ -512,9 +512,6 @@ gst_wasapi_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec)
gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC
(self)->ringbuffer, self->positions);
/* Increase the thread priority to reduce glitches */
self->thread_priority_handle = gst_wasapi_util_set_thread_characteristics ();
res = TRUE;
beach:
/* unprepare() is not called if prepare() fails, but we want it to be, so call
@ -530,12 +527,6 @@ gst_wasapi_src_unprepare (GstAudioSrc * asrc)
{
GstWasapiSrc *self = GST_WASAPI_SRC (asrc);
if (self->thread_priority_handle != NULL) {
gst_wasapi_util_revert_thread_characteristics
(self->thread_priority_handle);
self->thread_priority_handle = NULL;
}
if (self->client != NULL) {
IAudioClient_Stop (self->client);
}

View file

@ -46,7 +46,6 @@ struct _GstWasapiSrc
guint64 client_clock_freq;
IAudioCaptureClient *capture_client;
HANDLE event_handle;
HANDLE thread_priority_handle;
/* Client was reset, so it needs to be started again */
gboolean client_needs_restart;

View file

@ -106,16 +106,6 @@ static struct
static int windows_major_version = 0;
static struct
{
HMODULE dll;
gboolean tried_loading;
HANDLE (WINAPI * AvSetMmThreadCharacteristics) (LPCSTR, LPDWORD);
BOOL (WINAPI * AvRevertMmThreadCharacteristics) (HANDLE);
} gst_wasapi_avrt_tbl = {
0};
gboolean
gst_wasapi_util_have_audioclient3 (void)
{
@ -956,50 +946,3 @@ gst_wasapi_util_initialize_audioclient3 (GstElement * self,
*ret_devicep_frames = devicep_frames;
return TRUE;
}
static gboolean
gst_wasapi_util_init_thread_priority (void)
{
if (gst_wasapi_avrt_tbl.tried_loading)
return gst_wasapi_avrt_tbl.dll != NULL;
if (!gst_wasapi_avrt_tbl.dll)
gst_wasapi_avrt_tbl.dll = LoadLibrary (TEXT ("avrt.dll"));
if (!gst_wasapi_avrt_tbl.dll) {
GST_WARNING ("Failed to set thread priority, can't find avrt.dll");
gst_wasapi_avrt_tbl.tried_loading = TRUE;
return FALSE;
}
gst_wasapi_avrt_tbl.AvSetMmThreadCharacteristics =
GetProcAddress (gst_wasapi_avrt_tbl.dll, "AvSetMmThreadCharacteristicsA");
gst_wasapi_avrt_tbl.AvRevertMmThreadCharacteristics =
GetProcAddress (gst_wasapi_avrt_tbl.dll,
"AvRevertMmThreadCharacteristics");
gst_wasapi_avrt_tbl.tried_loading = TRUE;
return TRUE;
}
HANDLE
gst_wasapi_util_set_thread_characteristics (void)
{
DWORD taskIndex = 0;
if (!gst_wasapi_util_init_thread_priority ())
return NULL;
return gst_wasapi_avrt_tbl.AvSetMmThreadCharacteristics (TEXT ("Pro Audio"),
&taskIndex);
}
void
gst_wasapi_util_revert_thread_characteristics (HANDLE handle)
{
if (!gst_wasapi_util_init_thread_priority ())
return;
gst_wasapi_avrt_tbl.AvRevertMmThreadCharacteristics (handle);
}

View file

@ -114,8 +114,4 @@ gboolean gst_wasapi_util_initialize_audioclient3 (GstElement * element,
WAVEFORMATEX * format, gboolean low_latency, gboolean loopback,
guint * ret_devicep_frames);
HANDLE gst_wasapi_util_set_thread_characteristics (void);
void gst_wasapi_util_revert_thread_characteristics (HANDLE handle);
#endif /* __GST_WASAPI_UTIL_H__ */