[cvs-annodex] commit (/annodex): liboggz/trunk/src/liboggz/oggz_auto.c

conrad nobody at lists.annodex.net
Fri Feb 11 03:49:15 EST 2005


Update of /annodex (new revision 872)

Modified files:
   liboggz/trunk/src/liboggz/oggz_auto.c

Log Message:
code cleanup -- make theora use the internal granuleshift metric rather
than its own custom one


Modified: liboggz/trunk/src/liboggz/oggz_auto.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz_auto.c	2005-02-10 16:47:48 UTC (rev 871)
+++ liboggz/trunk/src/liboggz/oggz_auto.c	2005-02-10 16:49:08 UTC (rev 872)
@@ -108,12 +108,6 @@
   return 1;
 }
 
-typedef struct {
-  ogg_int32_t fps_numerator;
-  ogg_int32_t fps_denominator;
-  int keyframe_shift;
-} oggz_theora_metric_t;
-
 #if USE_THEORA_PRE_ALPHA_3_FORMAT
 static int intlog(int num) {
   int ret=0;
@@ -125,35 +119,13 @@
 }
 #endif
 
-static ogg_int64_t
-auto_theora_metric (OGGZ * oggz, long serialno, ogg_int64_t granulepos,
-		    void * user_data)
-{
-  oggz_theora_metric_t * tdata = (oggz_theora_metric_t *)user_data;
-  ogg_int64_t iframe, pframe;
-  ogg_int64_t units;
-
-  iframe = granulepos >> tdata->keyframe_shift;
-  pframe = granulepos - (iframe << tdata->keyframe_shift);
-  granulepos = (iframe + pframe);
-
-  units = OGGZ_AUTO_MULT * granulepos * tdata->fps_denominator /
-    tdata->fps_numerator;
-
-#ifdef DEBUG
-  printf ("oggz_auto: serialno %010ld Got theora frame %lld (%lld + %lld): %lld units\n",
-	  serialno, granulepos, iframe, pframe, units);
-#endif
-
-  return units;
-}
-
 static int
 auto_theora (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)
 {
   unsigned char * header = op->packet;
+  ogg_int32_t fps_numerator, fps_denominator;
   char keyframe_granule_shift = 0;
-  oggz_theora_metric_t * tdata;
+  int keyframe_shift;
 
   if (op->bytes < 41) return 0;
 
@@ -161,36 +133,33 @@
   if (strncmp ((char *)&header[1], "theora", 6)) return 0;
   if (!op->b_o_s) return 0;
 
+  fps_numerator = INT32_BE_AT(&header[22]);
+  fps_denominator = INT32_BE_AT(&header[26]);
 
-  tdata = oggz_malloc (sizeof (oggz_theora_metric_t));
-
-  tdata->fps_numerator = INT32_BE_AT(&header[22]);
-  tdata->fps_denominator = INT32_BE_AT(&header[26]);
-
   /* Very old theora versions used a value of 0 to mean 1.
    * Unfortunately theora hasn't incremented its version field,
    * hence we hardcode this workaround for old or broken streams.
    */
-  if (tdata->fps_numerator == 0) tdata->fps_numerator = 1;
+  if (fps_numerator == 0) fps_numerator = 1;
 
 #if USE_THEORA_PRE_ALPHA_3_FORMAT
   /* old header format, used by Theora alpha2 and earlier */
   keyframe_granule_shift = (header[36] & 0xf8) >> 3;
-  tdata->keyframe_shift = intlog (keyframe_granule_shift - 1);
+  keyframe_shift = intlog (keyframe_granule_shift - 1);
 #else
   keyframe_granule_shift = (char) ((header[40] & 0x03) << 3);
   keyframe_granule_shift |= (header[41] & 0xe0) >> 5;
-  tdata->keyframe_shift = keyframe_granule_shift;
+  keyframe_shift = keyframe_granule_shift;
 #endif
 
 #ifdef DEBUG
   printf ("Got theora fps %d/%d, keyframe_shift %d\n",
-	  tdata->fps_numerator, tdata->fps_denominator,
-	  tdata->keyframe_shift);
+	  fps_numerator, fps_denominator, keyframe_shift);
 #endif
 
-  oggz_set_metric_internal (oggz, serialno, auto_theora_metric, tdata, 1);
-  /*oggz_set_metric (oggz, serialno, auto_theora_metric, tdata);*/
+  oggz_set_granulerate (oggz, serialno, (ogg_int64_t)fps_numerator,
+			OGGZ_AUTO_MULT * (ogg_int64_t)fps_denominator);
+  oggz_set_granuleshift (oggz, serialno, keyframe_shift);
 
   return 1;
 }


-- 
conrad



More information about the cvs-annodex mailing list