This example demonstrates how to acquire information about the available video formats.
The program can be found in the %TOPLEVEL%\Samples\VC\VideoNormFormat directory. In order to run the program, open the solution file VidNormFormat.sln in this directory and select Build -> Build VideoNormFormat in the menu. Then the program can be executed by selecting Debug -> Start.
The program will generate a list of all available video capture devices and prompt the user for the device to open.
Grabber::tVidCapDevListPtr pVidCapDevList = grabber.getAvailableVideoCaptureDevices(); if( pVidCapDevList == 0 || pVidCapDevList->empty() ) { return -1; // No device available. } int choice = presentUserChoice( toStringArrayPtr(pVidCapDevList) ); // Open the selected video capture device. if( choice == -1 ) { return -1; } grabber.openDev( pVidCapDevList->at( choice ) );
First, Grabber::getAvailableVideoCaptureDevices is called to retrieve a list with the video capture devices connected to the computer. The helper function presentUserChoice from %TOPLEVEL%\Samples\VC\Common\CmdHelper.h is called to output the available devices to the console and let the user input a number.
The selected video capture device is opened by calling Grabber::openDev.
If the selected device supports multiple video norms, all available video norms will be printed to the screen and the user will be asked for a norm. If the user selects a norm, all video formats available for the selected norm are printed on the screen and the user is again prompted for a video norm until he terminates the program by pressing "q".
// Check whether video norms are available with the current video capture device. if( grabber.hasVideoNorms() ) { // Query for all available video norms. 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 ) { // Set the selected video norm before // retrieving the according video formats. grabber.setVideoNorm( pVidNrmList->at( choice ) );
Grabber::hasVideoNorms is called to check whether the opened video capture device supports video norms. If it does, a list with the available video norms is retrieved by calling Grabber::getAvailableVideoNorms.
After the user selected one of the video norms in presentUserChoice, Grabber::setVideoNorm is used to set the selected norm.
When a video norm was selected, or video norms are not supported, the available video formats are printed to the screen:
Grabber::tVidFmtListPtr pVidFmtList = grabber.getAvailableVideoFormats(); if( pVidFmtList == 0 ) // No video formats available? { std::cerr << "Error : " << grabber.getLastError().toString() << std::endl; } else { unsigned int counter = 0; // List the available video formats. for( Grabber::tVidFmtList::iterator it = pVidFmtList->begin(); it != pVidFmtList->end(); ++it ) { std::cout << "\t[" << counter++ << "] " << it->toString() << std::endl; } }
Grabber::getAvailableVideoFormats returns a list containing the available video formats. In a loop, the names of the formats are displayed. You can get the name of a video format by calling VideoFormatItem::toString.