001 package com.github.sarxos.webcam.ds.civil;
002
003 import java.util.ArrayList;
004 import java.util.List;
005
006 import org.slf4j.Logger;
007 import org.slf4j.LoggerFactory;
008
009 import com.github.sarxos.webcam.WebcamDevice;
010 import com.github.sarxos.webcam.WebcamDriver;
011 import com.lti.civil.CaptureDeviceInfo;
012 import com.lti.civil.CaptureException;
013 import com.lti.civil.CaptureSystem;
014 import com.lti.civil.CaptureSystemFactory;
015 import com.lti.civil.DefaultCaptureSystemFactorySingleton;
016
017
018 public class LtiCivilDriver implements WebcamDriver {
019
020 // load civil DLL
021 static {
022 LtiCivilLoader.load("civil");
023 }
024
025 private static final Logger LOG = LoggerFactory.getLogger(LtiCivilDriver.class);
026
027 private static List<WebcamDevice> devices = null;
028 private static CaptureSystemFactory factory = null;
029 private static CaptureSystem system = null;
030 private static boolean initialized = false;
031
032 private static void initialize() {
033 factory = DefaultCaptureSystemFactorySingleton.instance();
034 try {
035 system = factory.createCaptureSystem();
036 system.init();
037 } catch (UnsatisfiedLinkError e) {
038 // ignore - it is already loaded
039 } catch (CaptureException e) {
040 LOG.error("Capture exception", e);
041 }
042 }
043
044 protected static CaptureSystem getCaptureSystem() {
045 if (!initialized) {
046 initialize();
047 }
048 return system;
049 }
050
051 @Override
052 public List<WebcamDevice> getDevices() {
053
054 if (!initialized) {
055 initialize();
056 }
057
058 if (devices == null) {
059 devices = new ArrayList<WebcamDevice>();
060 try {
061
062 @SuppressWarnings("unchecked")
063 List<CaptureDeviceInfo> infos = system.getCaptureDeviceInfoList();
064
065 for (CaptureDeviceInfo cdi : infos) {
066 devices.add(new LtiCivilDevice(cdi));
067 }
068 } catch (CaptureException e) {
069 e.printStackTrace();
070 }
071 }
072
073 return devices;
074 }
075
076 @Override
077 public boolean isThreadSafe() {
078 return false;
079 }
080
081 public static void main(String[] args) {
082
083 List<WebcamDevice> devices = new LtiCivilDriver().getDevices();
084 for (WebcamDevice device : devices) {
085 System.out.println(device.getResolutions());
086 }
087 }
088
089 }