sclass ChessOCR_Pipeline { transient BufferedImage inputImage; new SeenAndQueue possibleBoardPositions; new ChessOCR_BoardsFound boardsFound; ChessPieceRecognizer pieceRecognizer; transient ReliableSingleThread rstProcessPositions = new(r processPositions); *() { possibleBoardPositions.onAddedToQueue(rstProcessPositions); } void addPossiblePosition(Rect r) { possibleBoardPositions.add(r); } // internal void processPositions() { Rect r; while not null (r = possibleBoardPositions.popQueue()) { ping(); ChessOCR_RecognizedBoard board = pieceRecognizer.recognizeBoard(clipBufferedImage(inputImage, r)); boardsFound.add(board); } } void cleanMeUp { cleanUp(rstProcessPositions); } }