TuttleOFX  1
JpegReaderPlugin.cpp
Go to the documentation of this file.
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 }