method private get_frame frame =
    if must_fail then begin
      Frame.add_break frame (Frame.position frame) ;
      remaining <- track_size ;
      must_fail <- false
    end else
      let off = Frame.position frame in
      let len =
        match remaining with
          | None -> Lazy.force Frame.size - off
          | Some r ->
              let len = min (Lazy.force Frame.size - off) r in
                remaining <- Some (r-len) ;
                len
      in
        self#synthesize frame off len ;
        Frame.add_break frame (off+len) ;
        if VFrame.is_partial frame then begin
          assert (remaining = Some 0) ;
          remaining <- track_size
        end