GrabberSinkType::setSinkMode Method
新しいシンクモードを設定します。
構文
virtual tSinkModes setSinkMode( tSinkModes mode );
パラメータ | 説明 |
---|---|
mode | 新しく設定するモードを指定します。 |
戻り値
現在のシンクモードです。正常に完了していれば返されたシンクモードは関数に渡されたシンクモードと同じものになります。
備考
このメソッドはフレームの取り込みやAVIファイルへの書き込み用にイメージストリームの一時停止、再開を行うのに使用されます。シンクモードをePAUSEに設定すると、eRUNに設定されるまではフレームの取り込みやAVIファイルへの保存は行いません。シンクモードがePAUSEの時に startLive()がコールされると、ライブ画像は表示されます(有効にしている場合)が、シンクにはフレームは渡されません。しかしすでにイメージストリームは初期化されているため、setSinkModeにeRunを渡せばレイテンシを伴わずにAVI保存やフレーム取り込みが可能となります。
サンプル
ここの例ではシンクを作成しモードを設定する方法を紹介します。
// 選択したコーデックでAVIファイルに記録するためのMediaStreamSinkを作成
tMediaStreamSinkPtr pSink = MediaStreamSink::create(
MediaStreamContainer::create( MSC_AviContainer ), pCodecs->at( choice ) );
// ファイル名を設定
pSink->setFilename( filename );
// 最初シンクは停止しているのでビデオデータがファイルに書き込まれることはありません
pSink->setSinkMode( GrabberSinkType::ePAUSE );
// pSink をシンクに設定
grabber.setSinkType( pSink );
// ライブモードの開始。ライブ画像は表示されますが、pSinkが停止モードにあるため
// データはAVIファイルに書き込まれません
if( !grabber.startLive( true ) )
{
std::cerr << grabber.getLastError().toString() << std::endl;
return -1;
}
std::cout << "Press [enter] to start capturing!";
std::cin.get();
// シンクの開始。イメージストリームがAVIファイルに書き込まれます
pSink->setSinkMode(GrabberSinkType::eRUN );
std::cout << "Video recording started." << std::endl;
std::cout << "Press [enter] to stop capturing!";
std::cin.get();
// シンクの停止。ファイルへの書き込みが停止します
// GrabberSinkType::eRUNをパラメータにsetSinkModeをコールすることでファイルへの書き込みが再開します
pSink->setSinkMode(GrabberSinkType::ePAUSE );
std::cout << "Video recording stopped." << std::endl;
// ライブモードの停止。ファイルへの書き込み中であった場合はそれも停止し、AVIファイルが閉じられます。
grabber.stopLive();