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:
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);
}
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);
* 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;
}
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;
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
{
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);
}
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;
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)
{
*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);
-}
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__ */