mirror of
				https://git.h3cjp.net/H3cJP/citra.git
				synced 2025-11-04 09:05:08 +00:00 
			
		
		
		
	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:
		
							parent
							
								
									1be456db83
								
							
						
					
					
						commit
						1c7dae966d
					
				| 
						 | 
				
			
			@ -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.");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue