blob: b27d44896d508b9307ac6a6e7ab56a47183e1253 (
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "audio_core/renderer/splitter/splitter_destinations_data.h"
namespace AudioCore::AudioRenderer {
SplitterDestinationData::SplitterDestinationData(const s32 id_) : id{id_} {}
void SplitterDestinationData::ClearMixVolume() {
mix_volumes.fill(0.0f);
prev_mix_volumes.fill(0.0f);
}
s32 SplitterDestinationData::GetId() const {
return id;
}
bool SplitterDestinationData::IsConfigured() const {
return in_use && destination_id != UnusedMixId;
}
s32 SplitterDestinationData::GetMixId() const {
return destination_id;
}
f32 SplitterDestinationData::GetMixVolume(const u32 index) const {
if (index >= mix_volumes.size()) {
LOG_ERROR(Service_Audio, "SplitterDestinationData::GetMixVolume Invalid index {}", index);
return 0.0f;
}
return mix_volumes[index];
}
std::span<f32> SplitterDestinationData::GetMixVolume() {
return mix_volumes;
}
f32 SplitterDestinationData::GetMixVolumePrev(const u32 index) const {
if (index >= prev_mix_volumes.size()) {
LOG_ERROR(Service_Audio, "SplitterDestinationData::GetMixVolumePrev Invalid index {}",
index);
return 0.0f;
}
return prev_mix_volumes[index];
}
std::span<f32> SplitterDestinationData::GetMixVolumePrev() {
return prev_mix_volumes;
}
void SplitterDestinationData::Update(const InParameter& params) {
if (params.id != id || params.magic != GetSplitterSendDataMagic()) {
return;
}
destination_id = params.mix_id;
mix_volumes = params.mix_volumes;
if (!in_use && params.in_use) {
prev_mix_volumes = mix_volumes;
need_update = false;
}
in_use = params.in_use;
}
void SplitterDestinationData::MarkAsNeedToUpdateInternalState() {
need_update = true;
}
void SplitterDestinationData::UpdateInternalState() {
if (in_use && need_update) {
prev_mix_volumes = mix_volumes;
}
need_update = false;
}
SplitterDestinationData* SplitterDestinationData::GetNext() const {
return next;
}
void SplitterDestinationData::SetNext(SplitterDestinationData* next_) {
next = next_;
}
} // namespace AudioCore::AudioRenderer
|