ビデオフォーマット情報の取得
ここでは利用可能なビデオフォーマット情報の取得の仕方について説明します。
このプログラムはディレクトリ%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をコールすることで取得できます。