Kaynağa Gözat

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.
jp9000 6 yıl önce
ebeveyn
işleme
d7b00c095f
1 değiştirilmiş dosya ile 2 ekleme ve 2 silme
  1. 2 2
      deps/media-playback/media-playback/media.c

+ 2 - 2
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;