mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-24 11:43:05 +01:00
Fixed crash on using NUll Audio Output, fixed possible crash in OpenAL exit and minor changes in cellAudioEventQueue functions.
This commit is contained in:
parent
50d49141b0
commit
b0f6b03c38
@ -44,6 +44,8 @@ void OpenALThread::Init()
|
||||
|
||||
void OpenALThread::Quit()
|
||||
{
|
||||
m_context = alcGetCurrentContext();
|
||||
m_device = alcGetContextsDevice(m_context);
|
||||
alcMakeContextCurrent(nullptr);
|
||||
alcDestroyContext(m_context);
|
||||
alcCloseDevice(m_device);
|
||||
|
@ -139,7 +139,7 @@ struct AudioConfig //custom structure
|
||||
: m_is_audio_initialized(false)
|
||||
, m_is_audio_finalized(false)
|
||||
, m_port_in_use(0)
|
||||
, event_key(0)
|
||||
, event_key(0x80004d494f323221)
|
||||
, counter(0)
|
||||
{
|
||||
memset(&m_ports, 0, sizeof(AudioPortConfig) * AUDIO_PORT_COUNT);
|
||||
|
@ -60,7 +60,7 @@ int cellAudioInit()
|
||||
memset(buffer2, 0, sizeof(buffer2));
|
||||
memset(oal_buffer.get(), 0, oal_buffer_size * sizeof(u16));
|
||||
|
||||
if(Ini.AudioOutMode.GetValue() == 1)
|
||||
if(m_audio_out)
|
||||
{
|
||||
m_audio_out->Init();
|
||||
m_audio_out->Open(oal_buffer.get(), oal_buffer_size*sizeof(u16));
|
||||
@ -151,7 +151,10 @@ int cellAudioInit()
|
||||
|
||||
if(oal_buffer_offset >= oal_buffer_size)
|
||||
{
|
||||
m_audio_out->AddData(oal_buffer.get(), oal_buffer_offset * sizeof(u16));
|
||||
if(m_audio_out)
|
||||
{
|
||||
m_audio_out->AddData(oal_buffer.get(), oal_buffer_offset * sizeof(u16));
|
||||
}
|
||||
|
||||
oal_buffer_offset = 0;
|
||||
}
|
||||
@ -438,21 +441,22 @@ int cellAudioCreateNotifyEventQueue(mem32_t id, mem64_t key)
|
||||
{
|
||||
cellAudio.Warning("cellAudioCreateNotifyEventQueue(id_addr=0x%x, key_addr=0x%x)", id.GetAddr(), key.GetAddr());
|
||||
|
||||
if (Emu.GetEventManager().CheckKey(0x80004d494f323221))
|
||||
while (Emu.GetEventManager().CheckKey(m_config.event_key))
|
||||
{
|
||||
return CELL_AUDIO_ERROR_EVENT_QUEUE;
|
||||
m_config.event_key++; // experimental
|
||||
//return CELL_AUDIO_ERROR_EVENT_QUEUE;
|
||||
}
|
||||
|
||||
EventQueue* eq = new EventQueue(SYS_SYNC_FIFO, SYS_PPU_QUEUE, 0x80004d494f323221, 0x80004d494f323221, 32);
|
||||
EventQueue* eq = new EventQueue(SYS_SYNC_FIFO, SYS_PPU_QUEUE, m_config.event_key, m_config.event_key, 32);
|
||||
|
||||
if (!Emu.GetEventManager().RegisterKey(eq, 0x80004d494f323221))
|
||||
if (!Emu.GetEventManager().RegisterKey(eq, m_config.event_key))
|
||||
{
|
||||
delete eq;
|
||||
return CELL_AUDIO_ERROR_EVENT_QUEUE;
|
||||
}
|
||||
|
||||
id = cellAudio.GetNewId(eq);
|
||||
key = 0x80004d494f323221;
|
||||
key = m_config.event_key;
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
@ -467,7 +471,7 @@ int cellAudioSetNotifyEventQueue(u64 key)
|
||||
{
|
||||
cellAudio.Warning("cellAudioSetNotifyEventQueue(key=0x%llx)", key);
|
||||
|
||||
m_config.event_key = key;
|
||||
//m_config.event_key = key;
|
||||
|
||||
/*EventQueue* eq;
|
||||
if (!Emu.GetEventManager().GetEventQueue(key, eq))
|
||||
@ -496,7 +500,7 @@ int cellAudioRemoveNotifyEventQueue(u64 key)
|
||||
return CELL_AUDIO_ERROR_PARAM;
|
||||
}
|
||||
|
||||
m_config.event_key = 0;
|
||||
m_config.event_key = 0x80004d494f323221;
|
||||
|
||||
// TODO: disconnect port
|
||||
|
||||
|
@ -416,7 +416,7 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event))
|
||||
chbox_hle_exitonstop->SetValue(Ini.HLEExitOnStop.GetValue());
|
||||
|
||||
chbox_audio_dump->Enable(Emu.IsStopped());
|
||||
cbox_audio_out->Enable(Emu.IsStopped());
|
||||
//cbox_audio_out->Enable(Emu.IsStopped());
|
||||
chbox_hle_logging->Enable(Emu.IsStopped());
|
||||
|
||||
cbox_cpu_decoder->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0);
|
||||
|
Loading…
Reference in New Issue
Block a user