decoder.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <span>
  5. #include "audio_core/opus/parameters.h"
  6. #include "common/common_types.h"
  7. #include "core/hle/kernel/k_transfer_memory.h"
  8. #include "core/hle/service/audio/errors.h"
  9. namespace Core {
  10. class System;
  11. }
  12. namespace AudioCore::OpusDecoder {
  13. class HardwareOpus;
  14. class OpusDecoder {
  15. public:
  16. explicit OpusDecoder(Core::System& system, HardwareOpus& hardware_opus_);
  17. ~OpusDecoder();
  18. Result Initialize(const OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory,
  19. u64 transfer_memory_size);
  20. Result Initialize(const OpusMultiStreamParametersEx& params,
  21. Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size);
  22. Result DecodeInterleaved(u32* out_data_size, u64* out_time_taken, u32* out_sample_count,
  23. std::span<const u8> input_data, std::span<u8> output_data, bool reset);
  24. Result SetContext([[maybe_unused]] std::span<const u8> context);
  25. Result DecodeInterleavedForMultiStream(u32* out_data_size, u64* out_time_taken,
  26. u32* out_sample_count, std::span<const u8> input_data,
  27. std::span<u8> output_data, bool reset);
  28. private:
  29. Core::System& system;
  30. HardwareOpus& hardware_opus;
  31. std::unique_ptr<u8[]> shared_buffer{};
  32. u64 shared_buffer_size;
  33. std::span<u8> in_data{};
  34. std::span<u8> out_data{};
  35. u64 buffer_size{};
  36. s32 sample_rate{};
  37. s32 channel_count{};
  38. bool use_large_frame_size{false};
  39. s32 total_stream_count{};
  40. s32 stereo_stream_count{};
  41. bool shared_memory_mapped{false};
  42. bool decode_object_initialized{false};
  43. };
  44. } // namespace AudioCore::OpusDecoder