void LocalFileFormat::BuildFileOps(OpRcPtrVec & ops, const Config& /*config*/, const ConstContextRcPtr & /*context*/, CachedFileRcPtr untypedCachedFile, const FileTransform& fileTransform, TransformDirection dir) const { LocalCachedFileRcPtr cachedFile = DynamicPtrCast<LocalCachedFile>(untypedCachedFile); // This should never happen. if(!cachedFile) { std::ostringstream os; os << "Cannot build .3dl Op. Invalid cache type."; throw Exception(os.str().c_str()); } TransformDirection newDir = CombineTransformDirections(dir, fileTransform.getDirection()); if(newDir == TRANSFORM_DIR_UNKNOWN) { std::ostringstream os; os << "Cannot build file format transform,"; os << " unspecified transform direction."; throw Exception(os.str().c_str()); } // TODO: INTERP_LINEAR should not be hard-coded. // Instead query 'highest' interpolation? // (right now, it's linear). If cubic is added, consider // using it if(newDir == TRANSFORM_DIR_FORWARD) { if(cachedFile->has1D) { CreateLut1DOp(ops, cachedFile->lut1D, INTERP_LINEAR, newDir); } if(cachedFile->has3D) { CreateLut3DOp(ops, cachedFile->lut3D, fileTransform.getInterpolation(), newDir); } } else if(newDir == TRANSFORM_DIR_INVERSE) { if(cachedFile->has3D) { CreateLut3DOp(ops, cachedFile->lut3D, fileTransform.getInterpolation(), newDir); } if(cachedFile->has1D) { CreateLut1DOp(ops, cachedFile->lut1D, INTERP_LINEAR, newDir); } } }
void LocalFileFormat::BuildFileOps(OpRcPtrVec & ops, const Config& /*config*/, const ConstContextRcPtr & /*context*/, CachedFileRcPtr untypedCachedFile, const FileTransform& fileTransform, TransformDirection dir) const { LocalCachedFileRcPtr cachedFile = DynamicPtrCast<LocalCachedFile>(untypedCachedFile); if(!cachedFile) // This should never happen. { std::ostringstream os; os << "Cannot build Spi1D Op. Invalid cache type."; throw Exception(os.str().c_str()); } TransformDirection newDir = CombineTransformDirections(dir, fileTransform.getDirection()); CreateLut1DOp(ops, cachedFile->lut, fileTransform.getInterpolation(), newDir); }