diff --git a/src/core/hle/service/audio/hwopus.cpp b/src/core/hle/service/audio/hwopus.cpp index 480f494d4f..774a3a03e1 100644 --- a/src/core/hle/service/audio/hwopus.cpp +++ b/src/core/hle/service/audio/hwopus.cpp @@ -11,10 +11,16 @@ namespace Service::Audio { +struct OpusDeleter { + void operator()(void* ptr) { + operator delete(ptr); + } +}; + class IHardwareOpusDecoderManager final : public ServiceFramework { public: - IHardwareOpusDecoderManager(std::unique_ptr decoder, - u32 sample_rate, u32 channel_count) + IHardwareOpusDecoderManager(std::unique_ptr decoder, u32 sample_rate, + u32 channel_count) : ServiceFramework("IHardwareOpusDecoderManager"), decoder(std::move(decoder)), sample_rate(sample_rate), channel_count(channel_count) { static const FunctionInfo functions[] = { @@ -79,7 +85,7 @@ private: }; static_assert(sizeof(OpusHeader) == 0x8, "OpusHeader is an invalid size"); - std::unique_ptr decoder; + std::unique_ptr decoder; u32 sample_rate; u32 channel_count; }; @@ -114,8 +120,8 @@ void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) { size_t worker_sz = WorkerBufferSize(channel_count); ASSERT_MSG(buffer_sz < worker_sz, "Worker buffer too large"); - std::unique_ptr decoder{ - static_cast(std::malloc(worker_sz)), std::free}; + std::unique_ptr decoder{ + static_cast(operator new(worker_sz))}; if (opus_decoder_init(decoder.get(), sample_rate, channel_count)) { IPC::ResponseBuilder rb{ctx, 2}; // TODO(ogniK): Use correct error code