next up previous
Next: Cによるオブジェクト指向の記述 Up: No Title Previous: No Title

概要

クラス階層

MAlib はC言語で記述されるが、次章で述べるとおりオブジェクト指向の概念 に従って設計されている。ここではまずMAlibのクラス階層を示す(「*印」が ついているものは今後拡張する予定)。

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の構成要素とクラス階層の対応関係

MAlib を構成するクラス階層図における上位の抽象クラスによって、 MAlib のフレームワークが構成される。

MAlib において中心となる映像編集機能や動画像 認識処理機能を具体的に実装するクラスが、MalibFilter のサブクラス である。

トラッキング処理や 移動物体の計数など個別の処理は、アプリケーション例として実装される。 MAlib の設計思想として、 これらのアプリケーション例からのフィードバックを元に 個別のサブクラスとして MAlib のフィルタ群が成長していくような、 拡張の容易な構造とすることに注力した。

MAlibのインストールと利用方法

MAlibのインストールは次の手順により行なう。なおMAlibの作成に必要なツール とライブラリは既にインストール済であるものとする(付録 Aを参照のこと)。
1.
libmalib-x.y.z.tar.gzを作業ディレクトリに展開する(xyzはその時点でのバージョン番号)。
2.
展開したlibmalibのディレクトリに移動し、./configureを 実行する。なおこの際、インストールディレクトリなどの標準的な configオプションを指定することができる。その方法は標準的な GNUオープンソースソフトウェアに準ずる。
3.
スーパーユーザとなり、make; make installを実施する。
4.
ライブラリの更新を有効にするため、ldconfigを実行する。

MAlib を利用する場合、ビルド時にインクルードパスおよびライブラリを 明示的に指定する必要がある。以下は、テストディレクトリのoverlaptest.cMakefileを利用せず直接ビルドする場合の例である。

$ 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



 

Jun IIO
2001-06-14