diff --git a/src/audio_core/renderer/behavior/info_updater.cpp b/src/audio_core/renderer/behavior/info_updater.cpp index 3dae6069f..014e4bf14 100644 --- a/src/audio_core/renderer/behavior/info_updater.cpp +++ b/src/audio_core/renderer/behavior/info_updater.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include "audio_core/common/feature_support.h" @@ -325,13 +326,18 @@ Result InfoUpdater::UpdateMixes(MixContext& mix_context, const u32 mix_buffer_co } if (consumed_input_size != in_header->mix_size) { - LOG_ERROR(Service_Audio, "Consumed an incorrect mixes size, header size={}, consumed={}", + LOG_WARNING(Service_Audio, "Consumed an incorrect mixes size, header size={}, consumed={}, adjusting input pointer", in_header->mix_size, consumed_input_size); - return Service::Audio::ResultInvalidUpdateInfo; + // Calculate the adjustment needed + const auto adjustment = in_header->mix_size - consumed_input_size; + // Adjust input pointer to match expected header size to prevent desync + input = reinterpret_cast(input) + adjustment; + // Also adjust the expected input size for CheckConsumedSize + expected_input_size += adjustment; + // Continue processing instead of failing } - input += mix_count * sizeof(MixInfo::InParameter); - + // Input pointer adjustment is now handled in the size check above return ResultSuccess; } diff --git a/src/audio_core/renderer/voice/voice_info.h b/src/audio_core/renderer/voice/voice_info.h index 14a687dcb..c29dd780b 100644 --- a/src/audio_core/renderer/voice/voice_info.h +++ b/src/audio_core/renderer/voice/voice_info.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -165,8 +166,9 @@ public: /* 0x15D */ char unk15D[0x1]; /* 0x15E */ SrcQuality src_quality; /* 0x15F */ char unk15F[0x11]; + /* 0x170 */ char unk170[0x18]; // Additional 24 bytes for newer audio renderer versions }; - static_assert(sizeof(InParameter) == 0x170, "VoiceInfo::InParameter has the wrong size!"); + static_assert(sizeof(InParameter) == 0x188, "VoiceInfo::InParameter has the wrong size!"); struct OutStatus { /* 0x00 */ u64 played_sample_count; diff --git a/src/core/hle/service/am/applet.cpp b/src/core/hle/service/am/applet.cpp index 8b2178405..6847f250c 100644 --- a/src/core/hle/service/am/applet.cpp +++ b/src/core/hle/service/am/applet.cpp @@ -14,7 +14,7 @@ Applet::Applet(Core::System& system, std::unique_ptr process_, bool is_ notification_storage_channel_event(context), health_warning_disappeared_system_event(context), acquired_sleep_lock_event(context), pop_from_general_channel_event(context), library_applet_launchable_event(context), accumulated_suspended_tick_changed_event(context), - sleep_lock_event(context), state_changed_event(context), user_used_memory_event(context) { + sleep_lock_event(context), state_changed_event(context) { aruid.pid = process->GetProcessId(); program_id = process->GetProgramId(); diff --git a/src/core/hle/service/am/applet.h b/src/core/hle/service/am/applet.h index 8cea589c7..571904fab 100644 --- a/src/core/hle/service/am/applet.h +++ b/src/core/hle/service/am/applet.h @@ -125,7 +125,6 @@ struct Applet { Event accumulated_suspended_tick_changed_event; Event sleep_lock_event; Event state_changed_event; - Event user_used_memory_event; // Frontend state std::shared_ptr frontend{}; diff --git a/src/core/hle/service/am/service/application_functions.cpp b/src/core/hle/service/am/service/application_functions.cpp index bf7dc795a..3bab5ac5f 100644 --- a/src/core/hle/service/am/service/application_functions.cpp +++ b/src/core/hle/service/am/service/application_functions.cpp @@ -85,7 +85,6 @@ IApplicationFunctions::IApplicationFunctions(Core::System& system_, std::shared_ {181, nullptr, "UpgradeLaunchRequiredVersion"}, {190, nullptr, "SendServerMaintenanceOverlayNotification"}, {200, nullptr, "GetLastApplicationExitReason"}, - {210, D<&IApplicationFunctions::RequestToAcquireUserUsedMemory>, "RequestToAcquireUserUsedMemory"}, {500, nullptr, "StartContinuousRecordingFlushForDebug"}, {1000, nullptr, "CreateMovieMaker"}, {1001, D<&IApplicationFunctions::PrepareForJit>, "PrepareForJit"}, @@ -484,10 +483,4 @@ Result IApplicationFunctions::PrepareForJit() { R_SUCCEED(); } -Result IApplicationFunctions::RequestToAcquireUserUsedMemory(OutCopyHandle out_event) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - *out_event = m_applet->user_used_memory_event.GetHandle(); - R_SUCCEED(); -} - } // namespace Service::AM diff --git a/src/core/hle/service/am/service/application_functions.h b/src/core/hle/service/am/service/application_functions.h index a8a1761dd..10025a152 100644 --- a/src/core/hle/service/am/service/application_functions.h +++ b/src/core/hle/service/am/service/application_functions.h @@ -77,7 +77,6 @@ private: Result GetNotificationStorageChannelEvent(OutCopyHandle out_event); Result GetHealthWarningDisappearedSystemEvent(OutCopyHandle out_event); Result PrepareForJit(); - Result RequestToAcquireUserUsedMemory(OutCopyHandle out_event); const std::shared_ptr m_applet; };