Changeset 3790
- Timestamp:
- 2008-11-17 13:34:54 (2 months ago)
- Files:
-
- liboggz/trunk/src/liboggz/oggz_read.c (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
liboggz/trunk/src/liboggz/oggz_read.c
r3788 r3790 121 121 } else { 122 122 stream = oggz_get_stream (oggz, serialno); 123 #if 0124 if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO;125 #else126 123 if (stream == NULL) 127 124 stream = oggz_add_stream (oggz, serialno); 128 #endif129 125 130 126 stream->read_packet = read_packet; … … 155 151 } else { 156 152 stream = oggz_get_stream (oggz, serialno); 157 #if 0158 if (stream == NULL) return OGGZ_ERR_BAD_SERIALNO;159 #else160 153 if (stream == NULL) 161 154 stream = oggz_add_stream (oggz, serialno); 162 #endif163 155 164 156 stream->read_page = read_page; … … 170 162 171 163 /* 172 * oggz_ get_next_page_7(oggz, og, do_read)164 * oggz_read_get_next_page (oggz, og, do_read) 173 165 * 174 * MODIFIED COPY OF CODE FROM BELOW SEEKING STUFF 166 * This differs from oggz_get_next_page() in oggz_seek.c in that it 167 * does not attempt to call oggz_io_read() if the sync buffer is empty. 175 168 * 176 169 * retrieves the next page. … … 180 173 */ 181 174 static oggz_off_t 182 oggz_ get_next_page_7(OGGZ * oggz, ogg_page * og)175 oggz_read_get_next_page (OGGZ * oggz, ogg_page * og) 183 176 { 184 177 OggzReader * reader = &oggz->x.reader; 185 #if _UNMODIFIED186 char * buffer;187 #endif188 178 long bytes = 0, more; 189 179 oggz_off_t page_offset = 0, ret; … … 195 185 if (more == 0) { 196 186 page_offset = 0; 197 #if _UMMODIFIED_198 buffer = ogg_sync_buffer (&reader->ogg_sync, CHUNKSIZE);199 if ((bytes = oggz_io_read (oggz, buffer, CHUNKSIZE)) == 0) {200 #if 0201 if (ferror (oggz->file)) {202 oggz_set_error (oggz, OGGZ_ERR_SYSTEM);203 return -1;204 }205 #endif206 }207 208 if (bytes == 0) {209 return -2;210 }211 212 ogg_sync_wrote(&reader->ogg_sync, bytes);213 #else214 187 return -2; 215 #endif216 188 } else if (more < 0) { 217 189 #ifdef DEBUG_VERBOSE … … 251 223 252 224 OggzBufferedPacket * 253 oggz_read_new_pbuffer_entry(OGGZ *oggz, ogg_packet *packet, 254 ogg_int64_t granulepos, long serialno, oggz_stream_t * stream, 225 oggz_read_new_pbuffer_entry(OGGZ *oggz, ogg_packet *packet, 226 ogg_int64_t granulepos, long serialno, oggz_stream_t * stream, 255 227 OggzReader *reader) { 256 228 … … 271 243 void 272 244 oggz_read_free_pbuffer_entry(OggzBufferedPacket *p) { 273 245 274 246 free(p->packet.packet); 275 247 free(p); … … 284 256 if (p->calced_granulepos == -1 && p->stream->last_granulepos != -1) { 285 257 int content = oggz_stream_get_content(p->oggz, p->serialno); 286 p->calced_granulepos = 258 p->calced_granulepos = 287 259 oggz_auto_calculate_gp_backwards(content, p->stream->last_granulepos, 288 260 p->stream, &(p->packet), p->stream->last_packet); 289 261 290 262 p->stream->last_granulepos = p->calced_granulepos; 291 263 p->stream->last_packet = &(p->packet); … … 316 288 317 289 if (p->stream->read_packet) { 318 p->stream->read_packet(p->oggz, &(p->packet), p->serialno, 290 p->stream->read_packet(p->oggz, &(p->packet), p->serialno, 319 291 p->stream->read_user_data); 320 292 } else if (p->reader->read_packet) { 321 p->reader->read_packet(p->oggz, &(p->packet), p->serialno, 293 p->reader->read_packet(p->oggz, &(p->packet), p->serialno, 322 294 p->reader->read_user_data); 323 295 } … … 405 377 406 378 stream->packetno++; 407 379 408 380 /* got a packet. process it */ 409 381 granulepos = op->granulepos; 410 382 411 383 content = oggz_stream_get_content(oggz, serialno); 412 384 413 385 /* 414 386 * if we have no metrics for this stream yet, then generate them 415 */ 416 if 387 */ 388 if 417 389 ( 418 (!stream->metric || (content == OGGZ_CONTENT_SKELETON)) 419 && 390 (!stream->metric || (content == OGGZ_CONTENT_SKELETON)) 391 && 420 392 (oggz->flags & OGGZ_AUTO) 421 ) 393 ) 422 394 { 423 395 oggz_auto_read_bos_packet (oggz, op, serialno, NULL); … … 426 398 /* attempt to determine granulepos for this packet */ 427 399 if (oggz->flags & OGGZ_AUTO) { 428 reader->current_granulepos = 429 oggz_auto_calculate_granulepos (content, granulepos, stream, op); 400 reader->current_granulepos = 401 oggz_auto_calculate_granulepos (content, granulepos, stream, op); 430 402 /* make sure that we accept any "real" gaps in the granulepos 431 403 */ … … 437 409 } 438 410 stream->last_granulepos = reader->current_granulepos; 439 411 440 412 /* set unit on last packet of page */ 441 if 413 if 442 414 ( 443 415 (oggz->metric || stream->metric) && reader->current_granulepos != -1 444 ) 416 ) 445 417 { 446 418 reader->current_unit = … … 451 423 oggz_auto_read_comments (oggz, stream, serialno, op); 452 424 } 453 425 454 426 if (oggz->flags & OGGZ_AUTO) { 455 427 456 428 /* 457 * while we are getting invalid granulepos values, store the 429 * while we are getting invalid granulepos values, store the 458 430 * incoming packets in a dlist */ 459 431 if (reader->current_granulepos == -1) { 460 432 OggzBufferedPacket *p = oggz_read_new_pbuffer_entry( 461 oggz, &packet, reader->current_granulepos, 433 oggz, &packet, reader->current_granulepos, 462 434 serialno, stream, reader); 463 435 … … 477 449 478 450 /* 479 * fix up the stream granulepos 451 * fix up the stream granulepos 480 452 */ 481 453 stream->last_granulepos = gp_stored; … … 483 455 if (!oggz_dlist_is_empty(oggz->packet_buffer)) { 484 456 OggzBufferedPacket *p = oggz_read_new_pbuffer_entry( 485 oggz, &packet, reader->current_granulepos, 457 oggz, &packet, reader->current_granulepos, 486 458 serialno, stream, reader); 487 459 … … 514 486 if (cb_ret == OGGZ_STOP_OK || cb_ret == OGGZ_STOP_ERR) return cb_ret; 515 487 516 if(oggz_ get_next_page_7(oggz, &og) < 0)488 if(oggz_read_get_next_page (oggz, &og) < 0) 517 489 return OGGZ_READ_EMPTY; /* eof. leave uninitialized */ 518 490 … … 543 515 oggz_auto_identify_page (oggz, &og, serialno); 544 516 } 545 517 546 518 os = &stream->ogg_stream; 547 519 … … 567 539 } 568 540 569 #if 0570 /* bitrate tracking; add the header's bytes here, the body bytes571 are done by packet above */572 vf->bittrack+=og.header_len*8;573 #endif574 575 541 ogg_stream_pagein(os, &og); 576 542 } … … 602 568 cb_ret = oggz_read_sync (oggz); 603 569 604 #if 0605 if (cb_ret == OGGZ_READ_EMPTY) {606 /* If there's nothing to read yet, don't return 0 (eof) */607 if (reader->current_unit == 0) cb_ret = 0;608 else {609 #if 0610 printf ("oggz_read: EMPTY, current_unit %ld != 0\n",611 reader->current_unit);612 return 0;613 #endif614 }615 }616 #endif617 618 570 while (cb_ret != OGGZ_STOP_ERR && cb_ret != OGGZ_STOP_OK && 619 571 bytes_read > 0 && remaining > 0) { 620 572 bytes = MIN (remaining, CHUNKSIZE); 621 573 buffer = ogg_sync_buffer (&reader->ogg_sync, bytes); 622 if ((bytes_read = (long) oggz_io_read (oggz, buffer, bytes)) == 0) { 623 /* schyeah! */ 624 } 574 bytes_read = (long) oggz_io_read (oggz, buffer, bytes); 625 575 if (bytes_read == OGGZ_ERR_SYSTEM) { 626 576 return OGGZ_ERR_SYSTEM; … … 629 579 if (bytes_read > 0) { 630 580 ogg_sync_wrote (&reader->ogg_sync, bytes_read); 631 581 632 582 remaining -= bytes_read; 633 583 nread += bytes_read; 634 584 635 585 cb_ret = oggz_read_sync (oggz); 636 586 } … … 686 636 cb_ret = oggz_read_sync (oggz); 687 637 688 #if 0689 if (cb_ret == OGGZ_READ_EMPTY) {690 /* If there's nothing to read yet, don't return 0 (eof) */691 if (reader->current_unit == 0) cb_ret = 0;692 else return 0;693 }694 #endif695 696 638 while (cb_ret != OGGZ_STOP_ERR && cb_ret != OGGZ_STOP_OK && 697 639 /* !oggz->eos && */ remaining > 0) {