diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/unix/ip_unix.cpp | 4 | ||||
| -rw-r--r-- | drivers/wasapi/audio_driver_wasapi.cpp | 18 | ||||
| -rw-r--r-- | drivers/wasapi/audio_driver_wasapi.h | 4 | ||||
| -rw-r--r-- | drivers/windows/dir_access_windows.cpp | 1 | ||||
| -rw-r--r-- | drivers/windows/file_access_windows.cpp | 1 | ||||
| -rw-r--r-- | drivers/winmidi/midi_driver_winmidi.h | 1 | ||||
| -rw-r--r-- | drivers/xaudio2/audio_driver_xaudio2.h | 1 |
7 files changed, 27 insertions, 3 deletions
diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp index 8a880ab9c8..d32592e81a 100644 --- a/drivers/unix/ip_unix.cpp +++ b/drivers/unix/ip_unix.cpp @@ -36,9 +36,9 @@ #ifdef WINDOWS_ENABLED #include <stdio.h> -#include <winsock2.h> -// Needs to be included after winsocks2.h +#define WIN32_LEAN_AND_MEAN #include <windows.h> +#include <winsock2.h> #include <ws2tcpip.h> #ifndef UWP_ENABLED #include <iphlpapi.h> diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index 24c9b69542..3b2f078120 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -274,7 +274,7 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c ERR_PRINT("WASAPI: RegisterEndpointNotificationCallback error"); } - bool using_audio_client_3 = !p_capture; // IID_IAudioClient3 is only used for adjustable output latency (not input) + using_audio_client_3 = !p_capture; // IID_IAudioClient3 is only used for adjustable output latency (not input) if (using_audio_client_3) { hr = device->Activate(IID_IAudioClient3, CLSCTX_ALL, nullptr, (void **)&p_device->audio_client); if (hr != S_OK) { @@ -378,6 +378,13 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c // Due to WASAPI Shared Mode we have no control of the buffer size buffer_frames = max_frames; + + int64_t latency = 0; + audio_output.audio_client->GetStreamLatency(&latency); + // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit + // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time + // Convert REFTIME to seconds as godot uses for latency + real_latency = (float)latency / (float)REFTIMES_PER_SEC; } else { IAudioClient3 *device_audio_client_3 = (IAudioClient3 *)p_device->audio_client; @@ -411,6 +418,11 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c hr = device_audio_client_3->InitializeSharedAudioStream(0, period_frames, pwfex, nullptr); ERR_FAIL_COND_V_MSG(hr != S_OK, ERR_CANT_OPEN, "WASAPI: InitializeSharedAudioStream failed with error 0x" + String::num_uint64(hr, 16) + "."); + uint32_t output_latency_in_frames; + WAVEFORMATEX *current_pwfex; + device_audio_client_3->GetCurrentSharedModeEnginePeriod(¤t_pwfex, &output_latency_in_frames); + real_latency = (float)output_latency_in_frames / (float)current_pwfex->nSamplesPerSec; + CoTaskMemFree(current_pwfex); } if (p_capture) { @@ -518,6 +530,10 @@ int AudioDriverWASAPI::get_mix_rate() const { return mix_rate; } +float AudioDriverWASAPI::get_latency() { + return real_latency; +} + AudioDriver::SpeakerMode AudioDriverWASAPI::get_speaker_mode() const { return get_speaker_mode_by_total_channels(channels); } diff --git a/drivers/wasapi/audio_driver_wasapi.h b/drivers/wasapi/audio_driver_wasapi.h index 312b6a6781..6df9b4d2ee 100644 --- a/drivers/wasapi/audio_driver_wasapi.h +++ b/drivers/wasapi/audio_driver_wasapi.h @@ -39,6 +39,7 @@ #include <audioclient.h> #include <mmdeviceapi.h> +#define WIN32_LEAN_AND_MEAN #include <windows.h> class AudioDriverWASAPI : public AudioDriver { @@ -72,6 +73,8 @@ class AudioDriverWASAPI : public AudioDriver { int mix_rate = 0; int buffer_frames = 0; int target_latency_ms = 0; + float real_latency = 0.0; + bool using_audio_client_3 = false; bool thread_exited = false; mutable bool exit_thread = false; @@ -98,6 +101,7 @@ public: virtual Error init(); virtual void start(); virtual int get_mix_rate() const; + virtual float get_latency(); virtual SpeakerMode get_speaker_mode() const; virtual Array get_device_list(); virtual String get_device(); diff --git a/drivers/windows/dir_access_windows.cpp b/drivers/windows/dir_access_windows.cpp index ae781e9424..3e98e36d14 100644 --- a/drivers/windows/dir_access_windows.cpp +++ b/drivers/windows/dir_access_windows.cpp @@ -37,6 +37,7 @@ #include <stdio.h> #include <wchar.h> +#define WIN32_LEAN_AND_MEAN #include <windows.h> /* diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index 775c999b15..035c44a28c 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -37,6 +37,7 @@ #include <share.h> // _SH_DENYNO #include <shlwapi.h> +#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <errno.h> diff --git a/drivers/winmidi/midi_driver_winmidi.h b/drivers/winmidi/midi_driver_winmidi.h index bb9a87d610..2f691489b3 100644 --- a/drivers/winmidi/midi_driver_winmidi.h +++ b/drivers/winmidi/midi_driver_winmidi.h @@ -37,6 +37,7 @@ #include "core/templates/vector.h" #include <stdio.h> +#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <mmsystem.h> diff --git a/drivers/xaudio2/audio_driver_xaudio2.h b/drivers/xaudio2/audio_driver_xaudio2.h index d3938a19d0..c1910d3f5d 100644 --- a/drivers/xaudio2/audio_driver_xaudio2.h +++ b/drivers/xaudio2/audio_driver_xaudio2.h @@ -36,6 +36,7 @@ #include "servers/audio_server.h" #include <mmsystem.h> +#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <wrl/client.h> #include <xaudio2.h> |