cellAudio: re-use event_sources array

This commit is contained in:
Megamouse 2023-03-05 20:26:22 +01:00
parent f2b51668b4
commit 69ecf8aea7
2 changed files with 19 additions and 19 deletions

View File

@ -274,8 +274,8 @@ void audio_ringbuffer::process_resampled_data()
{ {
if (!cfg.time_stretching_enabled) return; if (!cfg.time_stretching_enabled) return;
const auto samples = resampler.get_samples(static_cast<u32>(cb_ringbuf.get_free_size() / (cfg.audio_sample_size * static_cast<u32>(cfg.backend_ch_cnt)))); const auto [buffer, samples] = resampler.get_samples(static_cast<u32>(cb_ringbuf.get_free_size() / (cfg.audio_sample_size * static_cast<u32>(cfg.backend_ch_cnt))));
commit_data(samples.first, samples.second); commit_data(buffer, samples);
} }
void audio_ringbuffer::commit_data(f32* buf, u32 sample_cnt) void audio_ringbuffer::commit_data(f32* buf, u32 sample_cnt)
@ -455,7 +455,7 @@ std::tuple<u32, u32, u32, u32> cell_audio_thread::count_port_buffer_tags()
u32 untouched = 0; u32 untouched = 0;
u32 incomplete = 0; u32 incomplete = 0;
for (auto& port : ports) for (audio_port& port : ports)
{ {
if (port.state != audio_port_state::started) continue; if (port.state != audio_port_state::started) continue;
active++; active++;
@ -526,7 +526,7 @@ std::tuple<u32, u32, u32, u32> cell_audio_thread::count_port_buffer_tags()
void cell_audio_thread::reset_ports(s32 offset) void cell_audio_thread::reset_ports(s32 offset)
{ {
// Memset buffer to 0 and tag // Memset buffer to 0 and tag
for (auto& port : ports) for (audio_port& port : ports)
{ {
if (port.state != audio_port_state::started) continue; if (port.state != audio_port_state::started) continue;
@ -548,7 +548,7 @@ void cell_audio_thread::advance(u64 timestamp)
// update ports // update ports
reset_ports(0); reset_ports(0);
for (auto& port : ports) for (audio_port& port : ports)
{ {
if (port.state != audio_port_state::started) continue; if (port.state != audio_port_state::started) continue;
@ -572,12 +572,11 @@ void cell_audio_thread::advance(u64 timestamp)
// send aftermix event (normal audio event) // send aftermix event (normal audio event)
std::array<std::shared_ptr<lv2_event_queue>, MAX_AUDIO_EVENT_QUEUES> queues; std::array<std::shared_ptr<lv2_event_queue>, MAX_AUDIO_EVENT_QUEUES> queues;
std::array<u64, MAX_AUDIO_EVENT_QUEUES> event_sources;
u32 queue_count = 0; u32 queue_count = 0;
event_period++; event_period++;
for (const auto& key_inf : keys) for (const key_info& key_inf : keys)
{ {
if (key_inf.flags & CELL_AUDIO_EVENTFLAG_NOMIX) if (key_inf.flags & CELL_AUDIO_EVENTFLAG_NOMIX)
{ {
@ -648,9 +647,9 @@ namespace audio
if (auto& g_audio = g_fxo->get<cell_audio>(); g_fxo->is_init<cell_audio>()) if (auto& g_audio = g_fxo->get<cell_audio>(); g_fxo->is_init<cell_audio>())
{ {
// Only reboot the audio renderer if a relevant setting changed // Only reboot the audio renderer if a relevant setting changed
const auto new_raw = get_raw_config(); const cell_audio_config::raw_config new_raw = get_raw_config();
if (const auto raw = g_audio.cfg.raw; if (const cell_audio_config::raw_config raw = g_audio.cfg.raw;
force_reset || force_reset ||
raw.audio_device != new_raw.audio_device || raw.audio_device != new_raw.audio_device ||
raw.desired_buffer_duration != new_raw.desired_buffer_duration || raw.desired_buffer_duration != new_raw.desired_buffer_duration ||
@ -735,7 +734,7 @@ void cell_audio_thread::operator()()
{ {
loop_count++; loop_count++;
const auto update_req = m_update_configuration.observe(); const audio_backend_update update_req = m_update_configuration.observe();
if (update_req != audio_backend_update::NONE) if (update_req != audio_backend_update::NONE)
{ {
cellAudio.warning("Updating cell_audio_thread configuration"); cellAudio.warning("Updating cell_audio_thread configuration");
@ -1057,7 +1056,7 @@ void cell_audio_thread::mix(float* out_buffer, s32 offset)
std::memset(out_buffer, 0, out_buffer_sz * sizeof(float)); std::memset(out_buffer, 0, out_buffer_sz * sizeof(float));
// mixing // mixing
for (auto& port : ports) for (audio_port& port : ports)
{ {
if (port.state != audio_port_state::started) continue; if (port.state != audio_port_state::started) continue;
@ -1070,7 +1069,7 @@ void cell_audio_thread::mix(float* out_buffer, s32 offset)
// spread port volume changes over 13ms // spread port volume changes over 13ms
auto step_volume = [master_volume, &m](audio_port& port) auto step_volume = [master_volume, &m](audio_port& port)
{ {
const auto param = port.level_set.load(); const audio_port::level_set_t param = port.level_set.load();
if (param.inc != 0.0f) if (param.inc != 0.0f)
{ {
@ -1180,11 +1179,11 @@ void cell_audio_thread::mix(float* out_buffer, s32 offset)
void cell_audio_thread::finish_port_volume_stepping() void cell_audio_thread::finish_port_volume_stepping()
{ {
// part of cellAudioSetPortLevel functionality // part of cellAudioSetPortLevel functionality
for (auto& port : ports) for (audio_port& port : ports)
{ {
if (port.state != audio_port_state::started) continue; if (port.state != audio_port_state::started) continue;
const auto param = port.level_set.load(); const audio_port::level_set_t param = port.level_set.load();
port.level = param.value; port.level = param.value;
port.level_set.compare_and_swap(param, { param.value, 0.0f }); port.level_set.compare_and_swap(param, { param.value, 0.0f });
} }
@ -1312,7 +1311,7 @@ error_code cellAudioPortOpen(vm::ptr<CellAudioPortParam> audioParam, vm::ptr<u32
} }
// Open audio port // Open audio port
const auto port = g_audio.open_port(); audio_port* port = g_audio.open_port();
if (!port) if (!port)
{ {
@ -1373,7 +1372,7 @@ error_code cellAudioGetPortConfig(u32 portNum, vm::ptr<CellAudioPortConfig> port
portConfig->readIndexAddr = port.index; portConfig->readIndexAddr = port.index;
switch (auto state = port.state.load()) switch (audio_port_state state = port.state.load())
{ {
case audio_port_state::closed: case audio_port_state::closed:
portConfig->status = CELL_AUDIO_STATUS_CLOSE; portConfig->status = CELL_AUDIO_STATUS_CLOSE;
@ -1414,7 +1413,7 @@ error_code cellAudioPortStart(u32 portNum)
return CELL_AUDIO_ERROR_PARAM; return CELL_AUDIO_ERROR_PARAM;
} }
switch (auto state = g_audio.ports[portNum].state.compare_and_swap(audio_port_state::opened, audio_port_state::started)) switch (audio_port_state state = g_audio.ports[portNum].state.compare_and_swap(audio_port_state::opened, audio_port_state::started))
{ {
case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_OPEN; case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_OPEN;
case audio_port_state::started: return CELL_AUDIO_ERROR_PORT_ALREADY_RUN; case audio_port_state::started: return CELL_AUDIO_ERROR_PORT_ALREADY_RUN;
@ -1441,7 +1440,7 @@ error_code cellAudioPortClose(u32 portNum)
return CELL_AUDIO_ERROR_PARAM; return CELL_AUDIO_ERROR_PARAM;
} }
switch (auto state = g_audio.ports[portNum].state.exchange(audio_port_state::closed)) switch (audio_port_state state = g_audio.ports[portNum].state.exchange(audio_port_state::closed))
{ {
case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_OPEN; case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_OPEN;
case audio_port_state::started: return CELL_OK; case audio_port_state::started: return CELL_OK;
@ -1468,7 +1467,7 @@ error_code cellAudioPortStop(u32 portNum)
return CELL_AUDIO_ERROR_PARAM; return CELL_AUDIO_ERROR_PARAM;
} }
switch (auto state = g_audio.ports[portNum].state.compare_and_swap(audio_port_state::started, audio_port_state::opened)) switch (audio_port_state state = g_audio.ports[portNum].state.compare_and_swap(audio_port_state::started, audio_port_state::opened))
{ {
case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_RUN; case audio_port_state::closed: return CELL_AUDIO_ERROR_PORT_NOT_RUN;
case audio_port_state::started: return CELL_OK; case audio_port_state::started: return CELL_OK;

View File

@ -389,6 +389,7 @@ public:
u32 key_count = 0; u32 key_count = 0;
u8 event_period = 0; u8 event_period = 0;
std::array<u64, MAX_AUDIO_EVENT_QUEUES> event_sources{};
struct key_info struct key_info
{ {