You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	ffplay: force video refresh if the window is resized or damaged
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
		
							
								
								
									
										17
									
								
								ffplay.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user