From d7b00c095f0cc2b8a7bfa32d9bf68483b6d792d9 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;