sig
  val log : Dtools.Log.t
  type file = string
  type stream = string
  type input = {
    read : int -> string * int;
    lseek : (int -> int) option;
    tell : (unit -> int) option;
    length : (unit -> int) option;
  }
  type 'a decoder = { decode : '-> unit; seek : int -> int; }
  type stream_decoder =
      Decoder.input -> Generator.From_audio_video_plus.t Decoder.decoder
  type file_decoder = {
    fill : Frame.t -> int;
    fseek : int -> int;
    close : unit -> unit;
  }
  val file_decoders :
    (metadata:Frame.metadata ->
     Decoder.file ->
     Frame.content_kind -> (unit -> Decoder.file_decoder) option)
    Plug.plug
  val image_file_decoders : (Decoder.file -> Image.RGBA32.t option) Plug.plug
  val stream_decoders :
    (Decoder.stream -> Frame.content_kind -> Decoder.stream_decoder option)
    Plug.plug
  val conf_decoder : Dtools.Conf.ut
  val conf_mime_types : Dtools.Conf.ut
  val conf_file_extensions : Dtools.Conf.ut
  val test_file :
    ?log:Dtools.Log.t ->
    mimes:string list -> extensions:string list -> string -> bool
  val get_file_decoder :
    metadata:Frame.metadata ->
    Decoder.file ->
    Frame.content_kind -> (string * (unit -> Decoder.file_decoder)) option
  val get_image_file_decoder : Decoder.file -> Image.RGBA32.t option
  val get_stream_decoder :
    Decoder.file -> Frame.content_kind -> Decoder.stream_decoder option
  module Buffered :
    functor (Generator : Generator.S->
      sig
        val file_decoder :
          Decoder.file ->
          Frame.content_kind ->
          (Decoder.input -> Generator.t Decoder.decoder) ->
          Generator.t -> Decoder.file_decoder
      end
end