From 1224a43bbde9ef2297c7ee638b1928a07488cc3d Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 3 Mar 2025 12:53:14 -0500 Subject: Fix vcr memory leak, subtitle upload/render sync - Some sink behavior fixes. - Fix clock sync when seeking. - Add relative seek bind. Signed-off-by: Andrew Opalach --- src/screen/screen.c | 76 +++++++++++++++++++++++++++++++++-------------------- src/screen/screen.h | 2 ++ 2 files changed, 49 insertions(+), 29 deletions(-) (limited to 'src/screen') diff --git a/src/screen/screen.c b/src/screen/screen.c index eb68278..d0926da 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -169,58 +169,68 @@ static bool scroll_callback(void *userdata, f64 y) return false; } -static bool key_callback(void *userdata, u8 state, u8 button) +static bool key_callback(void *userdata, u8 state, u16 button) { struct camu_screen *scr = (struct camu_screen *)userdata; switch (state) { case STELA_BUTTON_PRESSED: - //al_printf("%x\n", button); switch (button) { - case 0x2a: // shift + case STELA_KEY_LEFT_SHIFT: + case STELA_KEY_RIGHT_SHIFT: scr->flags |= CAMU_SCREEN_MOD_SHIFT; break; - case 0x1d: // control + case STELA_KEY_LEFT_CONTROL: + case STELA_KEY_RIGHT_CONTROL: scr->flags |= CAMU_SCREEN_MOD_CONTROL; break; - case 0x10: // q + case STELA_KEY_Q: scr->callback(scr->userdata, CAMU_SCREEN_CLOSE, NULL); break; - case 0x31: // n - case 0x20: // d - case 0x6a: // right arrow - case 0x4d: // right arrow (wine?) + case STELA_KEY_RIGHT: + if (scr->flags & CAMU_SCREEN_MOD_CONTROL) { + f64 plus_ten = 10.0; + scr->callback(scr->userdata, CAMU_SCREEN_RELATIVE_SEEK, &plus_ten); + break; + } + // fallthrough + case STELA_KEY_D: + case STELA_KEY_N: scr->callback(scr->userdata, CAMU_SCREEN_NEXT, NULL); break; - case 0x30: // b - case 0x1e: // a - case 0x69: // left arrow - case 0x4b: // left arrow (wine?) + case STELA_KEY_LEFT: + if (scr->flags & CAMU_SCREEN_MOD_CONTROL) { + f64 minus_ten = -10.0; + scr->callback(scr->userdata, CAMU_SCREEN_RELATIVE_SEEK, &minus_ten); + break; + } + // fallthrough + case STELA_KEY_B: + case STELA_KEY_A: scr->callback(scr->userdata, CAMU_SCREEN_PREVIOUS, NULL); break; - case 0x39: // spacebar + case STELA_KEY_SPACE: scr->callback(scr->userdata, CAMU_SCREEN_TOGGLE_PAUSE, NULL); break; - case 0x1f: // s + case STELA_KEY_S: scr->callback(scr->userdata, CAMU_SCREEN_SHUFFLE, NULL); break; - case 0x12: // e + case STELA_KEY_E: scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, NULL); break; - case 0x2f: { // v + case STELA_KEY_V: { f32 volume = 1.0; scr->callback(scr->userdata, CAMU_SCREEN_SET_VOLUME, &volume); break; - case 0xb: { + } + case STELA_KEY_0: scr->callback(scr->userdata, CAMU_SCREEN_STATUS, NULL); break; - } - } #ifdef CAMU_SCREEN_DEBUG_KEY - case 0x19: // p + case STELA_KEY_P: scr->callback(scr->userdata, CAMU_SCREEN_DEBUG, NULL); break; #endif - case 0x13: { // r + case STELA_KEY_R: { struct camu_view *view = get_view_from_mouse_pos(scr); if (view) { if (scr->flags & CAMU_SCREEN_MOD_SHIFT) { @@ -263,7 +273,7 @@ static bool key_callback(void *userdata, u8 state, u8 button) } break; } - case 0xd: { // + + case STELA_KEY_EQUAL: { struct camu_view *view = get_view_from_mouse_pos(scr); if (view) { camu_view_zoom_simple(view, scr->width, scr->height, scr->width / 2.0, scr->height / 2.0, 0.05); @@ -271,7 +281,7 @@ static bool key_callback(void *userdata, u8 state, u8 button) } break; } - case 0xc: { // - + case STELA_KEY_MINUS: { struct camu_view *view = get_view_from_mouse_pos(scr); if (view) { camu_view_zoom_simple(view, scr->width, scr->height, scr->width / 2.0, scr->height / 2.0, -0.05); @@ -285,10 +295,12 @@ static bool key_callback(void *userdata, u8 state, u8 button) break; case STELA_BUTTON_RELEASED: switch (button) { - case 0x2a: // shift + case STELA_KEY_LEFT_SHIFT: + case STELA_KEY_RIGHT_SHIFT: scr->flags &= ~CAMU_SCREEN_MOD_SHIFT; break; - case 0x1d: // control + case STELA_KEY_LEFT_CONTROL: + case STELA_KEY_RIGHT_CONTROL: scr->flags &= ~CAMU_SCREEN_MOD_CONTROL; break; } @@ -298,14 +310,19 @@ static bool key_callback(void *userdata, u8 state, u8 button) return false; } -static void key_immediate_callback(void *userdata, u8 state, u8 button) +static void key_immediate_callback(void *userdata, u8 state, u16 button) { struct camu_screen *scr = (struct camu_screen *)userdata; switch (state) { case STELA_BUTTON_PRESSED: switch (button) { - case 0x21: { // f - scr->window->toggle_fullscreen(scr->window); + case STELA_KEY_F: { + scr->fullscreen = !scr->fullscreen; + if (scr->renderer->set_fullscreen) { + scr->renderer->set_fullscreen(scr->renderer, scr->fullscreen); + } else { + scr->window->toggle_fullscreen(scr->window); + } break; } } @@ -364,6 +381,7 @@ bool camu_screen_create_window(struct camu_screen *scr, const char *name) } scr->width = scr->window->width; scr->height = scr->window->height; + scr->fullscreen = false; #ifdef STELA_EVENT_BUFFER nn_thread_create(&scr->thread, event_thread, scr); #endif diff --git a/src/screen/screen.h b/src/screen/screen.h index 2050d78..4b2e4c0 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -36,6 +36,7 @@ enum { CAMU_SCREEN_SHUFFLE, CAMU_SCREEN_TOGGLE_PAUSE, CAMU_SCREEN_SEEK, + CAMU_SCREEN_RELATIVE_SEEK, CAMU_SCREEN_RESEEK, CAMU_SCREEN_SET_VOLUME, CAMU_SCREEN_OFFSET_VOLUME, @@ -62,6 +63,7 @@ struct camu_screen { u32 flags; u32 width; u32 height; + bool fullscreen; u64 last_click_ts; f64 last_mouse_y; f64 last_mouse_x; -- cgit v1.2.3-101-g0448