ビデオフォーマット情報の取得

ここでは利用可能なビデオフォーマット情報の取得の仕方について説明します。

このプログラムはディレクトリ%TOPLEVEL%\Samples\VCx\VideoNormFormatにございます。
たとえばVC2010++では%TOPLEVEL%\Samples\VC10となり、VC8では%TOPLEVEL%\Samples\VC8です。
プログラムを実行するため、ディレクトリ内のソリューションファイルVidNormFormat.slnを開き メニューからビルド -> ビルド VideoNormFormatと選択します。
そこからデバッグ -> スタートと選択することでプログラムを実行することができます。

デバイスをオープンにする

プログラムが有効なデバイスのリストを作成し、デバイスをオープンにするよう案内します。

Grabber::tVidCapDevListPtr pVidCapDevList = grabber.getAvailableVideoCaptureDevices();
if( pVidCapDevList == 0 || pVidCapDevList->empty() )
{
  return -1; // 有効なデバイスがありません
}

int choice = presentUserChoice( toStringArrayPtr( pVidCapDevList ) );
// 選択したデバイスをオープンにする
if( choice == -1 )
{
  return -1;
}
grabber.openDev( pVidCapDevList->at( choice ) );

まず最初に、Grabber::getAvailableVideoCaptureDevicesクラスライブラリリファレンス>クラス>Grabber>Grabber::getAvailableVideoCaptureDevices Methodがコールされコンピューターに接続されたデバイスのリストを取得します。%TOPLEVEL%\Samples\VC71\Common\CmdHelper.hよりヘルパー関数presentUserChoiceが呼び出され、利用可能なデバイスをコンソールに出力します。ユーザーは番号を入力します。

選択されたデバイスはGrabber::openDevクラスライブラリリファレンス>クラス>Grabber>Grabber::openDev Methodをコールすることでオープンにできます。

ビデオ規格の選択

デバイスが複数のビデオ規格をサポートしている場合、それらは全て表示され、ユーザーはそこから選択することになります。そして次にそのビデオ規格で利用可能なビデオフォーマットの一覧が表示さます。"q"のキーを押してプログラムを終了させるまで、ユーザーは再度ビデオ規格の選択を促されます。

// 現在のデバイスがビデオ規格に対応しているかチェック
if( grabber.isVideoNormAvailableWithCurDev() )
{
  // 対応するビデオ規格のクエリ
  Grabber::tVidNrmListPtr pVidNrmList = grabber.getAvailableVideoNorms();

  if( pVidNrmList == 0 )
  {
    std::cerr << "Error: " << grabber.getLastError().toString() << std::endl;
    return -1;
  }
  while ( true )
  {
    std::cout << "Video Norms available for " << grabber.getDev().toString() << std::endl;

    int choice = presentUserChoice( toStringArrayPtr(pVidNrmList) );
    if( choice != -1 )
    {
      // ビデオフォーマットを取得する前に選択されたビデオ規格を設定する
      grabber.setVideoNorm( pVidNrmList->at( choice ) );

Grabber::isVideoNormAvailableWithCurDevクラスライブラリリファレンス>クラス>Grabber>Grabber::isVideoNormAvailableWithCurDev Methodはオープンなデバイスがビデオ規格をサポートしているかをチェックします。この際、Grabber::getAvailableVideoNormsクラスライブラリリファレンス>クラス>Grabber>Grabber::getAvailableVideoNorms Methodがコールされることで利用可能なビデオ規格のリストが取得されます。

ユーザーがpresentUserChoiceからビデオ規格を選択後、Grabber::setVideoNormクラスライブラリリファレンス>クラス>Grabber>Grabber::setVideoNorm Methodでそれを設定します。

利用可能なビデオフォーマットを表示させる

ビデオ規格が選択された際、あるいはサポートされていない場合、利用可能なビデオフォーマットが表示されます。

Grabber::tVidFmtListPtr pVidFmtList = grabber.getAvailableVideoFormats();

if( pVidFmtList == 0 ) // 利用可能なビデオフォーマットは?
{
  std::cerr << "Error : " << grabber.getLastError().toString() << std::endl;
}
else
{
  unsigned int counter = 0;
  // ビデオフォーマットの一覧を表示
  for( Grabber::tVidFmtList::iterator it = pVidFmtList->begin();
     it != pVidFmtList->end();
     ++it )
  {
    std::cout << "\t[" << counter++ << "] " << it->toString() << std::endl;
  }
}

Grabber::getAvailableVideoFormatsクラスライブラリリファレンス>クラス>Grabber>Grabber::getAvailableVideoFormats Methodは利用可能なビデオフォーマットを含むリストを返します。ループ内ではフォーマット名が表示されます。ビデオフォーマット名はVideoFormatItem::toStringクラスライブラリリファレンス>クラス>Grabber>VideoFormatItem::toString Methodをコールすることで取得できます。