Merge branch 'develParseOpt' into devel
This commit is contained in:
+375
-54
@@ -36,46 +36,245 @@
|
||||
* \brief Input args handler
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "PlaYUVerOptions.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <cstdarg>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
#include "PlaYUVerOptions.h"
|
||||
|
||||
#include "lib/PlaYUVerModuleIf.h"
|
||||
#include "modules/PlaYUVerModuleFactory.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct ParseFailure: public std::exception
|
||||
{
|
||||
String arg;
|
||||
String val;
|
||||
ParseFailure( String arg0, String val0 ) throw() :
|
||||
arg( arg0 ),
|
||||
val( val0 ) { }
|
||||
~ParseFailure() throw() { }
|
||||
const Char* what() const throw()
|
||||
{
|
||||
return "Option Parse Failure";
|
||||
}
|
||||
};
|
||||
|
||||
Options::Options( const String& name )
|
||||
|
||||
/** Type specific option storage */
|
||||
class BoolOption: public OptionBase
|
||||
{
|
||||
public:
|
||||
BoolOption( const String& name, const String& desc ) :
|
||||
OptionBase( name, desc )
|
||||
{
|
||||
is_binary = true;
|
||||
}
|
||||
|
||||
void parse( const String& arg )
|
||||
{
|
||||
arg_count++;
|
||||
}
|
||||
};
|
||||
|
||||
/** Type specific option storage */
|
||||
template<typename T>
|
||||
class StandardOption: public OptionBase
|
||||
{
|
||||
public:
|
||||
StandardOption( const String& name, T& storage, const String& desc ) :
|
||||
OptionBase( name, desc ),
|
||||
opt_storage( storage )
|
||||
{
|
||||
is_binary = false;
|
||||
}
|
||||
|
||||
void parse( const String& arg );
|
||||
T& opt_storage;
|
||||
std::vector<T> opt_storage_array;
|
||||
};
|
||||
|
||||
/* Generic parsing */
|
||||
template<typename T>
|
||||
inline void StandardOption<T>::parse( const String& arg )
|
||||
{
|
||||
if( !is_binary )
|
||||
{
|
||||
std::istringstream arg_ss( arg, std::istringstream::in );
|
||||
arg_ss.exceptions( std::ios::failbit );
|
||||
try
|
||||
{
|
||||
arg_ss >> opt_storage;
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
throw ParseFailure( opt_string, arg );
|
||||
}
|
||||
}
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void StandardOption< std::vector<UInt> >::parse( const String& arg )
|
||||
{
|
||||
UInt aux_opt_storage;
|
||||
std::istringstream arg_ss( arg, std::istringstream::in );
|
||||
arg_ss.exceptions( std::ios::failbit );
|
||||
try
|
||||
{
|
||||
arg_ss >> aux_opt_storage;
|
||||
opt_storage.push_back( aux_opt_storage );
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
throw ParseFailure( opt_string, arg );
|
||||
}
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void StandardOption< std::vector<Int> >::parse( const String& arg )
|
||||
{
|
||||
Int aux_opt_storage;
|
||||
std::istringstream arg_ss( arg, std::istringstream::in );
|
||||
arg_ss.exceptions( std::ios::failbit );
|
||||
try
|
||||
{
|
||||
arg_ss >> aux_opt_storage;
|
||||
opt_storage.push_back( aux_opt_storage );
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
throw ParseFailure( opt_string, arg );
|
||||
}
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
/* string parsing is specialized */
|
||||
template<>
|
||||
inline void StandardOption<String>::parse( const String& arg )
|
||||
{
|
||||
opt_storage = arg;
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
/* string vector parsing is specialized */
|
||||
template<>
|
||||
inline void StandardOption<std::vector<String> >::parse( const String& arg )
|
||||
{
|
||||
opt_storage.push_back( arg );
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
/** Option class for argument handling using a user provided function */
|
||||
struct FunctionOption: public OptionBase
|
||||
{
|
||||
public:
|
||||
typedef Void( Func )( PlaYUVerOptions&, const String& );
|
||||
|
||||
FunctionOption( const String& name, PlaYUVerOptions& parent_, Func *func_, const String& desc ) :
|
||||
OptionBase( name, desc ),
|
||||
parent( parent_ ),
|
||||
func( func_ )
|
||||
{
|
||||
is_binary = false;
|
||||
}
|
||||
|
||||
void parse( const String& arg )
|
||||
{
|
||||
func( parent, arg );
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
private:
|
||||
PlaYUVerOptions& parent;
|
||||
void ( *func )( PlaYUVerOptions&, const String& );
|
||||
};
|
||||
|
||||
/* Helper method to initiate adding options to Options */
|
||||
|
||||
/**
|
||||
* Add option described by name to the parent Options list,
|
||||
* with storage for the option's value
|
||||
* with default_val as the default value
|
||||
* with desc as an optional help description
|
||||
*/
|
||||
PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, const String& desc )
|
||||
{
|
||||
addOption( new BoolOption( name, desc ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add option described by name to the parent Options list,
|
||||
* with storage for the option's value
|
||||
* with desc as an optional help description
|
||||
*/
|
||||
template<typename T>
|
||||
PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, T& storage, const String& desc )
|
||||
{
|
||||
addOption( new StandardOption<T>( name, storage, desc ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, Bool& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, UInt& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, Int& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, Int64& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, String& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, std::vector<UInt>& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, std::vector<Int>& storage, const String& desc );
|
||||
template PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, std::vector<String>& storage, const String& desc );
|
||||
|
||||
/**
|
||||
* Add option described by name to the parent Options list,
|
||||
* with desc as an optional help description
|
||||
* instead of storing the value somewhere, a function of type
|
||||
* FunctionOption::Func is called. It is upto this function to correctly
|
||||
* handle evaluating the option's value.
|
||||
*/
|
||||
// PlaYUVerOptions& PlaYUVerOptions::operator()( const String& name, FunctionOption::Func *func, const String& desc )
|
||||
// {
|
||||
// addOption( new FunctionOption( name, parent, func, desc ) );
|
||||
// return *this;
|
||||
// }
|
||||
|
||||
PlaYUVerOptions::PlaYUVerOptions( const String& name )
|
||||
{
|
||||
m_cOptionGroupName = name;
|
||||
m_bAllowUnkonw = true;
|
||||
}
|
||||
|
||||
Options::~Options()
|
||||
PlaYUVerOptions::~PlaYUVerOptions()
|
||||
{
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
{
|
||||
delete *it;
|
||||
}
|
||||
}
|
||||
|
||||
OptionBase* Options::operator[]( const String& optName )
|
||||
OptionBase* PlaYUVerOptions::operator[]( const String& optName )
|
||||
{
|
||||
return getOption( optName );
|
||||
}
|
||||
|
||||
OptionBase* Options::getOption( const String& optName )
|
||||
OptionBase* PlaYUVerOptions::getOption( const String& optName )
|
||||
{
|
||||
Options::OptionMap::iterator opt_it;
|
||||
PlaYUVerOptions::OptionMap::iterator opt_it;
|
||||
opt_it = opt_short_map.find( optName );
|
||||
if( opt_it != opt_short_map.end() )
|
||||
{
|
||||
OptionsList opt_list = ( *opt_it ).second;
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
{
|
||||
return ( *it )->opt;
|
||||
}
|
||||
@@ -84,7 +283,7 @@ OptionBase* Options::getOption( const String& optName )
|
||||
if( opt_it != opt_long_map.end() )
|
||||
{
|
||||
OptionsList opt_list = ( *opt_it ).second;
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
{
|
||||
return ( *it )->opt;
|
||||
}
|
||||
@@ -92,12 +291,30 @@ OptionBase* Options::getOption( const String& optName )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Bool Options::hasOpt( const String& optName )
|
||||
Bool PlaYUVerOptions::hasOpt( const String& optName )
|
||||
{
|
||||
return getOption( optName )->count() > 0 ? true : false;
|
||||
OptionBase* opt = getOption( optName );
|
||||
return opt ? opt->count() > 0 ? true : false : false;
|
||||
}
|
||||
|
||||
void Options::addOption( OptionBase *opt )
|
||||
Void PlaYUVerOptions::addDefaultOptions()
|
||||
{
|
||||
addOptions()/**/
|
||||
( "help,h", "produce help message" )/**/
|
||||
( "version", "show version and exit" )/**/
|
||||
( "pel_fmts", "list pixel formats" ) /**/
|
||||
( "quality_metrics", "list supported quality metrics" )/**/
|
||||
( "module_list", "list supported modules" ) /**/
|
||||
( "module_list_full", "detailed list supported modules" );
|
||||
}
|
||||
|
||||
|
||||
PlaYUVerOptions& PlaYUVerOptions::addOptions()
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
void PlaYUVerOptions::addOption( OptionBase *opt )
|
||||
{
|
||||
Option* names = new Option();
|
||||
names->opt = opt;
|
||||
@@ -129,36 +346,22 @@ void Options::addOption( OptionBase *opt )
|
||||
opt_list.push_back( names );
|
||||
}
|
||||
|
||||
/* Helper method to initiate adding options to Options */
|
||||
OptionSpecific Options::addOptions()
|
||||
{
|
||||
return OptionSpecific( *this );
|
||||
}
|
||||
|
||||
/* for all options in opts, set their storage to their specified
|
||||
* default value */
|
||||
Void Options::setDefaults()
|
||||
{
|
||||
// for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
// {
|
||||
// ( *it )->opt->setDefault();
|
||||
// }
|
||||
}
|
||||
|
||||
static void setOptions( Options::OptionsList& opt_list, const string& value )
|
||||
static void setOptions( PlaYUVerOptions::OptionsList& opt_list, const string& value )
|
||||
{
|
||||
/* multiple options may be registered for the same name:
|
||||
* allow each to parse value */
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); ++it )
|
||||
{
|
||||
( *it )->opt->parse( value );
|
||||
}
|
||||
}
|
||||
|
||||
Bool Options::storePair( Bool allow_long, Bool allow_short, const string& name, const string& value )
|
||||
Bool PlaYUVerOptions::storePair( Bool allow_long, Bool allow_short, const string& name, const string& value )
|
||||
{
|
||||
bool found = false;
|
||||
Options::OptionMap::iterator opt_it;
|
||||
PlaYUVerOptions::OptionMap::iterator opt_it;
|
||||
if( allow_long )
|
||||
{
|
||||
opt_it = opt_long_map.find( name );
|
||||
@@ -197,7 +400,7 @@ Bool Options::storePair( Bool allow_long, Bool allow_short, const string& name,
|
||||
return true;
|
||||
}
|
||||
|
||||
Bool Options::storePair( const string& name, const string& value )
|
||||
Bool PlaYUVerOptions::storePair( const string& name, const string& value )
|
||||
{
|
||||
return storePair( true, true, name, value );
|
||||
}
|
||||
@@ -205,7 +408,7 @@ Bool Options::storePair( const string& name, const string& value )
|
||||
/**
|
||||
* returns number of extra arguments consumed
|
||||
*/
|
||||
UInt Options::parseLONG( unsigned argc, const char* argv[] )
|
||||
UInt PlaYUVerOptions::parseLONG( UInt argc, Char* argv[] )
|
||||
{
|
||||
/* gnu style long options can take the forms:
|
||||
* --option=arg
|
||||
@@ -216,7 +419,7 @@ UInt Options::parseLONG( unsigned argc, const char* argv[] )
|
||||
size_t arg_opt_sep = arg.find_first_of( '=' );
|
||||
string option = arg.substr( arg_opt_start, arg_opt_sep - arg_opt_start );
|
||||
|
||||
unsigned extra_argc_consumed = 0;
|
||||
UInt extra_argc_consumed = 0;
|
||||
if( arg_opt_sep == string::npos )
|
||||
{
|
||||
/* no argument found => argument in argv[1] (maybe) */
|
||||
@@ -225,8 +428,8 @@ UInt Options::parseLONG( unsigned argc, const char* argv[] )
|
||||
/* commented out, to return to true GNU style processing
|
||||
* where longopts have to include an =, otherwise they are
|
||||
* booleans */
|
||||
if (argc == 1)
|
||||
return 0; /* run out of argv for argument */
|
||||
if( argc == 1 )
|
||||
return 0; /* run out of argv for argument */
|
||||
extra_argc_consumed = 1;
|
||||
#endif
|
||||
if( !storePair( true, false, option, "1" ) )
|
||||
@@ -246,7 +449,7 @@ UInt Options::parseLONG( unsigned argc, const char* argv[] )
|
||||
/**
|
||||
* returns number of extra arguments consumed
|
||||
*/
|
||||
UInt Options::parseLONG( string arg )
|
||||
UInt PlaYUVerOptions::parseLONG( string arg )
|
||||
{
|
||||
/* gnu style long options can take the forms:
|
||||
* --option=arg
|
||||
@@ -256,7 +459,7 @@ UInt Options::parseLONG( string arg )
|
||||
size_t arg_opt_sep = arg.find_first_of( '=' );
|
||||
string option = arg.substr( arg_opt_start, arg_opt_sep - arg_opt_start );
|
||||
|
||||
unsigned extra_argc_consumed = 0;
|
||||
UInt extra_argc_consumed = 0;
|
||||
if( arg_opt_sep == string::npos )
|
||||
{
|
||||
/* no argument found => argument in argv[1] (maybe) */
|
||||
@@ -275,7 +478,7 @@ UInt Options::parseLONG( string arg )
|
||||
return extra_argc_consumed;
|
||||
}
|
||||
|
||||
unsigned Options::parseSHORT( unsigned argc, const char* argv[] )
|
||||
UInt PlaYUVerOptions::parseSHORT( UInt argc, Char* argv[] )
|
||||
{
|
||||
/* short options can take the forms:
|
||||
* --option arg
|
||||
@@ -301,12 +504,38 @@ unsigned Options::parseSHORT( unsigned argc, const char* argv[] )
|
||||
return 1;
|
||||
}
|
||||
|
||||
list<const char*> Options::scanArgv( unsigned argc, const char* argv[] )
|
||||
Bool PlaYUVerOptions::parse( UInt argc, Char *argv[] )
|
||||
{
|
||||
try
|
||||
{
|
||||
m_aUnhandledArgs = scanArgv( argc, argv );
|
||||
|
||||
if( checkListingOpts() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch( std::exception& e )
|
||||
{
|
||||
std::cerr << "error: "
|
||||
<< e.what()
|
||||
<< "\n";
|
||||
return false;
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
std::cerr << "Exception of unknown type!\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
list<const Char*> PlaYUVerOptions::scanArgv( UInt argc, Char *argv[] )
|
||||
{
|
||||
/* a list for anything that didn't get handled as an option */
|
||||
list<const char*> non_option_arguments;
|
||||
list<const Char*> non_option_arguments;
|
||||
|
||||
for( unsigned i = 1; i < argc; i++ )
|
||||
for( UInt i = 1; i < argc; i++ )
|
||||
{
|
||||
if( argv[i][0] != '-' )
|
||||
{
|
||||
@@ -325,7 +554,7 @@ list<const char*> Options::scanArgv( unsigned argc, const char* argv[] )
|
||||
{
|
||||
/* handle short (single dash) options */
|
||||
#if 0
|
||||
i += parsePOSIX(opts, argc - i, &argv[i]);
|
||||
i += parsePOSIX( opts, argc - i, &argv[i] );
|
||||
#else
|
||||
i += parseSHORT( argc - i, &argv[i] );
|
||||
#endif
|
||||
@@ -347,9 +576,9 @@ list<const char*> Options::scanArgv( unsigned argc, const char* argv[] )
|
||||
return non_option_arguments;
|
||||
}
|
||||
|
||||
Void Options::scanArgs( std::vector<String> args_array)
|
||||
Void PlaYUVerOptions::parse( std::vector<String> args_array )
|
||||
{
|
||||
for( unsigned i = 0; i < args_array.size(); i++ )
|
||||
for( UInt i = 0; i < args_array.size(); i++ )
|
||||
{
|
||||
i += parseLONG( args_array[i] );
|
||||
}
|
||||
@@ -362,13 +591,13 @@ static const char spaces[41] = " ";
|
||||
* using the formatting: "-x, --long",
|
||||
* if a short/long option isn't specified, it is not printed
|
||||
*/
|
||||
static void doHelpOpt( ostream& out, const Options::Option& entry, unsigned pad_short = 0 )
|
||||
static void doHelpOpt( ostream& out, const PlaYUVerOptions::Option& entry, UInt pad_short = 0 )
|
||||
{
|
||||
pad_short = min( pad_short, 8u );
|
||||
|
||||
if( !entry.opt_short.empty() )
|
||||
{
|
||||
unsigned pad = max( ( int )pad_short - ( int )entry.opt_short.front().size(), 0 );
|
||||
UInt pad = max( ( int )pad_short - ( int )entry.opt_short.front().size(), 0 );
|
||||
out << "-"
|
||||
<< entry.opt_short.front();
|
||||
if( !entry.opt_long.empty() )
|
||||
@@ -391,27 +620,27 @@ static void doHelpOpt( ostream& out, const Options::Option& entry, unsigned pad_
|
||||
}
|
||||
|
||||
/* format the help text */
|
||||
Void Options::doHelp( ostream& out, unsigned columns )
|
||||
Void PlaYUVerOptions::doHelp( ostream& out, UInt columns )
|
||||
{
|
||||
const unsigned pad_short = 3;
|
||||
const UInt pad_short = 3;
|
||||
/* first pass: work out the longest option name */
|
||||
unsigned max_width = 0;
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
UInt max_width = 0;
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
{
|
||||
ostringstream line( ios_base::out );
|
||||
doHelpOpt( line, **it, pad_short );
|
||||
max_width = max( max_width, ( unsigned )line.tellp() );
|
||||
max_width = max( max_width, ( UInt )line.tellp() );
|
||||
}
|
||||
|
||||
unsigned opt_width = min( max_width + 2, 28u + pad_short ) + 2;
|
||||
unsigned desc_width = columns - opt_width;
|
||||
UInt opt_width = min( max_width + 2, 28u + pad_short ) + 2;
|
||||
UInt desc_width = columns - opt_width;
|
||||
|
||||
/* second pass: write out formatted option and help text.
|
||||
* - align start of help text to start at opt_width
|
||||
* - if the option text is longer than opt_width, place the help
|
||||
* text at opt_width on the next line.
|
||||
*/
|
||||
for( Options::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
{
|
||||
ostringstream line( ios_base::out );
|
||||
line << " ";
|
||||
@@ -489,5 +718,97 @@ Void Options::doHelp( ostream& out, unsigned columns )
|
||||
}
|
||||
}
|
||||
|
||||
Bool PlaYUVerOptions::checkListingOpts()
|
||||
{
|
||||
Bool bRet = false;
|
||||
|
||||
if( hasOpt( "version" ) )
|
||||
{
|
||||
std::cout << "PlaYUVer version "
|
||||
<< PLAYUVER_VERSION_STRING
|
||||
<< "\n";
|
||||
bRet |= true;
|
||||
}
|
||||
if( hasOpt( "pel_fmts" ) )
|
||||
{
|
||||
printf( "PlaYUVer supported pixel formats: \n" );
|
||||
for( UInt i = 0; i < PlaYUVerFrame::supportedPixelFormatListNames().size(); i++ )
|
||||
{
|
||||
printf( " %s\n", PlaYUVerFrame::supportedPixelFormatListNames()[i].c_str() );
|
||||
}
|
||||
bRet |= true;
|
||||
}
|
||||
if( hasOpt( "quality_metrics" ) )
|
||||
{
|
||||
printf( "PlaYUVer supported quality metrics: \n" );
|
||||
for( UInt i = 0; i < PlaYUVerFrame::supportedQualityMetricsList().size(); i++ )
|
||||
{
|
||||
printf( " %s\n", PlaYUVerFrame::supportedQualityMetricsList()[i].c_str() );
|
||||
}
|
||||
bRet |= true;
|
||||
}
|
||||
if( hasOpt( "module_list" ) || hasOpt( "module_list_full" ) )
|
||||
{
|
||||
listModules();
|
||||
bRet |= true;
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
Void PlaYUVerOptions::listModules()
|
||||
{
|
||||
Bool bDetailed = false;
|
||||
|
||||
if( hasOpt( "module_list_full" ) )
|
||||
bDetailed = true;
|
||||
|
||||
PlaYUVerModuleIf* pcCurrModuleIf;
|
||||
PlaYUVerModuleFactoryMap& PlaYUVerModuleFactoryMap = PlaYUVerModuleFactory::Get()->getMap();
|
||||
PlaYUVerModuleFactoryMap::iterator it = PlaYUVerModuleFactoryMap.begin();
|
||||
|
||||
printf( "PlaYUVer available modules: \n" );
|
||||
printf( " [Internal Name] " );
|
||||
if( bDetailed )
|
||||
{
|
||||
printf( " [Full Name] " );
|
||||
printf( " [Type] " );
|
||||
printf( " [Description]" );
|
||||
}
|
||||
printf( " \n" );
|
||||
|
||||
Char ModuleNameString[40];
|
||||
|
||||
for( UInt i = 0; it != PlaYUVerModuleFactoryMap.end(); ++it, i++ )
|
||||
{
|
||||
printf( " " );
|
||||
printf( "%-30s", it->first );
|
||||
if( bDetailed )
|
||||
{
|
||||
ModuleNameString[0] = '\0';
|
||||
pcCurrModuleIf = it->second();
|
||||
|
||||
if( pcCurrModuleIf->m_pchModuleCategory )
|
||||
{
|
||||
strcat( ModuleNameString, pcCurrModuleIf->m_pchModuleCategory );
|
||||
strcat( ModuleNameString, "/" );
|
||||
}
|
||||
strcat( ModuleNameString, pcCurrModuleIf->m_pchModuleName );
|
||||
printf( " %-40s", ModuleNameString );
|
||||
switch( pcCurrModuleIf->m_iModuleType )
|
||||
{
|
||||
case FRAME_PROCESSING_MODULE:
|
||||
printf( " Processing " );
|
||||
break;
|
||||
case FRAME_MEASUREMENT_MODULE:
|
||||
printf( " Measurement " );
|
||||
break;
|
||||
}
|
||||
printf( " %s", pcCurrModuleIf->m_pchModuleTooltip );
|
||||
pcCurrModuleIf->Delete();
|
||||
}
|
||||
printf( "\n" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user