Changeset 3717
- Timestamp:
- 2008-09-16 02:31:48 (3 months ago)
- Files:
-
- liboggz/trunk/src/liboggz/oggz_auto.c (modified) (17 diffs)
- liboggz/trunk/src/liboggz/oggz_stream_private.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
liboggz/trunk/src/liboggz/oggz_auto.c
r3665 r3717 82 82 83 83 static int 84 auto_speex (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)85 { 86 unsigned char * header = op->packet;84 auto_speex (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 85 { 86 unsigned char * header = data; 87 87 ogg_int64_t granule_rate = 0; 88 88 int numheaders; 89 89 90 if ( op->bytes< 68) return 0;90 if (length < 68) return 0; 91 91 92 92 granule_rate = (ogg_int64_t) INT32_LE_AT(&header[36]); … … 104 104 105 105 static int 106 auto_vorbis (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)107 { 108 unsigned char * header = op->packet;106 auto_vorbis (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 107 { 108 unsigned char * header = data; 109 109 ogg_int64_t granule_rate = 0; 110 110 111 if ( op->bytes< 30) return 0;111 if (length < 30) return 0; 112 112 113 113 granule_rate = (ogg_int64_t) INT32_LE_AT(&header[12]); … … 135 135 136 136 static int 137 auto_theora (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)138 { 139 unsigned char * header = op->packet;137 auto_theora (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 138 { 139 unsigned char * header = data; 140 140 ogg_int32_t fps_numerator, fps_denominator; 141 141 char keyframe_granule_shift = 0; … … 143 143 144 144 /* TODO: this should check against 42 for the relevant version numbers */ 145 if ( op->bytes< 41) return 0;145 if (length < 41) return 0; 146 146 147 147 fps_numerator = INT32_BE_AT(&header[22]); … … 179 179 180 180 static int 181 auto_annodex (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)181 auto_annodex (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 182 182 { 183 183 /* Apply a zero metric */ … … 188 188 189 189 static int 190 auto_anxdata (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)191 { 192 unsigned char * header = op->packet;190 auto_anxdata (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 191 { 192 unsigned char * header = data; 193 193 ogg_int64_t granule_rate_numerator = 0, granule_rate_denominator = 0; 194 194 195 if ( op->bytes< 28) return 0;195 if (length < 28) return 0; 196 196 197 197 granule_rate_numerator = INT64_LE_AT(&header[8]); … … 210 210 211 211 static int 212 auto_flac0 (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)213 { 214 unsigned char * header = op->packet;212 auto_flac0 (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 213 { 214 unsigned char * header = data; 215 215 ogg_int64_t granule_rate = 0; 216 216 … … 229 229 230 230 static int 231 auto_flac (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)232 { 233 unsigned char * header = op->packet;231 auto_flac (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 232 { 233 unsigned char * header = data; 234 234 ogg_int64_t granule_rate = 0; 235 235 int numheaders; 236 236 237 if ( op->bytes< 51) return 0;237 if (length < 51) return 0; 238 238 239 239 granule_rate = (ogg_int64_t) (header[27] << 12) | (header[28] << 4) | … … 256 256 */ 257 257 static int 258 auto_oggpcm2 (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)259 { 260 unsigned char * header = op->packet;258 auto_oggpcm2 (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 259 { 260 unsigned char * header = data; 261 261 ogg_int64_t granule_rate; 262 262 263 if ( op->bytes< 28) return 0;263 if (length < 28) return 0; 264 264 265 265 granule_rate = (ogg_int64_t) INT32_BE_AT(&header[16]); … … 276 276 277 277 static int 278 auto_celt (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)279 { 280 unsigned char * header = op->packet;278 auto_celt (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 279 { 280 unsigned char * header = data; 281 281 ogg_int64_t granule_rate = 0; 282 282 int numheaders; 283 283 284 if ( op->bytes< 56) return 0;284 if (length < 56) return 0; 285 285 286 286 granule_rate = (ogg_int64_t) INT32_LE_AT(&header[40]); … … 298 298 299 299 static int 300 auto_cmml (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)301 { 302 unsigned char * header = op->packet;300 auto_cmml (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 301 { 302 unsigned char * header = data; 303 303 ogg_int64_t granule_rate_numerator = 0, granule_rate_denominator = 0; 304 304 int granuleshift; 305 305 306 if ( op->bytes< 28) return 0;306 if (length < 28) return 0; 307 307 308 308 granule_rate_numerator = INT64_LE_AT(&header[12]); 309 309 granule_rate_denominator = INT64_LE_AT(&header[20]); 310 if ( op->bytes> 28)310 if (length > 28) 311 311 granuleshift = (int)header[28]; 312 312 else … … 329 329 330 330 static int 331 auto_kate (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)332 { 333 unsigned char * header = op->packet;331 auto_kate (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 332 { 333 unsigned char * header = data; 334 334 ogg_int32_t gps_numerator, gps_denominator; 335 335 unsigned char granule_shift = 0; 336 336 int numheaders; 337 337 338 if ( op->bytes< 64) return 0;338 if (length < 64) return 0; 339 339 340 340 gps_numerator = INT32_LE_AT(&header[24]); … … 359 359 360 360 static int 361 auto_dirac (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)361 auto_dirac (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 362 362 { 363 363 char keyframe_granule_shift = 32; … … 367 367 info = malloc(sizeof(dirac_info)); 368 368 369 dirac_parse_info(info, op->packet, op->bytes); 370 369 dirac_parse_info(info, data, length); 371 370 372 371 /* … … 393 392 394 393 static int 395 auto_fisbone (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data)396 { 397 unsigned char * header = op->packet;394 auto_fisbone (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 395 { 396 unsigned char * header = data; 398 397 long fisbone_serialno; /* The serialno referred to in this fisbone */ 399 398 ogg_int64_t granule_rate_numerator = 0, granule_rate_denominator = 0; 400 399 int granuleshift, numheaders; 401 400 402 if ( op->bytes< 48) return 0;401 if (length < 48) return 0; 403 402 404 403 fisbone_serialno = (long) INT32_LE_AT(&header[12]); … … 430 429 431 430 static int 432 auto_fishead (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data) 433 { 434 if (!op->b_o_s) 435 { 436 return auto_fisbone(oggz, op, serialno, user_data); 437 } 438 431 auto_fishead (OGGZ * oggz, long serialno, unsigned char * data, long length, void * user_data) 432 { 439 433 oggz_set_granulerate (oggz, serialno, 0, 1); 440 434 … … 1126 1120 if (content < 0 || content >= OGGZ_CONTENT_UNKNOWN) { 1127 1121 return 0; 1128 } 1129 1130 oggz_auto_codec_ident[content].reader(oggz, op, serialno, user_data); 1131 return 0; 1122 } else if (content == OGGZ_CONTENT_SKELETON && !op->b_o_s) { 1123 return auto_fisbone(oggz, serialno, op->packet, op->bytes, user_data); 1124 } else { 1125 return oggz_auto_codec_ident[content].reader(oggz, serialno, op->packet, op->bytes, user_data); 1126 } 1132 1127 } 1133 1128 liboggz/trunk/src/liboggz/oggz_stream_private.h
r3391 r3717 36 36 typedef struct _oggz_stream_t oggz_stream_t; 37 37 38 typedef int (*OggzReadBOS) (OGGZ * oggz, long serialno, 39 unsigned char * data, long length, 40 void * user_data); 41 38 42 typedef struct { 39 43 const char *bos_str; 40 44 int bos_str_len; 41 45 const char *content_type; 42 OggzRead Packetreader;46 OggzReadBOS reader; 43 47 ogg_int64_t (*calculator)(ogg_int64_t now, oggz_stream_t *stream, 44 48 ogg_packet *op);