audio_core: Add comprehensive audio feature support tags

Added new feature support tags to track audio functionality across firmware
versions. Changes include:

- Added Audio Out/In Auto buffer support tags (3.0.0+)
- Added Final Output Recorder features including work buffer (3.0.0+, 9.0.0+)
- Added Audio Renderer features like manual execution and voice drop
- Added Audio Device features including notifications and auto volume
- Added Hardware Opus decoder features including large frame support
- Added System Audio features like master volume and hearing protection

This provides more complete feature detection for audio functionality
introduced in firmware versions 3.0.0 through 19.0.1.
This commit is contained in:
Zephyron 2024-12-31 18:42:49 +10:00 committed by Mike Lothian
parent f4b721ac06
commit feac7a4b49

View File

@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project & 2025 citron Homebrew Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@ -13,7 +13,7 @@
#include "common/polyfill_ranges.h"
namespace AudioCore {
constexpr u32 CurrentRevision = 13;
constexpr u32 CurrentRevision = 18;
enum class SupportTags {
CommandProcessingTimeEstimatorVersion4,
@ -44,8 +44,29 @@ enum class SupportTags {
DelayChannelMappingChange,
ReverbChannelMappingChange,
I3dl2ReverbChannelMappingChange,
// Not a real tag, just here to get the count.
AudioOutAuto,
AudioInAuto,
AudioInFiltering,
AudioInUacSupport,
FinalOutputRecorderAuto,
FinalOutputRecorderWorkBuffer,
AudioRendererManualExecution,
AudioRendererVariableRate,
AudioRendererRevisionCheck,
AudioRendererVoiceDrop,
AudioDeviceNameAuto,
AudioDeviceInputEvent,
AudioDeviceOutputEvent,
AudioDeviceNotification,
AudioDeviceAutoVolumeTune,
HardwareOpusDecoderEx,
HardwareOpusMultiStream,
HardwareOpusLargeFrameSize,
AudioSystemMasterVolume,
AudioSystemInputVolume,
AudioSystemRecordVolume,
AudioSystemAutoMute,
AudioSystemHearingProtection,
Size
};
@ -54,7 +75,6 @@ constexpr u32 GetRevisionNum(u32 user_revision) {
user_revision -= Common::MakeMagic('R', 'E', 'V', '0');
user_revision >>= 24;
}
return user_revision;
};
@ -88,6 +108,29 @@ constexpr bool CheckFeatureSupported(SupportTags tag, u32 user_revision) {
{SupportTags::DelayChannelMappingChange, 11},
{SupportTags::ReverbChannelMappingChange, 11},
{SupportTags::I3dl2ReverbChannelMappingChange, 11},
{SupportTags::AudioOutAuto, 3},
{SupportTags::AudioInAuto, 3},
{SupportTags::AudioInFiltering, 3},
{SupportTags::AudioInUacSupport, 3},
{SupportTags::FinalOutputRecorderAuto, 3},
{SupportTags::FinalOutputRecorderWorkBuffer, 9},
{SupportTags::AudioRendererManualExecution, 3},
{SupportTags::AudioRendererVariableRate, 4},
{SupportTags::AudioRendererRevisionCheck, 4},
{SupportTags::AudioRendererVoiceDrop, 15},
{SupportTags::AudioDeviceNameAuto, 3},
{SupportTags::AudioDeviceInputEvent, 3},
{SupportTags::AudioDeviceOutputEvent, 3},
{SupportTags::AudioDeviceNotification, 17},
{SupportTags::AudioDeviceAutoVolumeTune, 18},
{SupportTags::HardwareOpusDecoderEx, 12},
{SupportTags::HardwareOpusMultiStream, 3},
{SupportTags::HardwareOpusLargeFrameSize, 12},
{SupportTags::AudioSystemMasterVolume, 4},
{SupportTags::AudioSystemInputVolume, 4},
{SupportTags::AudioSystemRecordVolume, 4},
{SupportTags::AudioSystemAutoMute, 13},
{SupportTags::AudioSystemHearingProtection, 14},
}};
const auto& feature =