diff --git a/ffplay.c b/ffplay.c index d12b28341b..b5d9f0f0d0 100644 --- a/ffplay.c +++ b/ffplay.c @@ -2421,13 +2421,10 @@ static void stream_component_close(VideoState *is, int stream_index) } } -/* since we have only one decoding thread, we can use a global - variable instead of a thread local variable */ -static VideoState *global_video_state; - static int decode_interrupt_cb(void *ctx) { - return (global_video_state && global_video_state->abort_request); + VideoState *is = ctx; + return is->abort_request; } /* this thread gets the stream from the disk or the network */ @@ -2449,10 +2446,9 @@ static int read_thread(void *arg) is->audio_stream = -1; is->subtitle_stream = -1; - global_video_state = is; - ic = avformat_alloc_context(); ic->interrupt_callback.callback = decode_interrupt_cb; + ic->interrupt_callback.opaque = is; err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts); if (err < 0) { print_error(is->filename, err); @@ -2669,9 +2665,6 @@ static int read_thread(void *arg) ret = 0; fail: - /* disable interrupting */ - global_video_state = NULL; - /* close each stream */ if (is->audio_stream >= 0) stream_component_close(is, is->audio_stream); @@ -2682,7 +2675,6 @@ static int read_thread(void *arg) if (is->ic) { avformat_close_input(&is->ic); } - avio_set_interrupt_cb(NULL); if (ret != 0) { SDL_Event event;