mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-17 13:04:50 +00:00
ffplay: close streams and AVFormatContext in the main thread
To avoid race conditions. Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
93866c2aa2
commit
4ce75387cd
28
ffplay.c
28
ffplay.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user