Create video_driver_ctx_get_ptr

This commit is contained in:
twinaphex 2015-04-11 06:09:24 +02:00
parent 128fbce403
commit 5112a6883e
1 changed files with 50 additions and 47 deletions

View File

@ -230,6 +230,14 @@ static const video_poke_interface_t *video_driver_get_poke_ptr(void)
return driver->video_poke; return driver->video_poke;
} }
static const video_driver_t *video_driver_ctx_get_ptr(void)
{
driver_t *driver = driver_get_ptr();
if (!driver)
return NULL;
return driver->video;
}
/** /**
* video_driver_get_current_framebuffer: * video_driver_get_current_framebuffer:
* *
@ -263,18 +271,17 @@ retro_proc_address_t video_driver_get_proc_address(const char *sym)
bool video_driver_is_alive(void) bool video_driver_is_alive(void)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
/* Possible race issue, return true */ const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver->video && driver->video_data)
return driver->video->alive(driver->video_data); return video->alive(driver->video_data);
return false;
} }
bool video_driver_has_focus(void) bool video_driver_has_focus(void)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
if (driver->video && driver->video_data) const video_driver_t *video = video_driver_ctx_get_ptr();
return driver->video->focus(driver->video_data);
return false; return video->focus(driver->video_data);
} }
bool video_driver_set_shader(enum rarch_shader_type type, bool video_driver_set_shader(enum rarch_shader_type type,
@ -585,28 +592,29 @@ void init_video(void)
bool video_driver_has_windowed(void) bool video_driver_has_windowed(void)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (!driver || !driver->video) return video->has_windowed(driver->video_data);
return false;
return driver->video->has_windowed(driver->video_data);
} }
void video_driver_set_nonblock_state(bool toggle) void video_driver_set_nonblock_state(bool toggle)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver && driver->video) if (video->set_nonblock_state)
driver->video->set_nonblock_state(driver->video_data, toggle); video->set_nonblock_state(driver->video_data, toggle);
} }
bool video_driver_set_rotation(unsigned rotation) bool video_driver_set_rotation(unsigned rotation)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver && driver->video) if (video->set_rotation)
{ {
driver->video->set_rotation(driver->video_data, rotation); video->set_rotation(driver->video_data, rotation);
return true; return true;
} }
return false; return false;
@ -692,14 +700,12 @@ void video_driver_set_texture_frame(const void *frame, bool rgb32,
bool video_driver_viewport_info(struct video_viewport *vp) bool video_driver_viewport_info(struct video_viewport *vp)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver if (video->viewport_info)
&& driver->video_data
&& driver->video
&& driver->video->viewport_info)
{ {
driver->video->viewport_info(driver->video_data, vp); video->viewport_info(driver->video_data, vp);
return true; return true;
} }
return false; return false;
@ -707,35 +713,32 @@ bool video_driver_viewport_info(struct video_viewport *vp)
bool video_driver_read_viewport(uint8_t *buffer) bool video_driver_read_viewport(uint8_t *buffer)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver if (video->read_viewport)
&& driver->video return video->read_viewport(driver->video_data,
&& driver->video->read_viewport)
return driver->video->read_viewport(driver->video_data,
buffer); buffer);
return false; return false;
} }
bool video_driver_focus(void) bool video_driver_focus(void)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver && driver->video) return video->focus(driver->video_data);
return driver->video->focus(driver->video_data);
return false;
} }
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
bool video_driver_overlay_interface(const video_overlay_interface_t **iface) bool video_driver_overlay_interface(const video_overlay_interface_t **iface)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver if (video->overlay_interface)
&& driver->video
&& driver->video->overlay_interface)
{ {
driver->video->overlay_interface(driver->video_data, iface); video->overlay_interface(driver->video_data, iface);
return true; return true;
} }
return false; return false;
@ -745,12 +748,11 @@ bool video_driver_overlay_interface(const video_overlay_interface_t **iface)
void * video_driver_read_frame_raw(unsigned *width, void * video_driver_read_frame_raw(unsigned *width,
unsigned *height, size_t *pitch) unsigned *height, size_t *pitch)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver if (video->read_frame_raw)
&& driver->video return video->read_frame_raw(driver->video_data, width,
&& driver->video->read_frame_raw)
return driver->video->read_frame_raw(driver->video_data, width,
height, pitch); height, pitch);
return NULL; return NULL;
} }
@ -794,11 +796,12 @@ void video_driver_get_video_output_prev(void)
bool video_driver_frame(const void *frame, unsigned width, bool video_driver_frame(const void *frame, unsigned width,
unsigned height, unsigned pitch, const char *msg) unsigned height, unsigned pitch, const char *msg)
{ {
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
runloop_t *runloop = rarch_main_get_ptr(); const video_driver_t *video = video_driver_ctx_get_ptr();
if (driver && driver->video runloop_t *runloop = rarch_main_get_ptr();
&& driver->video->frame(driver->video_data,
frame, width, height, pitch, msg)) if (video->frame(driver->video_data, frame,
width, height, pitch, msg))
{ {
runloop->frames.video.count++; runloop->frames.video.count++;
return true; return true;