Files
ss/include/nw4r/snd/snd_StrmChannel.h
2025-05-25 08:53:24 +02:00

67 lines
1.8 KiB
C++

#ifndef NW4R_SND_STRM_CHANNEL_H
#define NW4R_SND_STRM_CHANNEL_H
/*******************************************************************************
* headers
*/
#include <climits> // CHAR_BIT
#include "common.h"
#include "nw4r/snd/snd_adpcm.h"
/*******************************************************************************
* types
*/
namespace nw4r { namespace snd { namespace detail
{
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2f927
struct StrmChannel
{
void *bufferAddress; // size 0x04, offset 0x00
AdpcmParam adpcmParam; // size 0x28, offset 0x04
AdpcmLoopParam adpcmLoopParam; // size 0x06, offset 0x2c
u16 adpcmPredScale; // size 0x02, offset 0x32
}; // size 0x34
}}} // namespace nw4r::snd::detail
/*******************************************************************************
* classes and functions
*/
namespace nw4r { namespace snd { namespace detail
{
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2f7c6
class StrmBufferPool
{
// methods
public:
// methods
void Setup(void *buffer, u32 size, int blockCount);
void Shutdown();
u32 GetBlockSize() const { return mBlockSize; }
void *Alloc();
void Free(void *p);
// static members
private:
static int const BIT_PER_BYTE = CHAR_BIT; // uhhh ok
static int const BLOCK_MAX = 32;
// members
private:
void *mBuffer; // size 0x04, offset 0x00
u32 mBufferSize; // size 0x04, offset 0x04
u32 mBlockSize; // size 0x04, offset 0x08
int mBlockCount; // size 0x04, offset 0x0c
int mAllocCount; // size 0x04, offset 0x10
byte_t mAllocFlags[ROUND_UP(BLOCK_MAX, BIT_PER_BYTE) / BIT_PER_BYTE]; // size 0x04, offset 0x14
}; // size 0x18
}}} // namespace nw4r::snd::detail
#endif // NW4R_SND_STRM_CHANNEL_H