# HG changeset patch # User alex # Date 1140567492 0 # Node ID 2266681a4a52c668b04cef3cd74b6d6ed2a22f4e # Parent 282e0f799f61416587f68b88150e9d1912169a1f support correct ptses on other than version 3.2.0 aswell diff -r 282e0f799f61 -r 2266681a4a52 oggparsetheora.c --- a/oggparsetheora.c Tue Feb 21 20:32:47 2006 +0000 +++ b/oggparsetheora.c Wed Feb 22 00:18:12 2006 +0000 @@ -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 @@ 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;