Skip to content

Commit

Permalink
Adsk Contrib - Data bypass fix (#1229)
Browse files Browse the repository at this point in the history
* Data bypass fix

Signed-off-by: Bernard Lefebvre <bernard.lefebvre@autodesk.com>

* beta 2

Signed-off-by: Bernard Lefebvre <bernard.lefebvre@autodesk.com>

* Adjust some comments

Signed-off-by: Bernard Lefebvre <bernard.lefebvre@autodesk.com>

Co-authored-by: doug-walker <43830961+doug-walker@users.noreply.github.com>
  • Loading branch information
BernardLefebvre and doug-walker authored Dec 5, 2020
1 parent e412d8a commit a712243
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 15 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ project(OpenColorIO
LANGUAGES CXX C)

# "dev", "beta1", rc1", etc or "" for an official release.
set(OpenColorIO_VERSION_RELEASE_TYPE "beta1")
set(OpenColorIO_VERSION_RELEASE_TYPE "beta2")

enable_testing()

Expand Down
10 changes: 7 additions & 3 deletions src/OpenColorIO/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3622,17 +3622,21 @@ void Config::setFileRules(ConstFileRulesRcPtr fileRules)

const char * Config::getColorSpaceFromFilepath(const char * filePath) const
{
return getImpl()->m_fileRules->getImpl()->getColorSpaceFromFilepath(*this, filePath);
return getImpl()->m_fileRules->getImpl()->getColorSpaceFromFilepath(*this,
filePath ? filePath : "");
}

const char * Config::getColorSpaceFromFilepath(const char * filePath, size_t & ruleIndex) const
{
return getImpl()->m_fileRules->getImpl()->getColorSpaceFromFilepath(*this, filePath, ruleIndex);
return getImpl()->m_fileRules->getImpl()->getColorSpaceFromFilepath(*this,
filePath ? filePath : "",
ruleIndex);
}

bool Config::filepathOnlyMatchesDefaultRule(const char * filePath) const
{
return getImpl()->m_fileRules->getImpl()->filepathOnlyMatchesDefaultRule(*this, filePath);
return getImpl()->m_fileRules->getImpl()->filepathOnlyMatchesDefaultRule(*this,
filePath ? filePath : "");
}


Expand Down
4 changes: 3 additions & 1 deletion src/OpenColorIO/Processor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,9 @@ void Processor::Impl::setColorSpaceConversion(const Config & config,
throw Exception("Internal error: Processor should be empty");
}

BuildColorSpaceOps(m_ops, config, context, srcColorSpace, dstColorSpace, false);
// Default behavior is to bypass data color space. ColorSpaceTransform can be used to not bypass
// data color spaces.
BuildColorSpaceOps(m_ops, config, context, srcColorSpace, dstColorSpace, true);

std::ostringstream desc;
desc << "Color space conversion from " << srcColorSpace->getName()
Expand Down
7 changes: 4 additions & 3 deletions src/OpenColorIO/transforms/LookTransform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,9 @@ void RunLookTokens(OpRcPtrVec & ops,
if (!skipColorSpaceConversion &&
currentColorSpace.get() != processColorSpace.get())
{
// Default behavior is to bypass data color space.
BuildColorSpaceOps(ops, config, context,
currentColorSpace, processColorSpace, false);
currentColorSpace, processColorSpace, true);
currentColorSpace = processColorSpace;
}

Expand Down Expand Up @@ -352,8 +353,8 @@ void BuildLookOps(OpRcPtrVec & ops,
// If current color space is already the dst space skip the conversion.
if (!skipColorSpaceConversion && currentColorSpace.get() != dst.get())
{
BuildColorSpaceOps(ops, config, context,
currentColorSpace, dst, false);
// Default behavior is to bypass data color space.
BuildColorSpaceOps(ops, config, context, currentColorSpace, dst, true);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/apps/ociochecklut/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,8 @@ int main (int argc, const char* argv[])
{
// What are the allowed formats?
std::cout << "Formats supported:" << std::endl;
const auto nbFromats = OCIO::FileTransform::GetNumFormats();
for (int i = 0; i < nbFromats; ++i)
const auto nbFormats = OCIO::FileTransform::GetNumFormats();
for (int i = 0; i < nbFormats; ++i)
{
std::cout << OCIO::FileTransform::GetFormatNameByIndex(i);
std::cout << " (." << OCIO::FileTransform::GetFormatExtensionByIndex(i) << ")";
Expand Down
10 changes: 9 additions & 1 deletion tests/cpu/FileRules_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,10 @@ OCIO_ADD_TEST(FileRules, rules_filepattern)
OCIO_CHECK_EQUAL(rulePosition, 1); // Default rule.
config->getColorSpaceFromFilepath("/An/Arbitrary.exr/Path/MyFileexr", rulePosition);
OCIO_CHECK_EQUAL(rulePosition, 1); // Default rule.
config->getColorSpaceFromFilepath("", rulePosition);
OCIO_CHECK_EQUAL(rulePosition, 1); // Default rule.
config->getColorSpaceFromFilepath(nullptr, rulePosition);
OCIO_CHECK_EQUAL(rulePosition, 1); // Default rule.

OCIO_CHECK_NO_THROW(rules->setPattern(0, "gamma"));
config->setFileRules(rules);
Expand Down Expand Up @@ -986,7 +990,11 @@ strictparsing: true
auto rules = config->getFileRules();
OCIO_REQUIRE_ASSERT(rules);
OCIO_REQUIRE_EQUAL(rules->getNumEntries(), 1);
// File defined default role is preserved.
OCIO_CHECK_EQUAL(std::string(rules->getName(0)), OCIO::FileRuleUtils::DefaultName);
OCIO_CHECK_EQUAL(std::string(rules->getColorSpace(0)), "cs1");
OCIO_CHECK_EQUAL(std::string(config->getColorSpaceFromFilepath("anything")), "cs1");

// The color space of the default role is preserved.
auto cs = config->getColorSpace(OCIO::ROLE_DEFAULT);
OCIO_CHECK_EQUAL(std::string("raw"), cs->getName());
}
Expand Down
28 changes: 27 additions & 1 deletion tests/cpu/transforms/ColorSpaceTransform_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,27 @@ OCIO_ADD_TEST(ColorSpaceTransform, build_colorspace_ops)
*cst, OCIO::TRANSFORM_DIR_FORWARD));
OCIO_CHECK_NO_THROW(ops.validate());
OCIO_CHECK_EQUAL(ops.size(), 0);
ops.clear();

OCIO::ConstProcessorRcPtr proc;
config->setProcessorCacheFlags(OCIO::PROCESSOR_CACHE_OFF); // Cache disabled
OCIO_CHECK_NO_THROW(proc = config->getProcessor(cst));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 0);

cst->setDataBypass(false);
OCIO_CHECK_NO_THROW(OCIO::BuildColorSpaceOps(ops, *config, config->getCurrentContext(),
*cst, OCIO::TRANSFORM_DIR_FORWARD));
OCIO_CHECK_NO_THROW(ops.validate());
OCIO_CHECK_EQUAL(ops.size(), 4);
ops.clear();

// Some of the ops are no-ops, processor has 2 transforms.
OCIO_CHECK_NO_THROW(proc = config->getProcessor(cst));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 2);

