- for (i = 0; ogg_sync_pageseek(&oss, &op) > 0; i++)
- num_frames = ogg_page_granulepos(&op);
+ for (i = 0; ogg_sync_pageseek(&oss, &op) > 0; i++) {
+ int this_pageno = ogg_page_pageno(&op);
+ int64_t this_granule = ogg_page_granulepos(&op);
+ if (this_granule >= 0)
+ granule = this_granule;
+ if (i > 0 && this_pageno != prev_pageno + 1) /* hole */
+ granule_skip += granule - prev_granule;
+ prev_pageno = this_pageno;
+ prev_granule = granule;
+ }
+ num_frames = granule - granule_skip;