TuttleOFX
1
|
00001 #include "JpegReaderPlugin.hpp" 00002 #include "JpegReaderProcess.hpp" 00003 #include "JpegReaderDefinitions.hpp" 00004 00005 #include <boost/gil/gil_all.hpp> 00006 #include <boost/filesystem.hpp> 00007 00008 namespace tuttle { 00009 namespace plugin { 00010 namespace jpeg { 00011 namespace reader { 00012 00013 namespace bfs = boost::filesystem; 00014 using namespace boost::gil; 00015 00016 JpegReaderPlugin::JpegReaderPlugin( OfxImageEffectHandle handle ) 00017 : ReaderPlugin( handle ) 00018 {} 00019 00020 JpegReaderProcessParams JpegReaderPlugin::getProcessParams( const OfxTime time ) 00021 { 00022 JpegReaderProcessParams params; 00023 00024 params._filepath = getAbsoluteFilenameAt( time ); 00025 00026 return params; 00027 } 00028 00029 void JpegReaderPlugin::changedParam( const OFX::InstanceChangedArgs& args, const std::string& paramName ) 00030 { 00031 ReaderPlugin::changedParam( args, paramName ); 00032 } 00033 00034 bool JpegReaderPlugin::getRegionOfDefinition( const OFX::RegionOfDefinitionArguments& args, OfxRectD& rod ) 00035 { 00036 try 00037 { 00038 point2<ptrdiff_t> jpegDims = jpeg_read_dimensions( getAbsoluteFilenameAt( args.time ) ); 00039 rod.x1 = 0; 00040 rod.x2 = jpegDims.x * this->_clipDst->getPixelAspectRatio(); 00041 rod.y1 = 0; 00042 rod.y2 = jpegDims.y; 00043 } 00044 catch( std::exception& e ) 00045 { 00046 BOOST_THROW_EXCEPTION( exception::FileInSequenceNotExist() 00047 << exception::user( "Jpeg: Unable to open file" ) 00048 << exception::filename( getAbsoluteFilenameAt( args.time ) ) ); 00049 } 00050 catch( ... ) 00051 { 00052 BOOST_THROW_EXCEPTION( exception::FileNotExist() 00053 << exception::user( "Jpeg: Unable to open file" ) 00054 << exception::filename( getAbsoluteFilenameAt( args.time ) ) ); 00055 } 00056 00057 return true; 00058 } 00059 00060 void JpegReaderPlugin::getClipPreferences( OFX::ClipPreferencesSetter& clipPreferences ) 00061 { 00062 ReaderPlugin::getClipPreferences( clipPreferences ); 00063 00064 if( getExplicitBitDepthConversion() == eParamReaderBitDepthAuto ) 00065 { 00066 clipPreferences.setClipBitDepth( *this->_clipDst, OFX::eBitDepthUByte ); 00067 } 00068 00069 if( getExplicitChannelConversion() == eParamReaderChannelAuto ) 00070 { 00071 if( OFX::getImageEffectHostDescription()->supportsPixelComponent( OFX::ePixelComponentRGB ) ) 00072 { 00073 clipPreferences.setClipComponents( *this->_clipDst, OFX::ePixelComponentRGB ); 00074 } 00075 else 00076 { 00077 clipPreferences.setClipComponents( *this->_clipDst, OFX::ePixelComponentRGBA ); 00078 } 00079 } 00080 00081 clipPreferences.setPixelAspectRatio( *this->_clipDst, 1.0 ); 00082 } 00083 00084 /** 00085 * @brief The overridden render function 00086 * @param[in] args Rendering parameters 00087 */ 00088 void JpegReaderPlugin::render( const OFX::RenderArguments& args ) 00089 { 00090 ReaderPlugin::render(args); 00091 doGilRender<JpegReaderProcess>( *this, args ); 00092 } 00093 00094 } 00095 } 00096 } 00097 }