title: How can I make this LTI CIVIL example code run under Ubuntu?
body: <p>I tested a program that takes a photo from the webcam and saves it every 2 seconds, based on the LTI CIVIL library. The program worked very well under Windows Vista, but I got an error when I ran it under Ubuntu:</p>
  
  <pre><code>run:
  Exception in thread "main" com.lti.civil.CaptureException:java.lang.UnsatisfiedLinkError: no civil in java.library.path
      at com.lti.civil.impl.jni.NativeCaptureSystemFactory.createCaptureSystem(NativeCaptureSystemFactory.java:24)
      at emptyroomoperation_final.Camera.main(Camera.java:41)
      Caused by: java.lang.UnsatisfiedLinkError: no civil in java.library.path
      at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
      at java.lang.Runtime.loadLibrary0(Runtime.java:823)
      at java.lang.System.loadLibrary(System.java:1028)
      at com.lti.civil.impl.jni.NativeCaptureSystemFactory.createCaptureSystem(NativeCaptureSystemFactory.java:21)
      ... 1 more
  Java Result: 1
  </code></pre>
  
  <p>Here is the code:</p>
  
  <pre><code>/*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
  
  package emptyroomoperation_final;
  
  import java.awt.image.BufferedImage;
  import java.io.FileOutputStream;
  import java.util.List;
  
  import com.lti.civil.CaptureDeviceInfo;
  import com.lti.civil.CaptureException;
  import com.lti.civil.CaptureObserver;
  import com.lti.civil.CaptureStream;
  import com.lti.civil.CaptureSystem;
  import com.lti.civil.CaptureSystemFactory;
  import com.lti.civil.DefaultCaptureSystemFactorySingleton;
  import com.lti.civil.Image;
  import com.lti.civil.VideoFormat;
  import com.lti.civil.awt.AWTImageConverter;
  import com.sun.image.codec.jpeg.JPEGCodec;
  import com.sun.image.codec.jpeg.JPEGImageEncoder;
  import java.io.File;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  
  /**
  *
  * @author Ken Larson
  */
  public class Camera
  {
      static public String s;
      static int w=0;  
      //static File f1 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects   \\EmptyRoomOperation\\0.jpg") ;
      // static File f2 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects\\EmptyRoomOperation\\") ;
      public static void main(String[] args) throws CaptureException
      {
          CaptureSystemFactory factory = DefaultCaptureSystemFactorySingleton.instance();
          CaptureSystem system = factory.createCaptureSystem();
          system.init();
          List list = system.getCaptureDeviceInfoList();
          for (int i = 0; i &lt; list.size(); ++i)
          {
              CaptureDeviceInfo info = (CaptureDeviceInfo) list.get(i);
  
              System.out.println("Device ID " + i + ": " + info.getDeviceID());
              System.out.println("Description " + i + ": " + info.getDescription());
  
              CaptureStream captureStream = system.openCaptureDeviceStream(info.getDeviceID());
  
              System.out.println("Current format " + videoFormatToString(captureStream.getVideoFormat()));
  
              captureStream.setObserver(new MyCaptureObserver());
              System.out.println("Available formats:");
              for (VideoFormat format : captureStream.enumVideoFormats())
              {
                  System.out.println(" " + videoFormatToString(format));
              }
  
              final int MAX_FORMATS = 2;
              int count = 0;
              //for (VideoFormat format : captureStream.enumVideoFormats())//not now
              VideoFormat format = captureStream.enumVideoFormats().get(0);//alternative of the above
              int k=0;
  
              while(k!=10)
              {
                  /*if (count &gt; MAX_FORMATS)
                  {    System.out.println("Stopping after " + MAX_FORMATS + " formats.");    // could be a lot
                      break;
                  }*/
                  System.out.println("Choosing format: " + videoFormatToString(format));
                  captureStream.setVideoFormat(format);
                  s = new String(""+w);
                  // File f2 = new File("C:\\Users\\mostafa\\Documents\\NetBeansProjects\\EmptyRoomOperation\\"+s+".jpg") ;
  
                  //  f1.
                  System.out.println("Capturing for 2 seconds...");
                  captureStream.start();
                  try
                  {
                      Thread.sleep(2000);
                  }
                  catch (InterruptedException e)
                  {
                      return;
                  }
  
                  captureStream.stop();
                  /*try {
                     // Thread.sleep(10000);
                  } catch (Exception ex) {
                      Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex);
                  }*/
                  //++count;
                  w++;
              }
              System.out.println("disposing stream...");
              captureStream.dispose();
  
          }
          System.out.println("disposing system...");
          system.dispose();
          System.out.println("done.");
      }
  
      public static String videoFormatToString(VideoFormat f)
      {
          return "Type=" + formatTypeToString(f.getFormatType()) + " Width=" + f.getWidth() + " Height=" + f.getHeight() + " FPS=" + f.getFPS();
      }
  
      private static String formatTypeToString(int f)
      {
          switch (f)
          {
              case VideoFormat.RGB24:
                  return "RGB24";
              case VideoFormat.RGB32:
                  return "RGB32";
              default:
                  return "" + f + " (unknown)";
          }
      }
  
  }
  
  class MyCaptureObserver implements CaptureObserver
  {
      public void onError(CaptureStream sender, CaptureException e)
      {    System.err.println("onError " + sender);
          e.printStackTrace();
      }
  
      public void onNewImage(CaptureStream sender, Image image)
      {
          final BufferedImage bimg;
          try
          {
              final VideoFormat format = image.getFormat();
              System.out.println("onNewImage format=" + Camera.videoFormatToString(format) + " length=" + image.getBytes().length);
              bimg = AWTImageConverter.toBufferedImage(image);
          }
          catch (Exception e)
          {    e.printStackTrace();
              return;
          }
  
          // Encode as a JPEG
          try
          {
              FileOutputStream fos = new FileOutputStream(Camera.s+".jpg");
              JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
              jpeg.encode(bimg);
              fos.close();
          }
          catch (Exception e)
          {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>Note: This is almost the same test code that comes with LTI CIVIL, but with some modifications.</p>
  
  <p>As I understand, LTI CIVIL is supposed to run also under Ubuntu. How can I get this piece of code to run under Ubuntu?</p>