Change Option parsing implmentation
Clean structs and classes. Hide implementation details Remove redundant classes
This commit is contained in:
@@ -495,7 +495,7 @@ Void ModulesHandle::applyAllModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf )
|
||||
if( !pcCurrModuleIf->m_pcModuleStream )
|
||||
{
|
||||
UInt Width = 0, Height = 0, FrameRate = 30;
|
||||
Int BitsPixel, InputFormat = -1;
|
||||
Int BitsPixel, Endianness, InputFormat = -1;
|
||||
|
||||
QString supported = tr( "Supported Files (" );
|
||||
QStringList formatsList;
|
||||
@@ -525,10 +525,11 @@ Void ModulesHandle::applyAllModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf )
|
||||
Height = pcCurrModuleIf->m_pcProcessedFrame->getHeight();
|
||||
InputFormat = pcCurrModuleIf->m_pcProcessedFrame->getPelFormat();
|
||||
BitsPixel = pcCurrModuleIf->m_pcProcessedFrame->getBitsPel();
|
||||
Endianness = pcCurrModuleIf->m_pcProcessedFrame->getEndianness();
|
||||
FrameRate = pcCurrModuleIf->m_pcSubWindow[0]->getInputStream()->getFrameRate();
|
||||
|
||||
pcCurrModuleIf->m_pcModuleStream = new PlaYUVerStream;
|
||||
if( !pcCurrModuleIf->m_pcModuleStream->open( fileName.toStdString(), Width, Height, InputFormat, BitsPixel, FrameRate, false ) )
|
||||
if( !pcCurrModuleIf->m_pcModuleStream->open( fileName.toStdString(), Width, Height, InputFormat, BitsPixel, Endianness, FrameRate, false ) )
|
||||
{
|
||||
delete pcCurrModuleIf->m_pcModuleStream;
|
||||
pcCurrModuleIf->m_pcModuleStream = NULL;
|
||||
|
||||
@@ -86,11 +86,11 @@ ModulesHandleOptDialog::ModulesHandleOptDialog( QWidget *parent, PlaYUVerAppModu
|
||||
resize( 400, 10 );
|
||||
setWindowTitle( "Select module parameters" );
|
||||
|
||||
const Options::OptionsList& moduleOptions = m_pcCurrModuleIf->m_pcModule->m_cModuleOptions.getOptionList();
|
||||
const PlaYUVerOptions::OptionsList& moduleOptions = m_pcCurrModuleIf->m_pcModule->m_cModuleOptions.getOptionList();
|
||||
|
||||
QVBoxLayout* optionsLayout = new QVBoxLayout;
|
||||
OpionConfiguration* pcOption;
|
||||
for( Options::OptionsList::const_iterator it = moduleOptions.begin(); it != moduleOptions.end(); ++it )
|
||||
for( PlaYUVerOptions::OptionsList::const_iterator it = moduleOptions.begin(); it != moduleOptions.end(); ++it )
|
||||
{
|
||||
pcOption = new OpionConfiguration( ( *it )->opt );
|
||||
m_apcOptionList.append( pcOption );
|
||||
@@ -142,7 +142,7 @@ Int ModulesHandleOptDialog::runConfiguration()
|
||||
}
|
||||
if( argsArray.size() > 0 )
|
||||
{
|
||||
m_pcCurrModuleIf->m_pcModule->m_cModuleOptions.scanArgs( argsArray );
|
||||
m_pcCurrModuleIf->m_pcModule->m_cModuleOptions.parse( argsArray );
|
||||
}
|
||||
return QDialog::Accepted;
|
||||
}
|
||||
|
||||
+7
-8
@@ -94,37 +94,36 @@ PlaYUVerApp::PlaYUVerApp() :
|
||||
Bool PlaYUVerApp::parseArgs( Int argc, Char *argv[] )
|
||||
{
|
||||
Bool bRet = false;
|
||||
m_pcCmdParser = new PlaYUVerCmdParser();
|
||||
m_pcCmdParser->config( argc, argv );
|
||||
PlaYUVerOptions pcCmdParser;
|
||||
|
||||
std::vector<String> m_apcInputs;
|
||||
String strResolution( "" );
|
||||
String strPelFmt( "" );
|
||||
|
||||
m_pcCmdParser->Opts().addOptions()/**/
|
||||
pcCmdParser.addOptions()/**/
|
||||
( "input,i", m_apcInputs, "input file" ) /**/
|
||||
( "size,s", strResolution, "size (WxH)" ) /**/
|
||||
( "pel_fmt", strPelFmt, "pixel format" );
|
||||
|
||||
if( !m_pcCmdParser->parse() )
|
||||
if( !pcCmdParser.parse( argc, argv ) )
|
||||
{
|
||||
bRet |= true;
|
||||
}
|
||||
|
||||
if( m_pcCmdParser->Opts()["help"]->count() )
|
||||
if( pcCmdParser.hasOpt("help") )
|
||||
{
|
||||
printf( "Usage: %s [options] input_file[s]\n", argv[0] );
|
||||
m_pcCmdParser->Opts().doHelp( std::cout );
|
||||
pcCmdParser.doHelp( std::cout );
|
||||
bRet |= true;
|
||||
}
|
||||
if( m_pcCmdParser->Opts()["input"]->count() )
|
||||
if( pcCmdParser.hasOpt("input") )
|
||||
{
|
||||
for( UInt i = 1; i < m_apcInputs.size(); i++ )
|
||||
{
|
||||
loadFile( QString::fromStdString( m_apcInputs[i] ) );
|
||||
}
|
||||
}
|
||||
std::list<const Char*>& argv_unhandled = m_pcCmdParser->getNoArgs();
|
||||
std::list<const Char*>& argv_unhandled = pcCmdParser.getUnhandledArgs();
|
||||
for( std::list<const Char*>::const_iterator it = argv_unhandled.begin(); it != argv_unhandled.end(); it++ )
|
||||
{
|
||||
loadFile( QString::fromStdString( *it ) );
|
||||
|
||||
+2
-2
@@ -55,7 +55,7 @@ class QAction;
|
||||
class QSignalMapper;
|
||||
|
||||
|
||||
class PlaYUVerCmdParser;
|
||||
class PlaYUVerOptions;
|
||||
class PlaYUVerStream;
|
||||
class PlaYUVerSubWindowHandle;
|
||||
class VideoHandle;
|
||||
@@ -118,7 +118,7 @@ private Q_SLOTS:
|
||||
private:
|
||||
|
||||
PlaYUVerAppAdaptor* m_pDBusAdaptor;
|
||||
PlaYUVerCmdParser* m_pcCmdParser;
|
||||
PlaYUVerOptions* m_pcCmdParser;
|
||||
/**
|
||||
* Save the current subwindow for every category
|
||||
*/
|
||||
|
||||
@@ -328,7 +328,7 @@ Bool VideoSubWindow::loadFile( QString cFilename, Bool bForceDialog )
|
||||
|
||||
try
|
||||
{
|
||||
m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate );
|
||||
m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate, true );
|
||||
}
|
||||
catch( const char *msg )
|
||||
{
|
||||
@@ -336,7 +336,7 @@ Bool VideoSubWindow::loadFile( QString cFilename, Bool bForceDialog )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate );
|
||||
m_pCurrStream->open( cFilename.toStdString(), Width, Height, InputFormat, BitsPel, Endianness, FrameRate, true );
|
||||
}
|
||||
|
||||
m_sStreamInfo.m_cFilename = cFilename;
|
||||
@@ -367,7 +367,7 @@ Bool VideoSubWindow::loadFile( PlaYUVerStreamInfo* streamInfo )
|
||||
}
|
||||
|
||||
if( !m_pCurrStream->open( streamInfo->m_cFilename.toStdString(), streamInfo->m_uiWidth, streamInfo->m_uiHeight, streamInfo->m_iPelFormat,
|
||||
streamInfo->m_uiBitsPelPixel, streamInfo->m_iEndianness, streamInfo->m_uiFrameRate ) )
|
||||
streamInfo->m_uiBitsPelPixel, streamInfo->m_iEndianness, streamInfo->m_uiFrameRate, true) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -134,6 +134,22 @@ inline String uppercase( const String& in )
|
||||
return out;
|
||||
}
|
||||
|
||||
struct PlaYUVerFailure: public std::exception
|
||||
{
|
||||
String m_class_name;
|
||||
String m_error_msg;
|
||||
PlaYUVerFailure( String error_msg ) throw() :
|
||||
m_error_msg( error_msg ) { }
|
||||
PlaYUVerFailure( String class_name, String error_msg ) throw() :
|
||||
m_class_name( class_name ),
|
||||
m_error_msg( error_msg ) { }
|
||||
~PlaYUVerFailure() throw() { }
|
||||
const Char* what() const throw()
|
||||
{
|
||||
String* msg = new String( "[" + m_class_name + "] " + m_error_msg );
|
||||
return msg->c_str();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif // __PLAYUVERDEFS_H__
|
||||
|
||||
+10
-10
@@ -216,13 +216,13 @@ Void PlaYUVerFramePrivate::init( UInt width, UInt height, Int pel_format, Int bi
|
||||
m_iEndianness = endianness;
|
||||
if( m_uiBitsPel > 8 && m_iEndianness == -1 )
|
||||
{
|
||||
throw "Invalid endianness type for Bits per Pixel greater than 8";
|
||||
throw PlaYUVerFailure( "PlaYUVerFrame", "Invalid endianness type for Bits per Pixel greater than 8" );
|
||||
}
|
||||
m_uiHalfPelValue = 1 << ( m_uiBitsPel - 1 );
|
||||
|
||||
if( m_uiWidth == 0 || m_uiHeight == 0 || m_iPixelFormat == -1 || bitsPixel > 16 )
|
||||
{
|
||||
throw "Cannot create a PlYUVerFrame of this type";
|
||||
throw PlaYUVerFailure( "PlaYUVerFrame", "Cannot create a PlYUVerFrame of this type" );
|
||||
}
|
||||
|
||||
m_pcPelFormat = &( g_PlaYUVerPixFmtDescriptorsList[pel_format] );
|
||||
@@ -1090,14 +1090,14 @@ Void PlaYUVerFrame::fromCvMat( cv::Mat* pcCvFrame )
|
||||
{
|
||||
switch( pcCvFrame->channels() )
|
||||
{
|
||||
case 1:
|
||||
d->m_iPixelFormat = findPixelFormat( "GRAY" );
|
||||
break;
|
||||
case 3:
|
||||
d->m_iPixelFormat = findPixelFormat( "BGR24" );
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
case 1:
|
||||
d->m_iPixelFormat = findPixelFormat( "GRAY" );
|
||||
break;
|
||||
case 3:
|
||||
d->m_iPixelFormat = findPixelFormat( "BGR24" );
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
d->init( pcCvFrame->cols, pcCvFrame->rows, d->m_iPixelFormat, 8, -1 );
|
||||
|
||||
+96
-169
@@ -65,73 +65,27 @@ struct ParseFailure: public std::exception
|
||||
arg( arg0 ),
|
||||
val( val0 ) { }
|
||||
~ParseFailure() throw() { }
|
||||
const char* what() const throw()
|
||||
const Char* what() const throw()
|
||||
{
|
||||
return "Option Parse Failure";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** OptionBase: Virtual base class for storing information relating to a
|
||||
* specific option This base class describes common elements. Type specific
|
||||
* information should be stored in a derived class. */
|
||||
class OptionBase
|
||||
{
|
||||
public:
|
||||
OptionBase( const String& name, const String& desc ) :
|
||||
arg_count( 0 ),
|
||||
opt_string( name ),
|
||||
opt_desc( desc )
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~OptionBase()
|
||||
{
|
||||
}
|
||||
|
||||
/* parse argument arg, to obtain a value for the option */
|
||||
virtual void parse( const String& arg ) = 0;
|
||||
/* set the argument to the default value */
|
||||
//virtual void setDefault() = 0;
|
||||
int count()
|
||||
{
|
||||
return arg_count;
|
||||
}
|
||||
Bool isBinary()
|
||||
{
|
||||
return is_binary;
|
||||
}
|
||||
|
||||
int arg_count;
|
||||
String opt_string;
|
||||
String opt_desc;
|
||||
Bool is_binary;
|
||||
};
|
||||
|
||||
/** Type specific option storage */
|
||||
class BoolOption: public OptionBase
|
||||
{
|
||||
public:
|
||||
BoolOption( const String& name, Bool default_val, const String& desc ) :
|
||||
OptionBase( name, desc ),
|
||||
opt_storage( false ),
|
||||
opt_default_val( default_val )
|
||||
BoolOption( const String& name, const String& desc ) :
|
||||
OptionBase( name, desc )
|
||||
{
|
||||
is_binary = true;
|
||||
}
|
||||
|
||||
void parse( const String& arg )
|
||||
{
|
||||
opt_storage = true;
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
void setDefault()
|
||||
{
|
||||
opt_storage = opt_default_val;
|
||||
}
|
||||
Bool opt_storage;
|
||||
Bool opt_default_val;
|
||||
};
|
||||
|
||||
/** Type specific option storage */
|
||||
@@ -148,21 +102,25 @@ public:
|
||||
|
||||
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 )
|
||||
{
|
||||
std::istringstream arg_ss( arg, std::istringstream::in );
|
||||
arg_ss.exceptions( std::ios::failbit );
|
||||
try
|
||||
if( !is_binary )
|
||||
{
|
||||
arg_ss >> opt_storage;
|
||||
}
|
||||
catch( ... )
|
||||
{
|
||||
throw ParseFailure( opt_string, arg );
|
||||
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++;
|
||||
}
|
||||
@@ -239,47 +197,63 @@ public:
|
||||
arg_count++;
|
||||
}
|
||||
|
||||
void setDefault()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
private:
|
||||
PlaYUVerOptions& parent;
|
||||
void ( *func )( PlaYUVerOptions&, const String& );
|
||||
};
|
||||
|
||||
struct PlaYUVerOptions::Option
|
||||
/* 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 )
|
||||
{
|
||||
Option() :
|
||||
opt( 0 )
|
||||
{
|
||||
}
|
||||
~Option()
|
||||
{
|
||||
if( opt )
|
||||
delete opt;
|
||||
}
|
||||
std::list<String> opt_long;
|
||||
std::list<String> opt_short;
|
||||
OptionBase* opt;
|
||||
};
|
||||
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;
|
||||
|
||||
/**
|
||||
* Add default options
|
||||
*/
|
||||
addOptions()/**/
|
||||
( "help", "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()
|
||||
@@ -321,12 +295,25 @@ OptionBase* PlaYUVerOptions::getOption( 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;
|
||||
}
|
||||
|
||||
OptionSpecific PlaYUVerOptions::addOptions()
|
||||
Void PlaYUVerOptions::addDefaultOptions()
|
||||
{
|
||||
return OptionSpecific( *this );
|
||||
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 )
|
||||
@@ -361,67 +348,7 @@ void PlaYUVerOptions::addOption( OptionBase *opt )
|
||||
opt_list.push_back( names );
|
||||
}
|
||||
|
||||
/* 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
|
||||
*/
|
||||
template<typename T>
|
||||
OptionSpecific& OptionSpecific::operator()( const String& name, T& storage, const String& desc )
|
||||
{
|
||||
parent.addOption( new StandardOption<T>( name, storage, desc ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
OptionSpecific& OptionSpecific::operator()( const String& name, const String& desc )
|
||||
{
|
||||
parent.addOption( new BoolOption( name, false, desc ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
OptionSpecific& OptionSpecific::operator()( const String& name, Bool default_val, const String& desc )
|
||||
{
|
||||
parent.addOption( new BoolOption( name, default_val, desc ) );
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
// OptionSpecific& OptionSpecific::operator()( const String& name, FunctionOption::Func *func, const String& desc )
|
||||
// {
|
||||
// parent.addOption( new FunctionOption( name, parent, func, desc ) );
|
||||
// return *this;
|
||||
// }
|
||||
|
||||
/* for all options in opts, set their storage to their specified
|
||||
* default value */
|
||||
Void PlaYUVerOptions::setDefaults()
|
||||
{
|
||||
// for( PlaYUVerOptions::OptionsList::iterator it = opt_list.begin(); it != opt_list.end(); it++ )
|
||||
// {
|
||||
// ( *it )->opt->setDefault();
|
||||
// }
|
||||
}
|
||||
|
||||
static void setOptions( PlaYUVerOptions::OptionsList& opt_list, const string& value )
|
||||
{
|
||||
@@ -483,7 +410,7 @@ Bool PlaYUVerOptions::storePair( const string& name, const string& value )
|
||||
/**
|
||||
* returns number of extra arguments consumed
|
||||
*/
|
||||
UInt PlaYUVerOptions::parseLONG( unsigned argc, const char* argv[] )
|
||||
UInt PlaYUVerOptions::parseLONG( UInt argc, Char* argv[] )
|
||||
{
|
||||
/* gnu style long options can take the forms:
|
||||
* --option=arg
|
||||
@@ -494,7 +421,7 @@ UInt PlaYUVerOptions::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) */
|
||||
@@ -534,7 +461,7 @@ UInt PlaYUVerOptions::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) */
|
||||
@@ -553,7 +480,7 @@ UInt PlaYUVerOptions::parseLONG( string arg )
|
||||
return extra_argc_consumed;
|
||||
}
|
||||
|
||||
unsigned PlaYUVerOptions::parseSHORT( unsigned argc, const char* argv[] )
|
||||
UInt PlaYUVerOptions::parseSHORT( UInt argc, Char* argv[] )
|
||||
{
|
||||
/* short options can take the forms:
|
||||
* --option arg
|
||||
@@ -579,11 +506,11 @@ unsigned PlaYUVerOptions::parseSHORT( unsigned argc, const char* argv[] )
|
||||
return 1;
|
||||
}
|
||||
|
||||
Bool PlaYUVerOptions::parse( Int argc, Char *argv[] )
|
||||
Bool PlaYUVerOptions::parse( UInt argc, Char *argv[] )
|
||||
{
|
||||
try
|
||||
{
|
||||
m_aUnhandledArgs = scanArgv( argc, ( const Char** )argv );
|
||||
m_aUnhandledArgs = scanArgv( argc, argv );
|
||||
|
||||
if( checkListingOpts() )
|
||||
{
|
||||
@@ -605,12 +532,12 @@ Bool PlaYUVerOptions::parse( Int argc, Char *argv[] )
|
||||
}
|
||||
|
||||
|
||||
list<const char*> PlaYUVerOptions::scanArgv( unsigned argc, const char* argv[] )
|
||||
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] != '-' )
|
||||
{
|
||||
@@ -651,9 +578,9 @@ list<const char*> PlaYUVerOptions::scanArgv( unsigned argc, const char* argv[] )
|
||||
return non_option_arguments;
|
||||
}
|
||||
|
||||
Void PlaYUVerOptions::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] );
|
||||
}
|
||||
@@ -666,13 +593,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 PlaYUVerOptions::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() )
|
||||
@@ -695,20 +622,20 @@ static void doHelpOpt( ostream& out, const PlaYUVerOptions::Option& entry, unsig
|
||||
}
|
||||
|
||||
/* format the help text */
|
||||
Void PlaYUVerOptions::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;
|
||||
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
|
||||
|
||||
+88
-51
@@ -48,26 +48,89 @@
|
||||
|
||||
#include "PlaYUVerDefs.h"
|
||||
|
||||
struct OptionBase;
|
||||
class PlaYUVerOptions;
|
||||
|
||||
/* Class with templated overloaded operator(), for use by Options::addOptions() */
|
||||
class OptionSpecific
|
||||
/** OptionBase: Virtual base class for storing information relating to a
|
||||
* specific option This base class describes common elements.
|
||||
* Type specific information should be stored in a derived class.
|
||||
*/
|
||||
class OptionBase
|
||||
{
|
||||
public:
|
||||
OptionSpecific( PlaYUVerOptions& parent_ ) :
|
||||
parent( parent_ )
|
||||
OptionBase( const String& name, const String& desc ) :
|
||||
arg_count( 0 ),
|
||||
opt_string( name ),
|
||||
opt_desc( desc )
|
||||
{ }
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
template<typename T>
|
||||
OptionSpecific&
|
||||
operator()( const String& name, T& storage, const String& desc );
|
||||
virtual ~OptionBase() {}
|
||||
|
||||
/* parse argument arg, to obtain a value for the option */
|
||||
virtual void parse( const String& arg ) = 0;
|
||||
Int count()
|
||||
{
|
||||
return arg_count;
|
||||
}
|
||||
Bool isBinary()
|
||||
{
|
||||
return is_binary;
|
||||
}
|
||||
|
||||
int arg_count;
|
||||
String opt_string;
|
||||
String opt_desc;
|
||||
Bool is_binary;
|
||||
};
|
||||
|
||||
|
||||
class PlaYUVerOptions
|
||||
{
|
||||
public:
|
||||
|
||||
struct Option
|
||||
{
|
||||
Option() :
|
||||
opt( 0 )
|
||||
{
|
||||
}
|
||||
~Option()
|
||||
{
|
||||
if( opt )
|
||||
delete opt;
|
||||
}
|
||||
std::list<String> opt_long;
|
||||
std::list<String> opt_short;
|
||||
OptionBase* opt;
|
||||
};
|
||||
|
||||
|
||||
typedef std::list<Option*> OptionsList;
|
||||
|
||||
PlaYUVerOptions( const String& name = "" );
|
||||
~PlaYUVerOptions();
|
||||
|
||||
Bool parse( UInt argc, Char *argv[] );
|
||||
Void parse( std::vector<String> args_array );
|
||||
|
||||
std::list<const Char*>& getUnhandledArgs()
|
||||
{
|
||||
return m_aUnhandledArgs;
|
||||
}
|
||||
|
||||
Void doHelp( std::ostream& out, unsigned columns = 80 );
|
||||
|
||||
OptionBase* operator[]( const String& optName );
|
||||
OptionBase* getOption( const String& optName );
|
||||
|
||||
Bool hasOpt( const String& optName );
|
||||
|
||||
OptionsList getOptionList()
|
||||
{
|
||||
return opt_list;
|
||||
}
|
||||
|
||||
Void addDefaultOptions();
|
||||
PlaYUVerOptions& addOptions();
|
||||
void addOption( OptionBase *opt );
|
||||
|
||||
/**
|
||||
* Add option described by name to the parent Options list,
|
||||
@@ -75,7 +138,7 @@ public:
|
||||
* with default_val as the default value
|
||||
* with desc as an optional help description
|
||||
*/
|
||||
OptionSpecific&
|
||||
PlaYUVerOptions&
|
||||
operator()( const String& name, const String& desc );
|
||||
|
||||
/**
|
||||
@@ -84,8 +147,10 @@ public:
|
||||
* with default_val as the default value
|
||||
* with desc as an optional help description
|
||||
*/
|
||||
OptionSpecific&
|
||||
operator()( const String& name, Bool default_val, const String& desc );
|
||||
template<typename T>
|
||||
PlaYUVerOptions&
|
||||
operator()( const String& name, T& storage, const String& desc );
|
||||
|
||||
|
||||
/**
|
||||
* Add option described by name to the parent Options list,
|
||||
@@ -94,40 +159,12 @@ public:
|
||||
* OptionFunc::Func is called. It is upto this function to correctly
|
||||
* handle evaluating the option's value.
|
||||
*/
|
||||
// OptionSpecific&
|
||||
// operator()( const String& name, OptionFunc::Func *func, const String& desc )
|
||||
private:
|
||||
PlaYUVerOptions& parent;
|
||||
};
|
||||
// PlaYUVerOptions&
|
||||
// operator()( const String& name, OptionFunc::Func *func, const String& desc );
|
||||
|
||||
|
||||
class PlaYUVerOptions
|
||||
{
|
||||
public:
|
||||
|
||||
struct Option;
|
||||
|
||||
typedef std::list<Option*> OptionsList;
|
||||
|
||||
PlaYUVerOptions( const String& name = "" );
|
||||
~PlaYUVerOptions();
|
||||
|
||||
Bool parse( Int argc, Char *argv[] );
|
||||
std::list<const char*> scanArgv( unsigned argc, const char* argv[] );
|
||||
Void scanArgs( std::vector<String> args_array );
|
||||
Void doHelp( std::ostream& out, unsigned columns = 80 );
|
||||
|
||||
Bool checkListingOpts();
|
||||
Void listModules();
|
||||
Void setDefaults();
|
||||
|
||||
OptionBase* operator[]( const String& optName );
|
||||
OptionBase* getOption( const String& optName );
|
||||
|
||||
Bool hasOpt( const String& optName );
|
||||
|
||||
OptionSpecific addOptions();
|
||||
void addOption( OptionBase *opt );
|
||||
|
||||
private:
|
||||
typedef std::map<String, OptionsList> OptionMap;
|
||||
@@ -142,12 +179,12 @@ private:
|
||||
|
||||
Bool storePair( Bool allow_long, Bool allow_short, const String& name, const String& value );
|
||||
Bool storePair( const String& name, const String& value );
|
||||
UInt parseLONG( unsigned argc, const char* argv[] );
|
||||
UInt parseLONG( UInt argc, Char* argv[] );
|
||||
UInt parseLONG( String arg );
|
||||
UInt parseSHORT( unsigned argc, const char* argv[] );
|
||||
UInt parseSHORT( UInt argc, Char* argv[] );
|
||||
std::list<const char*> scanArgv( UInt argc, Char* argv[] );
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // __PROGRAMOPTIONS_H__
|
||||
|
||||
+11
-11
@@ -196,14 +196,14 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
|
||||
m_pfctCreateHandler = PlaYUVerStream::findStreamHandler( filename, m_bIsInput );
|
||||
if( !m_pfctCreateHandler )
|
||||
{
|
||||
throw "[PlaYUVerStream] Invalid handler";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Invalid handler");
|
||||
}
|
||||
|
||||
m_pcHandler = m_pfctCreateHandler();
|
||||
|
||||
if( !m_pcHandler )
|
||||
{
|
||||
throw "[PlaYUVerStream] Cannot create handler";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot create handler");
|
||||
}
|
||||
|
||||
m_cFilename = filename;
|
||||
@@ -220,7 +220,7 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
|
||||
if( !m_pcHandler->openHandler( m_cFilename, m_bIsInput ) )
|
||||
{
|
||||
close();
|
||||
throw "[PlaYUVerStream] Cannot open file";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot open file " + m_cFilename );
|
||||
return m_bInit;
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
|
||||
if( m_pcHandler->m_uiWidth <= 0 || m_pcHandler->m_uiHeight <= 0 || m_pcHandler->m_iPixelFormat < 0 )
|
||||
{
|
||||
close();
|
||||
throw "[PlaYUVerStream] Incorrect configuration";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Incorrect configuration");
|
||||
return m_bInit;
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
|
||||
catch( const char *msg )
|
||||
{
|
||||
close();
|
||||
throw "[PlaYUVerStream] Cannot allocated frame buffer";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot allocated frame buffer");
|
||||
return m_bInit;
|
||||
}
|
||||
}
|
||||
@@ -261,14 +261,14 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
|
||||
if( m_bIsInput && m_uiTotalFrameNum <= 0 )
|
||||
{
|
||||
close();
|
||||
throw "[PlaYUVerStream] Incorrect configuration: less than one frame";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Incorrect configuration: less than one frame");
|
||||
return m_bInit;
|
||||
}
|
||||
|
||||
if( !m_pcHandler->configureBuffer( m_pcCurrFrame ) )
|
||||
{
|
||||
close();
|
||||
throw "[PlaYUVerStream] Cannot allocated memory";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot allocated memory");
|
||||
return m_bInit;
|
||||
}
|
||||
|
||||
@@ -286,7 +286,7 @@ Bool PlaYUVerStream::reload()
|
||||
m_pcHandler->closeHandler();
|
||||
if( !m_pcHandler->openHandler( m_cFilename, m_bIsInput ) )
|
||||
{
|
||||
throw "[PlaYUVerStream] Cannot open file using FFmpeg libs";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot open file");
|
||||
}
|
||||
m_pcHandler->setBytesPerFrame( m_pcCurrFrame->getBytesPerFrame() );
|
||||
m_uiTotalFrameNum = m_pcHandler->calculateFrameNumber();
|
||||
@@ -466,7 +466,7 @@ Void PlaYUVerStream::readFrame()
|
||||
|
||||
if( !m_pcHandler->read( m_pcNextFrame ) )
|
||||
{
|
||||
throw "[PlaYUVerStream] Cannot read file";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot read file");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -483,7 +483,7 @@ Void PlaYUVerStream::writeFrame( PlaYUVerFrame *pcFrame )
|
||||
{
|
||||
if( !m_pcHandler->write( pcFrame ) )
|
||||
{
|
||||
throw "[PlaYUVerStream] Cannot write into the file";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot write into the file");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -588,7 +588,7 @@ Bool PlaYUVerStream::seekInput( UInt64 new_frame_num )
|
||||
|
||||
if( !m_pcHandler->seek( new_frame_num ) )
|
||||
{
|
||||
throw "[PlaYUVerStream] Cannot write into the file";
|
||||
throw PlaYUVerFailure("PlaYUVerStream", "Cannot write into the file");
|
||||
}
|
||||
|
||||
m_uiCurrFrameFileIdx = new_frame_num;
|
||||
|
||||
@@ -103,8 +103,8 @@ public:
|
||||
String getFormatName();
|
||||
String getCodecName();
|
||||
|
||||
Bool open( String filename, String resolution, String input_format, UInt bitsPel, Int endianness, UInt frame_rate, Bool bInput = true );
|
||||
Bool open( String filename, UInt width, UInt height, Int input_format, UInt bitsPel, Int endianness, UInt frame_rate, Bool bInput = true );
|
||||
Bool open( String filename, String resolution, String input_format, UInt bitsPel, Int endianness, UInt frame_rate, Bool bInput );
|
||||
Bool open( String filename, UInt width, UInt height, Int input_format, UInt bitsPel, Int endianness, UInt frame_rate, Bool bInput );
|
||||
Bool reload();
|
||||
Void close();
|
||||
|
||||
|
||||
@@ -216,7 +216,7 @@ Bool StreamHandlerLibav::openHandler( String strFilename, Bool bInput )
|
||||
}
|
||||
if( m_iPixelFormat == PlaYUVerFrame::NO_FMT )
|
||||
{
|
||||
throw "Cannot open file using FFmpeg libs - unsupported pixel format";
|
||||
throw PlaYUVerFailure("Cannot open file using FFmpeg libs - unsupported pixel format");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
+60
-60
@@ -60,9 +60,9 @@ Int PlaYUVerTools::openInputs()
|
||||
/**
|
||||
* Create input streams
|
||||
*/
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "input" ) )
|
||||
if( Opts().hasOpt( "input" ) )
|
||||
{
|
||||
std::vector<String> inputFileNames = m_cCmdLineHandler.m_apcInputs;
|
||||
std::vector<String> inputFileNames = m_apcInputs;
|
||||
|
||||
String resolutionString( "" );
|
||||
String fmtString( "yuv420p" );
|
||||
@@ -72,25 +72,25 @@ Int PlaYUVerTools::openInputs()
|
||||
PlaYUVerStream* pcStream;
|
||||
for( UInt i = 0; i < inputFileNames.size() && i < MAX_NUMBER_INPUTS; i++ )
|
||||
{
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "size" ) )
|
||||
if( Opts().hasOpt( "size" ) )
|
||||
{
|
||||
resolutionString = GET_PARAM( m_cCmdLineHandler.m_strResolution, 0 );
|
||||
resolutionString = GET_PARAM( m_strResolution, 0 );
|
||||
}
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "pel_fmt" ) )
|
||||
if( Opts().hasOpt( "pel_fmt" ) )
|
||||
{
|
||||
fmtString = GET_PARAM( m_cCmdLineHandler.m_strPelFmt, i );
|
||||
fmtString = GET_PARAM( m_strPelFmt, i );
|
||||
}
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "bits_pel" ) )
|
||||
if( Opts().hasOpt( "bits_pel" ) )
|
||||
{
|
||||
uiBitPerPixel = GET_PARAM( m_cCmdLineHandler.m_uiBitsPerPixel, i );
|
||||
uiBitPerPixel = GET_PARAM( m_uiBitsPerPixel, i );
|
||||
}
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "endianness" ) )
|
||||
if( Opts().hasOpt( "endianness" ) )
|
||||
{
|
||||
if( GET_PARAM( m_cCmdLineHandler.m_strEndianness, i ) == "big" )
|
||||
if( GET_PARAM( m_strEndianness, i ) == "big" )
|
||||
{
|
||||
uiEndianness = 0;
|
||||
}
|
||||
if( GET_PARAM( m_cCmdLineHandler.m_strEndianness, i ) == "little" )
|
||||
if( GET_PARAM( m_strEndianness, i ) == "little" )
|
||||
{
|
||||
uiEndianness = 1;
|
||||
}
|
||||
@@ -98,25 +98,25 @@ Int PlaYUVerTools::openInputs()
|
||||
pcStream = new PlaYUVerStream;
|
||||
try
|
||||
{
|
||||
if( !pcStream->open( inputFileNames[i], resolutionString, fmtString, uiBitPerPixel, uiEndianness, 1 ) )
|
||||
if( !pcStream->open( inputFileNames[i], resolutionString, fmtString, uiBitPerPixel, uiEndianness, 1, true ) )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Cannot open input stream %s! ", inputFileNames[i].c_str() );
|
||||
log( LOG_ERROR, "Cannot open input stream %s! ", inputFileNames[i].c_str() );
|
||||
return 2;
|
||||
}
|
||||
m_apcInputStreams.push_back( pcStream );
|
||||
}
|
||||
catch( const char *msg )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Cannot open input stream %s with the following error: \n%s\n", inputFileNames[i].c_str(), msg );
|
||||
log( LOG_ERROR, "Cannot open input stream %s with the following error: \n%s\n", inputFileNames[i].c_str(), msg );
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_uiNumberOfFrames = MAX_UINT;
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "frames" ) )
|
||||
if( Opts().hasOpt( "frames" ) )
|
||||
{
|
||||
m_uiNumberOfFrames = m_cCmdLineHandler.m_iFrames;
|
||||
m_uiNumberOfFrames = m_iFrames;
|
||||
}
|
||||
|
||||
m_uiNumberOfComponents = MAX_UINT;
|
||||
@@ -135,7 +135,7 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
{
|
||||
Int iRet = 0;
|
||||
|
||||
if( ( iRet = m_cCmdLineHandler.parseToolsArgs( argc, argv ) ) > 0 )
|
||||
if( ( iRet = parseToolsArgs( argc, argv ) ) > 0 )
|
||||
{
|
||||
return iRet;
|
||||
}
|
||||
@@ -145,11 +145,11 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
return 2;
|
||||
}
|
||||
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "save" ) )
|
||||
if( Opts().hasOpt( "save" ) )
|
||||
{
|
||||
if( m_apcInputStreams.size() == 0 )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid number of input streams! " );
|
||||
log( LOG_ERROR, "Invalid number of input streams! " );
|
||||
return 2;
|
||||
}
|
||||
Int64 currFrames = 0;
|
||||
@@ -160,34 +160,34 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
if( currFrames < numberOfFrames )
|
||||
numberOfFrames = currFrames;
|
||||
}
|
||||
m_iFrameNum = m_cCmdLineHandler.m_iFrames;
|
||||
m_iFrameNum = m_iFrames;
|
||||
if( !( m_iFrameNum >= 0 && m_iFrameNum < numberOfFrames ) )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid frame number! Use --frame option " );
|
||||
log( LOG_ERROR, "Invalid frame number! Use --frame option " );
|
||||
return 2;
|
||||
}
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "output" ) )
|
||||
m_pcOutputFileNames.push_back( m_cCmdLineHandler.m_strOutput );
|
||||
if( Opts().hasOpt( "output" ) )
|
||||
m_pcOutputFileNames.push_back( m_strOutput );
|
||||
if( m_pcOutputFileNames.size() != m_apcInputStreams.size() )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid number of outputs! Each input must have an output filename. " );
|
||||
log( LOG_ERROR, "Invalid number of outputs! Each input must have an output filename. " );
|
||||
return 2;
|
||||
}
|
||||
|
||||
m_uiOperation = SAVE_OPERATION;
|
||||
m_fpProcess = &PlaYUVerTools::SaveOperation;
|
||||
m_cCmdLineHandler.log( LOG_INFO, "PlaYUVer Save Frame\n" );
|
||||
log( LOG_INFO, "PlaYUVer Save Frame\n" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Quality operation
|
||||
*/
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "quality" ) )
|
||||
if( Opts().hasOpt( "quality" ) )
|
||||
{
|
||||
String qualityMetric = m_cCmdLineHandler.m_strQualityMetric;
|
||||
String qualityMetric = m_strQualityMetric;
|
||||
if( m_apcInputStreams.size() < 2 )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid number of inputs! " );
|
||||
log( LOG_ERROR, "Invalid number of inputs! " );
|
||||
return 2;
|
||||
}
|
||||
for( UInt i = 0; i < PlaYUVerFrame::supportedQualityMetricsList().size(); i++ )
|
||||
@@ -199,20 +199,20 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
}
|
||||
if( m_uiQualityMetric == -1 )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid quality metric! " );
|
||||
log( LOG_ERROR, "Invalid quality metric! " );
|
||||
return 2;
|
||||
}
|
||||
m_uiOperation = QUALITY_OPERATION;
|
||||
m_fpProcess = &PlaYUVerTools::QualityOperation;
|
||||
m_cCmdLineHandler.log( LOG_INFO, "PlaYUVer Quality\n" );
|
||||
log( LOG_INFO, "PlaYUVer Quality\n" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Module operation
|
||||
*/
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "module" ) )
|
||||
if( Opts().hasOpt( "module" ) )
|
||||
{
|
||||
String moduleName = m_cCmdLineHandler.m_strModule;
|
||||
String moduleName = m_strModule;
|
||||
|
||||
PlaYUVerModuleFactoryMap& PlaYUVerModuleFactoryMap = PlaYUVerModuleFactory::Get()->getMap();
|
||||
PlaYUVerModuleFactoryMap::iterator it = PlaYUVerModuleFactoryMap.begin();
|
||||
@@ -226,17 +226,17 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
}
|
||||
if( !m_pcCurrModuleIf )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid module! " );
|
||||
log( LOG_ERROR, "Invalid module! " );
|
||||
return 2;
|
||||
}
|
||||
|
||||
if( m_apcInputStreams.size() != m_pcCurrModuleIf->m_uiNumberOfFrames )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Invalid number of inputs! " );
|
||||
log( LOG_ERROR, "Invalid number of inputs! " );
|
||||
return 2;
|
||||
}
|
||||
|
||||
m_pcCurrModuleIf->m_cModuleOptions.scanArgv( argc, ( const Char** )argv );
|
||||
m_pcCurrModuleIf->m_cModuleOptions.parse( argc, argv );
|
||||
|
||||
// Create Module
|
||||
Bool moduleCreated = false;
|
||||
@@ -256,7 +256,7 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
}
|
||||
if( !moduleCreated )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "Module is not supported with the selected inputs! " );
|
||||
log( LOG_ERROR, "Module is not supported with the selected inputs! " );
|
||||
return 2;
|
||||
}
|
||||
|
||||
@@ -264,8 +264,8 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
{
|
||||
// Check outputs
|
||||
std::vector<String> outputFileNames;
|
||||
if( m_cCmdLineHandler.Opts().hasOpt( "output" ) )
|
||||
outputFileNames.push_back( m_cCmdLineHandler.m_strOutput );
|
||||
if( Opts().hasOpt( "output" ) )
|
||||
outputFileNames.push_back( m_strOutput );
|
||||
|
||||
if( outputFileNames.size() == 1 )
|
||||
{
|
||||
@@ -279,7 +279,7 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
pcModFrame = applyFrameModule();
|
||||
}
|
||||
PlaYUVerStream* pcModStream = new PlaYUVerStream;
|
||||
if( !pcModStream->open( outputFileNames[0], pcModFrame->getWidth(), pcModFrame->getHeight(), pcModFrame->getPelFormat(), pcModFrame->getBitsPel(), 1, false ) )
|
||||
if( !pcModStream->open( outputFileNames[0], pcModFrame->getWidth(), pcModFrame->getHeight(), pcModFrame->getPelFormat(), pcModFrame->getBitsPel(), pcModFrame->getEndianness(), 1, false ) )
|
||||
{
|
||||
delete pcModStream;
|
||||
pcModStream = NULL;
|
||||
@@ -289,19 +289,19 @@ Int PlaYUVerTools::Open( Int argc, Char *argv[] )
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "One output is required! " );
|
||||
log( LOG_ERROR, "One output is required! " );
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
m_uiOperation = MODULE_OPERATION;
|
||||
m_fpProcess = &PlaYUVerTools::ModuleOperation;
|
||||
m_cCmdLineHandler.log( LOG_INFO, "PlaYUVer Module\n" );
|
||||
log( LOG_INFO, "PlaYUVer Module\n" );
|
||||
}
|
||||
|
||||
if( m_uiOperation == INVALID_OPERATION )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_ERROR, "No operation was selected! " );
|
||||
log( LOG_ERROR, "No operation was selected! " );
|
||||
return 2;
|
||||
}
|
||||
return iRet;
|
||||
@@ -361,19 +361,19 @@ Int PlaYUVerTools::QualityOperation()
|
||||
}
|
||||
metric_fmt += " ";
|
||||
|
||||
m_cCmdLineHandler.log( LOG_INFO, " Measuring Quality using %s ... \n", pchQualityMetricName );
|
||||
m_cCmdLineHandler.log( LOG_INFO, "# Frame ", pchQualityMetricName );
|
||||
log( LOG_INFO, " Measuring Quality using %s ... \n", pchQualityMetricName );
|
||||
log( LOG_INFO, "# Frame ", pchQualityMetricName );
|
||||
|
||||
for( UInt s = 1; s < m_apcInputStreams.size(); s++ )
|
||||
{
|
||||
for( UInt c = 0; c < m_uiNumberOfComponents; c++ )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_INFO, "%s_%d_%d ", pchQualityMetricName, s, c );
|
||||
log( LOG_INFO, "%s_%d_%d ", pchQualityMetricName, s, c );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_INFO, " " );
|
||||
log( LOG_INFO, " " );
|
||||
}
|
||||
|
||||
m_cCmdLineHandler.log( LOG_INFO, "\n" );
|
||||
log( LOG_INFO, "\n" );
|
||||
|
||||
for( UInt s = 0; s < m_apcInputStreams.size(); s++ )
|
||||
{
|
||||
@@ -385,22 +385,22 @@ Int PlaYUVerTools::QualityOperation()
|
||||
}
|
||||
for( UInt frame = 0; frame < m_uiNumberOfFrames; frame++ )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_INFO, " %3d ", frame );
|
||||
log( LOG_INFO, " %3d ", frame );
|
||||
for( UInt s = 0; s < m_apcInputStreams.size(); s++ )
|
||||
apcCurrFrame[s] = m_apcInputStreams[s]->getCurrFrame();
|
||||
|
||||
for( UInt s = 1; s < m_apcInputStreams.size(); s++ )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_RESULT, " " );
|
||||
log( LOG_RESULT, " " );
|
||||
for( UInt c = 0; c < m_uiNumberOfComponents; c++ )
|
||||
{
|
||||
dQuality = apcCurrFrame[s]->getQuality( m_uiQualityMetric, apcCurrFrame[0], c );
|
||||
adAverageQuality[s - 1][c] = ( adAverageQuality[s - 1][c] * Double( frame ) + dQuality ) / Double( frame + 1 );
|
||||
m_cCmdLineHandler.log( LOG_RESULT, metric_fmt.c_str(), dQuality );
|
||||
log( LOG_RESULT, metric_fmt.c_str(), dQuality );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_RESULT, " " );
|
||||
log( LOG_RESULT, " " );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_RESULT, "\n" );
|
||||
log( LOG_RESULT, "\n" );
|
||||
for( UInt s = 0; s < m_apcInputStreams.size(); s++ )
|
||||
{
|
||||
abEOF[s] = m_apcInputStreams[s]->setNextFrame();
|
||||
@@ -410,16 +410,16 @@ Int PlaYUVerTools::QualityOperation()
|
||||
}
|
||||
}
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_INFO, "\n Mean Values: \n " );
|
||||
log( LOG_INFO, "\n Mean Values: \n " );
|
||||
for( UInt s = 0; s < m_apcInputStreams.size() - 1; s++ )
|
||||
{
|
||||
for( UInt c = 0; c < m_uiNumberOfComponents; c++ )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_INFO, metric_fmt.c_str(), adAverageQuality[s][c] );
|
||||
log( LOG_INFO, metric_fmt.c_str(), adAverageQuality[s][c] );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_RESULT, " " );
|
||||
log( LOG_RESULT, " " );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_INFO, "\n" );
|
||||
log( LOG_INFO, "\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -436,7 +436,7 @@ PlaYUVerFrame* PlaYUVerTools::applyFrameModule()
|
||||
Int PlaYUVerTools::ModuleOperation()
|
||||
{
|
||||
std::vector<PlaYUVerFrame*> apcFrameList;
|
||||
m_cCmdLineHandler.log( LOG_INFO, " Applying Module %s/%s ...\n", m_pcCurrModuleIf->m_pchModuleCategory, m_pcCurrModuleIf->m_pchModuleName );
|
||||
log( LOG_INFO, " Applying Module %s/%s ...\n", m_pcCurrModuleIf->m_pchModuleCategory, m_pcCurrModuleIf->m_pchModuleName );
|
||||
|
||||
PlaYUVerFrame* pcProcessedFrame = NULL;
|
||||
Double dMeasurementResult = 0.0;
|
||||
@@ -477,8 +477,8 @@ Int PlaYUVerTools::ModuleOperation()
|
||||
{
|
||||
dMeasurementResult = m_pcCurrModuleIf->measure( m_apcInputStreams[0]->getCurrFrame() );
|
||||
}
|
||||
m_cCmdLineHandler.log( LOG_INFO, " %3d", frame );
|
||||
m_cCmdLineHandler.log( LOG_RESULT, " %8.3f \n", dMeasurementResult );
|
||||
log( LOG_INFO, " %3d", frame );
|
||||
log( LOG_RESULT, " %8.3f \n", dMeasurementResult );
|
||||
dAveragedMeasurementResult = ( dAveragedMeasurementResult * Double( frame ) + dMeasurementResult ) / Double( frame + 1 );
|
||||
}
|
||||
|
||||
@@ -494,7 +494,7 @@ Int PlaYUVerTools::ModuleOperation()
|
||||
|
||||
if( m_pcCurrModuleIf->m_iModuleType == FRAME_MEASUREMENT_MODULE )
|
||||
{
|
||||
m_cCmdLineHandler.log( LOG_INFO, "\n Mean Value: \n %8.3f\n", dAveragedMeasurementResult );
|
||||
log( LOG_INFO, "\n Mean Value: \n %8.3f\n", dAveragedMeasurementResult );
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -36,7 +36,7 @@ class PlaYUVerModuleIf;
|
||||
|
||||
#define MAX_NUMBER_INPUTS 10
|
||||
|
||||
class PlaYUVerTools
|
||||
class PlaYUVerTools: public PlaYUVerToolsCmdParser
|
||||
{
|
||||
public:
|
||||
PlaYUVerTools();
|
||||
@@ -47,7 +47,6 @@ public:
|
||||
Int Close();
|
||||
|
||||
private:
|
||||
PlaYUVerToolsCmdParser m_cCmdLineHandler;
|
||||
Bool m_bVerbose;
|
||||
|
||||
UInt m_uiOperation;
|
||||
|
||||
@@ -36,6 +36,8 @@ PlaYUVerToolsCmdParser::PlaYUVerToolsCmdParser()
|
||||
m_uiLogLevel = 0;
|
||||
m_bQuiet = false;
|
||||
m_iFrames = -1;
|
||||
|
||||
m_cOptions.addDefaultOptions();
|
||||
}
|
||||
|
||||
PlaYUVerToolsCmdParser::~PlaYUVerToolsCmdParser()
|
||||
@@ -92,12 +94,6 @@ Int PlaYUVerToolsCmdParser::parseToolsArgs( Int argc, Char *argv[] )
|
||||
m_cOptions.doHelp( std::cout );
|
||||
iRet = 1;
|
||||
}
|
||||
|
||||
if( m_cOptions.hasOpt("module_list") || m_cOptions.hasOpt("module_list_full") )
|
||||
{
|
||||
m_cOptions.listModules();
|
||||
iRet = 1;
|
||||
}
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ class PlaYUVerStream;
|
||||
|
||||
class PlaYUVerToolsCmdParser
|
||||
{
|
||||
friend class PlaYUVerTools;
|
||||
public:
|
||||
PlaYUVerToolsCmdParser();
|
||||
~PlaYUVerToolsCmdParser();
|
||||
@@ -65,7 +64,7 @@ public:
|
||||
return m_cOptions;
|
||||
}
|
||||
|
||||
private:
|
||||
protected:
|
||||
PlaYUVerOptions m_cOptions;
|
||||
UInt m_uiLogLevel;
|
||||
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@
|
||||
|
||||
#include "PlaYUVerTools.h"
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
int main( int argc, Char *argv[] )
|
||||
{
|
||||
Int iRet = 0;
|
||||
PlaYUVerTools PlaYUVerToolsApp;
|
||||
|
||||
Reference in New Issue
Block a user