// Similar test with color space, data by-pass can't be controlled.
OCIO_CHECK_NO_THROW(proc = config->getProcessor(src.c_str(), dst.c_str()));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 0);

// Restore default data flags.
csSceneToRef->setIsData(false);
Expand All @@ -153,17 +168,28 @@ OCIO_ADD_TEST(ColorSpaceTransform, build_colorspace_ops)
csSceneFromRef->setIsData(true);
config->addColorSpace(csSceneFromRef);

ops.clear();
OCIO_CHECK_NO_THROW(OCIO::BuildColorSpaceOps(ops, *config, config->getCurrentContext(),
*cst, OCIO::TRANSFORM_DIR_FORWARD));
OCIO_CHECK_NO_THROW(ops.validate());
OCIO_CHECK_EQUAL(ops.size(), 0);
ops.clear();

OCIO_CHECK_NO_THROW(proc = config->getProcessor(cst));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 0);

cst->setDataBypass(false);
OCIO_CHECK_NO_THROW(OCIO::BuildColorSpaceOps(ops, *config, config->getCurrentContext(),
*cst, OCIO::TRANSFORM_DIR_FORWARD));
OCIO_CHECK_NO_THROW(ops.validate());
OCIO_CHECK_EQUAL(ops.size(), 4);
ops.clear();

OCIO_CHECK_NO_THROW(proc = config->getProcessor(cst));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 2);

// Similar test with color space, data bypass can't be controlled.
OCIO_CHECK_NO_THROW(proc = config->getProcessor(src.c_str(), dst.c_str()));
OCIO_CHECK_EQUAL(proc->getNumTransforms(), 0);

// Restore default data flags.
csSceneFromRef->setIsData(false);
Expand Down
6 changes: 3 additions & 3 deletions tests/cpu/transforms/LookTransform_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ search_path: luts

OCIO::OpRcPtrVec ops;
OCIO_CHECK_NO_THROW(BuildColorSpaceOps(ops, *config, config->getCurrentContext(),
srcColorSpace, dstColorSpace, false));
srcColorSpace, dstColorSpace, true));
OCIO_CHECK_NO_THROW(ops.validate());
OCIO_REQUIRE_EQUAL(ops.size(), 11);
OCIO::ConstOpRcPtr op = ops[0];
Expand Down Expand Up @@ -665,7 +665,7 @@ search_path: luts
// Test in inverse direction.
ops.clear();
OCIO_CHECK_NO_THROW(BuildColorSpaceOps(ops, *config, config->getCurrentContext(),
dstColorSpace, srcColorSpace, false));
dstColorSpace, srcColorSpace, true));
OCIO_REQUIRE_EQUAL(ops.size(), 11);
OCIO_CHECK_NO_THROW(ops.validate());
op = ops[0];
Expand Down Expand Up @@ -711,7 +711,7 @@ search_path: luts

OCIO::OpRcPtrVec ops2;
OCIO_CHECK_NO_THROW(BuildColorSpaceOps(ops2, *config, config->getCurrentContext(),
dstColorSpaceInv, srcColorSpace, false));
dstColorSpaceInv, srcColorSpace, true));
OCIO_REQUIRE_EQUAL(ops2.size(), ops.size());
OCIO_CHECK_NO_THROW(ops2.validate());
for (std::size_t i = 0; i < ops2.size(); ++i)
Expand Down

0 comments on commit a712243

Please sign in to comment.