Grabber::getAvailableVideoNorms Method

現在選択中のデバイスが対応しているビデオ規格を返します。

構文

tVidNrmListPtr getAvailableVideoNorms() const;

戻り値

VideoNormItemクラスライブラリリファレンス>クラス>VideoNormItemのリストへのポインタ。エラーが発生した場合は0。

備考

このメソッドはデバイスが対応するビデオ規格 (例: PAL, NTSCなど) のリストを返します。
デバイスの中にはDCAMカメラのようにビデオ規格をサポートしないものもあるため、その場合はリストは空になります。 Grabber::isVideoNormAvailableWithCurDevクラスライブラリリファレンス>クラス>Grabber>Grabber::isVideoNormAvailableWithCurDev Methodを使うことでデバイスがビデオ規格をサポートしているかチェックすることができます。

サンプル

///////////////////////////////////////////////////////////////////////////////
//
// このサンプルはビデオ規格とフォーマットのクエリを行う方法について説明しています。
// デバイスがビデオ規格をサポートしている場合、利用可能なビデオフォーマットはその規格に依存します。
// 下記の方法によってビデオフォーマットの取得前にビデオ規格を取得することが可能となります。
//
// デバイスがビデオ規格をサポートしていない場合、即座にビデオフォーマットが取得されます。
//
#include "stdafx.h"
#include <conio.h>
#include "tisudshl.h"
using namespace _DShowLib_NAMESPACE;
int main(int argc, char* argv[])
{
  int choice, input;
  int i=0;
  // ライブラリの初期化
  #error "insert license key here!"
  // 上記の行を削除
  // トライアルバージョンを使用している場合のライセンスキーはクォーテーションマークなしの0とします
  // 例: if(!DShowLib::InitLibrary( 0 ))
  //
  // ライセンス版(スタンダード or プロ)を使用している場合、ライセンスキーは
  // クォーテーションマーク付の文字列となります。ライセンスキーはIC Imaging Controlの
  // セットアップ時に入力したものと同一でなければいけません。
  // 例: if( !DShowLib::InitLibrary( "XXXXXXX" ))
  if( !DShowLib::InitLibrary( 0 ) )
  {
    fprintf( stderr, "The library could not be initialized ");
    fprintf( stderr, "(invalid license key?).\n");
    exit( 1 );
  }
  Grabber *grabber=new Grabber();
  Grabber::tVidCapDevListPtr pVidCapDevList = grabber->getAvailableVideoCaptureDevices();
  if( pVidCapDevList == 0 || pVidCapDevList->empty() )
  {
    delete grabber;
    exit( 1 ); // 利用可能なデバイスがありません
  }
  // 利用可能なデバイスを取得し表示する
  printf( "Available Grabbers: \n" );
  for ( Grabber::tVidCapDevListPtr::value_type::iterator it = pVidCapDevList->begin();
    it != pVidCapDevList->end();
    ++it )
    {
      printf( "[%i] %s\n", i++, it->c_str() );
    }
    // ユーザーにデバイスの選択を促す
     printf( "Your Choice: ");
    input=scanf( "%i", &choice );
    // 選択したデバイスをオープンにする
    if ( choice>=0 && choice < pVidCapDevList->size() )
    {
      grabber->openDev( pVidCapDevList->at( choice ) );
    }
    else
    {
      delete grabber;
      exit( 0 );  // いずれのGrabberも選択されなかったのでサンプルを終了する
    }
    // 現在のデバイスがビデオ規格に対応しているかどうかをチェック
     if ( grabber->isVideoNormAvailableWithCurDev() )
    {
      // 利用可能なビデオ規格のクエリ
      Grabber::tVidNrmListPtr pVidNrmList = grabber->getAvailableVideoNorms();
      if ( pVidNrmList == 0 )
      {
        fprintf( stderr, "Error: %s\n", grabber->getLastError() );
        delete grabber;
        exit( 1 );
      }
      while ( true )
      {
        i=0;
        // 利用可能なビデオ規格を表示
        printf( "\n\nAvailable video norms:\n" );
        for ( Grabber::tVidNrmListPtr::value_type::iterator it = pVidNrmList->begin();
           it != pVidNrmList->end();
           ++it )
        {
          printf( "[%i] %s\n", i++, it->c_str() );
        }
        // ユーザーにビデオ規格の選択を促す
        printf( "Your choice (q to quit): ");
        // 何も入力されなかった場合、サンプルを終了する
        input=scanf( "%i", &choice );
        if ( input == 0 ) break;
        if ( choice>=0 && choice <pVidNrmList-> size() )
        {
          // ビデオフォーマットの取得前に選択したビデオ規格をデバイスに設定する
          grabber->setVideoNorm( pVidNrmList->at( choice ) );
          printf( "\n\nVideo Formats available for %s: \n", pVidNrmList->at( choice ).c_str() );
          // ビデオフォーマットを取得
          Grabber::tVidFmtListPtr pVidFmtList = grabber->getAvailableVideoFormats();
          if ( pVidFmtList == 0 ) // 利用可能なビデオフォーマットがあるかどうか
          {
            fprintf( stderr, "Error: %s\n", grabber->getLastError() );
            break;
          }
          i = 0;
          // 利用可能なビデオフォーマットの一覧を作成
          for ( Grabber::tVidFmtListPtr::value_type::iterator it = pVidFmtList->begin();
             it != pVidFmtList->end();
             ++it )
          {
            printf( "[%i] %s\n", i++, it->c_str() );
          }
        }
      }
    }
    else
    {
      // デバイスがビデオ規格をサポートしていない場合、
      // 利用可能なビデオフォーマットを即座に取得します.
    printf( "\n\nVideo Formats available: \n" );
    Grabber::tVidFmtListPtr pVidFmtList = grabber->getAvailableVideoFormats();
    if ( pVidFmtList == 0 ) // 利用可能なビデオフォーマットがあるかどうか
    {
      fprintf( stderr, "Error: %s\n", grabber->getLastError() );
    }
    else
    {
      i = 0;
      // ビデオフォーマットの一覧を表示
      for ( Grabber::tVidFmtListPtr::value_type::iterator it = pVidFmtList->begin();
         it != pVidFmtList->end();
         ++it )
      {
        printf( "[%i] %s\n", i++, it->c_str() );
      }
    }
  }
  delete grabber;
  printf("Press any key to continue");
  getch();
  return 0;
}