mirror of
https://github.com/libretro/RetroArch
synced 2025-03-01 07:13:35 +00:00
Fix freeze audio after restart core
This commit is contained in:
parent
9508936ac1
commit
6507b86973
@ -27,7 +27,8 @@ typedef struct ps2_audio
|
|||||||
{
|
{
|
||||||
fifo_buffer_t* buffer;
|
fifo_buffer_t* buffer;
|
||||||
bool nonblocking;
|
bool nonblocking;
|
||||||
volatile bool running;
|
bool running;
|
||||||
|
bool audio_stopped;
|
||||||
int worker_thread;
|
int worker_thread;
|
||||||
int lock;
|
int lock;
|
||||||
int cond_lock;
|
int cond_lock;
|
||||||
@ -50,8 +51,10 @@ static void audioMainLoop(void *data)
|
|||||||
|
|
||||||
while (ps2->running)
|
while (ps2->running)
|
||||||
{
|
{
|
||||||
|
if (ps2->audio_stopped) {
|
||||||
|
audsrv_stop_audio();
|
||||||
|
} else {
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
WaitSema(ps2->lock);
|
WaitSema(ps2->lock);
|
||||||
size = MIN(fifo_read_avail(ps2->buffer), sizeof(out_tmp));
|
size = MIN(fifo_read_avail(ps2->buffer), sizeof(out_tmp));
|
||||||
fifo_read(ps2->buffer, out_tmp, size);
|
fifo_read(ps2->buffer, out_tmp, size);
|
||||||
@ -61,8 +64,10 @@ static void audioMainLoop(void *data)
|
|||||||
audsrv_wait_audio(size);
|
audsrv_wait_audio(size);
|
||||||
audsrv_play_audio(out_tmp, size);
|
audsrv_play_audio(out_tmp, size);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
audsrv_stop_audio();
|
audsrv_stop_audio();
|
||||||
|
ps2->worker_thread = 0;
|
||||||
ExitDeleteThread();
|
ExitDeleteThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +180,10 @@ static void ps2_audio_free(void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
audsrv_stop_audio();
|
||||||
fifo_free(ps2->buffer);
|
fifo_free(ps2->buffer);
|
||||||
|
backup_ps2 = NULL;
|
||||||
free(ps2);
|
free(ps2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +228,7 @@ static bool ps2_audio_stop(void *data)
|
|||||||
|
|
||||||
if (ps2)
|
if (ps2)
|
||||||
{
|
{
|
||||||
audioStopNDeleteThread(ps2);
|
ps2->audio_stopped = true;
|
||||||
audsrv_stop_audio();
|
audsrv_stop_audio();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,6 +244,8 @@ static bool ps2_audio_start(void *data, bool is_shutdown)
|
|||||||
{
|
{
|
||||||
if (!ps2->running && !ps2->worker_thread)
|
if (!ps2->running && !ps2->worker_thread)
|
||||||
audioCreateThread(ps2);
|
audioCreateThread(ps2);
|
||||||
|
|
||||||
|
ps2->audio_stopped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user