diff options
author | Uoti Urpala <uau@mplayer2.org> | 2012-02-28 03:17:25 +0200 |
---|---|---|
committer | Uoti Urpala <uau@mplayer2.org> | 2012-02-28 03:17:25 +0200 |
commit | 0e752d586362b95288f1a94f7c2588016719d838 (patch) | |
tree | 7073351402b63bf6c4e62eacf32528f8006aba76 /libvo/video_out.c | |
parent | a43a4aafd08650254a4b91fe73f82ec96bf2a6ef (diff) | |
download | mpv-0e752d586362b95288f1a94f7c2588016719d838.tar.bz2 mpv-0e752d586362b95288f1a94f7c2588016719d838.tar.xz |
vo: reject vo_redraw_frame() if no frames have been drawn
vo_xv crashed if existing frames had been lost due to a config() call
in the middle of a file and vo_redraw_frame() was called. Add checks
to reject vo_redraw_frame() unless at least one frame has been flipped
after the the last configuration change, so individual VOs do not have
to deal with this case.
Diffstat (limited to 'libvo/video_out.c')
-rw-r--r-- | libvo/video_out.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libvo/video_out.c b/libvo/video_out.c index 48cfb2a609..9573439882 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -285,7 +285,7 @@ int vo_draw_image(struct vo *vo, struct mp_image *mpi, double pts) int vo_redraw_frame(struct vo *vo) { - if (!vo->config_ok) + if (!vo->config_ok || !vo->hasframe) return -1; if (vo_control(vo, VOCTRL_REDRAW_FRAME, NULL) == true) { vo->redrawing = true; @@ -358,6 +358,7 @@ void vo_flip_page(struct vo *vo, unsigned int pts_us, int duration) vo->driver->flip_page_timed(vo, pts_us, duration); else vo->driver->flip_page(vo); + vo->hasframe = true; } void vo_check_events(struct vo *vo) @@ -500,6 +501,7 @@ int vo_config(struct vo *vo, uint32_t width, uint32_t height, vo->frame_loaded = false; vo->waiting_mpi = NULL; vo->redrawing = false; + vo->hasframe = false; return ret; } |