[cvs-annodex] commit (/annodex): liboggz/trunk/include/oggz/oggz_read.h liboggz/trunk/src/liboggz/oggz.c liboggz/trunk/src/liboggz/oggz_private.h liboggz/trunk/src/liboggz/oggz_read.c liboggz/trunk/src/tools/oggzmerge.c

conrad nobody at lists.annodex.net
Mon Sep 20 18:17:25 EST 2004


Update of /annodex (new revision 588)

Modified files:
   liboggz/trunk/include/oggz/oggz_read.h
   liboggz/trunk/src/liboggz/oggz.c
   liboggz/trunk/src/liboggz/oggz_private.h
   liboggz/trunk/src/liboggz/oggz_read.c
   liboggz/trunk/src/tools/oggzmerge.c

Log Message:
add serialno argument to oggz_read_page callbacks

Modified: liboggz/trunk/include/oggz/oggz_read.h
===================================================================
--- liboggz/trunk/include/oggz/oggz_read.h	2004-09-20 06:57:35 UTC (rev 587)
+++ liboggz/trunk/include/oggz/oggz_read.h	2004-09-20 08:17:24 UTC (rev 588)
@@ -104,24 +104,31 @@
  * \returns 0 to continue, non-zero to instruct OGGZ to stop.
  */
 typedef int (*OggzReadPage) (OGGZ * oggz, const ogg_page * og,
-			     void * user_data);
+			     long serialno, void * user_data);
 
 /**
  * Set a callback for Oggz to call when a new Ogg page is found in the
  * stream.
  *
  * \param oggz An OGGZ handle previously opened for reading
+ * \param serialno Identify the logical bitstream in \a oggz to attach
+ * this callback to, or -1 to attach this callback to all unattached
+ * logical bitstreams in \a oggz.
  * \param read_page Your OggzReadPage callback function
  * \param user_data Arbitrary data you wish to pass to your callback
  * \retval 0 Success
  * \retval OGGZ_ERR_BAD_OGGZ \a oggz does not refer to an existing OGGZ
  * \retval OGGZ_ERR_INVALID Operation not suitable for this OGGZ
  *
+ * \note Values of \a serialno other than -1 allows you to specify different
+ * callback functions for each logical bitstream.
+ *
  * \note It is safe to call this callback from within an OggzReadPage
  * function, in order to specify that subsequent pages should be handled
  * by a different OggzReadPage function.
  */
