Grabber::setSinkType Method

シンクのフォーマットの設定。シンクはイメージストリームの出力対象を指定するものです。ライブモード中や"prepared"状態の場合にはシンクの設定はできません。

構文

bool setSinkType( smart_ptr<GrabberSinkType> pNewSink );
パラメータ 説明
pNewSink 新しいシンクタイプを指定します。

戻り値

シンクが正常に変更された場合はtrue、エラーが発生した場合はfalse

サンプル

ここではどのようにMediaStreamSinkクラスライブラリリファレンス>クラス>MediaStreamSinkを設定するかを紹介します。

Grabber grabber;
if( !setupDeviceFromFile( grabber ) )
{
  return -1;
}
tCodecListPtr pCodecs = Codec::getAvailableCodecs();

// 全てのコーデックを表示
int choice = presentUserChoice( toStringArrayPtrListPtr( pCodecs ) );
if( choice == -1 )
{
  return -1;
}
// 選択されたコーデックで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();

// シンクを停止させます。これによりAVIファイルへの書き込みが停止します。
// GrabberSinkType::eRUNをパラメータとしてsetSinkMode をコールすることでAVI録画を再開します
pSink->setSinkMode(GrabberSinkType::ePAUSE );

std::cout << "Video recording stopped." << std::endl;
// ライブモードを停止します。
// モードがGrabberSinkType::ePAUSEでない場合AVIファイルへの書き込みが停止し、ファイルは閉じられます。
grabber.stopLive();