# GR-PEACH ビデオモジュール (video)

`video` モジュールは、WIRELESS CAMERA Shieldに接続されたカメラの制御や映像信号の取り込みを行います。

- 対応するカメラは以下の通りです。
  - `"ov7725"` - GR-PEACH Wireless CAMERA Shield

画像の取り込みは、マイコンに搭載されたハードウェアリソース(VDC5)を用いてプログラムとは非同期に実行されます。

## video.openCMOSCamera(config, callback)

- `config` {Object} カメラの設定
  - `width` {number} 画像の横幅(ピクセル数)。必須項目です。
  - `height` {number} 画像の高さ(ピクセル数)。必須項目です。
  - `format` {string} 希望するピクセルフォーマット。`"ycbcr422"`, `"rgb565"`, `"rgb888"`のいずれかが指定できます。必須項目です。
  - `type` {string} CMOSカメラの種類を示す文字列。`"ov7725"`のみ指定できます。(省略時: `"ov7725"`)
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
  - `videoSource` {Object} `VideoSource`クラスのインスタンス (成功のとき)
- 戻り値: {undefined}

CMOSカメラに接続します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

> 注意: ハードウェアリソースを排他で使用するため、複数の`VideoSource`インスタンスを同時に使用することはできません。別のカメラを接続する場合は、先に生成されたインスタンスに対して`close()`を実行してください。

#### 使用例

    var video = require('video');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
    var buf = new AlignedBuffer(480*272*2, 32);

    video.openCMOSCamera({
      width: 480, height: 272, format: 'rgb565', type: 'ov7725'
    }, function(err, videoSource) {
      if (err) {
        /* video.openCMOSCamera 失敗... */
        console.log(err);
        return;
      }
      /* video.openCMOSCamera 成功... */

      videoSource.start(buf, function(err) {
        if (err) {
          /* videoSource.start 失敗... */
          console.log(err);
          return;
        }
        /* videoSource.start 成功... */

        videoSource.stop(function(err) {
          if (err) {
            /* videoSource.stop 失敗... */
            console.log(err);
            return;
          }
          /* videoSource.stop 成功... */

          videoSource.close(function (err) {
            if (err) {
              /* videoSource.close 失敗... */
              console.log(err);
              return;
            }
            /* videoSource.close 成功... */

          });
        });
      });
    });

## video.openCMOSCameraSync(config)

- `config` {Object} カメラの設定
  - `video.openCMOSCamera()`の説明を参照
- 戻り値: {Object} `VideoSource`クラスのインスタンス

`video.openCMOSCamera()`の同期版です。処理は同期で行われ、処理が完了すると`VideoSource`クラスのインスタンスを返却します。失敗すると例外をスローします。

#### 使用例

    var video = require('video');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
    var buf = new AlignedBuffer(480*272*2, 32);

    try {
      var videoSource = video.openCMOSCameraSync({
        width: 480, height: 272, format: 'rgb565', type: 'ov7725'
      });
      /* video.openCMOSCameraSync 成功... */

      videoSource.startSync(buf);
      /* videoSource.startSync 成功... */

      videoSource.stopSync();
      /* videoSource.stopSync 成功... */

      videoSource.closeSync();
      /* videoSource.closeSync 成功... */

    } catch (err) {
      /* 失敗... */
      console.log(err);
    }

# VideoSourceクラス

カメラの制御や映像ソースの取り込みを行うクラスです。

## videoSource.width

- {number}
- 画像の幅をピクセル数で示す、読み取り専用プロパティです。

## videoSource.height

- {number}
- 画像の高さをピクセル数で示す、読み取り専用プロパティです。

## videoSource.pixelFormat

- {string}
- ピクセルフォーマットを示す、読み取り専用プロパティです。`"ycbcr422"`, `"rgb565"`, `"rgb888"`のいずれかです。

## videoSource.pixelBytes

- {number}
- 1ピクセル当たりのバイト数を示す、読み取り専用プロパティです。

## videoSource.type

- {string}
- CMOSカメラの種類を示す文字列を返す、読み取り専用プロパティです。

## videoSource.start(buf, callback)

- `buf` {AlignedBuffer} カメラ入力を取り込むバッファ。32バイトのアライメントである必要があります。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

カメラの撮影/信号の取り込みを開始します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

## videoSource.startSync(buf)

- `buf` {AlignedBuffer} カメラ入力を取り込むバッファ。32バイトのアライメントである必要があります。
- 戻り値: {undefined}

`videoSource.start()`の同期版です。処理は非同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。

## videoSource.stop(callback)

- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

カメラの撮影/信号の取り込みを停止します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

## videoSource.stopSync()

- 戻り値: {undefined}

`videoSource.stop()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。

## videoSource.close(callback)

- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
- 戻り値: {undefined}

カメラの制御/信号取り込みに関するハードウェアリソースを解放します。`videoSource.start()`によりカメラの撮影/信号の取り込みが開始されている場合、この関数の内部で自動的に`videoSource.stop()`が呼び出されて停止されます。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

> 注意: この関数を呼んだ後には、この`VideoSource`インスタンスに対していかなる操作も行えません。このとき各プロパティの返す値は未定義であり、各関数の呼び出しを行うとエラーが発生します。

## videoSource.closeSync()

- 戻り値: {undefined}

`videoSource.close()`の同期版です。処理は同期で行われ、処理が完了すると呼び出し元に戻ります。失敗すると例外をスローします。