OSDN Git Service

[TAG]NyARToolkit/2.3.1
[nyartoolkit-and/nyartoolkit-and.git] / tags / 2.3.1 / src.utils / jmf / jp / nyatla / nyartoolkit / jmf / utils / JmfCaptureDeviceList.java
1 package jp.nyatla.nyartoolkit.jmf.utils;\r
2 \r
3 import java.awt.Dimension;\r
4 import java.util.Vector;\r
5 \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
11 \r
12 \r
13 \r
14 /**\r
15  * JMFキャプチャデバイスのリストを保持します。\r
16  * 複数のカメラが接続された環境では、最も初めに認識したカメラの実がアクティブになるため、\r
17  * このクラスで実際に認識できるカメラは1個だけです。\r
18  *\r
19  */\r
20 public class JmfCaptureDeviceList\r
21 {\r
22         private Vector _devices;\r
23 \r
24         public JmfCaptureDeviceList() throws NyARException\r
25         {\r
26                 this._devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();\r
27                 // ビデオソースのデバイスだけ残す\r
28                 try {\r
29 \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
35                                         continue;\r
36                                 }\r
37                                 i++;\r
38                         }\r
39                 } catch (Exception e) {\r
40                         throw new NyARException(e);\r
41                 }\r
42                 return;\r
43         }\r
44 \r
45         /**\r
46          * i_cdiがビデオキャプチャデバイスかを調べる。ようなことをする。\r
47          * \r
48          * @param i_cdi\r
49          * @return\r
50          */\r
51         private static boolean isCaptureDevice(CaptureDeviceInfo i_cdi)\r
52         {\r
53                 Format[] fms = i_cdi.getFormats();\r
54                 for (int i = 0; i < fms.length; i++) {\r
55                         Format f = fms[i];\r
56                         if (f instanceof VideoFormat) {\r
57                                 return true;\r
58                         }\r
59                 }\r
60                 return false;\r
61         }\r
62 \r
63         /**\r
64          * 使用できるキャプチャデバイスの数を数える\r
65          * @return\r
66          * キャプチャデバイスの数を返却する。\r
67          */\r
68         public int getCount()\r
69         {\r
70                 return this._devices.size();\r
71         }\r
72         /**\r
73          * i_index番目のキャプチャデバイスを得る。\r
74          * @param i_index\r
75          * @return\r
76          * @throws NyARException\r
77          */\r
78         public JmfCaptureDevice getDevice(int i_index) throws NyARException\r
79         {\r
80                 return new JmfCaptureDevice((CaptureDeviceInfo) this._devices.elementAt(i_index));\r
81         }\r
82 \r
83         public static void main(String[] args)\r
84         {\r
85                 //テストケース\r
86                 try {\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
92                         d.start();\r
93                         d.stop();\r
94 \r
95                 } catch (Exception e) {\r
96                         e.printStackTrace();\r
97                 }\r
98                 return;\r
99         }\r
100 \r
101 }\r