From ba09254b38ee998c1ef78d5115d8a847c15411d5 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 12 Feb 2021 23:19:44 +0100 Subject: [PATCH] refilter_on_resize --- app/src/frame_texture.c | 13 +++++++++++++ app/src/frame_texture.h | 3 +++ app/src/screen.c | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/app/src/frame_texture.c b/app/src/frame_texture.c index b7faabce..24f697ff 100644 --- a/app/src/frame_texture.c +++ b/app/src/frame_texture.c @@ -135,6 +135,7 @@ screen_generate_resized_frame(struct sc_frame_texture *ftex, } const AVFrame *input = ftex->decoded_frame; + assert(input); int flags = to_sws_filter(ftex->scale_filter); struct SwsContext *ctx = @@ -232,3 +233,15 @@ sc_frame_texture_update(struct sc_frame_texture *ftex, const AVFrame *frame, } return sc_frame_texture_update_direct(ftex, frame); } + +bool +sc_frame_texture_resize(struct sc_frame_texture *ftex, + struct size target_size) { + if (is_swscale_enabled(ftex->scale_filter)) { + return sc_frame_texture_update_swscale(ftex, ftex->decoded_frame, + target_size); + } + + // Nothing to do + return true; +} diff --git a/app/src/frame_texture.h b/app/src/frame_texture.h index 1c54dcdb..4bdc0674 100644 --- a/app/src/frame_texture.h +++ b/app/src/frame_texture.h @@ -38,4 +38,7 @@ bool sc_frame_texture_update(struct sc_frame_texture *ftex, const AVFrame *frame, struct size target_size); +bool +sc_frame_texture_resize(struct sc_frame_texture *ftex, struct size target_size); + #endif diff --git a/app/src/screen.c b/app/src/screen.c index ebbfe7df..14299a8b 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -377,6 +377,11 @@ void screen_render(struct screen *screen, bool update_content_rect) { if (update_content_rect) { screen_update_content_rect(screen); + struct size rect_size = {screen->rect.w, screen->rect.h}; + if (!sc_frame_texture_resize(&screen->ftex, rect_size)) { + // FIXME return error + LOGC("oops"); + } } struct sc_frame_texture *ftex = &screen->ftex;