Show
Ignore:
Timestamp:
2008-03-20 03:30:14 (9 months ago)
Author:
conrad
Message:

add Kate support to liboggz and oggzinfo, oggzdump, oggzrip etc.
See http://wiki.xiph.org/index.php/OggKate. Patch from ogg.k.ogg.k

Files:

Legend:

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

    r3450 r3512  
    141141  int keyframe_shift; 
    142142 
     143  /* TODO: this should check against 42 for the relevant version numbers */ 
    143144  if (op->bytes < 41) return 0; 
    144145 
     
    158159#else 
    159160  keyframe_granule_shift = (char) ((header[40] & 0x03) << 3); 
    160   keyframe_granule_shift |= (header[41] & 0xe0) >> 5; 
     161  keyframe_granule_shift |= (header[41] & 0xe0) >> 5; /* see TODO above */ 
    161162  keyframe_shift = keyframe_granule_shift; 
    162163#endif 
     
    322323 
    323324  oggz_stream_set_numheaders (oggz, serialno, 3); 
     325 
     326  return 1; 
     327} 
     328 
     329static int 
     330auto_kate (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data) 
     331{ 
     332  unsigned char * header = op->packet; 
     333  ogg_int32_t gps_numerator, gps_denominator; 
     334  unsigned char granule_shift = 0; 
     335  int numheaders; 
     336 
     337  if (op->bytes < 64) return 0; 
     338 
     339  gps_numerator = INT32_LE_AT(&header[24]); 
     340  gps_denominator = INT32_LE_AT(&header[28]); 
     341 
     342  granule_shift = (header[15]); 
     343  numheaders = (header[11]); 
     344 
     345#ifdef DEBUG 
     346  printf ("Got kate gps %d/%d, granule shift %d\n", 
     347          gps_numerator, gps_denominator, granule_shift); 
     348#endif 
     349 
     350  oggz_set_granulerate (oggz, serialno, gps_numerator, 
     351                        OGGZ_AUTO_MULT * gps_denominator); 
     352  oggz_set_granuleshift (oggz, serialno, granule_shift); 
     353  
     354  oggz_stream_set_numheaders (oggz, serialno, numheaders); 
    324355 
    325356  return 1; 
     
    10121043  {"AnxData", 7, "AnxData", auto_anxdata, NULL, NULL}, 
    10131044  {"CELT    ", 8, "CELT", auto_celt, auto_calc_celt, NULL}, 
     1045  {"\200kate\0\0\0\0", 9, "Kate", auto_kate, NULL, NULL}, 
    10141046  {"", 0, "Unknown", NULL, NULL, NULL} 
    10151047};  
     
    11061138        offset = 7; 
    11071139      break; 
     1140    case OGGZ_CONTENT_KATE: 
     1141      if (op->bytes > 9 && memcmp (op->packet, "\201kate\0\0\0\0", 9) == 0) { 
     1142        offset = 9; 
     1143      } 
     1144      break; 
    11081145    case OGGZ_CONTENT_FLAC: 
    11091146      if (op->bytes > 4 && (op->packet[0] & 0x7) == 4) { 
     
    11111148        offset = 4; 
    11121149      } 
     1150      break; 
    11131151    default: 
    11141152      break;