mirror of https://github.com/mpv-player/mpv
player: move code for skipping 0-sized video packets to demuxer
These packets have to be explicitly dropped, because usually libavcodec uses 0-sized packets to flush delayed frames, meaning just passing through these packets would have bad consequences. Normally, libavformat doesn't output 0-sized packets anyway. But I don't want to take any chances, so don't delete it, and just move it out of the way to demux.c.
This commit is contained in:
parent
49f076d86d
commit
fe73b14eb1
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue