Changeset 689
- Timestamp:
- 2005-01-20 20:27:28 (4 years ago)
- Files:
-
- libannodex/trunk/include/annodex/anx_import.h (modified) (1 diff)
- libannodex/trunk/include/annodex/anx_track.h (modified) (1 diff)
- libannodex/trunk/include/annodex/anx_types.h (modified) (1 diff)
- libannodex/trunk/src/importers/anx_import_anx.c (modified) (5 diffs)
- libannodex/trunk/src/importers/anx_import_ogg.c (modified) (5 diffs)
- libannodex/trunk/src/importers/anx_import_sndfile.c (modified) (1 diff)
- libannodex/trunk/src/libannodex/anx_import.c (modified) (2 diffs)
- libannodex/trunk/src/libannodex/anx_import_private.h (modified) (1 diff)
- libannodex/trunk/src/libannodex/anx_read.c (modified) (1 diff)
- libannodex/trunk/src/libannodex/anx_track.c (modified) (2 diffs)
- libannodex/trunk/src/libannodex/anx_write.c (modified) (10 diffs)
- libannodex/trunk/src/tools/anxinfo.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libannodex/trunk/include/annodex/anx_import.h
r567 r689 155 155 anx_int64_t current_granule; 156 156 int eos; 157 anx_int64_t basegranule;/*< Base granule */ 158 int preroll; /*< Preroll */ 159 int granuleshift; /*< Granuleshift */ 157 160 }; 158 161 libannodex/trunk/include/annodex/anx_track.h
r60 r689 97 97 anx_int64_t granules); 98 98 99 /** 100 * Query the basegranule of a track in an annodex 101 * \param annodex an ANNODEX* handle 102 * \param serialno the serialno of the track to query 103 * \returns the basegranule 104 */ 105 long anx_track_get_basegranule (ANNODEX * annodex, long serialno); 106 107 /** 108 * Query the preroll of a track in an annodex 109 * \param annodex an ANNODEX* handle 110 * \param serialno the serialno of the track to query 111 * \returns the preroll 112 */ 113 int anx_track_get_preroll (ANNODEX * annodex, long serialno); 114 115 /** 116 * Query the granuleshift of a track in an annodex 117 * \param annodex an ANNODEX* handle 118 * \param serialno the serialno of the track to query 119 * \returns the granuleshift 120 */ 121 int anx_track_get_granuleshift(ANNODEX * annodex, long serialno); 122 99 123 #ifdef __cplusplus 100 124 } libannodex/trunk/include/annodex/anx_types.h
r566 r689 69 69 anx_int64_t granule_rate_n; /*< the granule rate numerator */ 70 70 anx_int64_t granule_rate_d; /*< the granule rate denominator */ 71 anx_int64_t basegranule; /*< Base granule */ 72 int preroll; /*< Preroll */ 73 int granuleshift; /*< Granuleshift */ 71 74 }; 72 75 libannodex/trunk/src/importers/anx_import_anx.c
r581 r689 157 157 static int 158 158 read_track (ANNODEX * anx, long serialno, char * id, char * content_type, 159 anx_int64_t granule_rate_n, anx_int64_t granule_rate_d,160 int nr_header_packets, void * user_data)159 anx_int64_t granule_rate_n, anx_int64_t granule_rate_d, 160 int nr_header_packets, void * user_data) 161 161 { 162 162 AnxAnxData * aad = (AnxAnxData *)user_data; … … 194 194 } 195 195 196 track->basegranule = anx_track_get_basegranule (anx, serialno); 197 track->preroll = anx_track_get_preroll (anx, serialno); 198 track->granuleshift = anx_track_get_granuleshift (anx, serialno); 199 196 200 if (add_track (aad, serialno, track) == NULL) return -1; 197 201 … … 320 324 m->custom_data = aad; 321 325 326 #ifdef DEBUG 327 printf ("anxanx_open: opening %s\n", path); 328 #endif 329 322 330 if ((anxr = anx_open ((char *)path, ANX_READ)) == NULL) 323 331 return NULL; … … 354 362 } 355 363 364 #ifdef DEBUG 365 printf ("anxanx_open: got media %p\n", (void *)m); 366 #endif 356 367 357 368 return m; … … 362 373 { 363 374 AnxAnxData * aad = (AnxAnxData *)media->custom_data; 375 376 #ifdef DEBUG 377 printf ("anxanx_read_update: in\n"); 378 #endif 364 379 365 380 do_read: libannodex/trunk/src/importers/anx_import_ogg.c
r599 r689 171 171 track->granule_rate_d = 1; 172 172 track->nr_header_packets = 3; 173 track->basegranule = 0; 174 track->preroll = 2; 175 track->granuleshift = 0; 173 176 } else if (!strncmp ((char *)&op->packet[0], "Speex ", 8)) { 174 177 track->content_type = SPEEX_CONTENT_TYPE; … … 176 179 track->granule_rate_d = 1; 177 180 track->nr_header_packets = 2 + (ogg_int64_t) INT32_LE_AT(&header[68]); 181 track->basegranule = 0; 182 track->preroll = 0; 183 track->granuleshift = 0; 178 184 } else if (!strncmp ((char *)&op->packet[1], "theora", 6)) { 179 185 char keyframe_granule_shift = 0; … … 186 192 keyframe_granule_shift |= (header[41] & 0xe0) /* 11100000 */ >> 5; 187 193 #endif 194 195 #if USE_ANNODEX2_GRANULERATE 188 196 track->granule_rate_n = INT32_BE_AT(&header[22]) * 189 197 (1 << keyframe_granule_shift) / 1000000; 190 198 track->granule_rate_d = INT32_BE_AT(&header[26]) / 1000000; 199 #else /* anx v3 */ 200 track->granule_rate_n = INT32_BE_AT(&header[22]) / 1000000; 201 track->granule_rate_d = INT32_BE_AT(&header[26]) / 1000000; 202 #endif 191 203 track->nr_header_packets = 3; 204 track->basegranule = 0; 205 track->preroll = 0; 206 track->granuleshift = keyframe_granule_shift; 192 207 } else if (!strncmp ((char *)&op->packet[1], "video", 5) && 193 208 !strncmp ((char *)&op->packet[9], "XVID", 4)) { … … 196 211 track->granule_rate_d = 1; 197 212 track->nr_header_packets = 2; 213 track->basegranule = 0; 214 track->preroll = 0; 215 track->granuleshift = 0; 198 216 } else { 199 217 anx_free (track); … … 309 327 m->current_time = start_time; 310 328 311 /* PADDING::: Fix here */ 312 aod = anx_malloc (sizeof (AnxOggData)); 329 aod = (AnxOggData *) anx_malloc (sizeof (AnxOggData)); 313 330 314 331 #ifdef DEBUG libannodex/trunk/src/importers/anx_import_sndfile.c
r567 r689 204 204 track->current_granule = 0; 205 205 track->eos = 0; 206 207 track->basegranule = 0; 208 track->preroll = 0; 209 track->granuleshift = 0; 206 210 207 211 if (end_time != -1.0) { libannodex/trunk/src/libannodex/anx_import.c
r581 r689 364 364 long * nr_header_packets, 365 365 anx_int64_t * granule_rate_n, 366 anx_int64_t * granule_rate_d) 366 anx_int64_t * granule_rate_d, 367 anx_int64_t * basegranule, 368 int * preroll, int * granuleshift) 367 369 { 368 370 AnxList * l; … … 379 381 *granule_rate_n = track->granule_rate_n; 380 382 *granule_rate_d = track->granule_rate_d; 383 *basegranule = track->basegranule; 384 *preroll = track->preroll; 385 *granuleshift = track->granuleshift; 381 386 return 0; 382 387 } libannodex/trunk/src/libannodex/anx_import_private.h
r581 r689 68 68 long * nr_header_packets, 69 69 anx_int64_t * granule_rate_n, 70 anx_int64_t * granule_rate_d); 70 anx_int64_t * granule_rate_d, 71 anx_int64_t * basegranule, 72 int * preroll, int * granuleshift); 71 73 72 74 int anx_media_current_track (AnxSource * source); libannodex/trunk/src/libannodex/anx_read.c
r677 r689 331 331 track->granule_rate_d = _le_64 (*((ogg_int64_t *)&data[28])); 332 332 track->nr_header_packets = _le_32 (*((ogg_int32_t *)&data[16])); 333 track->basegranule = _le_64 (*((ogg_int64_t *)&data[36])); 334 track->preroll = (int)_le_32 (*((ogg_int32_t *)&data[44])); 335 track->granuleshift = (int)(*((unsigned char *)&data[48])); 333 336 334 337 reader->tracks = anx_list_append (reader->tracks, track); 335 338 336 339 #ifdef DEBUG 337 printf ("Got fisbone for serialno %010ld\n\tgranule_rate %ld/%ld\t% d headers\t%s\t%s\n",340 printf ("Got fisbone for serialno %010ld\n\tgranule_rate %ld/%ld\t%ld headers\t%s\t%s\n", 338 341 track->serialno, 339 342 (long)track->granule_rate_n, 340 343 (long)track->granule_rate_d, 341 344 track->nr_header_packets, content_type, id); 345 printf ("\tbasegranule %lld\tpreroll %d\tgranuleshift %d\n", 346 track->basegranule, track->preroll, track->granuleshift); 342 347 #endif 343 348 libannodex/trunk/src/libannodex/anx_track.c
r75 r689 54 54 s->granule_rate_n = track->granule_rate_n; 55 55 s->granule_rate_d = track->granule_rate_d; 56 s->basegranule = track->basegranule; 57 s->preroll = track->preroll; 58 s->granuleshift = track->granuleshift; 59 60 #ifdef DEBUG 61 printf ("anx_track_clone: basegranule %lld\tpreroll %d\tgranuleshift %d\n", 62 s->basegranule, s->preroll, s->granuleshift); 63 #endif 56 64 57 65 return s; … … 244 252 } 245 253 254 long 255 anx_track_get_basegranule (ANNODEX * annodex, long serialno) 256 { 257 AnxTrack * track; 258 259 if (annodex == NULL) return -1L; 260 261 track = anx_get_track (annodex, serialno); 262 263 if (track == NULL || track->basegranule == -1) { 264 anx_set_error (annodex, ANX_ERR_NOTREADY); 265 return -1L; 266 } 267 268 return track->basegranule; 269 } 270 271 int 272 anx_track_get_preroll (ANNODEX * annodex, long serialno) 273 { 274 AnxTrack * track; 275 276 if (annodex == NULL) return -1; 277 278 track = anx_get_track (annodex, serialno); 279 280 if (track == NULL || track->preroll == -1) { 281 anx_set_error (annodex, ANX_ERR_NOTREADY); 282 return -1; 283 } 284 285 return track->preroll; 286 } 287 288 int 289 anx_track_get_granuleshift(ANNODEX * annodex, long serialno) 290 { 291 AnxTrack * track; 292 293 if (annodex == NULL) return -1; 294 295 track = anx_get_track (annodex, serialno); 296 297 if (track == NULL || track->granuleshift == -1) { 298 anx_set_error (annodex, ANX_ERR_NOTREADY); 299 return -1; 300 } 301 302 return track->granuleshift; 303 } libannodex/trunk/src/libannodex/anx_write.c
r675 r689 145 145 anx_writer_add_track (ANNODEX * annodex, AnxSource * media, int media_index, 146 146 char * id, char * content_type, long nr_header_packets, 147 anx_int64_t granule_rate_n, anx_int64_t granule_rate_d) 147 anx_int64_t granule_rate_n, anx_int64_t granule_rate_d, 148 anx_int64_t basegranule, int preroll, int granuleshift) 148 149 { 149 150 AnxWriter * writer = &annodex->x.writer; … … 164 165 track->granule_rate_n = granule_rate_n; 165 166 track->granule_rate_d = granule_rate_d; 167 track->basegranule = basegranule; 168 track->preroll = preroll; 169 track->granuleshift = granuleshift; 166 170 167 171 wsub->media = media; … … 204 208 long nr_header_packets; 205 209 anx_int64_t granule_rate, rate_interval; 210 anx_int64_t basegranule; 211 int preroll, granuleshift; 206 212 207 213 if (media != NULL) { … … 209 215 ret = anx_media_query_track (media, i, &id, &content_type, 210 216 &nr_header_packets, 211 &granule_rate, &rate_interval); 217 &granule_rate, &rate_interval, 218 &basegranule, &preroll, &granuleshift); 212 219 213 220 if (ret < 0) break; … … 217 224 #endif 218 225 anx_writer_add_track (annodex, media, i, id, content_type, 219 nr_header_packets, granule_rate, rate_interval); 226 nr_header_packets, granule_rate, rate_interval, 227 basegranule, preroll, granuleshift); 220 228 } 221 229 … … 468 476 if (track == NULL) return -1; 469 477 478 #ifdef DEBUG 479 printf ("anx_init_fisbone_packet: basegranule %lld\tpreroll %d\tgranuleshift %d\n", 480 track->basegranule, track->preroll, track->granuleshift); 481 #endif 482 470 483 params = anx_params_append (params, "Content-Type", track->content_type); 471 484 params = anx_params_append (params, "ID", track->id); … … 501 514 b += 8; 502 515 503 /* XXX: basegranule */ 504 *(ogg_int64_t *)b = _le_64 (0); 505 b += 8; 506 507 /* XXX: preroll */ 508 *(ogg_int64_t *)b = _le_32 (0); 516 *(ogg_int64_t *)b = _le_64 (track->basegranule); 517 b += 8; 518 519 *(ogg_int32_t *)b = _le_32 (track->preroll); 509 520 b += 4; 510 521 511 /* XXX: granuleshift */ 512 *(unsigned char *)b = 0; 522 *(unsigned char *)b = (unsigned char)track->granuleshift; 513 523 b += 1; 514 524 … … 988 998 if (writer->need_fishead) { 989 999 #ifdef DEBUG 990 printf ("anx_writer_sync: NEED mapping\n");1000 printf ("anx_writer_sync: NEED fishead\n"); 991 1001 #endif 992 1002 anx_init_fishead_packet (annodex); … … 1037 1047 } else if (writer->need_fisbone) { 1038 1048 #ifdef DEBUG 1039 printf ("anx_writer_sync: NEED anxdata\n");1049 printf ("anx_writer_sync: NEED fisbone\n"); 1040 1050 #endif 1041 1051 for (l = writer->tracks; l; l = l->next) { … … 1290 1300 writer->anno_track.granule_rate_n = CMML_GRANULE_RATE_N; 1291 1301 writer->anno_track.granule_rate_d = CMML_GRANULE_RATE_D; 1302 writer->anno_track.basegranule = 0; 1303 writer->anno_track.preroll = 0; 1304 writer->anno_track.granuleshift = 0; 1292 1305 1293 1306 writer->eos = 0; /* end of stream */ libannodex/trunk/src/tools/anxinfo.c
r85 r689 220 220 s->id ? s->id : "-- unidentified --", 221 221 s->serialno, buf, s->nr_header_packets, s->content_type); 222 222 printf ("\tbasegranule %lld\tpreroll %d\tgranuleshift %d\n", 223 s->basegranule, 224 s->preroll, 225 anx_track_get_granuleshift (anx, s->serialno)); 223 226 } 224 227