@Override
	public void open() {
		if (isOpen()) {
			return;
		}
		beforeOpen();

		service = newExecutorService();
		validateParameters();
		try {
			process = launch();
		} catch (IOException e) {
			LOGGER.error(e.toString(), e);
			return;
		}

		out = process.getOutputStream();
		in = process.getInputStream();
		err = process.getErrorStream();

		// error must be consumed, if not, too much data blocking will crash process or
		// blocking IO
		service.submit(newErrorConsumeWorker());

		isOpen = true;
		afterOpen();
	}
@ Override public void open ( ) { if ( isOpen ( ) ) { return ; } beforeOpen ( ) ; service = newExecutorService ( ) ; validateParameters ( ) ; try { process = launch ( ) ; } catch ( IOException e ) { LOGGER . error ( e . toString ( ) , e ) ; return ; } out = process . getOutputStream ( ) ; in = process . getInputStream ( ) ; err = process . getErrorStream ( ) ; service . submit ( newErrorConsumeWorker ( ) ) ; isOpen = true ; afterOpen ( ) ; }
start raspi??? process to open devices
<ul>
<li>step 1: check given arguments will introduce native windows. keep
raspistill run in quietly</li>

<li>step 2: create thread fixed size pool(size=2), one for read, one for
write</li>

<li>step 3: override some illegal parameters</li>

<li>step 4: start process and begin communication and consume IO</li>
</ul>

@see com.github.sarxos.webcam.WebcamDevice#open()