mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-14 06:40:53 +00:00
cellAudio: re-use event_sources array
This commit is contained in:
parent
f2b51668b4
commit
69ecf8aea7
@ -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;
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user