From ae408a1d41e33c3438d0ce30824d64054349e800 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 9 May 2015 15:52:06 +0200 Subject: [PATCH] Create video_poke get_frame_count function --- gfx/d3d/d3d.cpp | 13 ++++++++++--- gfx/drivers/ctr_gfx.c | 9 +++++++++ gfx/drivers/dispmanx_gfx.c | 35 ++++++++++++++++++++++------------- gfx/drivers/exynos_gfx.c | 35 ++++++++++++++++++++++------------- gfx/drivers/gl.c | 9 +++++++++ gfx/drivers/gx_gfx.c | 9 +++++++++ gfx/drivers/omap_gfx.c | 9 +++++++++ gfx/drivers/psp1_gfx.c | 9 +++++++++ gfx/drivers/sdl2_gfx.c | 9 +++++++++ gfx/drivers/sdl_gfx.c | 9 +++++++++ gfx/drivers/sunxi_gfx.c | 35 ++++++++++++++++++++++------------- gfx/video_driver.h | 1 + gfx/video_thread_wrapper.c | 13 ++++++++++--- 13 files changed, 150 insertions(+), 45 deletions(-) diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index f68e97e523..2f31970769 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -1950,9 +1950,7 @@ static void d3d_set_menu_texture_enable(void *data, { d3d_video_t *d3d = (d3d_video_t*)data; - if (!d3d) - return; - if (!d3d->menu) + if (!d3d || !d3d->menu) return; d3d->menu->enabled = state; @@ -1960,7 +1958,16 @@ static void d3d_set_menu_texture_enable(void *data, } #endif +static uint64_t d3d_get_frame_count(void *data) +{ + d3d_video_t *d3d = (d3d_video_t*)data; + if (!d3d) + return 0; + return d3d->frame_count; +} + static const video_poke_interface_t d3d_poke_interface = { + d3d_get_frame_count, NULL, NULL, NULL, /* get_video_output_size */ diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index f2c080a7c1..b25dcd2f80 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -501,8 +501,17 @@ static void ctr_viewport_info(void* data, struct video_viewport* vp) return; } +static uint64_t ctr_get_frame_count(void *data) +{ + ctr_video_t* ctr = (ctr_video_t*)data; + if (!ctr) + return 0; + return ctr->frame_count; +} + static const video_poke_interface_t ctr_poke_interface = { + ctr_get_frame_count, NULL, ctr_set_filtering, NULL, /* get_video_output_size */ diff --git a/gfx/drivers/dispmanx_gfx.c b/gfx/drivers/dispmanx_gfx.c index d1b55c4b9c..bf0c589436 100644 --- a/gfx/drivers/dispmanx_gfx.c +++ b/gfx/drivers/dispmanx_gfx.c @@ -589,22 +589,31 @@ static bool dispmanx_gfx_read_viewport(void *data, uint8_t *buffer) return true; } +static uint64_t dispmanx_gfx_get_frame_count(void *data) +{ + struct dispmanx_video *_dispvars = data; + if (!_dispvars) + return 0; + return _dispvars->frame_count; +} + static const video_poke_interface_t dispmanx_poke_interface = { - NULL, /* set_video_mode */ - NULL, /* set_filtering */ - NULL, /* get_video_output_size */ - NULL, /* get_video_output_prev */ - NULL, /* get_video_output_next */ - NULL, /* get_current_framebuffer */ - NULL, /* get_proc_address */ - NULL, /* dispmanx_set_aspect_ratio */ - NULL, /* dispmanx_apply_state_changes */ + dispmanx_get_frame_count, + NULL, /* set_video_mode */ + NULL, /* set_filtering */ + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + NULL, /* dispmanx_set_aspect_ratio */ + NULL, /* dispmanx_apply_state_changes */ #ifdef HAVE_MENU - dispmanx_set_texture_frame, - dispmanx_set_texture_enable, + dispmanx_set_texture_frame, + dispmanx_set_texture_enable, #endif - NULL, /* dispmanx_set_osd_msg */ - NULL /* dispmanx_show_mouse */ + NULL, /* dispmanx_set_osd_msg */ + NULL /* dispmanx_show_mouse */ }; static void dispmanx_gfx_get_poke_interface(void *data, diff --git a/gfx/drivers/exynos_gfx.c b/gfx/drivers/exynos_gfx.c index be133201cd..8df1eadf8a 100644 --- a/gfx/drivers/exynos_gfx.c +++ b/gfx/drivers/exynos_gfx.c @@ -1623,22 +1623,31 @@ static void exynos_show_mouse(void *data, bool state) (void)state; } +static uint64_t exynos_get_frame_count(void *data) +{ + struct exynos_video *vid = data; + if (!vid) + return 0; + return vid->frame_count; +} + static const video_poke_interface_t exynos_poke_interface = { - NULL, /* set_video_mode */ - NULL, /* set_filtering */ - NULL, /* get_video_output_size */ - NULL, /* get_video_output_prev */ - NULL, /* get_video_output_next */ - NULL, /* get_current_framebuffer */ - NULL, /* get_proc_address */ - exynos_set_aspect_ratio, - exynos_apply_state_changes, + exynos_get_frame_count, + NULL, /* set_video_mode */ + NULL, /* set_filtering */ + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + exynos_set_aspect_ratio, + exynos_apply_state_changes, #ifdef HAVE_MENU - exynos_set_texture_frame, - exynos_set_texture_enable, + exynos_set_texture_frame, + exynos_set_texture_enable, #endif - exynos_set_osd_msg, - exynos_show_mouse + exynos_set_osd_msg, + exynos_show_mouse }; static void exynos_gfx_get_poke_interface(void *data, diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 7d41f39dd1..c4a871fea3 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -3184,8 +3184,17 @@ static void gl_get_video_output_next(void *data) gfx_ctx_get_video_output_next(data); } +static uint64_t gl_get_frame_count(void *data) +{ + gl_t *gl = (gl_t*)data; + if (!gl) + return 0; + return gl->frame_count; +} + static const video_poke_interface_t gl_poke_interface = { + gl_get_frame_count, gl_set_video_mode, NULL, gl_get_video_output_size, diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index c646c5a905..8aa2fd1af8 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -1302,7 +1302,16 @@ static void gx_get_video_output_next(void *data) } } +static uint64_t gx_get_frame_count(void *data) +{ + gx_video_t *gx = (gx_video_t*)data; + if (!gx) + return 0; + return gx->frame_count; +} + static const video_poke_interface_t gx_poke_interface = { + gx_get_frame_count, gx_set_video_mode, NULL, gx_get_video_output_size, diff --git a/gfx/drivers/omap_gfx.c b/gfx/drivers/omap_gfx.c index 5062a29af4..79e7d2504c 100644 --- a/gfx/drivers/omap_gfx.c +++ b/gfx/drivers/omap_gfx.c @@ -1138,7 +1138,16 @@ static void omap_gfx_set_texture_enable(void *data, bool state, bool full_screen (void) full_screen; } +static uint64_t omap_gfx_get_frame_count(void *data) +{ + omap_video_t *vid = (omap_video_t*)data; + if (!vid) + return 0; + return vid->frame_count; +} + static const video_poke_interface_t omap_gfx_poke_interface = { + omap_gfx_get_frame_count, NULL, NULL, /* set_filtering */ NULL, /* get_video_output_size */ diff --git a/gfx/drivers/psp1_gfx.c b/gfx/drivers/psp1_gfx.c index 7db644b9ba..7909efbfac 100644 --- a/gfx/drivers/psp1_gfx.c +++ b/gfx/drivers/psp1_gfx.c @@ -840,7 +840,16 @@ static void psp_viewport_info(void *data, struct video_viewport *vp) *vp = psp->vp; } +static uint64_t psp_get_frame_count(void *data) +{ + psp1_video_t *psp = (psp1_video_t*)data; + if (!psp) + return 0; + return psp->frame_count; +} + static const video_poke_interface_t psp_poke_interface = { + psp_get_frame_count, NULL, psp_set_filtering, NULL, /* get_video_output_size */ diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index 03f6e6b48d..ec8fdc47f9 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -719,7 +719,16 @@ void sdl2_grab_mouse_toggle(void *data) SDL_SetWindowGrab(vid->window, SDL_GetWindowGrab(vid->window)); } +static uint64_t sdl2_get_frame_count(void *data) +{ + sdl2_video_t *vid = (sdl2_video_t*)data; + if (!vid) + return 0; + return vid->frame_count; +} + static video_poke_interface_t sdl2_video_poke_interface = { + sdl2_get_frame_count, NULL, sdl2_poke_set_filtering, NULL, /* get_video_output_size */ diff --git a/gfx/drivers/sdl_gfx.c b/gfx/drivers/sdl_gfx.c index e1054efc20..55d0616434 100644 --- a/gfx/drivers/sdl_gfx.c +++ b/gfx/drivers/sdl_gfx.c @@ -515,7 +515,16 @@ static void sdl_grab_mouse_toggle(void *data) SDL_WM_GrabInput(mode == SDL_GRAB_ON ? SDL_GRAB_OFF : SDL_GRAB_ON); } +static void sdl_get_frame_count(void *data) +{ + sdl_video_t *vid = (sdl_video_t*)data; + if (!vid) + return 0; + return vid->frame_count; +} + static const video_poke_interface_t sdl_poke_interface = { + sdl_get_frame_count, NULL, sdl_set_filtering, NULL, /* get_video_output_size */ diff --git a/gfx/drivers/sunxi_gfx.c b/gfx/drivers/sunxi_gfx.c index e0cca39bc7..7ac25fe7b6 100644 --- a/gfx/drivers/sunxi_gfx.c +++ b/gfx/drivers/sunxi_gfx.c @@ -932,22 +932,31 @@ static void sunxi_set_texture_frame(void *data, const void *frame, bool rgb32, _dispvars->pages[0].offset, width, height, _dispvars->sunxi_disp->xres); } +static uint64_t sunxi_get_frame_count(void *data) +{ + struct sunxi_video *_dispvars = (struct sunxi_video*)data; + if (!_dispvars) + return 0; + return _dispvars->frame_count; +} + static const video_poke_interface_t sunxi_poke_interface = { - NULL, /* set_video_mode */ - NULL, /* set_filtering */ - NULL, /* get_video_output_size */ - NULL, /* get_video_output_prev */ - NULL, /* get_video_output_next */ - NULL, /* get_current_framebuffer */ - NULL, /* get_proc_address */ - NULL, /* sunxi_set_aspect_ratio */ - NULL, /* sunxi_apply_state_changes */ + sunxi_get_frame_count, + NULL, /* set_video_mode */ + NULL, /* set_filtering */ + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + NULL, /* sunxi_set_aspect_ratio */ + NULL, /* sunxi_apply_state_changes */ #ifdef HAVE_MENU - sunxi_set_texture_frame, - sunxi_set_texture_enable, + sunxi_set_texture_frame, + sunxi_set_texture_enable, #endif - NULL, /* sunxi_set_osd_msg */ - NULL /* sunxi_show_mouse */ + NULL, /* sunxi_set_osd_msg */ + NULL /* sunxi_show_mouse */ }; static void sunxi_gfx_get_poke_interface(void *data, diff --git a/gfx/video_driver.h b/gfx/video_driver.h index af7bd8c0db..f9ed7c87cc 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -100,6 +100,7 @@ enum texture_filter_type typedef struct video_poke_interface { + uint64_t (*get_frame_count)(void *data); void (*set_video_mode)(void *data, unsigned width, unsigned height, bool fullscreen); void (*set_filtering)(void *data, unsigned index, bool smooth); void (*get_video_output_size)(void *data, unsigned *width, unsigned *height); diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 69b928928b..9b5f032a5c 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -948,14 +948,21 @@ static void thread_apply_state_changes(void *data) static struct video_shader *thread_get_current_shader(void *data) { thread_video_t *thr = (thread_video_t*)data; - if (!thr) - return NULL; - if (!thr->poke) + if (!thr || !thr->poke) return NULL; return thr->poke->get_current_shader(thr->driver_data); } +static uint64_t thread_get_frame_count(void *data) +{ + thread_video_t *thr = (thread_video_t*)data; + if (!thr || !thr->poke) + return NULL; + return thr->poke->get_frame_count(thr->driver_data); +} + static const video_poke_interface_t thread_poke = { + thread_get_frame_count, thread_set_video_mode, thread_set_filtering, thread_get_video_output_size,