001 package com.github.sarxos.webcam;
002
003 public 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(WebcamDriver driver, WebcamDevice device) {
011
012 if (driver == null) {
013 throw new IllegalArgumentException("Webcam driver argument cannot be null");
014 }
015
016 this.sync = !driver.isThreadSafe();
017 this.device = device;
018 this.processor = WebcamProcessor.getInstance();
019 }
020
021 public WebcamDevice getDevice() {
022 return device;
023 }
024
025 /**
026 * Process task by processor thread.
027 *
028 * @param processor the processor to be used to process this task
029 * @throws InterruptedException when thread has been interrupted
030 */
031 public void process() throws InterruptedException {
032 if (sync) {
033 if (processor == null) {
034 throw new RuntimeException("Driver should be synchronized, but processor is null");
035 }
036 processor.process(this);
037 } else {
038 handle();
039 }
040 }
041
042 public Throwable getThrowable() {
043 return throwable;
044 }
045
046 public void setThrowable(Throwable t) {
047 this.throwable = t;
048 }
049
050 protected abstract void handle();
051 }