Changeset 3249

Show
Ignore:
Timestamp:
2007-10-05 22:40:13 (1 year ago)
Author:
shans
Message:

possible fix for Ian Malone's segfault bug.
ogg_int64_t variable fixed in oggz_read.c

Files:

Legend:

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

    r3236 r3249  
    445445} 
    446446 
     447static ogg_int64_t 
    447448auto_rcalc_theora(ogg_int64_t next_packet_gp, oggz_stream_t *stream,  
    448449                  ogg_packet *this_packet, ogg_packet *next_packet) { 
  • liboggz/trunk/src/liboggz/oggz_read.c

    r3216 r3249  
    299299  OggzBufferedPacket *p = (OggzBufferedPacket *)elem; 
    300300  ogg_int64_t gp_stored; 
    301   long unit_stored; 
     301  ogg_int64_t unit_stored; 
    302302 
    303303  if (p->calced_granulepos == -1) { 
     
    438438            oggz_auto_read_comments (oggz, stream, serialno, op); 
    439439          } 
    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           
    452443            /* 
    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) { 
    469447              OggzBufferedPacket *p = oggz_read_new_pbuffer_entry( 
    470                               oggz, &packet, reader->current_granulepos,  
    471                               serialno, stream, reader); 
     448                                oggz, &packet, reader->current_granulepos,  
     449                                serialno, stream, reader); 
    472450 
    473451              oggz_dlist_append(oggz->packet_buffer, p); 
    474452              continue; 
     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              } 
    475478            } 
    476  
    477479          } 
    478480