diff options
author | Marton Balint <cus@passwd.hu> | 2015-02-06 01:37:53 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2015-10-12 00:07:38 +0200 |
commit | 4ce75387cdcbcef8afbaadc5b66232c25178c0c6 (patch) | |
tree | 1afdf8408856159d56450c157582dd166c8600d4 /ffplay.c | |
parent | 93866c2aa2514649622ae32b6cacaf62473a9e20 (diff) | |
download | ffmpeg-4ce75387cdcbcef8afbaadc5b66232c25178c0c6.tar.gz |
ffplay: close streams and AVFormatContext in the main thread
To avoid race conditions.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'ffplay.c')
-rw-r--r-- | ffplay.c | 28 |
1 files changed, 14 insertions, 14 deletions
@@ -1132,11 +1132,24 @@ static void video_audio_display(VideoState *s) } } +static void stream_component_close(VideoState *is, int stream_index); + static void stream_close(VideoState *is) { /* XXX: use a special url_shutdown call to abort parse cleanly */ is->abort_request = 1; SDL_WaitThread(is->read_tid, NULL); + + /* close each stream */ + if (is->audio_stream >= 0) + stream_component_close(is, is->audio_stream); + if (is->video_stream >= 0) + stream_component_close(is, is->video_stream); + if (is->subtitle_stream >= 0) + stream_component_close(is, is->subtitle_stream); + + avformat_close_input(&is->ic); + packet_queue_destroy(&is->videoq); packet_queue_destroy(&is->audioq); packet_queue_destroy(&is->subtitleq); @@ -3111,24 +3124,11 @@ static int read_thread(void *arg) av_free_packet(pkt); } } - /* wait until the end */ - while (!is->abort_request) { - SDL_Delay(100); - } ret = 0; fail: - /* close each stream */ - if (is->audio_stream >= 0) - stream_component_close(is, is->audio_stream); - if (is->video_stream >= 0) - stream_component_close(is, is->video_stream); - if (is->subtitle_stream >= 0) - stream_component_close(is, is->subtitle_stream); - if (ic) { + if (ic && !is->ic) avformat_close_input(&ic); - is->ic = NULL; - } if (ret != 0) { SDL_Event event; |