From 571fa531056c8b1e221868d1404fac4c1eaa676e Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 22 Feb 2006 00:18:12 +0000 Subject: [PATCH] support correct ptses on other than version 3.2.0 aswell Originally committed as revision 5047 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/oggparsetheora.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/libavformat/oggparsetheora.c b/libavformat/oggparsetheora.c index f1820e8b63..2f35d1b73c 100644 --- a/libavformat/oggparsetheora.c +++ b/libavformat/oggparsetheora.c @@ -1,5 +1,5 @@ /** - Copyright (C) 2005 Matthieu CASTET + Copyright (C) 2005 Matthieu CASTET, Alex Beregszaszi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation @@ -53,26 +53,41 @@ theora_header (AVFormatContext * s, int idx) if (os->buf[os->pstart] == 0x80) { GetBitContext gb; + int version; + init_get_bits(&gb, os->buf + os->pstart, os->psize*8); skip_bits(&gb, 7*8); /* 0x80"theora" */ - if(get_bits(&gb, 8) != 3) /* major version */ + + version = get_bits(&gb, 8) << 16; + version |= get_bits(&gb, 8) << 8; + version |= get_bits(&gb, 8); + + if (version < 0x030100) + { + av_log(s, AV_LOG_ERROR, + "Too old or unsupported Theora (%x)\n", version); return -1; - if(get_bits(&gb, 8) != 2) /* minor version */ - return -1; - skip_bits(&gb, 8); /* revision */ + } st->codec->width = get_bits(&gb, 16) << 4; st->codec->height = get_bits(&gb, 16) << 4; - skip_bits(&gb, 64); + if (version >= 0x030400) + skip_bits(&gb, 164); + else + skip_bits(&gb, 64); st->codec->time_base.den = get_bits(&gb, 32); st->codec->time_base.num = get_bits(&gb, 32); st->codec->sample_aspect_ratio.num = get_bits(&gb, 24); st->codec->sample_aspect_ratio.den = get_bits(&gb, 24); - skip_bits(&gb, 38); + if (version >= 0x030200) + skip_bits(&gb, 38); + if (version >= 0x304000) + skip_bits(&gb, 2); + thp->gpshift = get_bits(&gb, 5); thp->gpmask = (1 << thp->gpshift) - 1;