OSDN Git Service

キャプチャに使える汎用パッケージをインポート。
[nyartoolkit-and/nyartoolkit-and.git] / branches / arc / src / jp / digitalmuseum / capture / AbstractVideoCapture.java
1 /**
2  * AbstractVideoCapture                 1.02 08/07/15
3  * 
4  * Copyright (c) 2008 arc
5  * http://digitalmuseum.jp/
6  * All rights reserved.
7  */
8 package jp.digitalmuseum.capture;
9
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.util.ArrayList;
13
14
15 /**
16  * Webcamによるキャプチャを実行するクラスが拡張すべき抽象クラス。
17  * 
18  * @version     1.01 5 June 2008
19  * @author      arc
20  */
21 public abstract class AbstractVideoCapture implements ActionListener {
22
23         protected int width;                                    // キャプチャ幅(指定した値から微妙にずれる)
24         protected int height;                                   // キャプチャ高さ
25         protected float fps = 30;                               // キャプチャ画像を取得するfps
26
27         protected byte[] pixels;                                // キャプチャ画像の実データを保持するバイト型配列
28
29         // リスナ
30         public ArrayList<VideoCaptureListener> listeners = new ArrayList<VideoCaptureListener>();
31
32         /** リスナを登録する */
33         public void addVideoCaptureListener(VideoCaptureListener listener) { listeners.add(listener); }
34         /** リスナを削除する */
35         public void removeVideoCaptureListener(VideoCaptureListener listener) { listeners.remove(listener); }
36
37         /** 指定した幅、高さでインスタンスを初期化するコンストラクタ。 */
38         public AbstractVideoCapture(int w, int h) { setSize(w, h); }
39
40         /** 指定した幅、高さでのキャプチャを指示する。start()でキャプチャを開始した後は使えない。 */
41         public void setSize(int w, int h) { width = w; height = h; }
42
43         /**
44          * Webcamの設定ダイアログを表示する。
45          * 既定のWebcamでは駄目な場合(複数のWebcamが接続されているPCなど)ではこれを実行するとよい。
46          */
47         public abstract void prepShowDialog() throws Exception;
48
49         /**
50          * キャプチャに使う入力デバイスを指定する。
51          * デバイスの代わりにダミー(デバッグ用)としてFileオブジェクトも渡せる実装にしておくべきである。
52          */
53         public abstract void prepSetInput(Object device) throws Exception;
54         /** キャプチャするフレームレートを指定する。 */
55         public abstract boolean prepSetFramerate(float fps);
56
57         /** キャプチャを始める */
58         public abstract void start() throws Exception;
59         /** キャプチャを終わる */
60         public abstract void dispose();
61
62         /** タイマー処理。キャプチャイメージの更新結果をリスナに伝える。 */
63         public void actionPerformed(ActionEvent event) { update(); }
64
65         /** リスナにキャプチャ結果を伝える */
66         public void update() {
67                 if (pixels != null)
68                         for (VideoCaptureListener listener : listeners)
69                                 listener.imageUpdated(pixels);
70         }
71
72         /** キャプチャしている画像の幅を取得する。 */
73         public int getWidth() { return width; }
74         /** キャプチャしている画像の高さを取得する。 */
75         public int getHeight() { return height; }
76
77 }