Commit 669c9da7 authored by alex's avatar alex

support correct ptses on other than version 3.2.0 aswell


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@5047 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 1f669bf4
/** /**
Copyright (C) 2005 Matthieu CASTET Copyright (C) 2005 Matthieu CASTET, Alex Beregszaszi
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation obtaining a copy of this software and associated documentation
...@@ -53,26 +53,41 @@ theora_header (AVFormatContext * s, int idx) ...@@ -53,26 +53,41 @@ theora_header (AVFormatContext * s, int idx)
if (os->buf[os->pstart] == 0x80) { if (os->buf[os->pstart] == 0x80) {
GetBitContext gb; GetBitContext gb;
int version;
init_get_bits(&gb, os->buf + os->pstart, os->psize*8); init_get_bits(&gb, os->buf + os->pstart, os->psize*8);
skip_bits(&gb, 7*8); /* 0x80"theora" */ skip_bits(&gb, 7*8); /* 0x80"theora" */
if(get_bits(&gb, 8) != 3) /* major version */
return -1; version = get_bits(&gb, 8) << 16;
if(get_bits(&gb, 8) != 2) /* minor version */ 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; return -1;
skip_bits(&gb, 8); /* revision */ }
st->codec->width = get_bits(&gb, 16) << 4; st->codec->width = get_bits(&gb, 16) << 4;
st->codec->height = 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.den = get_bits(&gb, 32);
st->codec->time_base.num = 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.num = get_bits(&gb, 24);
st->codec->sample_aspect_ratio.den = 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->gpshift = get_bits(&gb, 5);
thp->gpmask = (1 << thp->gpshift) - 1; thp->gpmask = (1 << thp->gpshift) - 1;
......
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