Changeset 3377

Show
Ignore:
Timestamp:
2008-01-23 20:55:20 (10 months ago)
Author:
conrad
Message:

implement numheaders for all codecs (esp. those with variable extra_headers,
ie. speex, flac, skeleton)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • liboggz/trunk/src/liboggz/oggz.c

    r3322 r3377  
    325325 
    326326  stream->content = OGGZ_CONTENT_UNKNOWN; 
    327   stream->nr_headers = 0; 
     327  stream->numheaders = 3; /* Default to 3 headers for Ogg logical bitstreams */ 
    328328  stream->preroll = 0; 
    329329  stream->granulerate_n = 1; 
  • liboggz/trunk/src/liboggz/oggz_auto.c

    r3367 r3377  
    3939#include "config.h" 
    4040 
    41 #if OGGZ_CONFIG_READ 
    4241#include <stdlib.h> 
    4342#include <string.h> 
     
    5756                            ogg_int64_t granule_rate_denominator); 
    5857 
     58#define INT16_BE_AT(x) _be_16((*(ogg_int32_t *)(x))) 
    5959#define INT32_LE_AT(x) _le_32((*(ogg_int32_t *)(x))) 
    6060#define INT32_BE_AT(x) _be_32((*(ogg_int32_t *)(x))) 
     
    6464 
    6565static int 
     66oggz_stream_set_numheaders (OGGZ * oggz, long serialno, int numheaders) 
     67{ 
     68  oggz_stream_t * stream; 
     69 
     70  if (oggz == NULL) return OGGZ_ERR_BAD_OGGZ; 
     71 
     72  stream = oggz_get_stream (oggz, serialno); 
     73  if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO; 
     74 
     75  stream->numheaders = numheaders; 
     76 
     77  return 0; 
     78} 
     79 
     80static int 
    6681auto_speex (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data) 
    6782{ 
    6883  unsigned char * header = op->packet; 
    6984  ogg_int64_t granule_rate = 0; 
     85  int numheaders; 
    7086 
    7187  if (op->bytes < 68) return 0; 
     
    7894  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
    7995 
     96  numheaders = (ogg_int64_t) INT32_LE_AT(&header[68]) + 2; 
     97  oggz_stream_set_numheaders (oggz, serialno, numheaders); 
     98 
    8099  return 1; 
    81100} 
     
    95114 
    96115  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
     116 
     117  oggz_stream_set_numheaders (oggz, serialno, 3); 
    97118 
    98119  return 1; 
     
    148169  oggz_set_granuleshift (oggz, serialno, keyframe_shift); 
    149170 
     171  oggz_stream_set_numheaders (oggz, serialno, 3); 
     172 
    150173  return 1; 
    151174} 
     
    196219  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
    197220 
     221  oggz_stream_set_numheaders (oggz, serialno, 3); 
     222 
    198223  return 1; 
    199224} 
     
    204229  unsigned char * header = op->packet; 
    205230  ogg_int64_t granule_rate = 0; 
     231  int numheaders; 
    206232 
    207233  if (op->bytes < 51) return 0; 
     
    215241  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
    216242 
     243  numheaders = INT16_BE_AT(&header[7]); 
     244  oggz_stream_set_numheaders (oggz, serialno, numheaders); 
     245 
    217246  return 1; 
    218247} 
     
    236265 
    237266  oggz_set_granulerate (oggz, serialno, granule_rate, OGGZ_AUTO_MULT); 
     267 
     268  oggz_stream_set_numheaders (oggz, serialno, 3); 
    238269 
    239270  return 1; 
     
    266297  oggz_set_granuleshift (oggz, serialno, granuleshift); 
    267298 
     299  oggz_stream_set_numheaders (oggz, serialno, 3); 
     300 
    268301  return 1; 
    269302} 
     
    275308  long fisbone_serialno; /* The serialno referred to in this fisbone */ 
    276309  ogg_int64_t granule_rate_numerator = 0, granule_rate_denominator = 0; 
    277   int granuleshift
     310  int granuleshift, numheaders
    278311 
    279312  if (op->bytes < 48) return 0; 
     
    298331                        OGGZ_AUTO_MULT * granule_rate_denominator); 
    299332  oggz_set_granuleshift (oggz, fisbone_serialno, granuleshift); 
     333 
     334  /* Increment the number of headers for this stream */ 
     335  numheaders = oggz_stream_get_numheaders (oggz, serialno); 
     336  oggz_stream_set_numheaders (oggz, serialno, numheaders+1); 
    300337                                 
    301338  return 1; 
     
    311348   
    312349  oggz_set_granulerate (oggz, serialno, 0, 1); 
     350 
     351  /* For skeleton, numheaders will get incremented as each header is seen */ 
     352  oggz_stream_set_numheaders (oggz, serialno, 1); 
    313353   
    314354  return 1; 
     
    10051045} 
    10061046 
    1007 #endif /* OGGZ_CONFIG_READ */ 
  • liboggz/trunk/src/liboggz/oggz_byteorder.h

    r1091 r3377  
    6262} 
    6363 
    64 #ifdef _UNUSED_ 
    6564static  unsigned short 
    6665_be_16 (unsigned short s) 
     
    7372  return ret; 
    7473} 
    75 #endif /* _UNUSED_ */ 
    7674 
    7775static  ogg_uint32_t 
  • liboggz/trunk/src/liboggz/oggz_private.h

    r3365 r3377  
    8181  /** STATIC INFO */ 
    8282  int content; 
    83   int nr_headers; 
     83  int numheaders; 
    8484  int preroll; 
    8585  ogg_int64_t granulerate_n; 
  • liboggz/trunk/src/liboggz/oggz_stream.c

    r3375 r3377  
    8484  if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO; 
    8585 
    86   /*return stream->numheaders;*/ 
    87   return 3; 
     86  return stream->numheaders; 
    8887} 
    8988