From ccf02d0aedf1de2e872b6de24f2ef60b717877ab Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Wed, 11 Sep 2024 12:56:41 +0300 Subject: [PATCH] Revert "sceNetAccept sleep and SDLAudio::AudioOutOutput latency and cpu improvements (#507)" This reverts commit d66d12935711dc531e909ed30109797e25deb5e0. --- src/audio_core/sdl_audio.cpp | 35 ++++++++++-------------------- src/core/libraries/network/net.cpp | 5 +---- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/audio_core/sdl_audio.cpp b/src/audio_core/sdl_audio.cpp index f55c5b96..f544c52f 100644 --- a/src/audio_core/sdl_audio.cpp +++ b/src/audio_core/sdl_audio.cpp @@ -84,7 +84,7 @@ int SDLAudio::AudioOutOpen(int type, u32 samples_num, u32 freq, port.stream = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &fmt, NULL, NULL); SDL_ResumeAudioDevice(SDL_GetAudioStreamDevice(port.stream)); - return id + 1; // Handle range 1..n keeps 0 reserved + return id + 1; } } @@ -93,35 +93,22 @@ int SDLAudio::AudioOutOpen(int type, u32 samples_num, u32 freq, s32 SDLAudio::AudioOutOutput(s32 handle, const void* ptr) { std::shared_lock lock{m_mutex}; - if (handle < 1 || handle > portsOut.size()) { - // Handle is outside range 1..n - return ORBIS_AUDIO_OUT_ERROR_INVALID_PORT; - } auto& port = portsOut[handle - 1]; if (!port.isOpen) { return ORBIS_AUDIO_OUT_ERROR_INVALID_PORT; } - - // Allow call with null - this acts as "wait for buffer ready" - if (ptr != nullptr) { - // TODO mixing channels - int result = SDL_PutAudioStreamData( - port.stream, ptr, port.samples_num * port.sample_size * port.channels_num); - if (result != 0) { - // There's various possible failures, just assume some buffer is full - return ORBIS_AUDIO_OUT_ERROR_PORT_FULL; - } + if (ptr == nullptr) { + return 0; + } + // TODO mixing channels + int result = SDL_PutAudioStreamData(port.stream, ptr, + port.samples_num * port.sample_size * port.channels_num); + // TODO find a correct value 8192 is estimated + while (SDL_GetAudioStreamAvailable(port.stream) > 65536) { + SDL_Delay(0); } - auto bytesPerSecond = 48000 * port.sample_size * port.channels_num; - const int TARGET_LATENCY_MS = 20; // Arbitrary, but slightly more than one 60fps frame - auto sizeTarget = (bytesPerSecond * TARGET_LATENCY_MS) / 1000; - - while (SDL_GetAudioStreamAvailable(port.stream) > sizeTarget) { - SDL_Delay(1); // Sleep behaviour is platform-dependent; 1ms may be up to 17ms - } - - return ORBIS_OK; + return result; } bool SDLAudio::AudioOutSetVolume(s32 handle, s32 bitflag, s32* volume) { diff --git a/src/core/libraries/network/net.cpp b/src/core/libraries/network/net.cpp index 492054de..2c03dde3 100644 --- a/src/core/libraries/network/net.cpp +++ b/src/core/libraries/network/net.cpp @@ -1,8 +1,6 @@ // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include - #ifdef WIN32 #define _WINSOCK_DEPRECATED_NO_WARNINGS #include @@ -61,8 +59,7 @@ int PS4_SYSV_ABI sce_net_in6addr_nodelocal_allnodes() { } OrbisNetId PS4_SYSV_ABI sceNetAccept(OrbisNetId s, OrbisNetSockaddr* addr, u32* paddrlen) { - LOG_ERROR(Lib_Net, "(STUBBED) called [sleeping]"); - std::this_thread::sleep_for(std::chrono::seconds(5)); + LOG_ERROR(Lib_Net, "(STUBBED) called"); return ORBIS_OK; }