diff options
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/old_vo_defines.h | 1 | ||||
-rw-r--r-- | libvo/video_out.c | 17 | ||||
-rw-r--r-- | libvo/video_out.h | 4 | ||||
-rw-r--r-- | libvo/vo_xv.c | 2 |
4 files changed, 17 insertions, 7 deletions
diff --git a/libvo/old_vo_defines.h b/libvo/old_vo_defines.h index 285758038e..ef52e52256 100644 --- a/libvo/old_vo_defines.h +++ b/libvo/old_vo_defines.h @@ -9,5 +9,6 @@ #define IS_OLD_VO 1 #define vo_ontop global_vo->opts->vo_ontop +#define vo_config_count global_vo->config_count #endif diff --git a/libvo/video_out.c b/libvo/video_out.c index 3a6b57347a..6cab65d25f 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -35,8 +35,6 @@ int vo_depthonscreen=0; int vo_screenwidth=0; int vo_screenheight=0; -int vo_config_count=0; - // requested resolution/bpp: (-x -y -bpp options) int vo_dx=0; int vo_dy=0; @@ -260,6 +258,8 @@ int vo_control(struct vo *vo, uint32_t request, void *data) int vo_draw_frame(struct vo *vo, uint8_t *src[]) { + if (!vo->config_ok) + return 0; return vo->driver->draw_frame(vo, src); } @@ -270,16 +270,22 @@ int vo_draw_slice(struct vo *vo, uint8_t *src[], int stride[], int w, int h, int void vo_draw_osd(struct vo *vo) { + if (!vo->config_ok) + return; vo->driver->draw_osd(vo); } void vo_flip_page(struct vo *vo) { + if (!vo->config_ok) + return; vo->driver->flip_page(vo); } void vo_check_events(struct vo *vo) { + if (!vo->config_ok) + return; vo->driver->check_events(vo); } @@ -371,8 +377,11 @@ int vo_config(struct vo *vo, uint32_t width, uint32_t height, vo_dheight = d_height; } - return vo->driver->config(vo, width, height, d_width, d_height, flags, - title, format); + int ret = vo->driver->config(vo, width, height, d_width, d_height, flags, + title, format); + vo->config_ok = (ret == 0); + vo->config_count += vo->config_ok; + return ret; } #if defined(HAVE_FBDEV)||defined(HAVE_VESA) diff --git a/libvo/video_out.h b/libvo/video_out.h index c1ba46e59f..1870af17d3 100644 --- a/libvo/video_out.h +++ b/libvo/video_out.h @@ -207,6 +207,8 @@ struct vo_old_functions { }; struct vo { + int config_ok; // Last config call was successful? + int config_count; // Total number of successful config calls const struct vo_driver *driver; void *priv; struct MPOpts *opts; @@ -233,8 +235,6 @@ extern const struct vo_driver *video_out_drivers[]; extern int vo_flags; -extern int vo_config_count; - extern int xinerama_screen; extern int xinerama_x; extern int xinerama_y; diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c index b324912658..bc8a5015e7 100644 --- a/libvo/vo_xv.c +++ b/libvo/vo_xv.c @@ -867,7 +867,7 @@ static int control(struct vo *vo, uint32_t request, void *data) case VOCTRL_GUISUPPORT: return VO_TRUE; case VOCTRL_GET_PANSCAN: - if (!vo_config_count || !vo_fs) + if (!vo->config_ok || !vo_fs) return VO_FALSE; return VO_TRUE; case VOCTRL_FULLSCREEN: |