hardware_opus.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <mutex>
  5. #include <opus.h>
  6. #include "audio_core/adsp/apps/opus/opus_decoder.h"
  7. #include "audio_core/adsp/apps/opus/shared_memory.h"
  8. #include "audio_core/adsp/mailbox.h"
  9. #include "core/hle/service/audio/errors.h"
  10. namespace AudioCore::OpusDecoder {
  11. class HardwareOpus {
  12. public:
  13. HardwareOpus(Core::System& system);
  14. u32 GetWorkBufferSize(u32 channel);
  15. u32 GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 stereo_stream_count);
  16. Result InitializeDecodeObject(u32 sample_rate, u32 channel_count, void* buffer,
  17. u64 buffer_size);
  18. Result InitializeMultiStreamDecodeObject(u32 sample_rate, u32 channel_count,
  19. u32 totaL_stream_count, u32 stereo_stream_count,
  20. const void* mappings, void* buffer, u64 buffer_size);
  21. Result ShutdownDecodeObject(void* buffer, u64 buffer_size);
  22. Result ShutdownMultiStreamDecodeObject(void* buffer, u64 buffer_size);
  23. Result DecodeInterleaved(u32& out_sample_count, void* output_data, u64 output_data_size,
  24. u32 channel_count, void* input_data, u64 input_data_size, void* buffer,
  25. u64& out_time_taken, bool reset);
  26. Result DecodeInterleavedForMultiStream(u32& out_sample_count, void* output_data,
  27. u64 output_data_size, u32 channel_count,
  28. void* input_data, u64 input_data_size, void* buffer,
  29. u64& out_time_taken, bool reset);
  30. Result MapMemory(void* buffer, u64 buffer_size);
  31. Result UnmapMemory(void* buffer, u64 buffer_size);
  32. private:
  33. Core::System& system;
  34. std::mutex mutex;
  35. ADSP::OpusDecoder::OpusDecoder& opus_decoder;
  36. ADSP::OpusDecoder::SharedMemory shared_memory;
  37. };
  38. } // namespace AudioCore::OpusDecoder