diff options
| author | 2018-10-07 14:14:09 +1100 | |
|---|---|---|
| committer | 2018-10-07 14:14:09 +1100 | |
| commit | 2de52e3af65e71df8a1ef00c9bcfcaa9f67330c3 (patch) | |
| tree | 9b6e8edf522ccd2b29bcfa26bd357ffa632e29d2 /src/audio_core/audio_renderer.h | |
| parent | Merge pull request #1452 from FearlessTobi/port-4313 (diff) | |
| download | yuzu-2de52e3af65e71df8a1ef00c9bcfcaa9f67330c3.tar.gz yuzu-2de52e3af65e71df8a1ef00c9bcfcaa9f67330c3.tar.xz yuzu-2de52e3af65e71df8a1ef00c9bcfcaa9f67330c3.zip | |
Fixed smo softlock
Diffstat (limited to 'src/audio_core/audio_renderer.h')
| -rw-r--r-- | src/audio_core/audio_renderer.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index dfef89e1d..a2caeb118 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -28,6 +28,16 @@ enum class PlayState : u8 { | |||
| 28 | Paused = 2, | 28 | Paused = 2, |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | enum class Effect : u8 { | ||
| 32 | None = 0, | ||
| 33 | Aux = 2, | ||
| 34 | }; | ||
| 35 | |||
| 36 | enum class EffectStatus : u8 { | ||
| 37 | None = 0, | ||
| 38 | New = 1, | ||
| 39 | }; | ||
| 40 | |||
| 31 | struct AudioRendererParameter { | 41 | struct AudioRendererParameter { |
| 32 | u32_le sample_rate; | 42 | u32_le sample_rate; |
| 33 | u32_le sample_count; | 43 | u32_le sample_count; |
| @@ -128,6 +138,43 @@ struct VoiceOutStatus { | |||
| 128 | }; | 138 | }; |
| 129 | static_assert(sizeof(VoiceOutStatus) == 0x10, "VoiceOutStatus has wrong size"); | 139 | static_assert(sizeof(VoiceOutStatus) == 0x10, "VoiceOutStatus has wrong size"); |
| 130 | 140 | ||
| 141 | struct AuxInfo { | ||
| 142 | std::array<u8, 24> input_mix_buffers; | ||
| 143 | std::array<u8, 24> output_mix_buffers; | ||
| 144 | u32_le mix_buffer_count; | ||
| 145 | u32_le sample_rate; // Stored in the aux buffer currently | ||
| 146 | u32_le sampe_count; | ||
| 147 | u64_le send_buffer_info; | ||
| 148 | u64_le send_buffer_base; | ||
| 149 | |||
| 150 | u64_le return_buffer_info; | ||
| 151 | u64_le return_buffer_base; | ||
| 152 | }; | ||
| 153 | static_assert(sizeof(AuxInfo) == 0x60, "AuxInfo is an invalid size"); | ||
| 154 | |||
| 155 | struct EffectInStatus { | ||
| 156 | Effect type; | ||
| 157 | u8 is_new; | ||
| 158 | u8 is_enabled; | ||
| 159 | INSERT_PADDING_BYTES(1); | ||
| 160 | u32_le mix_id; | ||
| 161 | u64_le buffer_base; | ||
| 162 | u64_le buffer_sz; | ||
| 163 | s32_le priority; | ||
| 164 | INSERT_PADDING_BYTES(4); | ||
| 165 | union { | ||
| 166 | std::array<u8, 0xa0> raw; | ||
| 167 | AuxInfo aux_info; | ||
| 168 | }; | ||
| 169 | }; | ||
| 170 | static_assert(sizeof(EffectInStatus) == 0xc0, "EffectInStatus is an invalid size"); | ||
| 171 | |||
| 172 | struct EffectOutStatus { | ||
| 173 | EffectStatus state; | ||
| 174 | INSERT_PADDING_BYTES(15); | ||
| 175 | }; | ||
| 176 | static_assert(sizeof(EffectOutStatus) == 0x10, "EffectOutStatus is an invalid size"); | ||
| 177 | |||
| 131 | struct UpdateDataHeader { | 178 | struct UpdateDataHeader { |
| 132 | UpdateDataHeader() {} | 179 | UpdateDataHeader() {} |
| 133 | 180 | ||
| @@ -174,10 +221,12 @@ public: | |||
| 174 | 221 | ||
| 175 | private: | 222 | private: |
| 176 | class VoiceState; | 223 | class VoiceState; |
| 224 | class EffectState; | ||
| 177 | 225 | ||
| 178 | AudioRendererParameter worker_params; | 226 | AudioRendererParameter worker_params; |
| 179 | Kernel::SharedPtr<Kernel::Event> buffer_event; | 227 | Kernel::SharedPtr<Kernel::Event> buffer_event; |
| 180 | std::vector<VoiceState> voices; | 228 | std::vector<VoiceState> voices; |
| 229 | std::vector<EffectState> effects; | ||
| 181 | std::unique_ptr<AudioOut> audio_out; | 230 | std::unique_ptr<AudioOut> audio_out; |
| 182 | AudioCore::StreamPtr stream; | 231 | AudioCore::StreamPtr stream; |
| 183 | }; | 232 | }; |