functor (Generator : Generator.S->
  sig
    class virtual source :
      ?seek:bool ->
      bufferize:float ->
      empty_on_abort:bool ->
      Generator.t ->
      object
        val mutable buffering : bool
        val generator : Generator.t
        val generator_lock : Mutex.t
        val mutable should_fail : bool
        method abort_track : unit
        method private get_frame : Frame.t -> unit
        method is_ready : bool
        method private length : int
        method private virtual log : Dtools.Log.t
        method remaining : int
        method seek : int -> int
      end
    class consumer :
      kind:Frame.content_kind ->
      Generator.t ->
      object
        val mutable buffering : bool
        val generator : Generator.t
        val generator_lock : Mutex.t
        val mutable ns_kind : string
        val mutable should_fail : bool
        method abort_track : unit
        method advance : unit
        method after_output : unit
        method clock : Source.clock_variable
        method private create_request :
          ?metadata:(string * string) list ->
          ?persistent:bool ->
          ?indicators:Request.indicator list -> string -> Request.t
        method get : Frame.t -> unit
        method private get_frame : Frame.t -> unit
        method get_ready : ?dynamic:bool -> Source.source list -> unit
        method id : string
        method is_output : bool
        method is_ready : bool
        method kind : Frame.content_kind
        method leave : ?dynamic:bool -> Source.source -> unit
        method private length : int
        method private log : Dtools.Log.t
        method on_shutdown : (unit -> unit) -> unit
        method register_command :
          descr:string ->
          ?usage:string -> string -> (string -> string) -> unit
        method remaining : int
        method seek : int -> int
        method private set_clock : unit
        method set_id : ?definitive:bool -> string -> unit
        method private sleep : unit
        method stype : Source.source_t
        method private wake_up : Source.source list -> unit
      end
  end