From 2fae85ab4a42f26381d22ea0c64ca3c8ed45c5cc Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 25 Nov 2019 22:51:20 -0800 Subject: [PATCH] deps/media-playback: Don't exit thread on AVERROR_EXIT The interrupt callback is designed to prevent the media source from blocking; FFmpeg will internally call it periodically to prevent FFmpeg function calls from blocking too long, and allow the caller to determine whether blocking should stop. The problem with this however is that AVERROR_EXIT causes the thread to completely exit. This fixes it so that it treats it as an EOF rather than as an abnormal error. --- deps/media-playback/media-playback/media.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/media-playback/media-playback/media.c b/deps/media-playback/media-playback/media.c index 35554eb35..bc2986839 100644 --- a/deps/media-playback/media-playback/media.c +++ b/deps/media-playback/media-playback/media.c @@ -139,7 +139,7 @@ static int mp_media_next_packet(mp_media_t *media) int ret = av_read_frame(media->fmt, &pkt); if (ret < 0) { - if (ret != AVERROR_EOF) + if (ret != AVERROR_EOF && ret != AVERROR_EXIT) blog(LOG_WARNING, "MP: av_read_frame failed: %s (%d)", av_err2str(ret), ret); return ret; @@ -230,7 +230,7 @@ static bool mp_media_prepare_frames(mp_media_t *m) while (!mp_media_ready_to_start(m)) { if (!m->eof) { int ret = mp_media_next_packet(m); - if (ret == AVERROR_EOF) + if (ret == AVERROR_EOF || ret == AVERROR_EXIT) m->eof = true; else if (ret < 0) return false;