static int read_packet (OGGZ * oggz, oggz_packet * zp, long serialno, void * user_data) { ogg_packet * op = &zp->op; int granuleshift; granuleshift = oggz_get_granuleshift (oggz, serialno); printf ("%010lu: op->granulepos: ", serialno); print_granulepos (op->granulepos, granuleshift); printf (" oggz_tell_granulepos(): "); print_granulepos (oggz_tell_granulepos (oggz), granuleshift); if (op->b_o_s) { printf (" *** bos"); } if (op->e_o_s) { got_an_eos = 1; printf (" *** eos"); } printf ("\n"); return 0; }
static float calc_keyframe_timestamp(oggz_packet *packet, long serialno) { ogg_int64_t granulepos = oggz_tell_granulepos(oggz); int granuleshift = oggz_get_granuleshift(oggz, serialno); ogg_int64_t granulerate_n = 0; ogg_int64_t granulerate_d = 0; oggz_get_granulerate(oggz, serialno, &granulerate_n, &granulerate_d); return (float)(granulepos >> granuleshift) * (float)granulerate_d / (float)granulerate_n; }
static ogg_int64_t gp_to_granule (OGGZ * oggz, long serialno, ogg_int64_t granulepos) { int granuleshift; ogg_int64_t iframe, pframe, granule; OggzStreamContent content; granuleshift = oggz_get_granuleshift (oggz, serialno); content = oggz_stream_get_content (oggz, serialno); if (content == OGGZ_CONTENT_VP8) { granule = granulepos >> granuleshift; } else {