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

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

このプログラムはディレクトリ%TOPLEVEL%\Samples\VC\VideoNormFormatになります。
プログラムを実行するため、ディレクトリ内のソリューションファイル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\VC\Common\CmdHelper.hよりヘルパー関数presentUserChoiceが呼び出され、利用可能なデバイスをコンソールに出力します。ユーザーは番号を入力します。
選択されたデバイスはGrabber::openDevクラスライブラリリファレンス>クラス>Grabber>Grabber::openDev Methodをコールすることでオープンにできます。

ビデオ規格の選択

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

// 現在のデバイスが VideoNormに対応しているかチェック
if( grabber.hasVideoNorms() )
{
  // 対応するVideoNormのクエリ
  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 )
    {
      // ビデオフォーマットを取得する前に選択された VideoNorm を設定する
       grabber.setVideoNorm( pVidNrmList->at( choice ) );

Grabber::hasVideoNormsクラスライブラリリファレンス>クラス>Grabber>Grabber::hasVideoNorms Methodは現在開かれているデバイスがVideoNormをサポートしているかをチェックします。この後、Grabber::getAvailableVideoNormsクラスライブラリリファレンス>クラス>Grabber>Grabber::getAvailableVideoNorms Methodがコールすることで利用可能なVideoNormのリストを取得します。

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

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

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

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をコールすることで取得できます。