TuttleOFX  1
TuttleOFX/libraries/tuttle/src/tuttle/common/ofx/imageEffect.cpp
Go to the documentation of this file.
00001 #include "imageEffect.hpp"
00002 
00003 #include <tuttle/common/exceptions.hpp>
00004 
00005 #include <ofxCore.h>
00006 
00007 #include <boost/lexical_cast.hpp>
00008 
00009 namespace tuttle {
00010 namespace ofx {
00011 namespace imageEffect {
00012 
00013 /** @brief map a std::string to a context */
00014 EContext mapContextStringToEnum( const std::string& s )
00015 {
00016         if( s == kOfxImageEffectContextGenerator )
00017                 return eContextGenerator;
00018         if( s == kOfxImageEffectContextFilter )
00019                 return eContextFilter;
00020         if( s == kOfxImageEffectContextTransition )
00021                 return eContextTransition;
00022         if( s == kOfxImageEffectContextPaint )
00023                 return eContextPaint;
00024         if( s == kOfxImageEffectContextGeneral )
00025                 return eContextGeneral;
00026         if( s == kOfxImageEffectContextRetimer )
00027                 return eContextRetimer;
00028         if( s == kOfxImageEffectContextReader )
00029                 return eContextReader;
00030         if( s == kOfxImageEffectContextWriter )
00031                 return eContextWriter;
00032         BOOST_THROW_EXCEPTION( exception::Value()
00033             << exception::dev() + s );
00034         return eContextGeneral;
00035 }
00036 
00037 /** @brief map a std::string to a context */
00038 const std::string mapContextEnumToString( const EContext s )
00039 {
00040         switch( s )
00041         {
00042                 case eContextGenerator:
00043                         return kOfxImageEffectContextGenerator;
00044                 case eContextFilter:
00045                         return kOfxImageEffectContextFilter;
00046                 case eContextTransition:
00047                         return kOfxImageEffectContextTransition;
00048                 case eContextPaint:
00049                         return kOfxImageEffectContextPaint;
00050                 case eContextGeneral:
00051                         return kOfxImageEffectContextGeneral;
00052                 case eContextRetimer:
00053                         return kOfxImageEffectContextRetimer;
00054                 case eContextReader:
00055                         return kOfxImageEffectContextReader;
00056                 case eContextWriter:
00057                         return kOfxImageEffectContextWriter;
00058                 case eContextNone:
00059                         return "ContextNone...";
00060         }
00061         BOOST_THROW_EXCEPTION( exception::Value()
00062             << exception::dev() + "Unknown image effect context enum." );
00063         return "";
00064 }
00065 
00066 //const std::string mapMessageTypeEnumToString( const OFX::Message::EMessageType type )
00067 //{
00068 //      if( type == OFX::Message::eMessageFatal )
00069 //              return kOfxMessageFatal;
00070 //      else if( type == OFX::Message::eMessageError )
00071 //              return kOfxMessageError;
00072 //      else if( type == OFX::Message::eMessageMessage )
00073 //              return kOfxMessageMessage;
00074 //      else if( type == OFX::Message::eMessageLog )
00075 //              return kOfxMessageLog;
00076 //      else if( type == OFX::Message::eMessageQuestion )
00077 //              return kOfxMessageQuestion;
00078 //      BOOST_THROW_EXCEPTION( exception::Value()
00079 //              << exception::dev() + type );
00080 //      return kOfxMessageError;
00081 //}
00082 //
00083 //OFX::Message::EMessageReply mapMessageReplyStatusToEnum( const OfxStatus stat )
00084 //{
00085 //      if( stat == kOfxStatOK )
00086 //              return OFX::Message::eMessageReplyOK;
00087 //      else if( stat == kOfxStatReplyYes )
00088 //              return OFX::Message::eMessageReplyYes;
00089 //      else if( stat == kOfxStatReplyNo )
00090 //              return OFX::Message::eMessageReplyNo;
00091 //      else if( stat == kOfxStatFailed )
00092 //              return OFX::Message::eMessageReplyFailed;
00093 //      BOOST_THROW_EXCEPTION( exception::Value()
00094 //              << exception::dev() + stat );
00095 //      return OFX::Message::eMessageReplyFailed;
00096 //}
00097 //
00098 //OfxStatus mapMessageReplyEnumToStatus( const OFX::Message::EMessageReply stat )
00099 //{
00100 //      switch( stat )
00101 //      {
00102 //              case OFX::Message::eMessageReplyOK:
00103 //                      return kOfxStatOK;
00104 //              case OFX::Message::eMessageReplyYes:
00105 //                      return kOfxStatReplyYes;
00106 //              case OFX::Message::eMessageReplyNo:
00107 //                      return kOfxStatReplyNo;
00108 //              case OFX::Message::eMessageReplyFailed:
00109 //                              return kOfxStatFailed;
00110 //      }
00111 //      BOOST_THROW_EXCEPTION( exception::Value()
00112 //              << exception::dev() + stat );
00113 //      return kOfxStatFailed;
00114 //}
00115 //
00116 ///** @brief map a std::string to a context */
00117 //InstanceChangeReason mapInstanceChangedReasonStringToEnum( const std::string& s )
00118 //{
00119 //      if( s == kOfxChangePluginEdited )
00120 //              return eChangePluginEdit;
00121 //      if( s == kOfxChangeUserEdited )
00122 //              return eChangeUserEdit;
00123 //      if( s == kOfxChangeTime )
00124 //              return eChangeTime;
00125 //      BOOST_THROW_EXCEPTION( exception::Value()
00126 //              << exception::dev() + s );
00127 //      return eChangePluginEdit;
00128 //}
00129 
00130 /** @brief turns a bit depth string into and enum */
00131 EBitDepth mapBitDepthStringToEnum( const std::string& str )
00132 {
00133         if( str == kOfxBitDepthByte )
00134         {
00135                 return eBitDepthUByte;
00136         }
00137         else if( str == kOfxBitDepthShort )
00138         {
00139                 return eBitDepthUShort;
00140         }
00141         else if( str == kOfxBitDepthFloat )
00142         {
00143                 return eBitDepthFloat;
00144         }
00145         else if( str == kOfxBitDepthNone )
00146         {
00147                 return eBitDepthNone;
00148         }
00149         else
00150         {
00151                 return eBitDepthCustom;
00152         }
00153 }
00154 
00155 const std::string mapBitDepthEnumToString( const EBitDepth e )
00156 {
00157         switch( e )
00158         {
00159                 case eBitDepthUByte:
00160                         return kOfxBitDepthByte;
00161                 case eBitDepthUShort:
00162                         return kOfxBitDepthShort;
00163                 case eBitDepthFloat:
00164                         return kOfxBitDepthFloat;
00165                 case eBitDepthNone:
00166                         return kOfxBitDepthNone;
00167                 case eBitDepthCustom:
00168                         return "eBitDepthCustom";
00169         }
00170         BOOST_THROW_EXCEPTION( exception::Value()
00171             << exception::dev() + "BitDepth enum: " + e );
00172         return kOfxBitDepthNone;
00173 }
00174 
00175 /** @brief turns a pixel component string into and enum */
00176 EPixelComponent mapPixelComponentStringToEnum( const std::string& str )
00177 {
00178         if( str == kOfxImageComponentRGBA )
00179         {
00180                 return ePixelComponentRGBA;
00181         }
00182         else if( str == kOfxImageComponentRGB )
00183         {
00184                 return ePixelComponentRGB;
00185         }
00186         else if( str == kOfxImageComponentAlpha )
00187         {
00188                 return ePixelComponentAlpha;
00189         }
00190         else if( str == kOfxImageComponentNone )
00191         {
00192                 return ePixelComponentNone;
00193         }
00194         else
00195         {
00196                 return ePixelComponentCustom;
00197         }
00198 }
00199 
00200 std::string mapPixelComponentEnumToString( const EPixelComponent e )
00201 {
00202         switch( e )
00203         {
00204                 case ePixelComponentRGBA:
00205                         return kOfxImageComponentRGBA;
00206                 case ePixelComponentRGB:
00207                         return kOfxImageComponentRGB;
00208                 case ePixelComponentAlpha:
00209                         return kOfxImageComponentAlpha;
00210                 case ePixelComponentNone:
00211                         return kOfxImageComponentNone;
00212                 case ePixelComponentCustom:
00213                         return "ePixelComponentCustom";
00214         }
00215         BOOST_THROW_EXCEPTION( exception::Value()
00216             << exception::user() + "PixelComponent enum: " + e );
00217 }
00218 
00219 ///** @brief turns a premultiplication string into and enum */
00220 //EPreMultiplication mapPreMultiplicationStringToEnum( const std::string& str )
00221 //{
00222 //      if( str == kOfxImageOpaque )
00223 //      {
00224 //              return eImageOpaque;
00225 //      }
00226 //      else if( str == kOfxImagePreMultiplied )
00227 //      {
00228 //              return eImagePreMultiplied;
00229 //      }
00230 //      else if( str == kOfxImageUnPreMultiplied )
00231 //      {
00232 //              return eImageUnPreMultiplied;
00233 //      }
00234 //      BOOST_THROW_EXCEPTION( exception::Value()
00235 //              << exception::user() + str );
00236 //      return eImageOpaque;
00237 //}
00238 //
00239 //std::string mapPreMultiplicationEnumToString( const EPreMultiplication e )
00240 //{
00241 //      switch( e )
00242 //      {
00243 //              case eImageOpaque:
00244 //                      return kOfxImageOpaque;
00245 //              case eImagePreMultiplied:
00246 //                      return kOfxImagePreMultiplied;
00247 //              case eImageUnPreMultiplied:
00248 //                      return kOfxImageUnPreMultiplied;
00249 //      }
00250 //      BOOST_THROW_EXCEPTION( exception::Value()
00251 //              << exception::user() + "PreMultiplication enum: " + e );
00252 //      return "";
00253 //}
00254 //
00255 ///** @brief turns a field string into and enum */
00256 //EField mapFieldStringToEnum( const std::string& str )
00257 //{
00258 //      if( str == kOfxImageFieldNone )
00259 //      {
00260 //              return eFieldNone;
00261 //      }
00262 //      else if( str == kOfxImageFieldBoth )
00263 //      {
00264 //              return eFieldBoth;
00265 //      }
00266 //      else if( str == kOfxImageFieldLower )
00267 //      {
00268 //              return eFieldLower;
00269 //      }
00270 //      else if( str == kOfxImageFieldUpper )
00271 //      {
00272 //              return eFieldUpper;
00273 //      }
00274 //      BOOST_THROW_EXCEPTION( exception::Value()
00275 //              << exception::user() + str );
00276 //      return eFieldNone;
00277 //}
00278 //
00279 //std::string mapFieldEnumToString( const EField e )
00280 //{
00281 //      switch( e )
00282 //      {
00283 //              case eFieldNone:
00284 //                      return kOfxImageFieldNone;
00285 //              case eFieldBoth:
00286 //                      return kOfxImageFieldBoth;
00287 //              case eFieldLower:
00288 //                      return kOfxImageFieldLower;
00289 //              case eFieldUpper:
00290 //                      return kOfxImageFieldUpper;
00291 //      }
00292 //      BOOST_THROW_EXCEPTION( exception::Value()
00293 //              << exception::user() + e );
00294 //      return "";
00295 //}
00296 
00297 /// get me deepest bit depth
00298 std::string findDeepestBitDepth( const std::string& s1, const std::string& s2 )
00299 {
00300         if( s1 == kOfxBitDepthNone )
00301         {
00302                 return s2;
00303         }
00304         else if( s1 == kOfxBitDepthByte )
00305         {
00306                 if( s2 == kOfxBitDepthShort || s2 == kOfxBitDepthFloat )
00307                         return s2;
00308                 return s1;
00309         }
00310         else if( s1 == kOfxBitDepthShort )
00311         {
00312                 if( s2 == kOfxBitDepthFloat )
00313                         return s2;
00314                 return s1;
00315         }
00316         else if( s1 == kOfxBitDepthFloat )
00317         {
00318                 return s1;
00319         }
00320         else
00321         {
00322                 BOOST_THROW_EXCEPTION( exception::Value()
00323                     << exception::user() + "Unrecognized bitdepth " + quotes( s1 ) + "."
00324                     << exception::dev() + "We can't find the deepest bit depth between " + quotes( s1 ) + " and " + quotes( s2 ) );
00325                 return s2;
00326         }
00327 }
00328 
00329 }
00330 }
00331 }
00332