summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c8
-rw-r--r--mpvcore/player/video.c11
2 files changed, 9 insertions, 10 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 467b016699..bfa999ab15 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -318,6 +318,14 @@ int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream,
return 0;
}
+ if (stream->type == STREAM_VIDEO && !dp->len) {
+ /* Video packets with size 0 are assumed to not correspond to frames,
+ * but to indicate the absence of a frame in formats like AVI
+ * that must have packets at fixed timestamp intervals. */
+ talloc_free(dp);
+ return 1;
+ }
+
dp->stream = stream->index;
dp->next = NULL;
diff --git a/mpvcore/player/video.c b/mpvcore/player/video.c
index a3fef6d53c..65fc81d92c 100644
--- a/mpvcore/player/video.c
+++ b/mpvcore/player/video.c
@@ -295,16 +295,7 @@ double update_video(struct MPContext *mpctx, double endpts)
while (1) {
if (load_next_vo_frame(mpctx, false))
break;
- struct demux_packet *pkt = NULL;
- while (1) {
- pkt = demux_read_packet(d_video->header);
- if (!pkt || pkt->len)
- break;
- /* Packets with size 0 are assumed to not correspond to frames,
- * but to indicate the absence of a frame in formats like AVI
- * that must have packets at fixed timecode intervals. */
- talloc_free(pkt);
- }
+ struct demux_packet *pkt = demux_read_packet(d_video->header);
if (pkt && pkt->pts != MP_NOPTS_VALUE)
pkt->pts += mpctx->video_offset;
if (pkt && pkt->pts >= mpctx->hrseek_pts - .005)