diff --git a/src/audio_core/sink/ps4_sink.cpp b/src/audio_core/sink/ps4_sink.cpp index 99734d876a..7e8b3be06e 100644 --- a/src/audio_core/sink/ps4_sink.cpp +++ b/src/audio_core/sink/ps4_sink.cpp @@ -32,24 +32,28 @@ struct PS4SinkStream final : public SinkStream { system_channels = system_channels_; device_channels = device_channels_; - auto const length = 0x800; + auto const length = 240 * 2; auto const sample_rate = 48000; auto const num_channels = this->GetDeviceChannels(); - output_buffer.resize(length * num_channels * sizeof(s16)); auto const param_type = num_channels == 1 ? ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_MONO : ORBIS_AUDIO_OUT_PARAM_FORMAT_S16_STEREO; audio_dev = sceAudioOutOpen(ORBIS_USER_SERVICE_USER_ID_SYSTEM, ORBIS_AUDIO_OUT_PORT_TYPE_MAIN, 0, length, sample_rate, param_type); if (audio_dev > 0) { audio_thread = std::jthread([=, this](std::stop_token stop_token) { + std::vector output_buffer(length * num_channels); while (!stop_token.stop_requested()) { if (this->type == StreamType::In) { // this->ProcessAudioIn(input_buffer, length); } else { + int err = 0; sceAudioOutOutput(audio_dev, nullptr); this->ProcessAudioOutAndRender(output_buffer, length); - sceAudioOutOutput(audio_dev, output_buffer.data()); + if ((err = sceAudioOutOutput(audio_dev, output_buffer.data())) < 0) { + LOG_ERROR(Service_Audio, "{}", err); + } } } + sceAudioOutClose(audio_dev); }); } else { LOG_ERROR(Service_Audio, "Failed to create audio device! {:#x}", uint32_t(audio_dev)); @@ -58,7 +62,6 @@ struct PS4SinkStream final : public SinkStream { ~PS4SinkStream() override { LOG_DEBUG(Service_Audio, "Destroying PS4 stream {}", name); - sceAudioOutClose(audio_dev); if (audio_thread.joinable()) { audio_thread.request_stop(); audio_thread.join(); @@ -67,8 +70,7 @@ struct PS4SinkStream final : public SinkStream { void Finalize() override { if (audio_dev > 0) { - Stop(); - sceAudioOutClose(audio_dev); + } } @@ -84,7 +86,6 @@ struct PS4SinkStream final : public SinkStream { } } - std::vector output_buffer; std::jthread audio_thread; int32_t audio_dev{}; }; diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp index 876ed03a10..d60df0fd5a 100644 --- a/src/common/host_memory.cpp +++ b/src/common/host_memory.cpp @@ -395,8 +395,6 @@ private: #elif defined(__OPENORBIS__) // None of the luxuries of POSIX -class Impl { -}; #else // ^^^ Windows ^^^ vvv POSIX vvv #ifdef ARCHITECTURE_arm64 @@ -678,7 +676,10 @@ private: #endif // ^^^ POSIX ^^^ -HostMemory::HostMemory(size_t backing_size_, size_t virtual_size_) : backing_size(backing_size_), virtual_size(virtual_size_) { +HostMemory::HostMemory(size_t backing_size_, size_t virtual_size_) + : backing_size(backing_size_) + , virtual_size(virtual_size_) +{ #ifdef __OPENORBIS__ LOG_WARNING(HW_Memory, "Platform doesn't support fastmem"); fallback_buffer.emplace(backing_size); @@ -744,8 +745,7 @@ void HostMemory::Protect(size_t virtual_offset, size_t length, MemoryPermission } void HostMemory::ClearBackingRegion(size_t physical_offset, size_t length, u32 fill_value) { - if (!impl) - std::memset(backing_base + physical_offset, fill_value, length); + std::memset(backing_base + physical_offset, fill_value, length); } void HostMemory::EnableDirectMappedAddress() { diff --git a/src/common/host_memory.h b/src/common/host_memory.h index 6095230154..2a908e71b4 100644 --- a/src/common/host_memory.h +++ b/src/common/host_memory.h @@ -74,12 +74,13 @@ public: } private: - size_t backing_size{}; - size_t virtual_size{}; - // Low level handler for the platform dependent memory routines +#ifndef __OPENORBIS__ class Impl; std::unique_ptr impl; +#endif + size_t backing_size{}; + size_t virtual_size{}; u8* backing_base{}; u8* virtual_base{}; size_t virtual_base_offset{};