001package com.github.sarxos.webcam;
002
003public abstract class WebcamTask {
004
005        private boolean sync = true;
006        private WebcamProcessor processor = null;
007        private WebcamDevice device = null;
008        private Throwable throwable = null;
009
010        public WebcamTask(boolean threadSafe, WebcamDevice device) {
011                this.sync = !threadSafe;
012                this.device = device;
013                this.processor = WebcamProcessor.getInstance();
014        }
015
016        public WebcamTask(WebcamDriver driver, WebcamDevice device) {
017                this(driver.isThreadSafe(), device);
018        }
019
020        public WebcamTask(WebcamDevice device) {
021                this(false, device);
022        }
023
024        public WebcamDevice getDevice() {
025                return device;
026        }
027
028        /**
029         * Process task by processor thread.
030         * 
031         * @throws InterruptedException when thread has been interrupted
032         */
033        public void process() throws InterruptedException {
034                if (sync) {
035                        if (processor == null) {
036                                throw new RuntimeException("Driver should be synchronized, but processor is null");
037                        }
038                        processor.process(this);
039                } else {
040                        handle();
041                }
042        }
043
044        public Throwable getThrowable() {
045                return throwable;
046        }
047
048        public void setThrowable(Throwable t) {
049                this.throwable = t;
050        }
051
052        protected abstract void handle();
053}