diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio_core/audio_renderer.cpp | 10 | ||||
| -rw-r--r-- | src/audio_core/audio_renderer.h | 25 |
2 files changed, 24 insertions, 11 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index da50a0bbc..cf24527f3 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp | |||
| @@ -107,6 +107,11 @@ Stream::State AudioRenderer::GetStreamState() const { | |||
| 107 | return stream->GetState(); | 107 | return stream->GetState(); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | constexpr u32 VersionFromRevision(u32_le rev) { | ||
| 111 | // "REV7" -> 7 | ||
| 112 | return ((rev >> 24) & 0xff) - 0x30; | ||
| 113 | } | ||
| 114 | |||
| 110 | std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_params) { | 115 | std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_params) { |
| 111 | // Copy UpdateDataHeader struct | 116 | // Copy UpdateDataHeader struct |
| 112 | UpdateDataHeader config{}; | 117 | UpdateDataHeader config{}; |
| @@ -166,6 +171,11 @@ std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_ | |||
| 166 | // Copy output header | 171 | // Copy output header |
| 167 | UpdateDataHeader response_data{worker_params}; | 172 | UpdateDataHeader response_data{worker_params}; |
| 168 | std::vector<u8> output_params(response_data.total_size); | 173 | std::vector<u8> output_params(response_data.total_size); |
| 174 | const auto audren_revision = VersionFromRevision(config.revision); | ||
| 175 | if (audren_revision >= 7) { | ||
| 176 | response_data.frame_count = 0x10; | ||
| 177 | response_data.total_size += 0x10; | ||
| 178 | } | ||
| 169 | std::memcpy(output_params.data(), &response_data, sizeof(UpdateDataHeader)); | 179 | std::memcpy(output_params.data(), &response_data, sizeof(UpdateDataHeader)); |
| 170 | 180 | ||
| 171 | // Copy output memory pool entries | 181 | // Copy output memory pool entries |
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index 45afbe759..4f14b91cd 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -194,21 +194,24 @@ struct UpdateDataHeader { | |||
| 194 | mixes_size = 0x0; | 194 | mixes_size = 0x0; |
| 195 | sinks_size = config.sink_count * 0x20; | 195 | sinks_size = config.sink_count * 0x20; |
| 196 | performance_manager_size = 0x10; | 196 | performance_manager_size = 0x10; |
| 197 | frame_count = 0; | ||
| 197 | total_size = sizeof(UpdateDataHeader) + behavior_size + memory_pools_size + voices_size + | 198 | total_size = sizeof(UpdateDataHeader) + behavior_size + memory_pools_size + voices_size + |
| 198 | effects_size + sinks_size + performance_manager_size; | 199 | effects_size + sinks_size + performance_manager_size; |
| 199 | } | 200 | } |
| 200 | 201 | ||
| 201 | u32_le revision; | 202 | u32_le revision{}; |
| 202 | u32_le behavior_size; | 203 | u32_le behavior_size{}; |
| 203 | u32_le memory_pools_size; | 204 | u32_le memory_pools_size{}; |
| 204 | u32_le voices_size; | 205 | u32_le voices_size{}; |
| 205 | u32_le voice_resource_size; | 206 | u32_le voice_resource_size{}; |
| 206 | u32_le effects_size; | 207 | u32_le effects_size{}; |
| 207 | u32_le mixes_size; | 208 | u32_le mixes_size{}; |
| 208 | u32_le sinks_size; | 209 | u32_le sinks_size{}; |
| 209 | u32_le performance_manager_size; | 210 | u32_le performance_manager_size{}; |
| 210 | INSERT_PADDING_WORDS(6); | 211 | INSERT_PADDING_WORDS(1); |
| 211 | u32_le total_size; | 212 | u32_le frame_count{}; |
| 213 | INSERT_PADDING_WORDS(4); | ||
| 214 | u32_le total_size{}; | ||
| 212 | }; | 215 | }; |
| 213 | static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size"); | 216 | static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size"); |
| 214 | 217 | ||