bool LibAVParams::setOption( const std::string& libAVOptionName, const std::string& value, const std::string& detailedName ) { try { // Get libav option avtranscoder::Option& option = getLibAVOption( libAVOptionName, detailedName ); // Set libav option's value option.setString( value ); // Get corresponding OFX parameter OFX::ValueParam* param = getOFXParameter( libAVOptionName, detailedName ); if( ! param) { TUTTLE_LOG_WARNING( "Can't get OFX parameter corresponding to option " << libAVOptionName << " of subgroup " << detailedName ); return false; } // Set OFX parameter's value OFX::BooleanParam* paramBoolean = dynamic_cast<OFX::BooleanParam*>( param ); if( paramBoolean ) { paramBoolean->setValue( option.getBool() ); return true; } OFX::IntParam* paramInt = dynamic_cast<OFX::IntParam*>( param ); if( paramInt ) { paramInt->setValue( option.getInt() ); return true; } OFX::DoubleParam* paramDouble = dynamic_cast<OFX::DoubleParam*>( param ); if( paramDouble ) { paramDouble->setValue( option.getDouble() ); return true; } OFX::StringParam* paramString = dynamic_cast<OFX::StringParam*>( param ); if( paramString ) { paramString->setValue( option.getString() ); return true; } OFX::Int2DParam* paramRatio = dynamic_cast<OFX::Int2DParam*>( param ); if( paramRatio ) { paramRatio->setValue( option.getRatio().first, option.getRatio().second ); return true; } OFX::ChoiceParam* paramChoice = dynamic_cast<OFX::ChoiceParam*>( param ); if( paramChoice ) { paramChoice->setValue( option.getInt() ); return true; } } catch( std::exception& e ) { TUTTLE_LOG_WARNING( "Can't set option " << libAVOptionName << " to " << value << ": " << e.what() ); return false; } }