audio_device: Make AudioDeviceName constructor constexpr
These are used as read-only arrays, so we can make the data read-only and available at compile-time. Now constructing an AudioDevice no longer needs to initialize some tables
This commit is contained in:
		| @@ -82,7 +82,7 @@ u32 Manager::GetDeviceNames(std::vector<AudioRenderer::AudioDevice::AudioDeviceN | ||||
|  | ||||
|     auto input_devices{Sink::GetDeviceListForSink(Settings::values.sink_id.GetValue(), true)}; | ||||
|     if (input_devices.size() > 1) { | ||||
|         names.push_back(AudioRenderer::AudioDevice::AudioDeviceName("Uac")); | ||||
|         names.emplace_back("Uac"); | ||||
|         return 1; | ||||
|     } | ||||
|     return 0; | ||||
|   | ||||
| @@ -74,7 +74,7 @@ void Manager::BufferReleaseAndRegister() { | ||||
|  | ||||
| u32 Manager::GetAudioOutDeviceNames( | ||||
|     std::vector<AudioRenderer::AudioDevice::AudioDeviceName>& names) const { | ||||
|     names.push_back({"DeviceOut"}); | ||||
|     names.emplace_back("DeviceOut"); | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,9 @@ | ||||
| // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later | ||||
|  | ||||
| #include <array> | ||||
| #include <span> | ||||
|  | ||||
| #include "audio_core/audio_core.h" | ||||
| #include "audio_core/common/feature_support.h" | ||||
| #include "audio_core/renderer/audio_device.h" | ||||
| @@ -9,6 +12,25 @@ | ||||
|  | ||||
| namespace AudioCore::AudioRenderer { | ||||
|  | ||||
| constexpr std::array usb_device_names{ | ||||
|     AudioDevice::AudioDeviceName{"AudioStereoJackOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioTvOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioUsbDeviceOutput"}, | ||||
| }; | ||||
|  | ||||
| constexpr std::array device_names{ | ||||
|     AudioDevice::AudioDeviceName{"AudioStereoJackOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioTvOutput"}, | ||||
| }; | ||||
|  | ||||
| constexpr std::array output_device_names{ | ||||
|     AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioTvOutput"}, | ||||
|     AudioDevice::AudioDeviceName{"AudioExternalOutput"}, | ||||
| }; | ||||
|  | ||||
| AudioDevice::AudioDevice(Core::System& system, const u64 applet_resource_user_id_, | ||||
|                          const u32 revision) | ||||
|     : output_sink{system.AudioCore().GetOutputSink()}, | ||||
| @@ -16,7 +38,7 @@ AudioDevice::AudioDevice(Core::System& system, const u64 applet_resource_user_id | ||||
|  | ||||
| u32 AudioDevice::ListAudioDeviceName(std::vector<AudioDeviceName>& out_buffer, | ||||
|                                      const size_t max_count) { | ||||
|     std::span<AudioDeviceName> names{}; | ||||
|     std::span<const AudioDeviceName> names{}; | ||||
|  | ||||
|     if (CheckFeatureSupported(SupportTags::AudioUsbDeviceOutput, user_revision)) { | ||||
|         names = usb_device_names; | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <span> | ||||
| #include <string_view> | ||||
|  | ||||
| #include "audio_core/audio_render_manager.h" | ||||
|  | ||||
| @@ -23,21 +23,13 @@ namespace AudioRenderer { | ||||
| class AudioDevice { | ||||
| public: | ||||
|     struct AudioDeviceName { | ||||
|         std::array<char, 0x100> name; | ||||
|         std::array<char, 0x100> name{}; | ||||
|  | ||||
|         AudioDeviceName(const char* name_) { | ||||
|             std::strncpy(name.data(), name_, name.size()); | ||||
|         constexpr AudioDeviceName(std::string_view name_) { | ||||
|             name_.copy(name.data(), name.size() - 1); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     std::array<AudioDeviceName, 4> usb_device_names{"AudioStereoJackOutput", | ||||
|                                                     "AudioBuiltInSpeakerOutput", "AudioTvOutput", | ||||
|                                                     "AudioUsbDeviceOutput"}; | ||||
|     std::array<AudioDeviceName, 3> device_names{"AudioStereoJackOutput", | ||||
|                                                 "AudioBuiltInSpeakerOutput", "AudioTvOutput"}; | ||||
|     std::array<AudioDeviceName, 3> output_device_names{"AudioBuiltInSpeakerOutput", "AudioTvOutput", | ||||
|                                                        "AudioExternalOutput"}; | ||||
|  | ||||
|     explicit AudioDevice(Core::System& system, u64 applet_resource_user_id, u32 revision); | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -246,9 +246,8 @@ void AudOutU::ListAudioOuts(Kernel::HLERequestContext& ctx) { | ||||
|     const auto write_count = | ||||
|         static_cast<u32>(ctx.GetWriteBufferSize() / sizeof(AudioDevice::AudioDeviceName)); | ||||
|     std::vector<AudioDevice::AudioDeviceName> device_names{}; | ||||
|     std::string print_names{}; | ||||
|     if (write_count > 0) { | ||||
|         device_names.push_back(AudioDevice::AudioDeviceName("DeviceOut")); | ||||
|         device_names.emplace_back("DeviceOut"); | ||||
|         LOG_DEBUG(Service_Audio, "called. \nName=DeviceOut"); | ||||
|     } else { | ||||
|         LOG_DEBUG(Service_Audio, "called. Empty buffer passed in."); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user