-int oggz_set_read_page (OGGZ * oggz, OggzReadPage read_page, void * user_data);
+int oggz_set_read_page (OGGZ * oggz, long serialno,
+			OggzReadPage read_page, void * user_data);
 
 
 /**

Modified: liboggz/trunk/src/liboggz/oggz.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz.c	2004-09-20 06:57:35 UTC (rev 587)
+++ liboggz/trunk/src/liboggz/oggz.c	2004-09-20 08:17:24 UTC (rev 588)
@@ -273,6 +273,8 @@
   stream->order_user_data = NULL;
   stream->read_packet = NULL;
   stream->read_user_data = NULL;
+  stream->read_page = NULL;
+  stream->read_page_user_data = NULL;
 
   oggz_vector_insert_p (oggz->streams, stream);
 

Modified: liboggz/trunk/src/liboggz/oggz_private.h
===================================================================
--- liboggz/trunk/src/liboggz/oggz_private.h	2004-09-20 06:57:35 UTC (rev 587)
+++ liboggz/trunk/src/liboggz/oggz_private.h	2004-09-20 08:17:24 UTC (rev 588)
@@ -49,7 +49,7 @@
 
 typedef int (*OggzReadPacket) (OGGZ * oggz, ogg_packet * op, long serialno,
 			       void * user_data);
-typedef int (*OggzReadPage) (OGGZ * oggz, const ogg_page * og,
+typedef int (*OggzReadPage) (OGGZ * oggz, const ogg_page * og, long serialno,
 			     void * user_data);
 
 typedef ogg_int64_t (*OggzMetric) (OGGZ * oggz, long serialno,
@@ -88,6 +88,9 @@
 
   OggzReadPacket read_packet;
   void * read_user_data;
+
+  OggzReadPage read_page;
+  void * read_page_user_data;
 } oggz_stream_t;
 
 struct _OggzReader {

Modified: liboggz/trunk/src/liboggz/oggz_read.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz_read.c	2004-09-20 06:57:35 UTC (rev 587)
+++ liboggz/trunk/src/liboggz/oggz_read.c	2004-09-20 08:17:24 UTC (rev 588)
@@ -136,9 +136,11 @@
 }
 
 int
-oggz_set_read_page (OGGZ * oggz, OggzReadPage read_page, void * user_data)
+oggz_set_read_page (OGGZ * oggz, long serialno, OggzReadPage read_page,
+		    void * user_data)
 {
   OggzReader * reader;
+  oggz_stream_t * stream;
 
   if (oggz == NULL) return OGGZ_ERR_BAD_OGGZ;
 
@@ -148,9 +150,22 @@
     return OGGZ_ERR_INVALID;
   }
 
-  reader->read_page = read_page;
-  reader->read_page_user_data = user_data;
+  if (serialno == -1) {
+    reader->read_page = read_page;
+    reader->read_page_user_data = user_data;
+  } else {
+    stream = oggz_get_stream (oggz, serialno);
+#if 0
+    if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO;
+#else
+    if (stream == NULL)
+      stream = oggz_add_stream (oggz, serialno);
+#endif
 
+    stream->read_page = read_page;
+    stream->read_page_user_data = user_data;
+  }
+
   return 0;
 }
 
@@ -333,8 +348,12 @@
       }
     }
 
-    if (reader->read_page) {
-      cb_ret = reader->read_page (oggz, &og, reader->read_page_user_data);
+    if (stream->read_page) {
+      cb_ret =
+	stream->read_page (oggz, &og, serialno, stream->read_page_user_data);
+    } else if (reader->read_page) {
+      cb_ret = reader->read_page (oggz, &og, serialno,
+				  reader->read_page_user_data);
     }
 
 #if 0

Modified: liboggz/trunk/src/tools/oggzmerge.c
===================================================================
--- liboggz/trunk/src/tools/oggzmerge.c	2004-09-20 06:57:35 UTC (rev 587)
+++ liboggz/trunk/src/tools/oggzmerge.c	2004-09-20 08:17:24 UTC (rev 588)
@@ -43,9 +43,6 @@
 
 #define READ_SIZE 4096
 
-static int
-read_page (OGGZ * oggz, const ogg_page * og, void * user_data);
-
 static void
 usage (char * progname)
 {
@@ -139,6 +136,16 @@
 }
 
 static int
+read_page (OGGZ * oggz, const ogg_page * og, long serialno, void * user_data)
+{
+  OMInput * input = (OMInput *) user_data;
+
+  input->og = _ogg_page_copy (og);
+
+  return OGGZ_STOP_OK;
+}
+
+static int
 omdata_add_input (OMData * omdata, FILE * infile)
 {
   OMInput * input;
@@ -151,7 +158,7 @@
   input->reader = oggz_open_stdio (infile, OGGZ_READ|OGGZ_AUTO);
   input->og = NULL;
 
-  oggz_set_read_page (input->reader, read_page, input);
+  oggz_set_read_page (input->reader, -1, read_page, input);
 
   nfiles = oggz_table_size (omdata->inputs);
   if (!oggz_table_insert (omdata->inputs, nfiles++, input)) {
@@ -163,16 +170,6 @@
 }
 
 static int
-read_page (OGGZ * oggz, const ogg_page * og, void * user_data)
-{
-  OMInput * input = (OMInput *) user_data;
-
-  input->og = _ogg_page_copy (og);
-
-  return OGGZ_STOP_OK;
-}
-
-static int
 oggz_merge (OMData * omdata, FILE * outfile)
 {
   OMInput * input;


-- 
conrad



More information about the cvs-annodex mailing list