summaryrefslogtreecommitdiffstats
path: root/src/audio_core/adsp/apps/opus/opus_multistream_decode_object.h
blob: 93558ded5d24c98d7f85a5914792a7a0bb6cdfbb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include <opus_multistream.h>

#include "common/common_types.h"

namespace AudioCore::ADSP::OpusDecoder {
using LibOpusMSDecoder = ::OpusMSDecoder;
static constexpr u32 DecodeMultiStreamObjectMagic = 0xDEADBEEF;

class OpusMultiStreamDecodeObject {
public:
    static u32 GetWorkBufferSize(u32 total_stream_count, u32 stereo_stream_count);
    static OpusMultiStreamDecodeObject& Initialize(u64 buffer, u64 buffer2);

    s32 InitializeDecoder(u32 sample_rate, u32 total_stream_count, u32 channel_count,
                          u32 stereo_stream_count, u8* mappings);
    s32 Shutdown();
    s32 ResetDecoder();
    s32 Decode(u32& out_sample_count, u64 output_data, u64 output_data_size, u64 input_data,
               u64 input_data_size);
    u32 GetFinalRange() const noexcept {
        return final_range;
    }

private:
    u32 magic;
    bool initialized;
    bool state_valid;
    OpusMultiStreamDecodeObject* self;
    u32 final_range;
    LibOpusMSDecoder* decoder;
};
static_assert(std::is_trivially_constructible_v<OpusMultiStreamDecodeObject>);

} // namespace AudioCore::ADSP::OpusDecoder