| 440 | | |
|---|
| 441 | | /* |
|---|
| 442 | | * while we are getting invalid granulepos values, store the incoming |
|---|
| 443 | | * packets in a dlist */ |
|---|
| 444 | | if (reader->current_granulepos == -1) { |
|---|
| 445 | | OggzBufferedPacket *p = oggz_read_new_pbuffer_entry( |
|---|
| 446 | | oggz, &packet, reader->current_granulepos, |
|---|
| 447 | | serialno, stream, reader); |
|---|
| 448 | | |
|---|
| 449 | | oggz_dlist_append(oggz->packet_buffer, p); |
|---|
| 450 | | continue; |
|---|
| 451 | | } else if (!oggz_dlist_is_empty(oggz->packet_buffer)) { |
|---|
| | 440 | |
|---|
| | 441 | if (oggz->flags & OGGZ_AUTO) { |
|---|
| | 442 | |
|---|
| 453 | | * move backward through the list assigning gp values based upon |
|---|
| 454 | | * the granulepos we just recieved. Then move forward through |
|---|
| 455 | | * the list delivering any packets at the beginning with valid |
|---|
| 456 | | * gp values |
|---|
| 457 | | */ |
|---|
| 458 | | ogg_int64_t gp_stored = stream->last_granulepos; |
|---|
| 459 | | stream->last_packet = &packet; |
|---|
| 460 | | oggz_dlist_reverse_iter(oggz->packet_buffer, oggz_read_update_gp); |
|---|
| 461 | | oggz_dlist_deliter(oggz->packet_buffer, oggz_read_deliver_packet); |
|---|
| 462 | | |
|---|
| 463 | | /* |
|---|
| 464 | | * fix up the stream granulepos |
|---|
| 465 | | */ |
|---|
| 466 | | stream->last_granulepos = gp_stored; |
|---|
| 467 | | |
|---|
| 468 | | if (!oggz_dlist_is_empty(oggz->packet_buffer)) { |
|---|
| | 444 | * while we are getting invalid granulepos values, store the |
|---|
| | 445 | * incoming packets in a dlist */ |
|---|
| | 446 | if (reader->current_granulepos == -1) { |
|---|
| | 453 | } else if (!oggz_dlist_is_empty(oggz->packet_buffer)) { |
|---|
| | 454 | /* |
|---|
| | 455 | * move backward through the list assigning gp values based upon |
|---|
| | 456 | * the granulepos we just recieved. Then move forward through |
|---|
| | 457 | * the list delivering any packets at the beginning with valid |
|---|
| | 458 | * gp values |
|---|
| | 459 | */ |
|---|
| | 460 | ogg_int64_t gp_stored = stream->last_granulepos; |
|---|
| | 461 | stream->last_packet = &packet; |
|---|
| | 462 | oggz_dlist_reverse_iter(oggz->packet_buffer, oggz_read_update_gp); |
|---|
| | 463 | oggz_dlist_deliter(oggz->packet_buffer, oggz_read_deliver_packet); |
|---|
| | 464 | |
|---|
| | 465 | /* |
|---|
| | 466 | * fix up the stream granulepos |
|---|
| | 467 | */ |
|---|
| | 468 | stream->last_granulepos = gp_stored; |
|---|
| | 469 | |
|---|
| | 470 | if (!oggz_dlist_is_empty(oggz->packet_buffer)) { |
|---|
| | 471 | OggzBufferedPacket *p = oggz_read_new_pbuffer_entry( |
|---|
| | 472 | oggz, &packet, reader->current_granulepos, |
|---|
| | 473 | serialno, stream, reader); |
|---|
| | 474 | |
|---|
| | 475 | oggz_dlist_append(oggz->packet_buffer, p); |
|---|
| | 476 | continue; |
|---|
| | 477 | } |
|---|