mirror of
https://github.com/zeldaret/ss
synced 2026-06-03 18:36:16 -04:00
67 lines
1.8 KiB
C++
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
|