module Ogg_demuxer:sig..end
Ogg stream demuxer
This module provides a functional abstract API to decode and seek in Ogg streams.
Decoders are also provided in ocaml-vorbis, ocaml-speex, ocaml-schroedinger, ocaml-flac and ocaml-theora.
Functions in this module are not thread safe!
type t 
Type of an ogg stream decoder.
type callbacks = {
   | 
read :  | 
   | 
seek :  | 
   | 
tell :  | 
Type for callbacks used to acess encoded data.
type track = 
| | 
Audio_track of  | 
| | 
Video_track of  | 
Type for a decodable track. 
 First element is a string describing
 the decoder used to decode the track.
 Second element is the serial number
 associated to the Ogg.Stream.stream logical
 stream used to pull data packets for that
 track.
type standard_tracks = {
   | 
mutable audio_track :  | 
   | 
mutable video_track :  | 
Type for standard tracks (see get_standard_tracks below).
typemetadata =string * (string * string) list
Type for metadata. First element
 is a string describing the vendor, second
 element is a list of metadata of the form:
 (label,value).
type audio_info = {
   | 
channels :  | 
   | 
sample_rate :  | 
Type for audio information.
typeaudio_data =float array array
Type for audio data.
typevideo_plane =(int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
Type of a video plane.
type video_format = 
| | 
Yuvj_420 | 
| | 
Yuvj_422 | 
| | 
Yuvj_444 | 
Supported video formats.
type video_info = {
   | 
fps_numerator :  | 
|||
   | 
fps_denominator :  | 
|||
   | 
width :  | 
(* | Width of the Y' luminance plane  | *) | 
   | 
height :  | 
(* | Height of the luminance plane  | *) | 
Type for video information.
type video_data = {
   | 
format :  | 
|||
   | 
frame_width :  | 
|||
   | 
frame_height :  | 
|||
   | 
y_stride :  | 
(* | Length, in bytes, per line  | *) | 
   | 
uv_stride :  | 
(* | Length, in bytes, per line  | *) | 
   | 
y :  | 
(* | luminance data  | *) | 
   | 
u :  | 
(* | Cb data  | *) | 
   | 
v :  | 
(* | Cr data  | *) | 
Type for video data.
exception Invalid_stream
exception Not_available
exception End_of_stream
val init : ?log:(string -> unit) -> callbacks -> tInitiate a decoder with the given callbacks. 
 log is an optional functioned used to 
 return logged messages during the deocding
 process.
val init_from_file : ?log:(string -> unit) -> string -> t * Unix.file_descrInitiate a decoder from a given file name.
val init_from_fd : ?log:(string -> unit) -> Unix.file_descr -> tInitate a decoder from a given Unix.file_descriptor
val get_ogg_sync : t -> Ogg.Sync.tGet the Ogg.Sync handler associated to the decoder. Use only if know what you are doing.
val reset : t -> unitReset encoder, try to parse a new sequentialized stream. To use when end_of_stream has been reached.
val abort : t -> unitConsume all remaining pages of the current stream. This function may be called to skip a sequentialized stream but it may be quite CPU intensive if there are many pages remaining..
eos dec is true after this call.
val eos : t -> booltrue if the decoder has reached the end of each
 logical streams and all data has been decoded.
If you do not plan on decoding some data, 
 you should use drop_track to indicate it
 to the decoder. Otherwise, eos will return
 false until you have decoded all data.
val get_tracks : t -> track listGet all decodable tracks available.
val get_standard_tracks : t -> standard_tracksGet the first available audio and video tracks and drop the other one.
val update_standard_tracks : t -> standard_tracks -> unitUpdate a given record of standard tracks. You should
 use this after a reset to update the standard tracks
 with the newly created tracks.
val drop_track : t -> track -> unitRemove all tracks of the given type.
val audio_info : t ->
       track -> audio_info * metadataGet informations about the audio track.
val video_info : t ->
       track -> video_info * metadataGet informations about the video track.
val sample_rate : t -> track -> int * intGet the sample_rate of the track
 of that type. Returns a pair (numerator,denominator).
val get_track_position : t -> track -> floatGet track absolute position.
val get_position : t -> floatGet absolute position in the stream.
val can_seek : t -> boolReturns true if the decoder
 can be used with the seek function.
val seek : ?relative:bool -> t -> float -> floatSeek to an absolute or relative position in seconds.
Raises Not_available if seeking is
 not possible.
Raises End_of_stream if the end of
 current stream has been reached while
 seeking. You may call reset in this
 situation to see if there is a new seqentialized
 stream available.
Returns the time actually reached, either in relative time or absolute time.
val decode_audio : t ->
       track -> (audio_data -> unit) -> unitDecode audio data, if possible. Decoded data is passed to the second argument.
Raises End_of_stream if all stream have ended.
 In this case, you can try reset to see if there is a
 new sequentialized stream.
val decode_video : t ->
       track -> (video_data -> unit) -> unitDecode video data, if possible. Decoded data is passed to the second argument.
Raises End_of_stream if all streams have ended.
 In this case, you can try reset to see if there is a
 new sequentialized stream.
type ('a, 'b) decoder = {
   | 
name :  | 
|||
   | 
info :  | 
|||
   | 
decode :  | 
|||
   | 
restart :  | 
(* | This function is called after seeking
 to notify the decoder of the new   | *) | 
   | 
samples_of_granulepos :  | 
Generic type for a decoder.
type decoders = 
| | 
Video of  | 
| | 
Audio of  | 
| | 
Unknown | 
Type for a generic logical stream decoder.
typeregister_decoder =(Ogg.Stream.packet -> bool) * (Ogg.Stream.stream -> decoders)
Type used to register a new decoder. First
 element is a function used to check if the initial Ogg.Stream.packet
 of an Ogg.Stream.stream matches the format decodable by this decoder.
 Second element is a function that instanciates the actual decoder
 using the initial Ogg.Stream.stream used to pull data packets for the
 decoder.
val ogg_decoders : (string, register_decoder) Stdlib.Hashtbl.tRegister a new decoder.