From 84506ebd48b1ab2c075233f087770b5af45f3494 Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sun, 21 Aug 2011 15:06:09 +0200 Subject: ffplay: get rid of the global cur_stream variable Signed-off-by: Michael Niedermayer --- ffplay.c | 64 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) (limited to 'ffplay.c') diff --git a/ffplay.c b/ffplay.c index 25d8325a7e..018d95c418 100644 --- a/ffplay.c +++ b/ffplay.c @@ -267,7 +267,6 @@ static char *vfilters = NULL; /* current context */ static int is_full_screen; -static VideoState *cur_stream; static int64_t audio_callback_time; static AVPacket flush_pkt; @@ -887,11 +886,10 @@ static void stream_close(VideoState *is) av_free(is); } -static void do_exit(void) +static void do_exit(VideoState *is) { - if (cur_stream) { - stream_close(cur_stream); - cur_stream = NULL; + if (is) { + stream_close(is); } uninit_opts(); #if CONFIG_AVFILTER @@ -942,7 +940,7 @@ static int video_open(VideoState *is){ #endif if (!screen) { fprintf(stderr, "SDL: could not set video mode - exiting\n"); - do_exit(); + do_exit(is); } if (!window_title) window_title = input_filename; @@ -958,7 +956,7 @@ static int video_open(VideoState *is){ static void video_display(VideoState *is) { if(!screen) - video_open(cur_stream); + video_open(is); if (is->audio_st && is->show_mode != SHOW_MODE_VIDEO) video_audio_display(is); else if (is->video_st) @@ -1280,7 +1278,7 @@ static void alloc_picture(void *opaque) fprintf(stderr, "Error: the video system does not support an image\n" "size of %dx%d pixels. Try using -lowres or -vf \"scale=w:h\"\n" "to reduce the image size.\n", vp->width, vp->height ); - do_exit(); + do_exit(is); } SDL_LockMutex(is->pictq_mutex); @@ -1794,8 +1792,8 @@ static int video_thread(void *arg) if (ret < 0) goto the_end; - if (cur_stream && cur_stream->step) - stream_toggle_pause(cur_stream); + if (is->step) + stream_toggle_pause(is); } the_end: #if CONFIG_AVFILTER @@ -2496,7 +2494,7 @@ static int read_thread(void *arg) SDL_Delay(10); if(is->audioq.size + is->videoq.size + is->subtitleq.size ==0){ if(loop!=1 && (!loop || --loop)){ - stream_seek(cur_stream, start_time != AV_NOPTS_VALUE ? start_time : 0, 0, 0); + stream_seek(is, start_time != AV_NOPTS_VALUE ? start_time : 0, 0, 0); }else if(autoexit){ ret=AVERROR_EOF; goto fail; @@ -2641,10 +2639,10 @@ static void stream_cycle_channel(VideoState *is, int codec_type) } -static void toggle_full_screen(void) +static void toggle_full_screen(VideoState *is) { is_full_screen = !is_full_screen; - video_open(cur_stream); + video_open(is); } static void toggle_pause(VideoState *is) @@ -2661,20 +2659,18 @@ static void step_to_next_frame(VideoState *is) is->step = 1; } -static void toggle_audio_display(void) +static void toggle_audio_display(VideoState *is) { - if (cur_stream) { - int bgcolor = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00); - cur_stream->show_mode = (cur_stream->show_mode + 1) % SHOW_MODE_NB; - fill_rectangle(screen, - cur_stream->xleft, cur_stream->ytop, cur_stream->width, cur_stream->height, - bgcolor); - SDL_UpdateRect(screen, cur_stream->xleft, cur_stream->ytop, cur_stream->width, cur_stream->height); - } + 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); + SDL_UpdateRect(screen, is->xleft, is->ytop, is->width, is->height); } /* handle an event sent by the GUI */ -static void event_loop(void) +static void event_loop(VideoState *cur_stream) { SDL_Event event; double incr, pos, frac; @@ -2685,16 +2681,16 @@ static void event_loop(void) switch(event.type) { case SDL_KEYDOWN: if (exit_on_keydown) { - do_exit(); + do_exit(cur_stream); break; } switch(event.key.keysym.sym) { case SDLK_ESCAPE: case SDLK_q: - do_exit(); + do_exit(cur_stream); break; case SDLK_f: - toggle_full_screen(); + toggle_full_screen(cur_stream); break; case SDLK_p: case SDLK_SPACE: @@ -2718,7 +2714,8 @@ static void event_loop(void) stream_cycle_channel(cur_stream, AVMEDIA_TYPE_SUBTITLE); break; case SDLK_w: - toggle_audio_display(); + if (cur_stream) + toggle_audio_display(cur_stream); break; case SDLK_LEFT: incr = -10.0; @@ -2759,7 +2756,7 @@ static void event_loop(void) break; case SDL_MOUSEBUTTONDOWN: if (exit_on_mousedown) { - do_exit(); + do_exit(cur_stream); break; } case SDL_MOUSEMOTION: @@ -2806,7 +2803,7 @@ static void event_loop(void) break; case SDL_QUIT: case FF_QUIT_EVENT: - do_exit(); + do_exit(cur_stream); break; case FF_ALLOC_EVENT: video_open(event.user.data1); @@ -3007,6 +3004,7 @@ static int opt_help(const char *opt, const char *arg) int main(int argc, char **argv) { int flags; + VideoState *is; av_log_set_flags(AV_LOG_SKIP_REPEATED); @@ -3063,9 +3061,13 @@ int main(int argc, char **argv) av_init_packet(&flush_pkt); flush_pkt.data= "FLUSH"; - cur_stream = stream_open(input_filename, file_iformat); + is = stream_open(input_filename, file_iformat); + if (!is) { + fprintf(stderr, "Failed to initialize VideoState!\n"); + do_exit(NULL); + } - event_loop(); + event_loop(is); /* never returns */ -- cgit v1.2.3