support correct ptses on other than version 3.2.0 aswell

Originally committed as revision 5047 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Alex Beregszaszi 19 years ago
parent 5cb9fda4b0
commit 571fa53105
  1. 29
      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 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)
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;

Loading…
Cancel
Save