From 8079f4ff821aa811de449f08dfdba777e8dd0397 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Wed, 25 Jul 2012 00:23:27 +0300 Subject: demux, vd_ffmpeg: fix demux keyframe flag, set AV_PKT_FLAG_KEY There was some confusion about the "flags" field in demuxer packets. Demuxers set it to either 1 or 0x10 to indicate a keyframe (and the field was not used to indicate anything else). This didn't cause visible problems because nothing read the value. Replace the "flags" field with a boolean "keyframe" field. Set AV_PKT_FLAG_KEY based on this field in packets fed to libavcodec video decoders (looks like PNG and ZeroCodec are the only ones which depend on values from demuxer; previously this was hardcoded to true for PNG). Make demux_mf set the keyframe field in every packet. This matters for PNG files now that the demuxer flag is forwarded to libavcodec. Fix logic setting the field in demux_mkv. It had probably not been updated when adding SimpleBlock support. This probably makes no difference for any current practical use. --- libmpdemux/demuxer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libmpdemux/demuxer.c') diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 8691880fe1..f00b0551d5 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -185,7 +185,7 @@ static struct demux_packet *create_packet(size_t len) dp->duration = -1; dp->stream_pts = MP_NOPTS_VALUE; dp->pos = 0; - dp->flags = 0; + dp->keyframe = false; dp->refcount = 1; dp->master = NULL; dp->buffer = NULL; @@ -599,14 +599,14 @@ void ds_clear_parser(demux_stream_t *ds) } void ds_read_packet(demux_stream_t *ds, stream_t *stream, int len, - double pts, off_t pos, int flags) + double pts, off_t pos, bool keyframe) { demux_packet_t *dp = new_demux_packet(len); len = stream_read(stream, dp->buffer, len); resize_demux_packet(dp, len); dp->pts = pts; dp->pos = pos; - dp->flags = flags; + dp->keyframe = keyframe; // append packet to DS stream: ds_add_packet(ds, dp); } @@ -650,7 +650,7 @@ int ds_fill_buffer(demux_stream_t *ds) ds->pts_bytes += p->len; // !!! if (p->stream_pts != MP_NOPTS_VALUE) demux->stream_pts = p->stream_pts; - ds->flags = p->flags; + ds->keyframe = p->keyframe; // unlink packet: ds->bytes -= p->len; ds->current = p; -- cgit v1.2.3