[cvs-annodex] commit (/annodex): liboggz/trunk/src/liboggz/metric_granuleshift.c liboggz/trunk/src/liboggz/metric_linear.c liboggz/trunk/src/liboggz/oggz.c liboggz/trunk/src/liboggz/oggz_private.h

conrad nobody at lists.annodex.net
Wed Feb 2 09:10:49 EST 2005


Update of /annodex (new revision 817)

Modified files:
   liboggz/trunk/src/liboggz/metric_granuleshift.c
   liboggz/trunk/src/liboggz/metric_linear.c
   liboggz/trunk/src/liboggz/oggz.c
   liboggz/trunk/src/liboggz/oggz_private.h

Log Message:
move granulerate/granuleshift info directly into each stream, get rid of
allocated metric data for internal metrics


Modified: liboggz/trunk/src/liboggz/metric_granuleshift.c
===================================================================
--- liboggz/trunk/src/liboggz/metric_granuleshift.c	2005-02-01 22:04:46 UTC (rev 816)
+++ liboggz/trunk/src/liboggz/metric_granuleshift.c	2005-02-01 22:10:47 UTC (rev 817)
@@ -34,25 +34,22 @@
 
 #include "oggz_private.h"
 
-typedef struct {
-  ogg_int64_t gr_n;
-  ogg_int64_t gr_d;
-  int granuleshift;
-} oggz_metric_granuleshift_t;
-
 static ogg_int64_t
 oggz_metric_default_granuleshift (OGGZ * oggz, long serialno,
 				  ogg_int64_t granulepos, void * user_data)
 {
-  oggz_metric_granuleshift_t * gdata = (oggz_metric_granuleshift_t *)user_data;
+  oggz_stream_t * stream;
   ogg_int64_t iframe, pframe;
   ogg_int64_t units;
 
-  iframe = granulepos >> gdata->granuleshift;
-  pframe = granulepos - (iframe << gdata->granuleshift);
+  stream = oggz_get_stream (oggz, serialno);
+  if (stream == NULL) return -1;
+
+  iframe = granulepos >> stream->granuleshift;
+  pframe = granulepos - (iframe << stream->granuleshift);
   granulepos = (iframe + pframe);
 
-  units = granulepos * gdata->gr_d / gdata->gr_n;
+  units = granulepos * stream->granulerate_d / stream->granulerate_n;
 
 #ifdef DEBUG
   printf ("oggz_..._granuleshift: serialno %010ld Got frame %lld (%lld + %lld): %lld units\n",
@@ -68,8 +65,11 @@
 			      ogg_int64_t granule_rate_denominator,
 			      int granuleshift)
 {
-  oggz_metric_granuleshift_t * granuleshift_data;
+  oggz_stream_t * stream;
 
+  stream = oggz_get_stream (oggz, serialno);
+  if (stream == NULL) return -1;
+
   /* we divide by the granulerate, ie. mult by gr_d/gr_n, so ensure
    * numerator is non-zero */
   if (granule_rate_numerator == 0) {
@@ -77,12 +77,11 @@
     granule_rate_denominator = 0;
   }
 
-  granuleshift_data = oggz_malloc (sizeof (oggz_metric_granuleshift_t));
-  granuleshift_data->gr_n = granule_rate_numerator;
-  granuleshift_data->gr_d = granule_rate_denominator;
-  granuleshift_data->granuleshift = granuleshift;
+  stream->granulerate_n = granule_rate_numerator;
+  stream->granulerate_d = granule_rate_denominator;
+  stream->granuleshift = granuleshift;
 
   return oggz_set_metric_internal (oggz, serialno,
 				   oggz_metric_default_granuleshift,
-				   granuleshift_data, 1);
+				   NULL, 1);
 }

Modified: liboggz/trunk/src/liboggz/metric_linear.c
===================================================================
--- liboggz/trunk/src/liboggz/metric_linear.c	2005-02-01 22:04:46 UTC (rev 816)
+++ liboggz/trunk/src/liboggz/metric_linear.c	2005-02-01 22:10:47 UTC (rev 817)
@@ -34,18 +34,16 @@
 
 #include "oggz_private.h"
 
