[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