MalibObject (全てのルートクラス abstract)
|
+-- MalibHolder (フレームホルダクラス abstract)
| |
| +-- MalibGtkDisplay (画面への出力)
| +-- MalibFileOutput (ファイルへの出力 *)
| +-- MalibNetworkOutput (ネットワークへの出力 *)
| +-- ...
| |
| +-- MalibBuffer (バッファクラス abstract)
| |
| +-- MalibPlainBuf (フレームを一枚だけ持つバッファ)
| +-- MalibRingBuf (リングバッファ)
| +-- MalibLineBuf (直線上に延びていくバッファ)
|
+-- MalibFrame (フレームクラス)
| |
| +-- MalibFrameAV (オーディオトラック付きフレームクラス *)
|
+-- MalibSource (ソースクラス abstract)
|
+-- MalibBttv (BTTVキャプチャドライバアダプタ)
+-- MalibMpegFile (MPEGファイル)
+-- ...
|
+-- MalibFilter (フィルタクラス abstract)
|
+-- MalibDelay (時間平滑化フィルタ)
+-- MalibFrameDiff (時間差分フィルタ)
+-- MalibGenericFilter (汎用フィルタ)
+-- MalibGrey2Bw (「グレー→白黒」コンバータ)
+-- MalibNegative (色調反転フィルタ)
+-- MalibRgb2Grey (「RGB→グレー」コンバータ)
+-- MalibRgb2Yuv (「RGB→YUV」コンバータ)
+-- MalibSepia (セピア色フィルタ)
+-- MalibMovingAve (3x3x3時空間移動平均フィルタ)
+-- MalibSpatial3x3 (汎用3x3空間フィルタ)
|
+-- MalibMerger (複数入力フィルタクラス abstract)
|
+-- MalibOverlap (重ね合わせフィルタ)
+-- ...
以上に示したとおり、全てのクラスは 抽象クラス MalibObject を継承して実現される。
各クラスにおけるメンバ関数の実装時には、各インスタンスを可能な限り 上位のクラスのオブジェクトとして取扱うように記述することに留意する。すなわち、 後述する MAlib のアーキテクチャとして「Filter は Buffer を入力に とり、Holder は Source を入力にとる」といった基本的な概念があるが、 それらのハンドリングにおいてはその対象が MalibBttv クラスの インスタンスであったとしても MalibSource 型として取扱う。 各メンバ関数の実装においては、このように抽象度を高めた記述とすることを 心掛けた。
例:
入力(MalibSource)を引数として与える 単フレームバッファ(MalibPlainBuf)のコンストラクタに関する プロトタイプ宣言。
MalibPlainBuf* malib_plainbuf_new_with_source (MalibSource* src);
MAlib において中心となる映像編集機能や動画像 認識処理機能を具体的に実装するクラスが、MalibFilter のサブクラス である。
トラッキング処理や 移動物体の計数など個別の処理は、アプリケーション例として実装される。 MAlib の設計思想として、 これらのアプリケーション例からのフィードバックを元に 個別のサブクラスとして MAlib のフィルタ群が成長していくような、 拡張の容易な構造とすることに注力した。
MAlib を利用する場合、ビルド時にインクルードパスおよびライブラリを 明示的に指定する必要がある。以下は、テストディレクトリのoverlaptest.c をMakefileを利用せず直接ビルドする場合の例である。
$ cd $MALIB_TOP/test/overlap
$ gcc -I/usr/local/include -I/usr/lib/glib/include overlaptest.c \
-L/usr/local/lib -lmalib -lmpeg -o overlaptest