aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-03-15 08:26:41 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-03-15 08:26:47 +0100
commita04a97bc8814c39cb1ab20288168a8d96ec66fb6 (patch)
tree92ff534c74d5345df86d0b50869406d1676adc02
parent67235dfa1d2b4bab2c8015e5b8e43ea63a681892 (diff)
parentdbe7170e2af1e202050970add9d2cc4797adae44 (diff)
downloadffmpeg-a04a97bc8814c39cb1ab20288168a8d96ec66fb6.tar.gz
Merge remote-tracking branch 'cus/stable'
* cus/stable: ffplay: force video refresh if the window is resized or damaged Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--ffplay.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/ffplay.c b/ffplay.c
index bf0a834f0e..e831f83901 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -133,6 +133,7 @@ typedef struct VideoState {
AVInputFormat *iformat;
int no_background;
int abort_request;
+ int force_refresh;
int paused;
int last_paused;
int seek_req;
@@ -993,7 +994,7 @@ static int refresh_thread(void *opaque)
SDL_Event event;
event.type = FF_REFRESH_EVENT;
event.user.data1 = opaque;
- if (!is->refresh) {
+ if (!is->refresh && (!is->paused || is->force_refresh)) {
is->refresh = 1;
SDL_PushEvent(&event);
}
@@ -1156,6 +1157,9 @@ retry:
goto retry;
}
+ if (is->paused)
+ goto display;
+
/* compute nominal last_duration */
last_duration = vp->pts - is->frame_last_pts;
if (last_duration > 0 && last_duration < 10.0) {
@@ -1234,11 +1238,13 @@ retry:
}
}
+display:
/* display picture */
if (!display_disable)
video_display(is);
- pictq_next_picture(is);
+ if (!is->paused)
+ pictq_next_picture(is);
}
} else if (is->audio_st) {
/* draw the next audio frame */
@@ -1250,6 +1256,7 @@ retry:
if (!display_disable)
video_display(is);
}
+ is->force_refresh = 0;
if (show_status) {
static int64_t last_time;
int64_t cur_time;
@@ -2829,6 +2836,7 @@ static void event_loop(VideoState *cur_stream)
break;
case SDLK_f:
toggle_full_screen(cur_stream);
+ cur_stream->force_refresh = 1;
break;
case SDLK_p:
case SDLK_SPACE:
@@ -2848,6 +2856,7 @@ static void event_loop(VideoState *cur_stream)
break;
case SDLK_w:
toggle_audio_display(cur_stream);
+ cur_stream->force_refresh = 1;
break;
case SDLK_PAGEUP:
incr = 600.0;
@@ -2890,6 +2899,9 @@ static void event_loop(VideoState *cur_stream)
break;
}
break;
+ case SDL_VIDEOEXPOSE:
+ cur_stream->force_refresh = 1;
+ break;
case SDL_MOUSEBUTTONDOWN:
if (exit_on_mousedown) {
do_exit(cur_stream);
@@ -2932,6 +2944,7 @@ static void event_loop(VideoState *cur_stream)
SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL);
screen_width = cur_stream->width = event.resize.w;
screen_height = cur_stream->height = event.resize.h;
+ cur_stream->force_refresh = 1;
break;
case SDL_QUIT:
case FF_QUIT_EVENT: