001package com.github.sarxos.webcam.ds.openimaj; 002 003import java.util.ArrayList; 004import java.util.Collections; 005import java.util.List; 006 007import org.openimaj.video.capture.Device; 008import org.openimaj.video.capture.VideoCapture; 009import org.slf4j.Logger; 010import org.slf4j.LoggerFactory; 011 012import com.github.sarxos.webcam.WebcamDevice; 013import com.github.sarxos.webcam.WebcamDriver; 014import com.github.sarxos.webcam.WebcamTask; 015 016 017/** 018 * This is webcam driver for OpenIMAJ library. 019 * 020 * @author Bartosz Firyn (SarXos) 021 */ 022public class OpenImajDriver implements WebcamDriver { 023 024 static { 025 if (!"true".equals(System.getProperty("webcam.debug"))) { 026 System.setProperty("bridj.quiet", "true"); 027 } 028 } 029 030 private static final Logger LOG = LoggerFactory.getLogger(OpenImajDriver.class); 031 032 private static class GetDevicesTask extends WebcamTask { 033 034 private volatile List<WebcamDevice> devices = null; 035 036 public GetDevicesTask(WebcamDriver driver) { 037 super(driver, null); 038 } 039 040 /** 041 * Return camera devices. 042 * 043 * @return Camera devices. 044 */ 045 public List<WebcamDevice> getDevices() { 046 try { 047 process(); 048 } catch (InterruptedException e) { 049 LOG.debug("Interrupted", e); 050 return Collections.emptyList(); 051 } 052 return devices; 053 } 054 055 @Override 056 protected void handle() { 057 devices = new ArrayList<WebcamDevice>(); 058 for (Device device : VideoCapture.getVideoDevices()) { 059 devices.add(new OpenImajDevice(device)); 060 } 061 } 062 } 063 064 @Override 065 public List<WebcamDevice> getDevices() { 066 067 List<WebcamDevice> devices = new GetDevicesTask(this).getDevices(); 068 069 if (LOG.isDebugEnabled()) { 070 for (WebcamDevice device : devices) { 071 LOG.debug("OpenIMAJ found device {}", device.getName()); 072 } 073 } 074 075 return devices; 076 077 } 078 079 @Override 080 public boolean isThreadSafe() { 081 return false; 082 } 083 084 @Override 085 public String toString() { 086 return getClass().getSimpleName(); 087 } 088}