[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