Browse Source

support correct ptses on other than version 3.2.0 aswell

Originally committed as revision 5047 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Alex Beregszaszi 19 years ago
parent
commit
571fa53105
1 changed files with 22 additions and 7 deletions
  1. +22
    -7
      libavformat/oggparsetheora.c

+ 22
- 7
libavformat/oggparsetheora.c View File

@@ -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;
if(get_bits(&gb, 8) != 2) /* minor 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; 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