Example #1
0
 void Processor::Impl::addColorSpaceConversion(const Config & config,
                              const ConstContextRcPtr & context,
                              const ConstColorSpaceRcPtr & srcColorSpace,
                              const ConstColorSpaceRcPtr & dstColorSpace)
 {
     BuildColorSpaceOps(m_cpuOps, config, context, srcColorSpace, dstColorSpace);
 }
Example #2
0
 ConstProcessorRcPtr Config::getProcessor(const ConstColorSpaceRcPtr & srcColorSpace,
                                          const ConstColorSpaceRcPtr & dstColorSpace) const
 {
     LocalProcessorRcPtr processor = LocalProcessor::Create();
     BuildColorSpaceOps(*processor, *this, srcColorSpace, dstColorSpace);
     processor->finalizeOps();
     return processor;
 }
Example #3
0
 void BuildLookOps(OpRcPtrVec & ops,
                   const Config& config,
                   const ConstContextRcPtr & context,
                   const LookTransform & lookTransform,
                   TransformDirection dir)
 {
     ConstColorSpaceRcPtr src, dst;
     src = config.getColorSpace( lookTransform.getSrc() );
     dst = config.getColorSpace( lookTransform.getDst() );
     
     if(!src)
     {
         std::ostringstream os;
         os << "BuildLookOps error.";
         os << "The specified lookTransform specifies a src colorspace, '";
         os <<  lookTransform.getSrc() << "', which is not defined.";
         throw Exception(os.str().c_str());
     }
     
     if(!dst)
     {
         std::ostringstream os;
         os << "BuildLookOps error.";
         os << "The specified lookTransform specifies a dst colorspace, '";
         os <<  lookTransform.getDst() << "', which is not defined.";
         throw Exception(os.str().c_str());
     }
     
     LookParseResult looks;
     looks.parse(lookTransform.getLooks());
     
     // We must handle the inverse src/dst colorspace transformation explicitly.
     if(dir == TRANSFORM_DIR_INVERSE)
     {
         std::swap(src, dst);
         looks.reverse();
     }
     else if(dir == TRANSFORM_DIR_UNKNOWN)
     {
         std::ostringstream os;
         os << "BuildLookOps error. A valid transform direction must be specified.";
         throw Exception(os.str().c_str());
     }
     
     ConstColorSpaceRcPtr currentColorSpace = src;
     BuildLookOps(ops,
                  currentColorSpace,
                  false,
                  config,
                  context,
                  looks);
     
     BuildColorSpaceOps(ops, config, context,
                        currentColorSpace,
                        dst);
 }
    void BuildColorSpaceOps(OpRcPtrVec & ops,
    const Config& config,
    const ConstContextRcPtr & context,
    const ColorSpaceTransform & colorSpaceTransform,
    TransformDirection dir)
    {
        TransformDirection combinedDir = CombineTransformDirections(dir,
        colorSpaceTransform.getDirection());

        ConstColorSpaceRcPtr src, dst;

        if(combinedDir == TRANSFORM_DIR_FORWARD)
        {
            src = config.getColorSpace( colorSpaceTransform.getSrc() );
            dst = config.getColorSpace( colorSpaceTransform.getDst() );
        }
        else if(combinedDir == TRANSFORM_DIR_INVERSE)
        {
            dst = config.getColorSpace( colorSpaceTransform.getSrc() );
            src = config.getColorSpace( colorSpaceTransform.getDst() );
        }

        BuildColorSpaceOps(ops, config, context, src, dst);
    }
Example #5
0
 void BuildOps(OpRcPtrVec & ops,
               const Config & config,
               const ConstContextRcPtr & context,
               const ConstTransformRcPtr & transform,
               TransformDirection dir)
 {
     // A null transform is valid, and corresponds to a no-op.
     if(!transform)
         return;
     
     if(ConstAllocationTransformRcPtr allocationTransform = \
         DynamicPtrCast<const AllocationTransform>(transform))
     {
         BuildAllocationOps(ops, config, *allocationTransform, dir);
     }
     else if(ConstCDLTransformRcPtr cdlTransform = \
         DynamicPtrCast<const CDLTransform>(transform))
     {
         BuildCDLOps(ops, config, *cdlTransform, dir);
     }
     else if(ConstColorSpaceTransformRcPtr colorSpaceTransform = \
         DynamicPtrCast<const ColorSpaceTransform>(transform))
     {
         BuildColorSpaceOps(ops, config, context, *colorSpaceTransform, dir);
     }
     else if(ConstDisplayTransformRcPtr displayTransform = \
         DynamicPtrCast<const DisplayTransform>(transform))
     {
         BuildDisplayOps(ops, config, context, *displayTransform, dir);
     }
     else if(ConstExponentTransformRcPtr exponentTransform = \
         DynamicPtrCast<const ExponentTransform>(transform))
     {
         BuildExponentOps(ops, config, *exponentTransform, dir);
     }
     else if(ConstFileTransformRcPtr fileTransform = \
         DynamicPtrCast<const FileTransform>(transform))
     {
         BuildFileOps(ops, config, context, *fileTransform, dir);
     }
     else if(ConstGroupTransformRcPtr groupTransform = \
         DynamicPtrCast<const GroupTransform>(transform))
     {
         BuildGroupOps(ops, config, context, *groupTransform, dir);
     }
     else if(ConstLogTransformRcPtr logTransform = \
         DynamicPtrCast<const LogTransform>(transform))
     {
         BuildLogOps(ops, config, *logTransform, dir);
     }
     else if(ConstMatrixTransformRcPtr matrixTransform = \
         DynamicPtrCast<const MatrixTransform>(transform))
     {
         BuildMatrixOps(ops, config, *matrixTransform, dir);
     }
     else if(ConstTruelightTransformRcPtr truelightTransform = \
         DynamicPtrCast<const TruelightTransform>(transform))
     {
         BuildTruelightOps(ops, config, *truelightTransform, dir);
     }
     else
     {
         std::ostringstream os;
         os << "Unknown transform type for Op Creation.";
         throw Exception(os.str().c_str());
     }
 }