summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Liam2024-02-20 22:15:28 -0500
committerGravatar Liam2024-02-20 22:15:38 -0500
commit5f90bd88daf997f9da1f97c1ffe97d3be46e3d0c (patch)
treef2346fe9ef767cffbbffdd80d441ee21b9336cf8 /src/core
parentaudio: rewrite IAudioDevice (diff)
downloadyuzu-5f90bd88daf997f9da1f97c1ffe97d3be46e3d0c.tar.gz
yuzu-5f90bd88daf997f9da1f97c1ffe97d3be46e3d0c.tar.xz
yuzu-5f90bd88daf997f9da1f97c1ffe97d3be46e3d0c.zip
audio: rewrite IHardwareOpusDecoder
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/audio/hardware_opus_decoder.cpp296
-rw-r--r--src/core/hle/service/audio/hardware_opus_decoder.h45
2 files changed, 123 insertions, 218 deletions
diff --git a/src/core/hle/service/audio/hardware_opus_decoder.cpp b/src/core/hle/service/audio/hardware_opus_decoder.cpp
index e398511a6..03d3374c1 100644
--- a/src/core/hle/service/audio/hardware_opus_decoder.cpp
+++ b/src/core/hle/service/audio/hardware_opus_decoder.cpp
@@ -2,7 +2,7 @@
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-2.0-or-later
3 3
4#include "core/hle/service/audio/hardware_opus_decoder.h" 4#include "core/hle/service/audio/hardware_opus_decoder.h"
5#include "core/hle/service/ipc_helpers.h" 5#include "core/hle/service/cmif_serialization.h"
6 6
7namespace Service::Audio { 7namespace Service::Audio {
8 8
@@ -13,16 +13,16 @@ IHardwareOpusDecoder::IHardwareOpusDecoder(Core::System& system_, HardwareOpus&
13 impl{std::make_unique<AudioCore::OpusDecoder::OpusDecoder>(system_, hardware_opus)} { 13 impl{std::make_unique<AudioCore::OpusDecoder::OpusDecoder>(system_, hardware_opus)} {
14 // clang-format off 14 // clang-format off
15 static const FunctionInfo functions[] = { 15 static const FunctionInfo functions[] = {
16 {0, &IHardwareOpusDecoder::DecodeInterleavedOld, "DecodeInterleavedOld"}, 16 {0, D<&IHardwareOpusDecoder::DecodeInterleavedOld>, "DecodeInterleavedOld"},
17 {1, &IHardwareOpusDecoder::SetContext, "SetContext"}, 17 {1, D<&IHardwareOpusDecoder::SetContext>, "SetContext"},
18 {2, &IHardwareOpusDecoder::DecodeInterleavedForMultiStreamOld, "DecodeInterleavedForMultiStreamOld"}, 18 {2, D<&IHardwareOpusDecoder::DecodeInterleavedForMultiStreamOld>, "DecodeInterleavedForMultiStreamOld"},
19 {3, &IHardwareOpusDecoder::SetContextForMultiStream, "SetContextForMultiStream"}, 19 {3, D<&IHardwareOpusDecoder::SetContextForMultiStream>, "SetContextForMultiStream"},
20 {4, &IHardwareOpusDecoder::DecodeInterleavedWithPerfOld, "DecodeInterleavedWithPerfOld"}, 20 {4, D<&IHardwareOpusDecoder::DecodeInterleavedWithPerfOld>, "DecodeInterleavedWithPerfOld"},
21 {5, &IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfOld, "DecodeInterleavedForMultiStreamWithPerfOld"}, 21 {5, D<&IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfOld>, "DecodeInterleavedForMultiStreamWithPerfOld"},
22 {6, &IHardwareOpusDecoder::DecodeInterleavedWithPerfAndResetOld, "DecodeInterleavedWithPerfAndResetOld"}, 22 {6, D<&IHardwareOpusDecoder::DecodeInterleavedWithPerfAndResetOld>, "DecodeInterleavedWithPerfAndResetOld"},
23 {7, &IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfAndResetOld, "DecodeInterleavedForMultiStreamWithPerfAndResetOld"}, 23 {7, D<&IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfAndResetOld>, "DecodeInterleavedForMultiStreamWithPerfAndResetOld"},
24 {8, &IHardwareOpusDecoder::DecodeInterleaved, "DecodeInterleaved"}, 24 {8, D<&IHardwareOpusDecoder::DecodeInterleaved>, "DecodeInterleaved"},
25 {9, &IHardwareOpusDecoder::DecodeInterleavedForMultiStream, "DecodeInterleavedForMultiStream"}, 25 {9, D<&IHardwareOpusDecoder::DecodeInterleavedForMultiStream>, "DecodeInterleavedForMultiStream"},
26 }; 26 };
27 // clang-format on 27 // clang-format on
28 28
@@ -43,223 +43,103 @@ Result IHardwareOpusDecoder::Initialize(const OpusMultiStreamParametersEx& param
43 return impl->Initialize(params, transfer_memory, transfer_memory_size); 43 return impl->Initialize(params, transfer_memory, transfer_memory_size);
44} 44}
45 45
46void IHardwareOpusDecoder::DecodeInterleavedOld(HLERequestContext& ctx) { 46Result IHardwareOpusDecoder::DecodeInterleavedOld(OutBuffer<BufferAttr_HipcMapAlias> out_pcm_data,
47 IPC::RequestParser rp{ctx}; 47 Out<u32> out_data_size, Out<u32> out_sample_count,
48 48 InBuffer<BufferAttr_HipcMapAlias> opus_data) {
49 auto input_data{ctx.ReadBuffer(0)}; 49 R_TRY(impl->DecodeInterleaved(out_data_size, nullptr, out_sample_count, opus_data, out_pcm_data,
50 output_data.resize_destructive(ctx.GetWriteBufferSize()); 50 false));
51 51 LOG_DEBUG(Service_Audio, "bytes read {:#x} samples generated {}", *out_data_size,
52 u32 size{}; 52 *out_sample_count);
53 u32 sample_count{}; 53 R_SUCCEED();
54 auto result =
55 impl->DecodeInterleaved(&size, nullptr, &sample_count, input_data, output_data, false);
56
57 LOG_DEBUG(Service_Audio, "bytes read 0x{:X} samples generated {}", size, sample_count);
58
59 ctx.WriteBuffer(output_data);
60
61 IPC::ResponseBuilder rb{ctx, 4};
62 rb.Push(result);
63 rb.Push(size);
64 rb.Push(sample_count);
65} 54}
66 55
67void IHardwareOpusDecoder::SetContext(HLERequestContext& ctx) { 56Result IHardwareOpusDecoder::SetContext(InBuffer<BufferAttr_HipcMapAlias> decoder_context) {
68 IPC::RequestParser rp{ctx};
69
70 LOG_DEBUG(Service_Audio, "called"); 57 LOG_DEBUG(Service_Audio, "called");
71 58 R_RETURN(impl->SetContext(decoder_context));
72 auto input_data{ctx.ReadBuffer(0)};
73 auto result = impl->SetContext(input_data);
74
75 IPC::ResponseBuilder rb{ctx, 2};
76 rb.Push(result);
77} 59}
78 60
79void IHardwareOpusDecoder::DecodeInterleavedForMultiStreamOld(HLERequestContext& ctx) { 61Result IHardwareOpusDecoder::DecodeInterleavedForMultiStreamOld(
80 IPC::RequestParser rp{ctx}; 62 OutBuffer<BufferAttr_HipcMapAlias> out_pcm_data, Out<u32> out_data_size,
81 63 Out<u32> out_sample_count, InBuffer<BufferAttr_HipcMapAlias> opus_data) {
82 auto input_data{ctx.ReadBuffer(0)}; 64 R_TRY(impl->DecodeInterleavedForMultiStream(out_data_size, nullptr, out_sample_count, opus_data,
83 output_data.resize_destructive(ctx.GetWriteBufferSize()); 65 out_pcm_data, false));
84 66 LOG_DEBUG(Service_Audio, "bytes read {:#x} samples generated {}", *out_data_size,
85 u32 size{}; 67 *out_sample_count);
86 u32 sample_count{}; 68 R_SUCCEED();
87 auto result = impl->DecodeInterleavedForMultiStream(&size, nullptr, &sample_count, input_data,
88 output_data, false);
89
90 LOG_DEBUG(Service_Audio, "bytes read 0x{:X} samples generated {}", size, sample_count);
91
92 ctx.WriteBuffer(output_data);
93
94 IPC::ResponseBuilder rb{ctx, 4};
95 rb.Push(result);
96 rb.Push(size);
97 rb.Push(sample_count);
98} 69}
99 70
100void IHardwareOpusDecoder::SetContextForMultiStream(HLERequestContext& ctx) { 71Result IHardwareOpusDecoder::SetContextForMultiStream(
101 IPC::RequestParser rp{ctx}; 72 InBuffer<BufferAttr_HipcMapAlias> decoder_context) {
102
103 LOG_DEBUG(Service_Audio, "called"); 73 LOG_DEBUG(Service_Audio, "called");
104 74 R_RETURN(impl->SetContext(decoder_context));
105 auto input_data{ctx.ReadBuffer(0)};
106 auto result = impl->SetContext(input_data);
107
108 IPC::ResponseBuilder rb{ctx, 2};
109 rb.Push(result);
110} 75}
111 76
112void IHardwareOpusDecoder::DecodeInterleavedWithPerfOld(HLERequestContext& ctx) { 77Result IHardwareOpusDecoder::DecodeInterleavedWithPerfOld(
113 IPC::RequestParser rp{ctx}; 78 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
114 79 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
115 auto input_data{ctx.ReadBuffer(0)}; 80 InBuffer<BufferAttr_HipcMapAlias> opus_data) {
116 output_data.resize_destructive(ctx.GetWriteBufferSize()); 81 R_TRY(impl->DecodeInterleaved(out_data_size, out_time_taken, out_sample_count, opus_data,
117 82 out_pcm_data, false));
118 u32 size{}; 83 LOG_DEBUG(Service_Audio, "bytes read {:#x} samples generated {} time taken {}", *out_data_size,
119 u32 sample_count{}; 84 *out_sample_count, *out_time_taken);
120 u64 time_taken{}; 85 R_SUCCEED();
121 auto result =
122 impl->DecodeInterleaved(&size, &time_taken, &sample_count, input_data, output_data, false);
123
124 LOG_DEBUG(Service_Audio, "bytes read 0x{:X} samples generated {} time taken {}", size,
125 sample_count, time_taken);
126
127 ctx.WriteBuffer(output_data);
128
129 IPC::ResponseBuilder rb{ctx, 6};
130 rb.Push(result);
131 rb.Push(size);
132 rb.Push(sample_count);
133 rb.Push(time_taken);
134} 86}
135 87
136void IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfOld(HLERequestContext& ctx) { 88Result IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfOld(
137 IPC::RequestParser rp{ctx}; 89 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
138 90 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
139 auto input_data{ctx.ReadBuffer(0)}; 91 InBuffer<BufferAttr_HipcMapAlias> opus_data) {
140 output_data.resize_destructive(ctx.GetWriteBufferSize()); 92 R_TRY(impl->DecodeInterleavedForMultiStream(out_data_size, out_time_taken, out_sample_count,
141 93 opus_data, out_pcm_data, false));
142 u32 size{}; 94 LOG_DEBUG(Service_Audio, "bytes read {:#x} samples generated {} time taken {}", *out_data_size,
143 u32 sample_count{}; 95 *out_sample_count, *out_time_taken);
144 u64 time_taken{}; 96 R_SUCCEED();
145 auto result = impl->DecodeInterleavedForMultiStream(&size, &time_taken, &sample_count,
146 input_data, output_data, false);
147
148 LOG_DEBUG(Service_Audio, "bytes read 0x{:X} samples generated {} time taken {}", size,
149 sample_count, time_taken);
150
151 ctx.WriteBuffer(output_data);
152
153 IPC::ResponseBuilder rb{ctx, 6};
154 rb.Push(result);
155 rb.Push(size);
156 rb.Push(sample_count);
157 rb.Push(time_taken);
158} 97}
159 98
160void IHardwareOpusDecoder::DecodeInterleavedWithPerfAndResetOld(HLERequestContext& ctx) { 99Result IHardwareOpusDecoder::DecodeInterleavedWithPerfAndResetOld(
161 IPC::RequestParser rp{ctx}; 100 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
162 101 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
163 auto reset{rp.Pop<bool>()}; 102 InBuffer<BufferAttr_HipcMapAlias> opus_data, bool reset) {
164 103 R_TRY(impl->DecodeInterleaved(out_data_size, out_time_taken, out_sample_count, opus_data,
165 auto input_data{ctx.ReadBuffer(0)}; 104 out_pcm_data, reset));
166 output_data.resize_destructive(ctx.GetWriteBufferSize()); 105 LOG_DEBUG(Service_Audio, "reset {} bytes read {:#x} samples generated {} time taken {}", reset,
167 106 *out_data_size, *out_sample_count, *out_time_taken);
168 u32 size{}; 107 R_SUCCEED();
169 u32 sample_count{};
170 u64 time_taken{};
171 auto result =
172 impl->DecodeInterleaved(&size, &time_taken, &sample_count, input_data, output_data, reset);
173
174 LOG_DEBUG(Service_Audio, "reset {} bytes read 0x{:X} samples generated {} time taken {}", reset,
175 size, sample_count, time_taken);
176
177 ctx.WriteBuffer(output_data);
178
179 IPC::ResponseBuilder rb{ctx, 6};
180 rb.Push(result);
181 rb.Push(size);
182 rb.Push(sample_count);
183 rb.Push(time_taken);
184} 108}
185 109
186void IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfAndResetOld( 110Result IHardwareOpusDecoder::DecodeInterleavedForMultiStreamWithPerfAndResetOld(
187 HLERequestContext& ctx) { 111 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
188 IPC::RequestParser rp{ctx}; 112 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
189 113 InBuffer<BufferAttr_HipcMapAlias> opus_data, bool reset) {
190 auto reset{rp.Pop<bool>()}; 114 R_TRY(impl->DecodeInterleavedForMultiStream(out_data_size, out_time_taken, out_sample_count,
191 115 opus_data, out_pcm_data, reset));
192 auto input_data{ctx.ReadBuffer(0)}; 116 LOG_DEBUG(Service_Audio, "reset {} bytes read {:#x} samples generated {} time taken {}", reset,
193 output_data.resize_destructive(ctx.GetWriteBufferSize()); 117 *out_data_size, *out_sample_count, *out_time_taken);
194 118 R_SUCCEED();
195 u32 size{};
196 u32 sample_count{};
197 u64 time_taken{};
198 auto result = impl->DecodeInterleavedForMultiStream(&size, &time_taken, &sample_count,
199 input_data, output_data, reset);
200
201 LOG_DEBUG(Service_Audio, "reset {} bytes read 0x{:X} samples generated {} time taken {}", reset,
202 size, sample_count, time_taken);
203
204 ctx.WriteBuffer(output_data);
205
206 IPC::ResponseBuilder rb{ctx, 6};
207 rb.Push(result);
208 rb.Push(size);
209 rb.Push(sample_count);
210 rb.Push(time_taken);
211} 119}
212 120
213void IHardwareOpusDecoder::DecodeInterleaved(HLERequestContext& ctx) { 121Result IHardwareOpusDecoder::DecodeInterleaved(
214 IPC::RequestParser rp{ctx}; 122 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
215 123 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
216 auto reset{rp.Pop<bool>()}; 124 InBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> opus_data,
217 125 bool reset) {
218 auto input_data{ctx.ReadBuffer(0)}; 126 R_TRY(impl->DecodeInterleaved(out_data_size, out_time_taken, out_sample_count, opus_data,
219 output_data.resize_destructive(ctx.GetWriteBufferSize()); 127 out_pcm_data, reset));
220 128 LOG_DEBUG(Service_Audio, "reset {} bytes read {:#x} samples generated {} time taken {}", reset,
221 u32 size{}; 129 *out_data_size, *out_sample_count, *out_time_taken);
222 u32 sample_count{}; 130 R_SUCCEED();
223 u64 time_taken{};
224 auto result =
225 impl->DecodeInterleaved(&size, &time_taken, &sample_count, input_data, output_data, reset);
226
227 LOG_DEBUG(Service_Audio, "reset {} bytes read 0x{:X} samples generated {} time taken {}", reset,
228 size, sample_count, time_taken);
229
230 ctx.WriteBuffer(output_data);
231
232 IPC::ResponseBuilder rb{ctx, 6};
233 rb.Push(result);
234 rb.Push(size);
235 rb.Push(sample_count);
236 rb.Push(time_taken);
237} 131}
238 132
239void IHardwareOpusDecoder::DecodeInterleavedForMultiStream(HLERequestContext& ctx) { 133Result IHardwareOpusDecoder::DecodeInterleavedForMultiStream(
240 IPC::RequestParser rp{ctx}; 134 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
241 135 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
242 auto reset{rp.Pop<bool>()}; 136 InBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> opus_data,
243 137 bool reset) {
244 auto input_data{ctx.ReadBuffer(0)}; 138 R_TRY(impl->DecodeInterleavedForMultiStream(out_data_size, out_time_taken, out_sample_count,
245 output_data.resize_destructive(ctx.GetWriteBufferSize()); 139 opus_data, out_pcm_data, reset));
246 140 LOG_DEBUG(Service_Audio, "reset {} bytes read {:#x} samples generated {} time taken {}", reset,
247 u32 size{}; 141 *out_data_size, *out_sample_count, *out_time_taken);
248 u32 sample_count{}; 142 R_SUCCEED();
249 u64 time_taken{};
250 auto result = impl->DecodeInterleavedForMultiStream(&size, &time_taken, &sample_count,
251 input_data, output_data, reset);
252
253 LOG_DEBUG(Service_Audio, "reset {} bytes read 0x{:X} samples generated {} time taken {}", reset,
254 size, sample_count, time_taken);
255
256 ctx.WriteBuffer(output_data);
257
258 IPC::ResponseBuilder rb{ctx, 6};
259 rb.Push(result);
260 rb.Push(size);
261 rb.Push(sample_count);
262 rb.Push(time_taken);
263} 143}
264 144
265} // namespace Service::Audio 145} // namespace Service::Audio
diff --git a/src/core/hle/service/audio/hardware_opus_decoder.h b/src/core/hle/service/audio/hardware_opus_decoder.h
index 121858a6f..511bf46bd 100644
--- a/src/core/hle/service/audio/hardware_opus_decoder.h
+++ b/src/core/hle/service/audio/hardware_opus_decoder.h
@@ -4,6 +4,7 @@
4#pragma once 4#pragma once
5 5
6#include "audio_core/opus/decoder.h" 6#include "audio_core/opus/decoder.h"
7#include "core/hle/service/cmif_types.h"
7#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
8 9
9namespace Service::Audio { 10namespace Service::Audio {
@@ -20,16 +21,40 @@ public:
20 Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); 21 Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size);
21 22
22private: 23private:
23 void DecodeInterleavedOld(HLERequestContext& ctx); 24 Result DecodeInterleavedOld(OutBuffer<BufferAttr_HipcMapAlias> out_pcm_data,
24 void SetContext(HLERequestContext& ctx); 25 Out<u32> out_data_size, Out<u32> out_sample_count,
25 void DecodeInterleavedForMultiStreamOld(HLERequestContext& ctx); 26 InBuffer<BufferAttr_HipcMapAlias> opus_data);
26 void SetContextForMultiStream(HLERequestContext& ctx); 27 Result SetContext(InBuffer<BufferAttr_HipcMapAlias> decoder_context);
27 void DecodeInterleavedWithPerfOld(HLERequestContext& ctx); 28 Result DecodeInterleavedForMultiStreamOld(OutBuffer<BufferAttr_HipcMapAlias> out_pcm_data,
28 void DecodeInterleavedForMultiStreamWithPerfOld(HLERequestContext& ctx); 29 Out<u32> out_data_size, Out<u32> out_sample_count,
29 void DecodeInterleavedWithPerfAndResetOld(HLERequestContext& ctx); 30 InBuffer<BufferAttr_HipcMapAlias> opus_data);
30 void DecodeInterleavedForMultiStreamWithPerfAndResetOld(HLERequestContext& ctx); 31 Result SetContextForMultiStream(InBuffer<BufferAttr_HipcMapAlias> decoder_context);
31 void DecodeInterleaved(HLERequestContext& ctx); 32 Result DecodeInterleavedWithPerfOld(
32 void DecodeInterleavedForMultiStream(HLERequestContext& ctx); 33 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
34 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
35 InBuffer<BufferAttr_HipcMapAlias> opus_data);
36 Result DecodeInterleavedForMultiStreamWithPerfOld(
37 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
38 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
39 InBuffer<BufferAttr_HipcMapAlias> opus_data);
40 Result DecodeInterleavedWithPerfAndResetOld(
41 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
42 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
43 InBuffer<BufferAttr_HipcMapAlias> opus_data, bool reset);
44 Result DecodeInterleavedForMultiStreamWithPerfAndResetOld(
45 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
46 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
47 InBuffer<BufferAttr_HipcMapAlias> opus_data, bool reset);
48 Result DecodeInterleaved(
49 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
50 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
51 InBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> opus_data,
52 bool reset);
53 Result DecodeInterleavedForMultiStream(
54 OutBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> out_pcm_data,
55 Out<u32> out_data_size, Out<u32> out_sample_count, Out<u64> out_time_taken,
56 InBuffer<BufferAttr_HipcMapAlias | BufferAttr_HipcMapTransferAllowsNonSecure> opus_data,
57 bool reset);
33 58
34 std::unique_ptr<AudioCore::OpusDecoder::OpusDecoder> impl; 59 std::unique_ptr<AudioCore::OpusDecoder::OpusDecoder> impl;
35 Common::ScratchBuffer<u8> output_data; 60 Common::ScratchBuffer<u8> output_data;