From ac37d21f496438f6c8694025744287b60bdd9ba6 Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sat, 23 Feb 2013 02:15:06 +0100 Subject: [PATCH] ffplay: do not cycle through unavailable show modes Fixes ticket #2200. Signed-off-by: Marton Balint --- ffplay.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/ffplay.c b/ffplay.c index ca1fb9eb89..01ee15e65c 100644 --- a/ffplay.c +++ b/ffplay.c @@ -2943,10 +2943,17 @@ static void toggle_full_screen(VideoState *is) static void toggle_audio_display(VideoState *is) { int bgcolor = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00); - is->show_mode = (is->show_mode + 1) % SHOW_MODE_NB; - fill_rectangle(screen, - is->xleft, is->ytop, is->width, is->height, - bgcolor, 1); + int next = is->show_mode; + do { + next = (next + 1) % SHOW_MODE_NB; + } while (next != is->show_mode && (next == SHOW_MODE_VIDEO && !is->video_st || next != SHOW_MODE_VIDEO && !is->audio_st)); + if (is->show_mode != next) { + fill_rectangle(screen, + is->xleft, is->ytop, is->width, is->height, + bgcolor, 1); + is->force_refresh = 1; + is->show_mode = next; + } } static void refresh_loop_wait_event(VideoState *is, SDL_Event *event) { @@ -3008,7 +3015,6 @@ 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;