diff options
Diffstat (limited to 'src/audio_core/opus/decoder.cpp')
| -rw-r--r-- | src/audio_core/opus/decoder.cpp | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/src/audio_core/opus/decoder.cpp b/src/audio_core/opus/decoder.cpp index e60a7d48d4..7d0cce74db 100644 --- a/src/audio_core/opus/decoder.cpp +++ b/src/audio_core/opus/decoder.cpp @@ -27,33 +27,31 @@ OpusDecoder::OpusDecoder(Core::System& system_, HardwareOpus& hardware_opus_) OpusDecoder::~OpusDecoder() { if (decode_object_initialized) { - hardware_opus.ShutdownDecodeObject(shared_buffer.get(), shared_buffer_size); + hardware_opus.ShutdownDecodeObject(shared_buffer.data(), shared_buffer.size()); } } -Result OpusDecoder::Initialize(const OpusParametersEx& params, - Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { +Result OpusDecoder::Initialize(const OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { auto frame_size{params.use_large_frame_size ? 5760 : 1920}; - shared_buffer_size = transfer_memory_size; - shared_buffer = std::make_unique<u8[]>(shared_buffer_size); + shared_buffer.resize(transfer_memory_size); shared_memory_mapped = true; buffer_size = Common::AlignUp((frame_size * params.channel_count) / (48'000 / params.sample_rate), 16); - out_data = {shared_buffer.get() + shared_buffer_size - buffer_size, buffer_size}; + out_data = {shared_buffer.data() + shared_buffer.size() - buffer_size, buffer_size}; size_t in_data_size{0x600u}; in_data = {out_data.data() - in_data_size, in_data_size}; ON_RESULT_FAILURE { if (shared_memory_mapped) { shared_memory_mapped = false; - ASSERT(R_SUCCEEDED(hardware_opus.UnmapMemory(shared_buffer.get(), shared_buffer_size))); + ASSERT(R_SUCCEEDED(hardware_opus.UnmapMemory(shared_buffer.data(), shared_buffer.size()))); } }; R_TRY(hardware_opus.InitializeDecodeObject(params.sample_rate, params.channel_count, - shared_buffer.get(), shared_buffer_size)); + shared_buffer.data(), shared_buffer.size())); sample_rate = params.sample_rate; channel_count = params.channel_count; @@ -62,31 +60,29 @@ Result OpusDecoder::Initialize(const OpusParametersEx& params, R_SUCCEED(); } -Result OpusDecoder::Initialize(const OpusMultiStreamParametersEx& params, - Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { +Result OpusDecoder::Initialize(const OpusMultiStreamParametersEx& params, Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { auto frame_size{params.use_large_frame_size ? 5760 : 1920}; - shared_buffer_size = transfer_memory_size; - shared_buffer = std::make_unique<u8[]>(shared_buffer_size); + shared_buffer.resize(transfer_memory_size, 0); shared_memory_mapped = true; buffer_size = Common::AlignUp((frame_size * params.channel_count) / (48'000 / params.sample_rate), 16); - out_data = {shared_buffer.get() + shared_buffer_size - buffer_size, buffer_size}; + out_data = {shared_buffer.data() + shared_buffer.size() - buffer_size, buffer_size}; size_t in_data_size{Common::AlignUp(1500ull * params.total_stream_count, 64u)}; in_data = {out_data.data() - in_data_size, in_data_size}; ON_RESULT_FAILURE { if (shared_memory_mapped) { shared_memory_mapped = false; - ASSERT(R_SUCCEEDED(hardware_opus.UnmapMemory(shared_buffer.get(), shared_buffer_size))); + ASSERT(R_SUCCEEDED(hardware_opus.UnmapMemory(shared_buffer.data(), shared_buffer.size()))); } }; R_TRY(hardware_opus.InitializeMultiStreamDecodeObject( params.sample_rate, params.channel_count, params.total_stream_count, - params.stereo_stream_count, params.mappings.data(), shared_buffer.get(), - shared_buffer_size)); + params.stereo_stream_count, params.mappings.data(), shared_buffer.data(), + shared_buffer.size())); sample_rate = params.sample_rate; channel_count = params.channel_count; @@ -113,7 +109,7 @@ Result OpusDecoder::DecodeInterleaved(u32* out_data_size, u64* out_time_taken, ResultBufferTooSmall); if (!shared_memory_mapped) { - R_TRY(hardware_opus.MapMemory(shared_buffer.get(), shared_buffer_size)); + R_TRY(hardware_opus.MapMemory(shared_buffer.data(), shared_buffer.size())); shared_memory_mapped = true; } @@ -121,7 +117,7 @@ Result OpusDecoder::DecodeInterleaved(u32* out_data_size, u64* out_time_taken, R_TRY(hardware_opus.DecodeInterleaved(out_samples, out_data.data(), out_data.size_bytes(), channel_count, in_data.data(), header.size, - shared_buffer.get(), time_taken, reset)); + shared_buffer.data(), time_taken, reset)); std::memcpy(output_data.data(), out_data.data(), out_samples * channel_count * sizeof(s16)); @@ -136,7 +132,7 @@ Result OpusDecoder::DecodeInterleaved(u32* out_data_size, u64* out_time_taken, Result OpusDecoder::SetContext([[maybe_unused]] std::span<const u8> context) { R_SUCCEED_IF(shared_memory_mapped); shared_memory_mapped = true; - R_RETURN(hardware_opus.MapMemory(shared_buffer.get(), shared_buffer_size)); + R_RETURN(hardware_opus.MapMemory(shared_buffer.data(), shared_buffer.size())); } Result OpusDecoder::DecodeInterleavedForMultiStream(u32* out_data_size, u64* out_time_taken, @@ -159,7 +155,7 @@ Result OpusDecoder::DecodeInterleavedForMultiStream(u32* out_data_size, u64* out ResultBufferTooSmall); if (!shared_memory_mapped) { - R_TRY(hardware_opus.MapMemory(shared_buffer.get(), shared_buffer_size)); + R_TRY(hardware_opus.MapMemory(shared_buffer.data(), shared_buffer.size())); shared_memory_mapped = true; } @@ -167,7 +163,7 @@ Result OpusDecoder::DecodeInterleavedForMultiStream(u32* out_data_size, u64* out R_TRY(hardware_opus.DecodeInterleavedForMultiStream( out_samples, out_data.data(), out_data.size_bytes(), channel_count, in_data.data(), - header.size, shared_buffer.get(), time_taken, reset)); + header.size, shared_buffer.data(), time_taken, reset)); std::memcpy(output_data.data(), out_data.data(), out_samples * channel_count * sizeof(s16)); |
