summaryrefslogtreecommitdiffstats
path: root/src/audio_core/renderer/audio_device.cpp
blob: d5886e55e4faf93239578ed81acd32e677d0f95a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "audio_core/audio_core.h"
#include "audio_core/common/feature_support.h"
#include "audio_core/renderer/audio_device.h"
#include "audio_core/sink/sink.h"
#include "core/core.h"

namespace AudioCore::AudioRenderer {

AudioDevice::AudioDevice(Core::System& system, const u64 applet_resource_user_id_,
                         const u32 revision)
    : output_sink{system.AudioCore().GetOutputSink()},
      applet_resource_user_id{applet_resource_user_id_}, user_revision{revision} {}

u32 AudioDevice::ListAudioDeviceName(std::vector<AudioDeviceName>& out_buffer,
                                     const size_t max_count) {
    std::span<AudioDeviceName> names{};

    if (CheckFeatureSupported(SupportTags::AudioUsbDeviceOutput, user_revision)) {
        names = usb_device_names;
    } else {
        names = device_names;
    }

    u32 out_count{static_cast<u32>(std::min(max_count, names.size()))};
    for (u32 i = 0; i < out_count; i++) {
        out_buffer.push_back(names[i]);
    }
    return out_count;
}

u32 AudioDevice::ListAudioOutputDeviceName(std::vector<AudioDeviceName>& out_buffer,
                                           const size_t max_count) {
    u32 out_count{static_cast<u32>(std::min(max_count, output_device_names.size()))};

    for (u32 i = 0; i < out_count; i++) {
        out_buffer.push_back(output_device_names[i]);
    }
    return out_count;
}

void AudioDevice::SetDeviceVolumes(const f32 volume) {
    output_sink.SetDeviceVolume(volume);
}

f32 AudioDevice::GetDeviceVolume([[maybe_unused]] std::string_view name) {
    return output_sink.GetDeviceVolume();
}

} // namespace AudioCore::AudioRenderer