open Types let print_packet p = print_mediaType p.p_identity; Printf.printf " size %d gp " (String.length p.p_data); print_granulepos p.p_granulepos; if (p.p_continued) then Printf.printf " (CONTINUED)"; if (p.p_continues) then Printf.printf " (CONTINUES)"; Printf.printf " time "; (match p.p_time with None -> Printf.printf "None" | Some f -> print_float f); Printf.printf " pageno " ; print_oogg32 p.p_page_seq ; Printf.printf " packetno %d\n" p.p_pageno; (* display skeleton information *) if p.p_identity = Skeleton then ( if p.p_bos then ( let pt_num = oogg64_to_float (extract_le_oogg64 p.p_data 12) in let pt_den = oogg64_to_float (extract_le_oogg64 p.p_data 20) in let pt = pt_num /. pt_den in let bt_num = oogg64_to_float (extract_le_oogg64 p.p_data 28) in let bt_den = oogg64_to_float (extract_le_oogg64 p.p_data 36) in let bt = bt_num /. bt_den in Printf.printf "\tPresentation time: %f Base time: %f\n" pt bt ) else if p.p_eos then ( ) else ( Printf.printf "\tSerial number: %Ld" (extract_be_int32 p.p_data 12); Printf.printf " startgranule: "; print_oogg64 (extract_le_oogg64 p.p_data 36); Printf.printf "\n" ) );; let rec print_packetStream s = match s with parser | [< 'p; rest >] -> (print_packet p; print_packetStream rest) | [< >] -> ();;