mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
70 lines
1.7 KiB
C
70 lines
1.7 KiB
C
#pragma once
|
|
#include <malloc.h>
|
|
#include <string.h>
|
|
#include "types.h"
|
|
#include "result.h"
|
|
#include "services/audren.h"
|
|
#include "audio/driver.h"
|
|
|
|
typedef struct {
|
|
int next_free;
|
|
int padding;
|
|
} AudioDriverEtcMemPool;
|
|
|
|
typedef struct {
|
|
int* prev_next_voice;
|
|
int next_free_channel;
|
|
int next_used_voice;
|
|
u16 node_counter;
|
|
u32 num_wavebufs_consumed;
|
|
u32 voice_drops_count;
|
|
u64 played_sample_count;
|
|
AudioDriverWaveBuf* first_wavebuf;
|
|
AudioDriverWaveBuf* waiting_wavebuf;
|
|
AudioDriverWaveBuf* last_wavebuf;
|
|
} AudioDriverEtcVoice;
|
|
|
|
typedef struct {
|
|
int next_free;
|
|
int padding;
|
|
} AudioDriverEtcMix;
|
|
|
|
typedef struct {
|
|
int next_free;
|
|
int padding;
|
|
} AudioDriverEtcSink;
|
|
|
|
struct AudioDriverEtc {
|
|
int mempool_count;
|
|
int free_channel_count;
|
|
int free_mix_buffer_count;
|
|
int first_used_voice;
|
|
int first_free_mempool;
|
|
int first_free_channel;
|
|
int first_free_mix;
|
|
int first_free_sink;
|
|
AudioDriverEtcMemPool* mempools;
|
|
AudioDriverEtcVoice* voices;
|
|
AudioDriverEtcMix* mixes;
|
|
AudioDriverEtcSink* sinks;
|
|
AudioRendererBehaviorInfoIn* in_behavior;
|
|
AudioRendererPerformanceBufferInfoIn* in_perfbuf;
|
|
void* in_buf;
|
|
size_t in_buf_size;
|
|
void* out_buf;
|
|
size_t out_buf_size;
|
|
};
|
|
|
|
static inline size_t _audrvGetEtcSize(const AudioRendererConfig* config)
|
|
{
|
|
size_t size = 0;
|
|
size += sizeof(AudioDriverEtc);
|
|
size += sizeof(AudioDriverEtcMemPool) * audrenGetMemPoolCount(config);
|
|
size += sizeof(AudioDriverEtcVoice) * config->num_voices;
|
|
size += sizeof(AudioDriverEtcMix) * config->num_mix_objs;
|
|
size += sizeof(AudioDriverEtcSink) * config->num_sinks;
|
|
return size;
|
|
}
|
|
|
|
void _audrvVoiceUpdate(AudioDriver* d, int id, AudioRendererVoiceInfoOut* out_voice);
|