1 package jp.nyatla.nyartoolkit.jmf.utils;
\r
3 import java.awt.Dimension;
\r
4 import java.util.Vector;
\r
6 import javax.media.CaptureDeviceInfo;
\r
7 import javax.media.CaptureDeviceManager;
\r
8 import javax.media.Format;
\r
9 import javax.media.format.*;
\r
10 import jp.nyatla.nyartoolkit.*;
\r
15 * JMFキャプチャデバイスのリストを保持します。
\r
16 * 複数のカメラが接続された環境では、最も初めに認識したカメラの実がアクティブになるため、
\r
17 * このクラスで実際に認識できるカメラは1個だけです。
\r
20 public class JmfCaptureDeviceList
\r
22 private Vector _devices;
\r
24 public JmfCaptureDeviceList() throws NyARException
\r
26 this._devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();
\r
30 for (int i = 0; i < this._devices.size();) {
\r
31 CaptureDeviceInfo cdi = (CaptureDeviceInfo) this._devices.elementAt(i);
\r
32 // VideoFormatもってるかな?
\r
33 if (!isCaptureDevice(cdi)) {
\r
34 this._devices.remove(i);
\r
39 } catch (Exception e) {
\r
40 throw new NyARException(e);
\r
46 * i_cdiがビデオキャプチャデバイスかを調べる。ようなことをする。
\r
51 private static boolean isCaptureDevice(CaptureDeviceInfo i_cdi)
\r
53 Format[] fms = i_cdi.getFormats();
\r
54 for (int i = 0; i < fms.length; i++) {
\r
56 if (f instanceof VideoFormat) {
\r
64 * 使用できるキャプチャデバイスの数を数える
\r
68 public int getCount()
\r
70 return this._devices.size();
\r
73 * i_index番目のキャプチャデバイスを得る。
\r
76 * @throws NyARException
\r
78 public JmfCaptureDevice getDevice(int i_index) throws NyARException
\r
80 return new JmfCaptureDevice((CaptureDeviceInfo) this._devices.elementAt(i_index));
\r
83 public static void main(String[] args)
\r
87 JmfCaptureDeviceList j = new JmfCaptureDeviceList();
\r
88 System.out.println(j.getCount());
\r
89 JmfCaptureDevice d = j.getDevice(0);
\r
90 d.setCaptureFormat(JmfCaptureDevice.PIXEL_FORMAT_RGB, new Dimension(320, 240), 15.0f);
\r
91 // YUVFormat f=(YUVFormat)d.getCaptureFormat();
\r
95 } catch (Exception e) {
\r
96 e.printStackTrace();
\r