Mercurial > libavformat.hg
changeset 970:2266681a4a52 libavformat
support correct ptses on other than version 3.2.0 aswell
author | alex |
---|---|
date | Wed, 22 Feb 2006 00:18:12 +0000 |
parents | 282e0f799f61 |
children | 43f85eba04c4 |
files | oggparsetheora.c |
diffstat | 1 files changed, 22 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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;