sig
  type t
  type mode = [ `Audio | `Both | `Undefined | `Video ]
  type overfull = [ `Drop_old of int ]
  val create :
    ?lock:Mutex.t ->
    ?overfull:Generator.From_audio_video_plus.overfull ->
    kind:Frame.content_kind ->
    log:(string -> unit) ->
    Generator.From_audio_video_plus.mode -> Generator.From_audio_video_plus.t
  val mode :
    Generator.From_audio_video_plus.t -> Generator.From_audio_video.mode
  val set_mode :
    Generator.From_audio_video_plus.t ->
    Generator.From_audio_video.mode -> unit
  val audio_length : Generator.From_audio_video_plus.t -> int
  val video_length : Generator.From_audio_video_plus.t -> int
  val length : Generator.From_audio_video_plus.t -> int
  val remaining : Generator.From_audio_video_plus.t -> int
  val set_rewrite_metadata :
    Generator.From_audio_video_plus.t ->
    (Frame.metadata -> Frame.metadata) -> unit
  val add_metadata :
    Generator.From_audio_video_plus.t -> Frame.metadata -> unit
  val add_break :
    ?sync:[ `Drop | `Ignore | `Strict ] ->
    Generator.From_audio_video_plus.t -> unit
  val put_audio :
    Generator.From_audio_video_plus.t ->
    Frame.audio_t array -> int -> int -> unit
  val put_video :
    Generator.From_audio_video_plus.t ->
    Frame.video_t array -> int -> int -> unit
  val fill : Generator.From_audio_video_plus.t -> Frame.t -> unit
  val remove : Generator.From_audio_video_plus.t -> int -> unit
  val clear : Generator.From_audio_video_plus.t -> unit
end