docs: protected void openVideo(boolean reopen , String ...filePaths) {
  		synchronized (lockStartingProcess) {
  			if( startingProcess ) {
  				System.out.println("Ignoring video request.  Detected spamming");
  				return;
  			}
  			startingProcess = true;
  		}
  
  		synchronized (inputStreams) {
  			if (inputStreams.size() != filePaths.length)
  				throw new IllegalArgumentException("Input streams not equal to "+filePaths.length+".  Override openVideo()");
  		}
  
  		stopAllInputProcessing();
  
  		streamPaused = false;
  
  		boolean failed = false;
  		for( int which = 0; which < filePaths.length; which++ ) {
  			CacheSequenceStream cache = inputStreams.get(which);
  
  			SimpleImageSequence sequence = media.openVideo(filePaths[which], cache.getImageType());
  			if( sequence == null ) {
  				failed = true;
  				System.out.println("Can't find file. "+filePaths[which]);
  				break;
  			}
  			configureVideo(which,sequence);
  
  			synchronized (inputStreams) {
  				cache.reset();
  				cache.setSequence(sequence);
  			}
  		}
  
  		if (!failed) {
  			setInputName(new File(filePaths[0]).getName());
  			synchronized (inputStreams) {
  				inputMethod = InputMethod.VIDEO;
  				streamPeriod = 33; // default to 33 FPS for a video
  				if( threadProcess != null )
  					throw new RuntimeException("There was still an active stream thread!");
  				threadProcess = new SynchronizedStreamsThread();
  			}
  			if( !reopen ) {
  				for (int i = 0; i < inputStreams.size(); i++) {
  					CacheSequenceStream stream = inputStreams.get(i);
  					handleInputChange(i, inputMethod, stream.getWidth(), stream.getHeight());
  				}
  			}
  			threadPool.execute(threadProcess);
  		} else {
  			synchronized (inputStreams) {
  				inputMethod = InputMethod.NONE;
  				inputFilePath = null;
  			}
  			synchronized (lockStartingProcess) {
  				startingProcess = false;
  			}
  			showRejectDiaglog("Can't open file");
  		}
  	}