Browse Source

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 năm trước cách đây
mục cha
commit
d7b00c095f
1 tập tin đã thay đổi với 2 bổ sung2 xóa
  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;