Commit 313a6c65 authored by James Almer's avatar James Almer Committed by Michael Niedermayer

oggdec: validate VP8 keyframes

Fixes seeking with broken files
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent bd8d73ea
...@@ -727,8 +727,16 @@ static void ogg_validate_keyframe(AVFormatContext *s, int idx, int pstart, int p ...@@ -727,8 +727,16 @@ static void ogg_validate_keyframe(AVFormatContext *s, int idx, int pstart, int p
{ {
struct ogg *ogg = s->priv_data; struct ogg *ogg = s->priv_data;
struct ogg_stream *os = ogg->streams + idx; struct ogg_stream *os = ogg->streams + idx;
if (psize && s->streams[idx]->codec->codec_id == AV_CODEC_ID_THEORA) { int invalid = 0;
if (!!(os->pflags & AV_PKT_FLAG_KEY) != !(os->buf[pstart] & 0x40)) { if (psize) {
switch (s->streams[idx]->codec->codec_id) {
case AV_CODEC_ID_THEORA:
invalid = !!(os->pflags & AV_PKT_FLAG_KEY) != !(os->buf[pstart] & 0x40);
break;
case AV_CODEC_ID_VP8:
invalid = !!(os->pflags & AV_PKT_FLAG_KEY) != !(os->buf[pstart] & 1);
}
if (invalid) {
os->pflags ^= AV_PKT_FLAG_KEY; os->pflags ^= AV_PKT_FLAG_KEY;
av_log(s, AV_LOG_WARNING, "Broken file, %skeyframe not correctly marked.\n", av_log(s, AV_LOG_WARNING, "Broken file, %skeyframe not correctly marked.\n",
(os->pflags & AV_PKT_FLAG_KEY) ? "" : "non-"); (os->pflags & AV_PKT_FLAG_KEY) ? "" : "non-");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment