[Ffmpeg-cvslog] CVS: ffmpeg/libavformat oggparsetheora.c,1.5,1.6

Alex Beregszaszi alex
Wed Feb 22 01:18:14 CET 2006


Update of /cvsroot/ffmpeg/ffmpeg/libavformat
In directory mail:/var2/tmp/cvs-serv32481

Modified Files:
	oggparsetheora.c 
Log Message:
support correct ptses on other than version 3.2.0 aswell

Index: oggparsetheora.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/oggparsetheora.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- oggparsetheora.c	22 Dec 2005 01:10:11 -0000	1.5
+++ oggparsetheora.c	22 Feb 2006 00:18:12 -0000	1.6
@@ -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 */
-            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;
-        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;
 





More information about the ffmpeg-cvslog mailing list