summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_real.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-07-25 00:23:27 +0300
committerUoti Urpala <uau@mplayer2.org>2012-07-25 01:10:30 +0300
commit8079f4ff821aa811de449f08dfdba777e8dd0397 (patch)
tree4f18f58d5e0fafc317e7d5541f5f291db7532d06 /libmpdemux/demux_real.c
parent5f3c3f8c32d20405a2caf7de66aa1ea7f513d4d2 (diff)
downloadmpv-8079f4ff821aa811de449f08dfdba777e8dd0397.tar.bz2
mpv-8079f4ff821aa811de449f08dfdba777e8dd0397.tar.xz
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.
Diffstat (limited to 'libmpdemux/demux_real.c')
-rw-r--r--libmpdemux/demux_real.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c
index 687441f863..ea9c3046e0 100644
--- a/libmpdemux/demux_real.c
+++ b/libmpdemux/demux_real.c
@@ -794,7 +794,7 @@ got_audio:
if (x * apk_usize % w == 0)
dp->pts = priv->audio_timestamp[x * apk_usize / w];
dp->pos = priv->audio_filepos; // all equal
- dp->flags = x ? 0 : 0x10; // Mark first packet as keyframe
+ dp->keyframe = !x; // Mark first packet as keyframe
ds_add_packet(ds, dp);
}
}
@@ -839,7 +839,7 @@ got_audio:
dp->pts = timestamp/1000.0;
priv->a_pts=timestamp;
dp->pos = demuxer->filepos;
- dp->flags = (flags & 0x2) ? 0x10 : 0;
+ dp->keyframe = flags & 0x2;
ds_add_packet(ds, dp);
} // codec_id check, codec default case
@@ -1003,7 +1003,7 @@ got_video:
dp = new_demux_packet(sizeof(dp_hdr_t)+vpkg_length+8*(1+2*(vpkg_header&0x3F)));
// the timestamp seems to be in milliseconds
dp->pos = demuxer->filepos;
- dp->flags = (flags & 0x2) ? 0x10 : 0;
+ dp->keyframe = flags & 0x2;
ds->asf_seq = vpkg_seqnum;
dp_hdr=(dp_hdr_t*)dp->buffer;
dp_hdr->chunks=0;