Skip to content

SDK 21 virtual output device properties and event-only stream open (Wonder Edition movie) - #1561

Closed
ishtiaq156 wants to merge 5 commits into
seedds:mainfrom
ishtiaq156:fix/sdk21-output-virtual-properties
Closed

ishtiaq156 wants to merge 5 commits into
seedds:mainfrom
ishtiaq156:fix/sdk21-output-virtual-properties

Conversation

@ishtiaq156

@ishtiaq156 ishtiaq156 commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

What and why

Super Mario Bros. Wonder Nintendo Switch 2 Edition (Program 1, SDK 21, update v327680) aborted with auddmg:u result 0xa99 when opening its OnlineSelect.webm movie. The host already supplied a virtual output device, but it lacked the SDK 21 GetVirtualOutputDeviceProperties export and the event-taking OpenOutputStream overload without OutputStreamFlag.

Serve the properties of the existing AudioVirtualOutput device (a 0x10c-byte result with a zeroed property tail), reject unknown names, and route the no-flags event overload to the existing AudioOut implementation. The audio sample path is unchanged. The general symptom, cause and fix are in the audio reference.

This is independent of #1253's extracted Program 1 selection. Earlier SDK 21 OutputStream and hardware Opus support is already on main (67f1d005).

Checked

  • Tests: t_output_stream, t_audio, t_audio_spsc, t_audio_device and t_audio_stats passed on the updated upstream integration. The stream test covers the properties boundary, unknown device names, event/no-flags open, capacity/state and audio release. test_docs passed (6/6), the previous unrelated test_env_switches CI failure passed (1/1), docs_symptoms.py regenerated the index without changes, and Git whitespace checks passed.
  • Earlier runtime evidence: An integrated Wonder Edition Program 1 v327680 + Bellabel DLC v131072 build reached multiple courses with movie playback and audio, but used a separate diagnostic BFRES memory overlay. This SDK 21-only refresh had no new gameplay or movie retest.
  • Device: Mac mini M6, macOS 27.0.1. No broad multi-game regression run; this patch adds two SDK 21 exports without changing existing output/sample handling.

Docs

  • Recorded the general finding in docs/reference/audio.md and the symptom in docs/agents/symptoms.md.
  • No game files, keys or extracted game data included.

@github-actions github-actions Bot added host The Horizon host: SVCs, services, threads, memory (dm/host) docs Documentation labels Nov 6, 2026
@ishtiaq156
ishtiaq156 marked this pull request as ready for review November 6, 2026 20:24
@ishtiaq156
ishtiaq156 marked this pull request as draft November 6, 2026 23:00
Retain the SDK 21 virtual output properties and event/no-flags OpenOutputStream hooks without touching the existing audio sample path. The newer upstream documentation and host changes merge without conflicts.

Checked: five focused native audio binaries, documentation tests, prior CI environment-switch regression test and regenerated symptom index. This sync did not rerun Wonder gameplay.
seedds added a commit that referenced this pull request Nov 12, 2026
…ream open without flags and the release of the output device notification, so Nintendo Switch Sports Resort no longer aborts in GetVirtualOutputDeviceProperties (PR #2380): unhooked, the SDK connected to auddmg:u, which the host does not serve, and aborted with 0xa99 (sdk+0x224d1c) right after GetDefaultVirtualOutputDevice. nn::audio::VirtualDeviceProperties is 0x110 bytes, filled by audio::detail::GetVirtualOutputDeviceProperties from the device manager's profile (the game's sdk+0x224cd4): the name asked about, at +0x100 the shortest stream as a duration in ns (OutputStreamImpl::Open refuses a capacity under ceil(it x rate / 1e9) frames with 0x899, sdk+0x225a94..0x225ad0, checked here) and at +0x108 a word nothing in the sdk reads (0). The host answers its one device with a 10 ms minimum (one period, what Xenoblade Chronicles 2 and Star Fox write per block), and any other name with a red line and a failure. The OpenOutputStream overload with an event and no flags (main+0x5edb34) opens like the one with flags; ReleaseAudioOutputDeviceNotification (main+0x3af119c; the SDK's asks aud:u, unserved) destroys the event the host bound and clears the flag, so a later acquire binds again. Chosen over ishtiaq156's PR #1561 (the properties as the name and zeros, found on Super Mario Bros. Wonder) for the minimum duration read from the SDK and the release. Reference entries in audio.md, symptom index regenerated. Checked: t_output_stream (the properties, another device refused, the overload without flags) and t_audren_work (acquire, refused second acquire, release, acquire again), both pass.

Co-authored-by: bymaxmarc <354601562+bymaxmarc@users.noreply.github.com>
@seedds

seedds commented Nov 12, 2026

Copy link
Copy Markdown
Owner

Superseded by #2380, landed as 037b869: GetVirtualOutputDeviceProperties (its layout worked out from SDK 22) and the event OpenOutputStream overload without flags, plus the output device notification's release. It should cover Super Mario Bros. Wonder Nintendo Switch 2 Edition's OnlineSelect.webm too; that game was not run here. Thank you!

@seedds seedds closed this Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation host The Horizon host: SVCs, services, threads, memory (dm/host)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants