diff --git a/libavformat/utils.c b/libavformat/utils.c index 6603483e64..4f3529aff4 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1409,11 +1409,18 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt) AVStream *st; if (!genpts) { - ret = s->packet_buffer ? read_from_packet_buffer(&s->packet_buffer, - &s->packet_buffer_end, - pkt) : - read_frame_internal(s, pkt); - goto return_packet; + while (1) { + ret = s->packet_buffer ? + read_from_packet_buffer(&s->packet_buffer, &s->packet_buffer_end, pkt) : + read_frame_internal(s, pkt); + if (ret < 0) { + if (ret == AVERROR(EAGAIN)) + continue; + else + return ret; + } + goto return_packet; + } } for (;;) {