[xiph-commits] r3449 - in liboggz/trunk: include/oggz src/liboggz
src/tools
conrad at svn.annodex.net
conrad at svn.annodex.net
Tue Feb 12 18:45:34 PST 2008
Author: conrad
Date: 2008-02-12 18:45:34 -0800 (Tue, 12 Feb 2008)
New Revision: 3449
Modified:
liboggz/trunk/include/oggz/oggz_constants.h
liboggz/trunk/src/liboggz/oggz_auto.c
liboggz/trunk/src/liboggz/oggz_auto.h
liboggz/trunk/src/tools/oggz_tools.c
Log:
add basic support for (experimental) Ogg mapping for CELT codec.
This patch adds CELT header parsing and granulepos interpretation to
liboggz, so that CELT can be used with oggzdump, oggzmerge, oggz-validate
etc., and reports samplerate and channels in oggzinfo.
NB. This also expands the public OggzStreamContent enum to include
OGGZ_CONTENT_CELT
Modified: liboggz/trunk/include/oggz/oggz_constants.h
===================================================================
--- liboggz/trunk/include/oggz/oggz_constants.h 2008-02-12 09:42:40 UTC (rev 3448)
+++ liboggz/trunk/include/oggz/oggz_constants.h 2008-02-13 02:45:34 UTC (rev 3449)
@@ -110,6 +110,7 @@
OGGZ_CONTENT_FLAC0,
OGGZ_CONTENT_FLAC,
OGGZ_CONTENT_ANXDATA,
+ OGGZ_CONTENT_CELT,
OGGZ_CONTENT_UNKNOWN
} OggzStreamContent;
Modified: liboggz/trunk/src/liboggz/oggz_auto.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz_auto.c 2008-02-12 09:42:40 UTC (rev 3448)
+++ liboggz/trunk/src/liboggz/oggz_auto.c 2008-02-13 02:45:34 UTC (rev 3449)
@@ -273,6 +273,28 @@
}
static int
+auto_celt (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)
+{
+ unsigned char * header = op->packet;
+ ogg_int64_t granule_rate = 0;
+ int numheaders;
+
+ if (op->bytes < 56) return 0;
+
+ granule_rate = (ogg_int64_t) INT32_LE_AT(&header[40]);
+#ifdef DEBUG
+ printf ("Got celt sample rate %d\n", (int)granule_rate);
+#endif
+
+ oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT);
+
+ numheaders = (ogg_int64_t) INT32_LE_AT(&header[52]) + 2;
+ oggz_stream_set_numheaders (oggz, serialno, numheaders);
+
+ return 1;
+}
+
+static int
auto_cmml (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)
{
unsigned char * header = op->packet;
@@ -931,6 +953,7 @@
{"fLaC", 4, "Flac0", auto_flac0, auto_calc_flac, NULL},
{"\177FLAC", 4, "Flac", auto_flac, auto_calc_flac, NULL},
{"AnxData", 7, "AnxData", auto_anxdata, NULL, NULL},
+ {"CELT ", 8, "CELT", auto_celt, NULL, NULL},
{"", 0, "Unknown", NULL, NULL, NULL}
};
Modified: liboggz/trunk/src/liboggz/oggz_auto.h
===================================================================
--- liboggz/trunk/src/liboggz/oggz_auto.h 2008-02-12 09:42:40 UTC (rev 3448)
+++ liboggz/trunk/src/liboggz/oggz_auto.h 2008-02-13 02:45:34 UTC (rev 3449)
@@ -388,6 +388,46 @@
*/
+/*
+ * CELT (experimental)
+ * last updated 20080213
+ *
+ * Default field type: LITTLE ENDIAN unsigned integer
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| codec_id: Identifier char[8]: 'CELT ' | 0-3
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | 4-7
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| codec_version: char[20] | 8-11
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | 12-15
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | 16-19
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | 20-23
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | 24-27
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| version_id | 28-31
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| header_size | 32-35
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| mode | 36-39
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| sample_rate | 40-43
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| nb_channels | 44-47
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| bytes_per_packet | 48-51
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| extra_headers | 52-55
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ */
+
int oggz_auto_identify (OGGZ *oggz, ogg_page *og, long serialno);
#endif /* __OGGZ_AUTO_H__ */
Modified: liboggz/trunk/src/tools/oggz_tools.c
===================================================================
--- liboggz/trunk/src/tools/oggz_tools.c 2008-02-12 09:42:40 UTC (rev 3448)
+++ liboggz/trunk/src/tools/oggz_tools.c 2008-02-13 02:45:34 UTC (rev 3449)
@@ -176,6 +176,22 @@
}
static char *
+ot_celt_info (unsigned char * data, long len)
+{
+ char * buf;
+
+ if (len < 56) return NULL;
+
+ buf = malloc (60);
+
+ snprintf (buf, 60,
+ "\tAudio-Samplerate: %d Hz\n\tAudio-Channels: %d\n",
+ INT32_LE_AT(&data[40]), INT32_LE_AT(&data[44]));
+
+ return buf;
+}
+
+static char *
ot_flac_info (unsigned char * data, long len)
{
char * buf;
@@ -266,6 +282,7 @@
NULL, /* FLAC0 */
ot_flac_info, /* FLAC */
NULL, /* ANXDATA */
+ ot_celt_info, /* CELT */
NULL /* UNKOWN */
};
More information about the commits
mailing list