-typedef struct {
-  ogg_int64_t gr_n;
-  ogg_int64_t gr_d;
-} oggz_metric_linear_t;
-
 static ogg_int64_t
 oggz_metric_default_linear (OGGZ * oggz, long serialno, ogg_int64_t granulepos,
 			    void * user_data)
 {
-  oggz_metric_linear_t * ldata = (oggz_metric_linear_t *)user_data;
+  oggz_stream_t * stream;
 
-  return (ldata->gr_d * granulepos / ldata->gr_n);
+  stream = oggz_get_stream (oggz, serialno);
+  if (stream == NULL) return -1;
+
+  return (stream->granulerate_d * granulepos / stream->granulerate_n);
 }
 
 int
@@ -53,8 +51,11 @@
 			ogg_int64_t granule_rate_numerator,
 			ogg_int64_t granule_rate_denominator)
 {
-  oggz_metric_linear_t * linear_data;
+  oggz_stream_t * stream;
 
+  stream = oggz_get_stream (oggz, serialno);
+  if (stream == NULL) return -1;
+
   /* we divide by the granulerate, ie. mult by gr_d/gr_n, so ensure
    * numerator is non-zero */
   if (granule_rate_numerator == 0) {
@@ -62,12 +63,12 @@
     granule_rate_denominator = 0;
   }
 
-  linear_data = oggz_malloc (sizeof (oggz_metric_linear_t));
-  linear_data->gr_n = granule_rate_numerator;
-  linear_data->gr_d = granule_rate_denominator;
+  stream->granulerate_n = granule_rate_numerator;
+  stream->granulerate_d = granule_rate_denominator;
+  stream->granuleshift = 0;
 
   return oggz_set_metric_internal (oggz, serialno, oggz_metric_default_linear,
-				   linear_data, 1);
+				   NULL, 1);
 }
 
 int

Modified: liboggz/trunk/src/liboggz/oggz.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz.c	2005-02-01 22:04:46 UTC (rev 816)
+++ liboggz/trunk/src/liboggz/oggz.c	2005-02-01 22:10:47 UTC (rev 817)
@@ -261,6 +261,12 @@
   ogg_stream_init (&stream->ogg_stream, (int)serialno);
 
   stream->content = OGGZ_CONTENT_UNKNOWN;
+  stream->nr_headers = 0;
+  stream->preroll = 0;
+  stream->granulerate_n = 1;
+  stream->granulerate_d = 1;
+  stream->basegranule = 0;
+  stream->granuleshift = 0;
 
   stream->delivered_non_b_o_s = 0;
   stream->b_o_s = 1;
@@ -389,7 +395,7 @@
   if (oggz == NULL) return OGGZ_ERR_BAD_OGGZ;
 
   if (serialno == -1) {
-    if (oggz->metric_internal)
+    if (oggz->metric_internal && oggz->metric_user_data)
       oggz_free (oggz->metric_user_data);
     oggz->metric = metric;
     oggz->metric_user_data = user_data;
@@ -398,7 +404,7 @@
     stream = oggz_get_stream (oggz, serialno);
     if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO;
 
-    if (stream->metric_internal)
+    if (stream->metric_internal && stream->metric_user_data)
       oggz_free (stream->metric_user_data);
     stream->metric = metric;
     stream->metric_user_data = user_data;

Modified: liboggz/trunk/src/liboggz/oggz_private.h
===================================================================
--- liboggz/trunk/src/liboggz/oggz_private.h	2005-02-01 22:04:46 UTC (rev 816)
+++ liboggz/trunk/src/liboggz/oggz_private.h	2005-02-01 22:10:47 UTC (rev 817)
@@ -74,8 +74,16 @@
 struct _oggz_stream_t {
   ogg_stream_state ogg_stream;
 
+  /** STATIC INFO */
   int content;
+  int nr_headers;
+  int preroll;
+  ogg_int64_t granulerate_n;
+  ogg_int64_t granulerate_d;
+  ogg_int64_t basegranule;
+  int granuleshift;
 
+  /** CURRENT STATE **/
   /* non b_o_s packet has been written (not just queued) */
   int delivered_non_b_o_s;
 
@@ -84,6 +92,7 @@
   ogg_int64_t granulepos;
   ogg_int64_t packetno;
 
+  /** CALLBACKS **/
   OggzMetric metric;
   void * metric_user_data;
   int metric_internal;


-- 
conrad



More information about the cvs-annodex mailing list