diff options
| author | 2024-12-10 15:04:31 -0500 | |
|---|---|---|
| committer | 2024-12-10 15:04:31 -0500 | |
| commit | 49e01c8cde0c212abd3c67091102cfd7797c1e07 (patch) | |
| tree | 7195aa32cfc034566aac5a7c8789c1b394af6ec6 /src/screen | |
| parent | 907766e7d59af88d125aef603fa9c61f67abd328 (diff) | |
| download | camu-49e01c8cde0c212abd3c67091102cfd7797c1e07.tar.gz camu-49e01c8cde0c212abd3c67091102cfd7797c1e07.tar.bz2 camu-49e01c8cde0c212abd3c67091102cfd7797c1e07.zip | |
Improve screen and mixer deinitialization
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/screen')
| -rw-r--r-- | src/screen/screen.c | 17 | ||||
| -rw-r--r-- | src/screen/screen.h | 6 |
2 files changed, 16 insertions, 7 deletions
diff --git a/src/screen/screen.c b/src/screen/screen.c index 30d6860..d5f6c78 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -184,9 +184,11 @@ static bool key_callback(void *userdata, u8 state, u8 button) case 0x12: // e scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, NULL); break; +#ifdef CAMU_SCREEN_DEBUG_KEY case 0x19: // p scr->callback(scr->userdata, CAMU_SCREEN_DEBUG, NULL); break; +#endif case 0x13: { // r struct camu_view *view = get_view_from_mouse_pos(scr); if (view) { @@ -293,7 +295,7 @@ bool camu_screen_init(struct camu_screen *scr, void *context) static aki_thread_result AKI_THREADCALL event_thread(void *userdata) { struct camu_screen *scr = (struct camu_screen *)userdata; - while (scr->window->poll(scr->window, true) && al_atomic_load(s32)(&scr->state, AL_ATOMIC_RELAXED) != CAMU_SCREEN_CLOSED ) { + while (scr->window->poll(scr->window, true) && al_atomic_load(s32)(&scr->state, AL_ATOMIC_RELAXED) != CAMU_SCREEN_STOPPED) { scr->window->process_events(scr->window); } return 0; @@ -499,7 +501,9 @@ bool camu_screen_poll(struct camu_screen *scr, bool block) bool camu_screen_tick(struct camu_screen *scr) { - bool paused = al_atomic_load(s32)(&scr->state, AL_ATOMIC_RELAXED) == CAMU_SCREEN_PAUSED; + s32 state = al_atomic_load(s32)(&scr->state, AL_ATOMIC_RELAXED); + al_assert(state != CAMU_SCREEN_STOPPED); + bool paused = state == CAMU_SCREEN_PAUSED; return camu_screen_poll(scr, paused) || !paused; } @@ -515,13 +519,14 @@ void camu_screen_wake(struct camu_screen *scr) void camu_screen_clear(struct camu_screen *scr) { #ifdef CAMU_SCREEN_THREADED - run_queue_internal(scr); + aki_mutex_lock(&scr->mutex); struct camu_screen_video *video; al_array_foreach_ptr(scr->videos, i, video) { - al_atomic_store(u8)(&video->buf->ref, 0, AL_ATOMIC_RELAXED); + struct camu_video_buffer *buf = video->buf; + al_atomic_store(u8)(&buf->ref, 0, AL_ATOMIC_RELAXED); } + aki_mutex_unlock(&scr->mutex); #endif - scr->videos.size = 0; } void camu_screen_close(struct camu_screen *scr) @@ -532,7 +537,7 @@ void camu_screen_close(struct camu_screen *scr) aki_mutex_destroy(&scr->mutex); #endif al_array_free(scr->videos); - al_atomic_store(s32)(&scr->state, CAMU_SCREEN_CLOSED, AL_ATOMIC_RELAXED); + al_atomic_store(s32)(&scr->state, CAMU_SCREEN_STOPPED, AL_ATOMIC_RELAXED); #ifdef STELA_EVENT_BUFFER aki_thread_join(&scr->thread); #endif diff --git a/src/screen/screen.h b/src/screen/screen.h index 9467d35..36d9075 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -12,6 +12,8 @@ #include "view.h" +#define CAMU_SCREEN_DEBUG_KEY + #define CAMU_SCREEN_WIDTH 700 #define CAMU_SCREEN_HEIGHT 700 @@ -24,7 +26,7 @@ enum { enum { CAMU_SCREEN_PAUSED = 0, CAMU_SCREEN_PLAYING, - CAMU_SCREEN_CLOSED + CAMU_SCREEN_STOPPED }; enum { @@ -35,7 +37,9 @@ enum { CAMU_SCREEN_SEEK, CAMU_SCREEN_RESEEK, CAMU_SCREEN_VOLUME, +#ifdef CAMU_SCREEN_DEBUG_KEY CAMU_SCREEN_DEBUG, +#endif CAMU_SCREEN_CLOSE }; |