Changeset 3449

Show
Ignore:
Timestamp:
2008-02-12 18:45:34 (10 months ago)
Author:
conrad
Message:

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

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • liboggz/trunk/include/oggz/oggz_constants.h

    r3322 r3449  
    111111  OGGZ_CONTENT_FLAC, 
    112112  OGGZ_CONTENT_ANXDATA, 
     113  OGGZ_CONTENT_CELT, 
    113114  OGGZ_CONTENT_UNKNOWN 
    114115} OggzStreamContent; 
  • liboggz/trunk/src/liboggz/oggz_auto.c

    r3390 r3449  
    269269 
    270270  oggz_stream_set_numheaders (oggz, serialno, 3); 
     271 
     272  return 1; 
     273} 
     274 
     275static int 
     276auto_celt (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data) 
     277{ 
     278  unsigned char * header = op->packet; 
     279  ogg_int64_t granule_rate = 0; 
     280  int numheaders; 
     281 
     282  if (op->bytes < 56) return 0; 
     283 
     284  granule_rate = (ogg_int64_t) INT32_LE_AT(&header[40]); 
     285#ifdef DEBUG 
     286  printf ("Got celt sample rate %d\n", (int)granule_rate); 
     287#endif 
     288 
     289  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
     290 
     291  numheaders = (ogg_int64_t) INT32_LE_AT(&header[52]) + 2; 
     292  oggz_stream_set_numheaders (oggz, serialno, numheaders); 
    271293 
    272294  return 1; 
     
    932954  {"\177FLAC", 4, "Flac", auto_flac, auto_calc_flac, NULL}, 
    933955  {"AnxData", 7, "AnxData", auto_anxdata, NULL, NULL}, 
     956  {"CELT    ", 8, "CELT", auto_celt, NULL, NULL}, 
    934957  {"", 0, "Unknown", NULL, NULL, NULL} 
    935958};  
  • liboggz/trunk/src/liboggz/oggz_auto.h

    r2339 r3449  
    389389 */ 
    390390 
     391/* 
     392 * CELT (experimental) 
     393 * last updated 20080213 
     394 * 
     395 * Default field type: LITTLE ENDIAN unsigned integer 
     396 
     397 0                   1                   2                   3 
     398 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 
     399+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     400| codec_id: Identifier char[8]: 'CELT    '                      | 0-3 
     401+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     402|                                                               | 4-7 
     403+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     404| codec_version: char[20]                                       | 8-11 
     405+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     406|                                                               | 12-15 
     407+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     408|                                                               | 16-19 
     409+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     410|                                                               | 20-23 
     411+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     412|                                                               | 24-27 
     413+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     414| version_id                                                    | 28-31 
     415+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     416| header_size                                                   | 32-35 
     417+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     418| mode                                                          | 36-39 
     419+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     420| sample_rate                                                   | 40-43 
     421+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     422| nb_channels                                                   | 44-47 
     423+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     424| bytes_per_packet                                              | 48-51 
     425+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     426| extra_headers                                                 | 52-55 
     427+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
     428 
     429 */ 
     430 
    391431int oggz_auto_identify (OGGZ *oggz, ogg_page *og, long serialno); 
    392432 
  • liboggz/trunk/src/tools/oggz_tools.c

    r3413 r3449  
    177177 
    178178static char * 
     179ot_celt_info (unsigned char * data, long len) 
     180{ 
     181  char * buf; 
     182 
     183  if (len < 56) return NULL; 
     184 
     185  buf = malloc (60); 
     186 
     187  snprintf (buf, 60, 
     188            "\tAudio-Samplerate: %d Hz\n\tAudio-Channels: %d\n", 
     189            INT32_LE_AT(&data[40]), INT32_LE_AT(&data[44])); 
     190 
     191  return buf; 
     192} 
     193 
     194static char * 
    179195ot_flac_info (unsigned char * data, long len) 
    180196{ 
     
    267283  ot_flac_info,     /* FLAC */ 
    268284  NULL,             /* ANXDATA */ 
     285  ot_celt_info,     /* CELT */ 
    269286  NULL              /* UNKOWN */ 
    270287};