title: Problem in java programming on windows7 (working well in windows xp)
body: <p>I am capturing video from webcam connected to pc.I am using the following code to do so:</p>
  
  <pre><code>import java.util.*;
  import javax.media.*;
  import javax.media.protocol.*;
  import javax.media.control.*;
  import javax.media.format.*;
  import java.awt.*;
  /**
  * This is the primary class to run. It gathers an image stream and drives the processing.
  *
  */
  public class jmfcam05v
  {
      DataSource dataSource;
      PushBufferStream pbs;
  
      Vector camImgSize = new Vector();
      Vector camCapDevice = new Vector();
      Vector camCapFormat = new Vector();
  
      int camFPS;
      int camImgSel;
  
      Processor processor = null;
      DataSink datasink = null;
  
      /**
      * Main method to instance and run class
      *
      */
      public static void main(String[] args)
      {
          jmfcam05v jmfcam = new jmfcam05v();
      }
  
      /**
      * Constructor and processing method for image stream from a cam
      *
      */
      public jmfcam05v()
      {
          // Select webcam format
          fetchDeviceFormats();
          camImgSel=0;    // first format, or otherwise as desired
          camFPS = 20;    // framerate
  
          // Setup data source
          fetchDeviceDataSource();
          createPBDSource();
          createProcessor(dataSource);
          startCapture();
          try{Thread.sleep(90000);}catch(Exception e){}   // 20 seconds
          stopCapture();
      }
  
      /**
      * Gathers info on a camera
      *
      */
      boolean fetchDeviceFormats()
      {
          Vector deviceList = CaptureDeviceManager.getDeviceList(new VideoFormat(null));
          CaptureDeviceInfo CapDevice = null;
          Format CapFormat = null;
          String type = "N/A";
  
          CaptureDeviceInfo deviceInfo=null;boolean VideoFormatMatch=false;
          for(int i=0;i&lt;deviceList.size();i++)
          {
              // search for video device
              deviceInfo = (CaptureDeviceInfo)deviceList.elementAt(i);
              if(deviceInfo.getName().indexOf("vfw:")&lt;0)continue;
  
              Format deviceFormat[] = deviceInfo.getFormats();
              for (int f=0;f&lt;deviceFormat.length;f++)
              {
                  if(deviceFormat[f] instanceof RGBFormat)type="RGB";
                  if(deviceFormat[f] instanceof YUVFormat)type="YUV";
                  if(deviceFormat[f] instanceof JPEGFormat)type="JPG";
  
                  Dimension size = ((VideoFormat)deviceFormat[f]).getSize();
                  camImgSize.addElement(type+" "+size.width+"x"+size.height);
  
                  CapDevice = deviceInfo;
                  camCapDevice.addElement(CapDevice);
                  //System.out.println("Video device = " + deviceInfo.getName());
  
                  CapFormat = (VideoFormat)deviceFormat[f];
                  camCapFormat.addElement(CapFormat);
                  //System.out.println("Video format = " + deviceFormat[f].toString());
  
                  VideoFormatMatch=true;  // at least one
              }
          }
          if(VideoFormatMatch==false)
          {
              if(deviceInfo!=null)System.out.println(deviceInfo);
              System.out.println("Video Format not found");
              return false;
          }
  
          return true;
      }
  
      /**
      * Finds a camera and sets it up
      *
      */
      void fetchDeviceDataSource()
      {
          CaptureDeviceInfo CapDevice = (CaptureDeviceInfo)camCapDevice.elementAt(camImgSel);
          System.out.println("Video device = " + CapDevice.getName());
          Format CapFormat = (Format)camCapFormat.elementAt(camImgSel);
          System.out.println("Video format = " + CapFormat.toString());
  
          MediaLocator loc = CapDevice.getLocator();
          try
          {
              dataSource = Manager.createDataSource(loc);
          }
          catch(Exception e){}
  
          try
          {
              // ensures 30 fps or as otherwise preferred, subject to available cam rates but this is frequency of windows request to stream
              FormatControl formCont=((CaptureDevice)dataSource).getFormatControls()[0];
              VideoFormat formatVideoNew = new VideoFormat(null,null,-1,null,(float)camFPS);
              formCont.setFormat(CapFormat.intersects(formatVideoNew));
          }
          catch(Exception e){}
      }
  
      /**
      * Gets a stream from the camera (and sets debug)
      *
      */
      void createPBDSource()
      {
          try
          {
              pbs=((PushBufferDataSource)dataSource).getStreams()[0];
          }
          catch(Exception e){}
      }
  
      public void createProcessor(DataSource datasource)
      {
          FileTypeDescriptor ftd = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO);
          Format[] formats = new Format[] {new VideoFormat(VideoFormat.INDEO50)};
          ProcessorModel pm = new ProcessorModel(datasource, formats, ftd);
          try
          {
              processor = Manager.createRealizedProcessor(pm);
          }
          catch(Exception me)
          {
              System.out.println(me);
              // Make sure the capture devices are released
              datasource.disconnect();
              return;
          }
      }
  
      private void startCapture()
      {
          // Get the processor's output, create a DataSink and connect the two.
          DataSource outputDS = processor.getDataOutput();
          try
          {
              MediaLocator ml = new MediaLocator("file:capture.avi");
              datasink = Manager.createDataSink(outputDS, ml);
              datasink.open();
              datasink.start();
          }catch (Exception e)
          {
              System.out.println(e);
          }
          processor.start();
          System.out.println("Started saving...");
      }
  
      private void pauseCapture()
      {
          processor.stop();
      }
  
      private void resumeCapture()
      {
          processor.start();
      }
  
      private void stopCapture()
      {
          // Stop the capture and the file writer (DataSink)
          processor.stop();
          processor.close();
          datasink.close();
          processor = null;
          System.out.println("Done saving.");
      }
  }
  </code></pre>
  
  <p>this program works well on windows xp(desktop) and wen i try to use it on windows7(laptop) it gives me the following error:</p>
  
  <pre><code>    run: Video Format not found 
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 &gt;= 0
              at java.util.Vector.elementAt(Vector.java:427)
              at jmfcam05v.fetchDeviceDataSource(jmfcam05v.java:112)
              at jmfcam05v.&lt;init&gt;(jmfcam05v.java:49)
              at jmfcam05v.main(jmfcam05v.java:34) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)
  </code></pre>
  
  <p>my program is not detectin my inbuild webcam on laptop nor it is detecting external web cam.i am using jmf to capture the video and all my webcam's are vfw supported.
  Please help me to solve this issue.</p>