mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-27 10:10:57 +00:00
Aww yeah :3
This commit is contained in:
parent
54bc0a8d96
commit
612270ec9b
@ -193,15 +193,33 @@ static void deinit_thread(ffemu_t *handle)
|
|||||||
|
|
||||||
SDL_CondSignal(handle->cond);
|
SDL_CondSignal(handle->cond);
|
||||||
SDL_WaitThread(handle->thread, NULL);
|
SDL_WaitThread(handle->thread, NULL);
|
||||||
handle->thread = NULL;
|
|
||||||
|
|
||||||
SDL_DestroyMutex(handle->lock);
|
SDL_DestroyMutex(handle->lock);
|
||||||
SDL_DestroyMutex(handle->cond_lock);
|
SDL_DestroyMutex(handle->cond_lock);
|
||||||
SDL_DestroyCond(handle->cond);
|
SDL_DestroyCond(handle->cond);
|
||||||
|
|
||||||
|
handle->thread = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void deinit_thread_buf(ffemu_t *handle)
|
||||||
|
{
|
||||||
|
if (handle->audio_fifo)
|
||||||
|
{
|
||||||
fifo_free(handle->audio_fifo);
|
fifo_free(handle->audio_fifo);
|
||||||
|
handle->audio_fifo = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handle->attr_fifo)
|
||||||
|
{
|
||||||
fifo_free(handle->attr_fifo);
|
fifo_free(handle->attr_fifo);
|
||||||
|
handle->attr_fifo = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handle->video_fifo)
|
||||||
|
{
|
||||||
fifo_free(handle->video_fifo);
|
fifo_free(handle->video_fifo);
|
||||||
|
handle->video_fifo = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,6 +258,7 @@ void ffemu_free(ffemu_t *handle)
|
|||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
deinit_thread(handle);
|
deinit_thread(handle);
|
||||||
|
deinit_thread_buf(handle);
|
||||||
|
|
||||||
if (handle->audio.codec)
|
if (handle->audio.codec)
|
||||||
{
|
{
|
||||||
@ -430,6 +449,33 @@ int ffemu_finalize(ffemu_t *handle)
|
|||||||
{
|
{
|
||||||
deinit_thread(handle);
|
deinit_thread(handle);
|
||||||
|
|
||||||
|
// Push out frames still stuck in queue.
|
||||||
|
uint16_t video_buf[512 * 448];
|
||||||
|
int16_t audio_buf[128 * handle->params.channels];
|
||||||
|
struct ffemu_video_data attr_buf;
|
||||||
|
|
||||||
|
while (fifo_read_avail(handle->attr_fifo) >= sizeof(attr_buf))
|
||||||
|
{
|
||||||
|
fifo_read(handle->attr_fifo, &attr_buf, sizeof(attr_buf));
|
||||||
|
fifo_read(handle->video_fifo, video_buf, attr_buf.height * attr_buf.pitch);
|
||||||
|
attr_buf.data = video_buf;
|
||||||
|
ffemu_push_video_thread(handle, &attr_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fifo_read_avail(handle->audio_fifo) >= sizeof(audio_buf))
|
||||||
|
{
|
||||||
|
fifo_read(handle->audio_fifo, audio_buf, sizeof(audio_buf));
|
||||||
|
|
||||||
|
struct ffemu_audio_data aud = {
|
||||||
|
.frames = 128,
|
||||||
|
.data = audio_buf
|
||||||
|
};
|
||||||
|
|
||||||
|
ffemu_push_audio_thread(handle, &aud);
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit_thread_buf(handle);
|
||||||
|
|
||||||
// Push out delayed frames. (MPEG codecs)
|
// Push out delayed frames. (MPEG codecs)
|
||||||
AVPacket pkt;
|
AVPacket pkt;
|
||||||
av_init_packet(&pkt);
|
av_init_packet(&pkt);
|
||||||
|
Loading…
Reference in New Issue
Block a user