diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 00000000..4fa9120b --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,6 @@ +;;; Directory Local Variables -*- no-byte-compile: t -*- +;;; For more information see (info "(emacs) Directory Variables") + +;; for C and C++, we use 2 space offset, no tabs +((prog-mode . ((c-basic-offset . 2) + (indent-tabs-mode . nil))) diff --git a/CMakeLists.txt b/CMakeLists.txt index b0862260..9769abd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,9 +11,10 @@ else() LANGUAGES CXX) # no CUDA endif() set_property(GLOBAL PROPERTY USE_FOLDERS ON) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_STATIC_LIBRARY_PREFIX "lib") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_definitions(-D_HAS_AUTO_PTR_ETC) if(APPLE) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64") @@ -62,6 +63,8 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_BINARY_DIR}) # Conan packages find_package(EXPAT) find_package(opengl_system REQUIRED) +find_package(cimg REQUIRED) +find_package(spdlog REQUIRED) # Macros include(OpenFX) diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index 50707a84..e6790fcc 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -3,6 +3,7 @@ set(OFX_SUPPORT_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Support/include") set(PLUGINS Basic ChoiceParams + ColourSpace Custom DepthConverter Invert @@ -27,3 +28,5 @@ endforeach() target_link_libraries(example-OpenGL PRIVATE opengl::opengl) target_link_libraries(example-Custom PRIVATE opengl::opengl) +target_link_libraries(example-ColourSpace PRIVATE cimg::cimg) +target_link_libraries(example-ColourSpace PRIVATE spdlog::spdlog_header_only) diff --git a/Examples/ColourSpace/Info.plist b/Examples/ColourSpace/Info.plist new file mode 100644 index 00000000..dd0485fb --- /dev/null +++ b/Examples/ColourSpace/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + colourspace.ofx + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 0.0.1d1 + CSResourcesFileMapped + + + diff --git a/Examples/ColourSpace/colourspace.cpp b/Examples/ColourSpace/colourspace.cpp new file mode 100644 index 00000000..57354e48 --- /dev/null +++ b/Examples/ColourSpace/colourspace.cpp @@ -0,0 +1,821 @@ +// Copyright OpenFX and contributors to the OpenFX project. +// SPDX-License-Identifier: BSD-3-Clause + + +/* + Plugin example demonstrating colourspace handling + */ +#include +#include +#include +#include +#include +#include +#include +#include "spdlog/spdlog.h" +#define cimg_display 0 // no X11 +#include "CImg.h" +#include "ofxImageEffect.h" +#include "ofxMemory.h" +#include "ofxMultiThread.h" +#include "ofxColour.h" +#include "ofx-native-v1.5_aces-v1.3_ocio-v2.3.h" + +#include "../include/ofxUtilities.H" // example support utils + +#if defined __APPLE__ || defined __linux__ || defined __FreeBSD__ +# define EXPORT __attribute__((visibility("default"))) +#elif defined _WIN32 +# define EXPORT OfxExport +#else +# error Not building on your operating system quite yet +#endif + +const char *errMsg(int err) { + switch (err) { + case kOfxStatOK: return "OK"; + case kOfxStatFailed : return "Failed"; + case kOfxStatErrFatal: return "ErrFatal"; + case kOfxStatErrUnknown: return "ErrUnknown"; + case kOfxStatErrMissingHostFeature: return "ErrMissingHostFeature"; + case kOfxStatErrUnsupported: return "ErrUnsupported"; + case kOfxStatErrExists : return "ErrExists "; + case kOfxStatErrFormat: return "ErrFormat"; + case kOfxStatErrMemory : return "ErrMemory"; + case kOfxStatErrBadHandle: return "ErrBadHandle"; + case kOfxStatErrBadIndex: return "ErrBadIndex"; + case kOfxStatErrValue: return "ErrValue"; + case kOfxStatReplyYes: return "ReplyYes"; + case kOfxStatReplyNo: return "ReplyNo"; + case kOfxStatReplyDefault: return "ReplyDefault"; + default: return "Unknown!?"; + } +} + +// pointers to various bits of the host +OfxHost *gHost; +OfxImageEffectSuiteV1 *gEffectHost = 0; +OfxPropertySuiteV1 *gPropHost = 0; +OfxParameterSuiteV1 *gParamHost = 0; +OfxMemorySuiteV1 *gMemoryHost = 0; +OfxMultiThreadSuiteV1 *gThreadHost = 0; +OfxMessageSuiteV1 *gMessageSuite = 0; +OfxInteractSuiteV1 *gInteractHost = 0; + +// some flags about the host's behaviour +int gHostSupportsMultipleBitDepths = false; +std::string gHostColourManagementStyle; + +// private instance data type +struct MyInstanceData { + bool isGeneralEffect; + + // handles to the clips we deal with + OfxImageClipHandle sourceClip; + OfxImageClipHandle outputClip; + + // handles to our parameters + OfxParamHandle inputSpaceParam; + OfxParamHandle outputSpaceParam; +}; + +template +static constexpr T lerp(T a, T b, float amount) { + return a + amount * (b - a); +} + +#define COMP_WHITE_OVER(a, b, bg_opacity) \ + do { \ + (a) = lerp((a) * (1.0f - (bg_opacity)), white, (b)); \ +} while (0) + +/** + * Draw a string of text at the given position in the image + */ +static void drawText(const std::string &message, int x, int y, + unsigned int font_height, + void *image, int xdim, + int ydim, int bits, int nchannels, int rowbytes) { + auto txt_img = cimg_library::CImg(); + float fg[] = {1.0f}; + float bg[] = {0}; + // this will create an image just big enough to hold the text + txt_img.draw_text(0, 0, message.c_str(), fg, bg, 1.0, font_height); + int txt_width = txt_img.width(); + int txt_height = txt_img.height(); + // CImg is top-down, opposite of OpenFX (bottom up) + // iy here is image y, ty is text-image y; same for x + switch (bits) { + case 8: { + using T = unsigned char; + float white = 255.0f; + float color_scale = 1.0f/256.0f; + float bg_opacity = 0.2f; + for (int iy = y, ty = 0; iy < ydim && ty < txt_height; iy++, ty++) { + T *row = (T *)((unsigned char *)image + iy * rowbytes); + float *txt_row = txt_img.data(0, txt_height - 1 - ty); + for (int ix = x, tx = 0; ix < xdim && tx < txt_width; ix++, tx++) { + switch (nchannels) { + case 1: // Alpha only + row[ix*4] = std::max(row[ix*4], (T)(txt_row[tx] * color_scale)); + case 3: // RGB + COMP_WHITE_OVER(row[ix*3], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+2], txt_row[tx], bg_opacity); + case 4: // RGBA + COMP_WHITE_OVER(row[ix*4], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+2], txt_row[tx], bg_opacity); + // alpha + row[ix*4+3] = std::max(row[ix*4+3], (T)(txt_row[tx] * color_scale)); + } + } + } + } break; + case 16: { + using T = unsigned short; + float white = 65535.0f; + float color_scale = 1.0f/65536.0f; + float bg_opacity = 0.2f; + for (int iy = y, ty = 0; iy < ydim && ty < txt_height; iy++, ty++) { + T *row = (T *)((unsigned char *)image + iy * rowbytes); + float *txt_row = txt_img.data(0, txt_height - 1 - ty); + for (int ix = x, tx = 0; ix < xdim && tx < txt_width; ix++, tx++) { + switch (nchannels) { + case 1: // Alpha only + row[ix*4] = std::max(row[ix*4], (T)(txt_row[tx] * color_scale)); + case 3: // RGB + COMP_WHITE_OVER(row[ix*3], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+2], txt_row[tx], bg_opacity); + case 4: // RGBA + COMP_WHITE_OVER(row[ix*4], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+2], txt_row[tx], bg_opacity); + // alpha + row[ix*4+3] = std::max(row[ix*4+3], (T)(txt_row[tx] * color_scale)); + } + } + } + } break; + case 32: { + float white = 1.0f; + float bg_opacity = 0.2f; + for (int iy = y, ty = 0; iy < ydim && ty < txt_height; iy++, ty++) { + float *row = (float *)((unsigned char *)image + iy * rowbytes); + float *txt_row = txt_img.data(0, txt_height - 1 - ty); + for (int ix = x, tx = 0; ix < xdim && tx < txt_width; ix++, tx++) { + switch (nchannels) { + case 1: // Alpha only + row[ix*4] = std::max(row[ix*4], txt_row[tx]); + case 3: // RGB + COMP_WHITE_OVER(row[ix*3], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*3+2], txt_row[tx], bg_opacity); + case 4: // RGBA + COMP_WHITE_OVER(row[ix*4], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+1], txt_row[tx], bg_opacity); + COMP_WHITE_OVER(row[ix*4+2], txt_row[tx], bg_opacity); + // alpha + row[ix*4+3] = std::max(row[ix*4+3], txt_row[tx]); + } + } + } break; + } + } +} + + + +/* mandatory function to set up the host structures */ + + +// Convenience wrapper to get private data +static MyInstanceData * +getMyInstanceData( OfxImageEffectHandle effect) +{ + // get the property handle for the plugin + OfxPropertySetHandle effectProps; + gEffectHost->getPropertySet(effect, &effectProps); + + // get my data pointer out of that + MyInstanceData *myData = 0; + gPropHost->propGetPointer(effectProps, kOfxPropInstanceData, 0, + (void **) &myData); + return myData; +} + +// Convenience wrapper to set the enabledness of a parameter +static inline void +setParamEnabledness( OfxImageEffectHandle effect, + const char *paramName, + int enabledState) +{ + // fetch the parameter set for this effect + OfxParamSetHandle paramSet; + gEffectHost->getParamSet(effect, ¶mSet); + + // fetch the parameter property handle + OfxParamHandle param; OfxPropertySetHandle paramProps; + gParamHost->paramGetHandle(paramSet, paramName, ¶m, ¶mProps); + + // and set its enabledness + gPropHost->propSetInt(paramProps, kOfxParamPropEnabled, 0, enabledState); +} + +/** @brief Called at load */ +static OfxStatus +onLoad(void) +{ + return kOfxStatOK; +} + +/** @brief Called before unload */ +static OfxStatus +onUnLoad(void) +{ + return kOfxStatOK; +} + +// instance construction +static OfxStatus +createInstance( OfxImageEffectHandle effect) +{ + // get a pointer to the effect properties + OfxPropertySetHandle effectProps; + gEffectHost->getPropertySet(effect, &effectProps); + + // get a pointer to the effect's parameter set + OfxParamSetHandle paramSet; + gEffectHost->getParamSet(effect, ¶mSet); + + // make my private instance data + MyInstanceData *myData = new MyInstanceData; + char *context = 0; + + // is this instance a general effect ? + gPropHost->propGetString(effectProps, kOfxImageEffectPropContext, 0, &context); + myData->isGeneralEffect = context && (strcmp(context, kOfxImageEffectContextGeneral) == 0); + + // cache param handles + gParamHost->paramGetHandle(paramSet, "input_colourspace", &myData->inputSpaceParam, 0); + gParamHost->paramGetHandle(paramSet, "output_colourspace", &myData->outputSpaceParam, 0); + + // cache clip handles + gEffectHost->clipGetHandle(effect, kOfxImageEffectSimpleSourceClipName, &myData->sourceClip, 0); + gEffectHost->clipGetHandle(effect, kOfxImageEffectOutputClipName, &myData->outputClip, 0); + + // set my private instance data + gPropHost->propSetPointer(effectProps, kOfxPropInstanceData, 0, (void *) myData); + + return kOfxStatOK; +} + +// instance destruction +static OfxStatus +destroyInstance( OfxImageEffectHandle effect) +{ + // get my instance data + MyInstanceData *myData = getMyInstanceData(effect); + + // and delete it + if(myData) + delete myData; + return kOfxStatOK; +} + +// tells the host what region we are capable of filling +OfxStatus +getSpatialRoD( OfxImageEffectHandle effect, OfxPropertySetHandle inArgs, OfxPropertySetHandle outArgs) +{ + // retrieve any instance data associated with this effect + MyInstanceData *myData = getMyInstanceData(effect); + + OfxTime time; + gPropHost->propGetDouble(inArgs, kOfxPropTime, 0, &time); + + // my RoD is the same as my input's + OfxRectD rod; + gEffectHost->clipGetRegionOfDefinition(myData->sourceClip, time, &rod); + + // set the rod in the out args + gPropHost->propSetDoubleN(outArgs, kOfxImageEffectPropRegionOfDefinition, 4, &rod.x1); + + return kOfxStatOK; +} + +// tells the host how much of the input we need to fill the given window +OfxStatus +getSpatialRoI( OfxImageEffectHandle effect, OfxPropertySetHandle inArgs, OfxPropertySetHandle outArgs) +{ + // get the RoI the effect is interested in from inArgs + OfxRectD roi; + gPropHost->propGetDoubleN(inArgs, kOfxImageEffectPropRegionOfInterest, 4, &roi.x1); + + // the input needed is the same as the output, so set that on the source clip + gPropHost->propSetDoubleN(outArgs, "OfxImageClipPropRoI_Source", 4, &roi.x1); + + // retrieve any instance data associated with this effect + MyInstanceData *myData = getMyInstanceData(effect); + + return kOfxStatOK; +} + +// Tells the host how many frames we can fill. Only called in the general context. +// This shows the default behaviour; shown for illustrative purposes. +OfxStatus +getTemporalDomain( OfxImageEffectHandle effect, OfxPropertySetHandle /*inArgs*/, OfxPropertySetHandle outArgs) +{ + MyInstanceData *myData = getMyInstanceData(effect); + + double sourceRange[2]; + + // get the frame range of the source clip + OfxPropertySetHandle props; gEffectHost->clipGetPropertySet(myData->sourceClip, &props); + gPropHost->propGetDoubleN(props, kOfxImageEffectPropFrameRange, 2, sourceRange); + + // set it on the out args + gPropHost->propSetDoubleN(outArgs, kOfxImageEffectPropFrameRange, 2, sourceRange); + + return kOfxStatOK; +} + + +// Set our clip preferences +static OfxStatus +getClipPreferences( OfxImageEffectHandle effect, OfxPropertySetHandle /*inArgs*/, OfxPropertySetHandle outArgs) +{ + // retrieve any instance data associated with this effect + MyInstanceData *myData = getMyInstanceData(effect); + + // get the component type and bit depth of our main input + int bitDepth; + bool isRGBA; + ofxuClipGetFormat(myData->sourceClip, bitDepth, isRGBA, true); // get the unmapped clip component + + // get the strings used to label the various bit depths + const char *bitDepthStr = bitDepth == 8 ? kOfxBitDepthByte : (bitDepth == 16 ? kOfxBitDepthShort : kOfxBitDepthFloat); + const char *componentStr = isRGBA ? kOfxImageComponentRGBA : kOfxImageComponentAlpha; + + std::string preferredInputSpace; + std::string preferredOutputSpace; + int preferredInputSpaceIndex; + int preferredOutputSpaceIndex; + gParamHost->paramGetValue(myData->inputSpaceParam, &preferredInputSpaceIndex); + gParamHost->paramGetValue(myData->outputSpaceParam, &preferredOutputSpaceIndex); + + switch (preferredInputSpaceIndex) { + case 0: + preferredInputSpace = kOfxColourspaceRoleSceneLinear; + break; + case 1: + preferredInputSpace = kOfxColourspaceRaw; + break; + case 2: + preferredInputSpace = kOfxColourspaceRoleColorTiming; + break; + case 3: + preferredInputSpace = {}; + break; + } + + switch (preferredOutputSpaceIndex) { + case 0: + preferredOutputSpace = kOfxColourspaceACEScg; + break; + case 1: + preferredOutputSpace = kOfxColourspaceLinRec2020; + break; + case 2: + preferredOutputSpace = kOfxColourspaceSrgbTx; + break; + case 3: + preferredOutputSpace = kOfxColourspaceACEScct; + break; + } + + // set our output to be the same same as the input, component and bitdepth + gPropHost->propSetString(outArgs, "OfxImageClipPropComponents_Output", 0, componentStr); + if(gHostSupportsMultipleBitDepths) + gPropHost->propSetString(outArgs, "OfxImageClipPropDepth_Output", 0, bitDepthStr); + + // Colour management -- preferred colour spaces, in order (most preferred first) +#define PREFER_COLOURSPACES +#ifdef PREFER_COLOURSPACES + if (gHostColourManagementStyle != kOfxImageEffectPropColourManagementNone) { + spdlog::info("Specifying preferred colourspaces since host style={}", gHostColourManagementStyle); + if(!preferredInputSpace.empty()) { + const char* colourSpaces[] = { + preferredInputSpace.c_str(), + kOfxColourspaceLinRec2020, + kOfxColourspaceRoleSceneLinear}; + for (size_t i = 0; i < std::size(colourSpaces); i++) { + spdlog::info("Specifying preferred colourspace {} = {}", i, colourSpaces[i]); + gPropHost->propSetString(outArgs, kOfxImageClipPropPreferredColourspaces "_Source", + i, colourSpaces[i]); + } + } + + if (!preferredOutputSpace.empty()) + gPropHost->propSetString(outArgs, kOfxImageClipPropPreferredColourspaces "_Output", 0, preferredOutputSpace.c_str()); + + } else { + spdlog::info("Host does not support colour management (this example won't be very interesting)"); + } +#endif + + return kOfxStatOK; +} + +// are the settings of the effect performing an identity operation +static OfxStatus +isIdentity( OfxImageEffectHandle effect, + OfxPropertySetHandle inArgs, + OfxPropertySetHandle outArgs) +{ + return kOfxStatReplyDefault; // this example is never identity; always render +} + +//////////////////////////////////////////////////////////////////////////////// +// function called when the instance has been changed by anything +static OfxStatus +instanceChanged( OfxImageEffectHandle effect, + OfxPropertySetHandle inArgs, + OfxPropertySetHandle /*outArgs*/) +{ + // see why it changed + char *changeReason; + gPropHost->propGetString(inArgs, kOfxPropChangeReason, 0, &changeReason); + + // we are only interested in user edits + if(strcmp(changeReason, kOfxChangeUserEdited) != 0) return kOfxStatReplyDefault; + + // fetch the type of the object that changed + char *typeChanged; + gPropHost->propGetString(inArgs, kOfxPropType, 0, &typeChanged); + + // was it a clip or a param? + bool isClip = strcmp(typeChanged, kOfxTypeClip) == 0; + bool isParam = strcmp(typeChanged, kOfxTypeParameter) == 0; + + // get the name of the thing that changed + char *objChanged; + gPropHost->propGetString(inArgs, kOfxPropName, 0, &objChanged); + + // don't trap any others + return kOfxStatReplyDefault; +} + + +static std::string getClipColourspace(const OfxImageClipHandle clip) { + OfxPropertySetHandle clipProps; + gEffectHost->clipGetPropertySet(clip, &clipProps); + char *tmpStr = NULL; + OfxStatus status = gPropHost->propGetString(clipProps, kOfxImageClipPropColourspace, 0, &tmpStr); + if (status == kOfxStatOK) { + return std::string(tmpStr); + } else { + spdlog::info("Can't get clip's colourspace; propGetString returned {}", errMsg(status)); + return std::string("unspecified"); + } + +} + +static OfxStatus render( OfxImageEffectHandle instance, + OfxPropertySetHandle inArgs, + OfxPropertySetHandle /*outArgs*/) +{ + // get the render window and the time from the inArgs + OfxTime time; + OfxRectI renderWindow; + OfxStatus status = kOfxStatOK; + + gPropHost->propGetDouble(inArgs, kOfxPropTime, 0, &time); + gPropHost->propGetIntN(inArgs, kOfxImageEffectPropRenderWindow, 4, &renderWindow.x1); + + double renderScale[2]; + OfxStatus st = gPropHost->propGetDoubleN(inArgs, kOfxImageEffectPropRenderScale, 2, + renderScale); + if (st != kOfxStatOK) { + spdlog::warn("Can't get render scale! {}", errMsg(st)); + renderScale[0] = renderScale[1] = 1.0f; + } + // retrieve any instance data associated with this effect + MyInstanceData *myData = getMyInstanceData(instance); + + // property handles and members of each image + // in reality, we would put this in a struct as the C++ support layer does + OfxPropertySetHandle sourceImg = NULL, outputImg = NULL, maskImg = NULL; + int srcRowBytes, srcBitDepth, dstRowBytes, dstBitDepth, maskRowBytes = 0, maskBitDepth; + bool srcIsAlpha, dstIsAlpha, maskIsAlpha = false; + OfxRectI dstRect, srcRect, maskRect = {0, 0, 0, 0}; + void *src, *dst, *mask = NULL; + + std::string inputColourspace = getClipColourspace(myData->sourceClip); + spdlog::info("source clip colourspace = {}", inputColourspace); + std::string outputColourspace = getClipColourspace(myData->outputClip); + spdlog::info("output clip colourspace = {}", outputColourspace); + + try { + // get the source image + sourceImg = ofxuGetImage(myData->sourceClip, time, srcRowBytes, srcBitDepth, srcIsAlpha, srcRect, src); + if(sourceImg == NULL) throw OfxuNoImageException(); + + // get the output image + outputImg = ofxuGetImage(myData->outputClip, time, dstRowBytes, dstBitDepth, dstIsAlpha, dstRect, dst); + if(outputImg == NULL) throw OfxuNoImageException(); + + // see if they have the same depths and bytes and all + if(srcBitDepth != dstBitDepth || srcIsAlpha != dstIsAlpha || srcRowBytes != dstRowBytes) { + throw OfxuStatusException(kOfxStatErrImageFormat); + } + + int xdim = srcRect.x2 - srcRect.x1; + int ydim = srcRect.y2 - srcRect.y1; + // do the rendering + + int nchannels = 4; + int font_height = 50 * renderScale[0]; + spdlog::info("Rendering {}x{} image @{},{}, depth={}", xdim, ydim, srcRect.x1, srcRect.y1, dstBitDepth); + + // Just copy from source to dest, and draw some text + if (srcRowBytes < 0 && dstRowBytes < 0) + memcpy((char *)dst + dstRowBytes * (ydim-1), (char*)src + srcRowBytes * (ydim-1), -srcRowBytes * ydim); + else + memcpy(dst, src, srcRowBytes * ydim); + int ystart = ydim - 100; + drawText(fmt::format("Image: {}x{}, depth={}, scale={:.2f}x{:.2f}", xdim, ydim, dstBitDepth, renderScale[0], renderScale[1]), + 100, ystart, font_height, dst, xdim, ydim, dstBitDepth, nchannels, dstRowBytes); + ystart -= font_height; + drawText(fmt::format("input colourspace: {}", inputColourspace), + 100, ystart, font_height, dst, xdim, ydim, dstBitDepth, nchannels, dstRowBytes); + ystart -= font_height; + drawText(fmt::format("output colourspace: {}", outputColourspace), + 100, ystart, font_height, dst, xdim, ydim, dstBitDepth, nchannels, dstRowBytes); + } + catch(OfxuNoImageException &ex) { + // if we were interrupted, the failed fetch is fine, just return kOfxStatOK + // otherwise, something weird happened + if(!gEffectHost->abort(instance)) { + status = kOfxStatFailed; + } + } + catch(OfxuStatusException &ex) { + status = ex.status(); + } + + // release the data pointers + if(sourceImg) + gEffectHost->clipReleaseImage(sourceImg); + if(outputImg) + gEffectHost->clipReleaseImage(outputImg); + + return status; +} + + +// describe the plugin in context +static OfxStatus +describeInContext( OfxImageEffectHandle effect, OfxPropertySetHandle inArgs) +{ + // get the context from the inArgs handle + char *context; + gPropHost->propGetString(inArgs, kOfxImageEffectPropContext, 0, &context); + bool isGeneralContext = strcmp(context, kOfxImageEffectContextGeneral) == 0; + + OfxPropertySetHandle clipProps; + // define the single output clip in both contexts + gEffectHost->clipDefine(effect, kOfxImageEffectOutputClipName, &clipProps); + + // set the component types we can handle on out output + gPropHost->propSetString(clipProps, kOfxImageEffectPropSupportedComponents, 0, kOfxImageComponentRGBA); + + // define the single source clip in both contexts + gEffectHost->clipDefine(effect, kOfxImageEffectSimpleSourceClipName, &clipProps); + + // set the component types we can handle on our main input + gPropHost->propSetString(clipProps, kOfxImageEffectPropSupportedComponents, 0, kOfxImageComponentRGBA); + + //////////////////////////////////////////////////////////////////////////////// + // define the parameters for this context + OfxPropertySetHandle props; + OfxParamSetHandle paramSet; + gEffectHost->getParamSet(effect, ¶mSet); + + gParamHost->paramDefine(paramSet, kOfxParamTypeChoice, "input_colourspace", &props); + gPropHost->propSetInt(props, kOfxParamPropDefault, 0, 0); + gPropHost->propSetString(props, kOfxPropLabel, 0, "Preferred Input Colourspace"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 0, "Scene Linear"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 1, "Raw"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 2, "Log (Color Timing role)"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 3, "Unspecified (accepts anything)"); + + gParamHost->paramDefine(paramSet, kOfxParamTypeChoice, "output_colourspace", &props); + gPropHost->propSetInt(props, kOfxParamPropDefault, 0, 0); + gPropHost->propSetString(props, kOfxPropLabel, 0, "Output Colourspace"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 0, "ACEScg (scene linear)"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 1, "Rec2020 (linear)"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 2, "SRGB"); + gPropHost->propSetString(props, kOfxParamPropChoiceOption, 3, "ACEScct (Log)"); + + // These params affect clip preferences + OfxPropertySetHandle effectProps; + gEffectHost->getPropertySet(effect, &effectProps); + gPropHost->propSetString(effectProps, kOfxImageEffectPropClipPreferencesSlaveParam, 0, "input_colourspace"); + gPropHost->propSetString(effectProps, kOfxImageEffectPropClipPreferencesSlaveParam, 1, "output_colourspace"); + + return kOfxStatOK; +} + +//////////////////////////////////////////////////////////////////////////////// +// the plugin's description routine +static OfxStatus +describe(OfxImageEffectHandle effect) +{ + // first fetch the host APIs, this cannot be done before this call + OfxStatus stat; + if((stat = ofxuFetchHostSuites()) != kOfxStatOK) + return stat; + + // record a few host features + gPropHost->propGetInt(gHost->host, kOfxImageEffectPropSupportsMultipleClipDepths, 0, &gHostSupportsMultipleBitDepths); + char *tmpStr = NULL; + stat = gPropHost->propGetString( + gHost->host, kOfxImageEffectPropColourManagementStyle, 0, &tmpStr); + if (stat == kOfxStatOK) { + gHostColourManagementStyle = tmpStr; + spdlog::info("describe: host says its colour management style is '{}'", gHostColourManagementStyle); + } else { + spdlog::info("describe: host does not support colour management (err={})", errMsg(stat)); + gHostColourManagementStyle = kOfxImageEffectPropColourManagementNone; + } + + // get the property handle for the plugin + OfxPropertySetHandle effectProps; + gEffectHost->getPropertySet(effect, &effectProps); + + // We can render both fields in a fielded images in one hit if there is no animation + // So set the flag that allows us to do this + gPropHost->propSetInt(effectProps, kOfxImageEffectPluginPropFieldRenderTwiceAlways, 0, 0); + + // say we can support multiple pixel depths and let the clip preferences action deal with it all. + gPropHost->propSetInt(effectProps, kOfxImageEffectPropSupportsMultipleClipDepths, 0, 1); + + // set the bit depths the plugin can handle + gPropHost->propSetString(effectProps, kOfxImageEffectPropSupportedPixelDepths, 0, kOfxBitDepthByte); + gPropHost->propSetString(effectProps, kOfxImageEffectPropSupportedPixelDepths, 1, kOfxBitDepthShort); + gPropHost->propSetString(effectProps, kOfxImageEffectPropSupportedPixelDepths, 2, kOfxBitDepthFloat); + + // set some labels and the group it belongs to + gPropHost->propSetString(effectProps, kOfxPropLabel, 0, "OFX Colourspace Example"); + gPropHost->propSetString(effectProps, kOfxImageEffectPluginPropGrouping, 0, "OFX Example"); + + // define the contexts we can be used in + gPropHost->propSetString(effectProps, kOfxImageEffectPropSupportedContexts, 0, kOfxImageEffectContextFilter); + gPropHost->propSetString(effectProps, kOfxImageEffectPropSupportedContexts, 1, kOfxImageEffectContextGeneral); + + if (gHostColourManagementStyle != kOfxImageEffectPropColourManagementNone) { + // host supports colour management, either OCIO or Core (or others; see the spec). + // OCIO implies core, so here we can assume it supports Core. + // Tell it we support Core. + stat = gPropHost->propSetString(effectProps, + kOfxImageEffectPropColourManagementStyle, 0, + kOfxImageEffectPropColourManagementCore); + if (stat != kOfxStatOK) { + spdlog::error("setting kOfxImageEffectPropColourManagementStyle prop: stat={}", errMsg(stat)); + } + } + + return kOfxStatOK; +} + +// Make these actions "silent", i.e. not logged. They can be super verbose. +std::set silentActions = {"uk.co.thefoundry.FnOfxImageEffectActionGetTransform"}; + +//////////////////////////////////////////////////////////////////////////////// +// The main function +static OfxStatus +pluginMain(const char *action, const void *handle, OfxPropertySetHandle inArgs, OfxPropertySetHandle outArgs) +{ + OfxStatus stat = kOfxStatOK; + + if (silentActions.find(action) == silentActions.end()) + spdlog::info(">>> pluginMain({})", action); + try { + // cast to appropriate type + OfxImageEffectHandle effect = (OfxImageEffectHandle) handle; + + if(strcmp(action, kOfxActionDescribe) == 0) { + stat = describe(effect); + } + else if(strcmp(action, kOfxImageEffectActionDescribeInContext) == 0) { + stat = describeInContext(effect, inArgs); + } + else if(strcmp(action, kOfxActionLoad) == 0) { + stat = onLoad(); + } + else if(strcmp(action, kOfxActionUnload) == 0) { + stat = onUnLoad(); + } + else if(strcmp(action, kOfxActionCreateInstance) == 0) { + stat = createInstance(effect); + } + else if(strcmp(action, kOfxActionDestroyInstance) == 0) { + stat = destroyInstance(effect); + } + else if(strcmp(action, kOfxImageEffectActionIsIdentity) == 0) { + stat = isIdentity(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxImageEffectActionRender) == 0) { + stat = render(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxImageEffectActionGetRegionOfDefinition) == 0) { + stat = getSpatialRoD(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxImageEffectActionGetRegionsOfInterest) == 0) { + stat = getSpatialRoI(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxImageEffectActionGetClipPreferences) == 0) { + stat = getClipPreferences(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxActionInstanceChanged) == 0) { + stat = instanceChanged(effect, inArgs, outArgs); + } + else if(strcmp(action, kOfxImageEffectActionGetTimeDomain) == 0) { + stat = getTemporalDomain(effect, inArgs, outArgs); + } + } catch (const std::bad_alloc&) { + // catch memory + spdlog::error("Caught OFX Plugin Memory error"); + stat = kOfxStatErrMemory; + } catch ( const std::exception& e ) { + // standard exceptions + spdlog::error("Caught OFX Plugin error {}", e.what()); + stat = kOfxStatErrUnknown; + } catch (int err) { + spdlog::error("Caught misc error {}", err); + stat = err; + } catch ( ... ) { + // everything else + spdlog::error("Caught unknown OFX plugin error"); + stat = kOfxStatErrUnknown; + } + // other actions to take the default value + + + if (silentActions.find(action) == silentActions.end()) + spdlog::info("<<< pluginMain({}) = {}", action, errMsg(stat)); + return stat; +} + +// function to set the host structure +static void +setHostFunc(OfxHost *hostStruct) +{ + gHost = hostStruct; +} + +//////////////////////////////////////////////////////////////////////////////// +// the plugin struct +static OfxPlugin colourspacePlugin = +{ + kOfxImageEffectPluginApi, + 1, + "io.aswf.openfx.example.ColourspacePlugin", + 1, + 0, + setHostFunc, + pluginMain +}; + +// the two mandated functions +EXPORT OfxPlugin * +OfxGetPlugin(int nth) +{ + if(nth == 0) + return &colourspacePlugin; + return 0; +} + +EXPORT int +OfxGetNumberOfPlugins(void) +{ + return 1; +} + +// Called first after loading. This is optional for plugins. +EXPORT OfxStatus +OfxSetHost() +{ + return kOfxStatOK; +} + +struct SharedLibResource { + SharedLibResource() { + spdlog::set_level(spdlog::level::trace); + spdlog::trace("shlib/dll loaded"); + } + ~SharedLibResource() { + } +}; +static SharedLibResource _sharedLibResource; diff --git a/Support/Plugins/ChoiceParams/Info.plist b/Support/Plugins/ChoiceParams/Info.plist index 21152b3e..750eda64 100644 --- a/Support/Plugins/ChoiceParams/Info.plist +++ b/Support/Plugins/ChoiceParams/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion English CFBundleExecutable - basic.ofx + choiceparams.ofx CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/conanfile.py b/conanfile.py index 20bc70d7..45a46de5 100644 --- a/conanfile.py +++ b/conanfile.py @@ -29,7 +29,9 @@ class openfx(ConanFile): options = {"use_opencl": [True, False]} default_options = { "expat/*:shared": True, - "use_opencl": False + "use_opencl": False, + "spdlog/*:header_only": True, + "fmt/*:header_only": True } def requirements(self): @@ -38,6 +40,8 @@ def requirements(self): self.requires("opencl-headers/2023.12.14") self.requires("opengl/system") # for OpenGL examples self.requires("expat/2.4.8") # for HostSupport + self.requires("cimg/3.3.2") # to draw text into images + self.requires("spdlog/1.13.0") # for logging def layout(self): cmake_layout(self) diff --git a/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.h b/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.h new file mode 100644 index 00000000..c4cb01d6 --- /dev/null +++ b/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.h @@ -0,0 +1,819 @@ +#ifndef _ofx_native_v1_5_aces_v1_3_ocio_v2_3_h_ +#define _ofx_native_v1_5_aces_v1_3_ocio_v2_3_h_ + +// Copyright OpenFX and contributors to the OpenFX project. +// SPDX-License-Identifier: BSD-3-Clause + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file ofxColourspaceList.h +Contains the list of supported colourspaces. +This file was auto-generated by scripts/genColour from ofx-native-v1.5_aces-v1.3_ocio-v2.3. +*/ + +// For use with kOfxImageEffectPropColourManagementAvailableConfigs +#define kOfxConfigIdentifier "ofx-native-v1.5_aces-v1.3_ocio-v2.3" + +// Basic Colourspaces +// These colourspaces are generic names for any colourspace with the correct attributes. + +/** @brief ofx_display_hdr +Any display-referred HDR video such as Rec. 2100 HLG or PQ. +*/ +#define kOfxColourspaceOfxDisplayHdr "ofx_display_hdr" +#define kOfxColourspaceOfxDisplayHdrLabel "OFX generic display HDR" +#define kOfxColourspaceOfxDisplayHdrEncoding "hdr-video" +#define kOfxColourspaceOfxDisplayHdrIsData false +#define kOfxColourspaceOfxDisplayHdrIsBasic true +#define kOfxColourspaceOfxDisplayHdrIsCore true +#define kOfxColourspaceOfxDisplayHdrIsDisplay true + +/** @brief ofx_display_sdr +Any display-referred SDR video such as Rec. 709. +*/ +#define kOfxColourspaceOfxDisplaySdr "ofx_display_sdr" +#define kOfxColourspaceOfxDisplaySdrLabel "OFX generic display SDR" +#define kOfxColourspaceOfxDisplaySdrEncoding "sdr-video" +#define kOfxColourspaceOfxDisplaySdrIsData false +#define kOfxColourspaceOfxDisplaySdrIsBasic true +#define kOfxColourspaceOfxDisplaySdrIsCore true +#define kOfxColourspaceOfxDisplaySdrIsDisplay true + +/** @brief ofx_raw +Image values should not be treated as colour, e.g. motion vectors or masks. +*/ +#define kOfxColourspaceOfxRaw "ofx_raw" +#define kOfxColourspaceOfxRawLabel "OFX generic raw" +#define kOfxColourspaceOfxRawEncoding "" +#define kOfxColourspaceOfxRawIsData true +#define kOfxColourspaceOfxRawIsBasic true +#define kOfxColourspaceOfxRawIsCore true +#define kOfxColourspaceOfxRawIsDisplay false + +/** @brief ofx_scene_linear +Any scene-referred linear colourspace. +*/ +#define kOfxColourspaceOfxSceneLinear "ofx_scene_linear" +#define kOfxColourspaceOfxSceneLinearLabel "OFX generic scene linear" +#define kOfxColourspaceOfxSceneLinearEncoding "scene-linear" +#define kOfxColourspaceOfxSceneLinearIsData false +#define kOfxColourspaceOfxSceneLinearIsBasic true +#define kOfxColourspaceOfxSceneLinearIsCore true +#define kOfxColourspaceOfxSceneLinearIsDisplay false + +/** @brief ofx_scene_log +Any scene-referred colourspace with a log transfer function. +*/ +#define kOfxColourspaceOfxSceneLog "ofx_scene_log" +#define kOfxColourspaceOfxSceneLogLabel "OFX generic scene log" +#define kOfxColourspaceOfxSceneLogEncoding "log" +#define kOfxColourspaceOfxSceneLogIsData false +#define kOfxColourspaceOfxSceneLogIsBasic true +#define kOfxColourspaceOfxSceneLogIsCore true +#define kOfxColourspaceOfxSceneLogIsDisplay false + +// Core Colourspaces + +// srgb_display +// Convert CIE XYZ (D65 white) to sRGB (piecewise EOTF) +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 +#define kOfxColourspaceSrgbDisplay "srgb_display" +#define kOfxColourspaceSrgbDisplayLabel "sRGB - Display" +#define kOfxColourspaceSrgbDisplayEncoding "sdr-video" +#define kOfxColourspaceSrgbDisplayIsData false +#define kOfxColourspaceSrgbDisplayIsBasic false +#define kOfxColourspaceSrgbDisplayIsCore true +#define kOfxColourspaceSrgbDisplayIsDisplay true + +// displayp3_display +// Convert CIE XYZ (D65 white) to Apple Display P3 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_dim.a1.0.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_dim.a1.0.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_D60sim_dim.a1.0.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_D60sim_dim.a1.0.0 +#define kOfxColourspaceDisplayp3Display "displayp3_display" +#define kOfxColourspaceDisplayp3DisplayLabel "Display P3 - Display" +#define kOfxColourspaceDisplayp3DisplayEncoding "sdr-video" +#define kOfxColourspaceDisplayp3DisplayIsData false +#define kOfxColourspaceDisplayp3DisplayIsBasic false +#define kOfxColourspaceDisplayp3DisplayIsCore true +#define kOfxColourspaceDisplayp3DisplayIsDisplay true + +// rec1886_rec709_display +// Convert CIE XYZ (D65 white) to Rec.1886/Rec.709 (HD video) +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 +#define kOfxColourspaceRec1886Rec709Display "rec1886_rec709_display" +#define kOfxColourspaceRec1886Rec709DisplayLabel "Rec.1886 Rec.709 - Display" +#define kOfxColourspaceRec1886Rec709DisplayEncoding "sdr-video" +#define kOfxColourspaceRec1886Rec709DisplayIsData false +#define kOfxColourspaceRec1886Rec709DisplayIsBasic false +#define kOfxColourspaceRec1886Rec709DisplayIsCore true +#define kOfxColourspaceRec1886Rec709DisplayIsDisplay true + +// rec1886_rec2020_display +// Convert CIE XYZ (D65 white) to Rec.1886/Rec.2020 (UHD video) +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec2020_100nits_dim.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_P3D65limited_100nits_dim.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_Rec709limited_100nits_dim.a1.1.0 +#define kOfxColourspaceRec1886Rec2020Display "rec1886_rec2020_display" +#define kOfxColourspaceRec1886Rec2020DisplayLabel "Rec.1886 Rec.2020 - Display" +#define kOfxColourspaceRec1886Rec2020DisplayEncoding "sdr-video" +#define kOfxColourspaceRec1886Rec2020DisplayIsData false +#define kOfxColourspaceRec1886Rec2020DisplayIsBasic false +#define kOfxColourspaceRec1886Rec2020DisplayIsCore true +#define kOfxColourspaceRec1886Rec2020DisplayIsDisplay true + +// rec2100_hlg_display +// Convert CIE XYZ (D65 white) to Rec.2100-HLG, 1000 nit +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 +#define kOfxColourspaceRec2100HlgDisplay "rec2100_hlg_display" +#define kOfxColourspaceRec2100HlgDisplayLabel "Rec.2100-HLG - Display" +#define kOfxColourspaceRec2100HlgDisplayEncoding "hdr-video" +#define kOfxColourspaceRec2100HlgDisplayIsData false +#define kOfxColourspaceRec2100HlgDisplayIsBasic false +#define kOfxColourspaceRec2100HlgDisplayIsCore true +#define kOfxColourspaceRec2100HlgDisplayIsDisplay true + +// rec2100_pq_display +// Convert CIE XYZ (D65 white) to Rec.2100-PQ +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 +#define kOfxColourspaceRec2100PqDisplay "rec2100_pq_display" +#define kOfxColourspaceRec2100PqDisplayLabel "Rec.2100-PQ - Display" +#define kOfxColourspaceRec2100PqDisplayEncoding "hdr-video" +#define kOfxColourspaceRec2100PqDisplayIsData false +#define kOfxColourspaceRec2100PqDisplayIsBasic false +#define kOfxColourspaceRec2100PqDisplayIsCore true +#define kOfxColourspaceRec2100PqDisplayIsDisplay true + +// st2084_p3d65_display +// Convert CIE XYZ (D65 white) to ST-2084 (PQ), P3-D65 primaries +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 +#define kOfxColourspaceSt2084P3d65Display "st2084_p3d65_display" +#define kOfxColourspaceSt2084P3d65DisplayLabel "ST2084-P3-D65 - Display" +#define kOfxColourspaceSt2084P3d65DisplayEncoding "hdr-video" +#define kOfxColourspaceSt2084P3d65DisplayIsData false +#define kOfxColourspaceSt2084P3d65DisplayIsBasic false +#define kOfxColourspaceSt2084P3d65DisplayIsCore true +#define kOfxColourspaceSt2084P3d65DisplayIsDisplay true + +// p3d65_display +// Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D65 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_48nits.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_48nits.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_Rec709limited_48nits.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_D60sim_48nits.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_D60sim_48nits.a1.1.0 +#define kOfxColourspaceP3d65Display "p3d65_display" +#define kOfxColourspaceP3d65DisplayLabel "P3-D65 - Display" +#define kOfxColourspaceP3d65DisplayEncoding "sdr-video" +#define kOfxColourspaceP3d65DisplayIsData false +#define kOfxColourspaceP3d65DisplayIsBasic false +#define kOfxColourspaceP3d65DisplayIsCore true +#define kOfxColourspaceP3d65DisplayIsDisplay true + +// ACES2065-1 +// The "Academy Color Encoding System" reference colorspace. +#define kOfxColourspaceACES20651 "ACES2065-1" +#define kOfxColourspaceACES20651Label "ACES2065-1" +#define kOfxColourspaceACES20651Encoding "scene-linear" +#define kOfxColourspaceACES20651IsData false +#define kOfxColourspaceACES20651IsBasic false +#define kOfxColourspaceACES20651IsCore true +#define kOfxColourspaceACES20651IsDisplay false + +// ACEScc +// Convert ACEScc to ACES2065-1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScc_to_ACES.a1.0.3 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScc.a1.0.3 +#define kOfxColourspaceACEScc "ACEScc" +#define kOfxColourspaceACESccLabel "ACEScc" +#define kOfxColourspaceACESccEncoding "log" +#define kOfxColourspaceACESccIsData false +#define kOfxColourspaceACESccIsBasic false +#define kOfxColourspaceACESccIsCore true +#define kOfxColourspaceACESccIsDisplay false + +// ACEScct +// Convert ACEScct to ACES2065-1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScct_to_ACES.a1.0.3 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScct.a1.0.3 +#define kOfxColourspaceACEScct "ACEScct" +#define kOfxColourspaceACEScctLabel "ACEScct" +#define kOfxColourspaceACEScctEncoding "log" +#define kOfxColourspaceACEScctIsData false +#define kOfxColourspaceACEScctIsBasic false +#define kOfxColourspaceACEScctIsCore true +#define kOfxColourspaceACEScctIsDisplay false + +// ACEScg +// Convert ACEScg to ACES2065-1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScg_to_ACES.a1.0.3 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScg.a1.0.3 +#define kOfxColourspaceACEScg "ACEScg" +#define kOfxColourspaceACEScgLabel "ACEScg" +#define kOfxColourspaceACEScgEncoding "scene-linear" +#define kOfxColourspaceACEScgIsData false +#define kOfxColourspaceACEScgIsBasic false +#define kOfxColourspaceACEScgIsCore true +#define kOfxColourspaceACEScgIsDisplay false + +// lin_p3d65 +// Convert ACES2065-1 to linear P3 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_P3-D65:1.0 +#define kOfxColourspaceLinP3d65 "lin_p3d65" +#define kOfxColourspaceLinP3d65Label "Linear P3-D65" +#define kOfxColourspaceLinP3d65Encoding "scene-linear" +#define kOfxColourspaceLinP3d65IsData false +#define kOfxColourspaceLinP3d65IsBasic false +#define kOfxColourspaceLinP3d65IsCore true +#define kOfxColourspaceLinP3d65IsDisplay false + +// lin_rec2020 +// Convert ACES2065-1 to linear Rec.2020 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_Rec2020:1.0 +#define kOfxColourspaceLinRec2020 "lin_rec2020" +#define kOfxColourspaceLinRec2020Label "Linear Rec.2020" +#define kOfxColourspaceLinRec2020Encoding "scene-linear" +#define kOfxColourspaceLinRec2020IsData false +#define kOfxColourspaceLinRec2020IsBasic false +#define kOfxColourspaceLinRec2020IsCore true +#define kOfxColourspaceLinRec2020IsDisplay false + +// lin_rec709_srgb +// Convert ACES2065-1 to linear Rec.709 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_Rec709:1.0 +#define kOfxColourspaceLinRec709Srgb "lin_rec709_srgb" +#define kOfxColourspaceLinRec709SrgbLabel "Linear Rec.709 (sRGB)" +#define kOfxColourspaceLinRec709SrgbEncoding "scene-linear" +#define kOfxColourspaceLinRec709SrgbIsData false +#define kOfxColourspaceLinRec709SrgbIsBasic false +#define kOfxColourspaceLinRec709SrgbIsCore true +#define kOfxColourspaceLinRec709SrgbIsDisplay false + +// g18_rec709_tx +// Convert ACES2065-1 to 1.8 gamma-corrected Rec.709 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma1.8_Rec709-Texture:1.0 +#define kOfxColourspaceG18Rec709Tx "g18_rec709_tx" +#define kOfxColourspaceG18Rec709TxLabel "Gamma 1.8 Rec.709 - Texture" +#define kOfxColourspaceG18Rec709TxEncoding "sdr-video" +#define kOfxColourspaceG18Rec709TxIsData false +#define kOfxColourspaceG18Rec709TxIsBasic false +#define kOfxColourspaceG18Rec709TxIsCore true +#define kOfxColourspaceG18Rec709TxIsDisplay false + +// g22_ap1_tx +// Convert ACES2065-1 to 2.2 gamma-corrected AP1 primaries, ACES ~=D60 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.2_AP1-Texture:1.0 +#define kOfxColourspaceG22Ap1Tx "g22_ap1_tx" +#define kOfxColourspaceG22Ap1TxLabel "Gamma 2.2 AP1 - Texture" +#define kOfxColourspaceG22Ap1TxEncoding "sdr-video" +#define kOfxColourspaceG22Ap1TxIsData false +#define kOfxColourspaceG22Ap1TxIsBasic false +#define kOfxColourspaceG22Ap1TxIsCore true +#define kOfxColourspaceG22Ap1TxIsDisplay false + +// g22_rec709_tx +// Convert ACES2065-1 to 2.2 gamma-corrected Rec.709 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.2_Rec709-Texture:1.0 +#define kOfxColourspaceG22Rec709Tx "g22_rec709_tx" +#define kOfxColourspaceG22Rec709TxLabel "Gamma 2.2 Rec.709 - Texture" +#define kOfxColourspaceG22Rec709TxEncoding "sdr-video" +#define kOfxColourspaceG22Rec709TxIsData false +#define kOfxColourspaceG22Rec709TxIsBasic false +#define kOfxColourspaceG22Rec709TxIsCore true +#define kOfxColourspaceG22Rec709TxIsDisplay false + +// g24_rec709_tx +// Convert ACES2065-1 to 2.4 gamma-corrected Rec.709 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.4_Rec709-Texture:1.0 +#define kOfxColourspaceG24Rec709Tx "g24_rec709_tx" +#define kOfxColourspaceG24Rec709TxLabel "Gamma 2.4 Rec.709 - Texture" +#define kOfxColourspaceG24Rec709TxEncoding "sdr-video" +#define kOfxColourspaceG24Rec709TxIsData false +#define kOfxColourspaceG24Rec709TxIsBasic false +#define kOfxColourspaceG24Rec709TxIsCore true +#define kOfxColourspaceG24Rec709TxIsDisplay false + +// srgb_encoded_ap1_tx +// Convert ACES2065-1 to sRGB Encoded AP1 primaries, ACES ~=D60 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB_Encoded_AP1-Texture:1.0 +#define kOfxColourspaceSrgbEncodedAp1Tx "srgb_encoded_ap1_tx" +#define kOfxColourspaceSrgbEncodedAp1TxLabel "sRGB Encoded AP1 - Texture" +#define kOfxColourspaceSrgbEncodedAp1TxEncoding "sdr-video" +#define kOfxColourspaceSrgbEncodedAp1TxIsData false +#define kOfxColourspaceSrgbEncodedAp1TxIsBasic false +#define kOfxColourspaceSrgbEncodedAp1TxIsCore true +#define kOfxColourspaceSrgbEncodedAp1TxIsDisplay false + +// srgb_tx +// Convert ACES2065-1 to sRGB +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB-Texture:1.0 +#define kOfxColourspaceSrgbTx "srgb_tx" +#define kOfxColourspaceSrgbTxLabel "sRGB - Texture" +#define kOfxColourspaceSrgbTxEncoding "sdr-video" +#define kOfxColourspaceSrgbTxIsData false +#define kOfxColourspaceSrgbTxIsBasic false +#define kOfxColourspaceSrgbTxIsCore true +#define kOfxColourspaceSrgbTxIsDisplay false + +// Raw +// The utility "Raw" colorspace. +#define kOfxColourspaceRaw "Raw" +#define kOfxColourspaceRawLabel "Raw" +#define kOfxColourspaceRawEncoding "" +#define kOfxColourspaceRawIsData true +#define kOfxColourspaceRawIsBasic false +#define kOfxColourspaceRawIsCore true +#define kOfxColourspaceRawIsDisplay false + +// Non-core Colourspaces + +// CIE-XYZ-D65 +// The "CIE XYZ (D65)" display connection colorspace. +#define kOfxColourspaceCIEXYZD65 "CIE-XYZ-D65" +#define kOfxColourspaceCIEXYZD65Label "CIE-XYZ-D65" +#define kOfxColourspaceCIEXYZD65Encoding "" +#define kOfxColourspaceCIEXYZD65IsData false +#define kOfxColourspaceCIEXYZD65IsBasic false +#define kOfxColourspaceCIEXYZD65IsCore false +#define kOfxColourspaceCIEXYZD65IsDisplay true + +// p3d60_display +// Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D60 (Bradford adaptation) +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D60_48nits.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D60_48nits.a1.0.3 +#define kOfxColourspaceP3d60Display "p3d60_display" +#define kOfxColourspaceP3d60DisplayLabel "P3-D60 - Display" +#define kOfxColourspaceP3d60DisplayEncoding "sdr-video" +#define kOfxColourspaceP3d60DisplayIsData false +#define kOfxColourspaceP3d60DisplayIsBasic false +#define kOfxColourspaceP3d60DisplayIsCore false +#define kOfxColourspaceP3d60DisplayIsDisplay true + +// p3_dci_display +// Convert CIE XYZ (D65 white) to Gamma 2.6, P3-DCI (DCI white with Bradford adaptation) +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_48nits.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_48nits.a1.0.3 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_D65sim_48nits.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_D65sim_48nits.a1.1.0 +#define kOfxColourspaceP3DciDisplay "p3_dci_display" +#define kOfxColourspaceP3DciDisplayLabel "P3-DCI - Display" +#define kOfxColourspaceP3DciDisplayEncoding "sdr-video" +#define kOfxColourspaceP3DciDisplayIsData false +#define kOfxColourspaceP3DciDisplayIsBasic false +#define kOfxColourspaceP3DciDisplayIsCore false +#define kOfxColourspaceP3DciDisplayIsDisplay true + +// ADX10 +// Convert ADX10 to ACES2065-1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ADX10_to_ACES.a1.0.3 +#define kOfxColourspaceADX10 "ADX10" +#define kOfxColourspaceADX10Label "ADX10" +#define kOfxColourspaceADX10Encoding "log" +#define kOfxColourspaceADX10IsData false +#define kOfxColourspaceADX10IsBasic false +#define kOfxColourspaceADX10IsCore false +#define kOfxColourspaceADX10IsDisplay false + +// ADX16 +// Convert ADX16 to ACES2065-1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ADX16_to_ACES.a1.0.3 +#define kOfxColourspaceADX16 "ADX16" +#define kOfxColourspaceADX16Label "ADX16" +#define kOfxColourspaceADX16Encoding "log" +#define kOfxColourspaceADX16IsData false +#define kOfxColourspaceADX16IsBasic false +#define kOfxColourspaceADX16IsCore false +#define kOfxColourspaceADX16IsDisplay false + +// lin_arri_wide_gamut_3 +// Convert Linear ARRI Wide Gamut 3 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:Linear_ARRI_Wide_Gamut_3_to_ACES2065-1:1.0 +#define kOfxColourspaceLinArriWideGamut3 "lin_arri_wide_gamut_3" +#define kOfxColourspaceLinArriWideGamut3Label "Linear ARRI Wide Gamut 3" +#define kOfxColourspaceLinArriWideGamut3Encoding "scene-linear" +#define kOfxColourspaceLinArriWideGamut3IsData false +#define kOfxColourspaceLinArriWideGamut3IsBasic false +#define kOfxColourspaceLinArriWideGamut3IsCore false +#define kOfxColourspaceLinArriWideGamut3IsDisplay false + +// arri_logc3_ei800 +// Convert ARRI LogC3 (EI800) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC3_EI800_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.ARRI.Alexa-v3-logC-EI800.a1.v2 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_LogC_EI800_AWG.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.LogC_EI800_AWG_to_ACES.a1.1.0 +#define kOfxColourspaceArriLogc3Ei800 "arri_logc3_ei800" +#define kOfxColourspaceArriLogc3Ei800Label "ARRI LogC3 (EI800)" +#define kOfxColourspaceArriLogc3Ei800Encoding "log" +#define kOfxColourspaceArriLogc3Ei800IsData false +#define kOfxColourspaceArriLogc3Ei800IsBasic false +#define kOfxColourspaceArriLogc3Ei800IsCore false +#define kOfxColourspaceArriLogc3Ei800IsDisplay false + +// lin_arri_wide_gamut_4 +// Convert Linear ARRI Wide Gamut 4 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:Linear_ARRI_Wide_Gamut_4_to_ACES2065-1:1.0 +#define kOfxColourspaceLinArriWideGamut4 "lin_arri_wide_gamut_4" +#define kOfxColourspaceLinArriWideGamut4Label "Linear ARRI Wide Gamut 4" +#define kOfxColourspaceLinArriWideGamut4Encoding "scene-linear" +#define kOfxColourspaceLinArriWideGamut4IsData false +#define kOfxColourspaceLinArriWideGamut4IsBasic false +#define kOfxColourspaceLinArriWideGamut4IsCore false +#define kOfxColourspaceLinArriWideGamut4IsDisplay false + +// arri_logc4 +// Convert ARRI LogC4 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC4_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.ARRI.ARRI-LogC4.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.LogC4_to_ACES.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_LogC4.a1.1.0 +#define kOfxColourspaceArriLogc4 "arri_logc4" +#define kOfxColourspaceArriLogc4Label "ARRI LogC4" +#define kOfxColourspaceArriLogc4Encoding "log" +#define kOfxColourspaceArriLogc4IsData false +#define kOfxColourspaceArriLogc4IsBasic false +#define kOfxColourspaceArriLogc4IsCore false +#define kOfxColourspaceArriLogc4IsDisplay false + +// bmdfilm_widegamut_gen5 +// Convert Blackmagic Film Wide Gamut (Gen 5) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:BMDFilm_WideGamut_Gen5_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.BlackmagicDesign.BMDFilm_WideGamut_Gen5.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_BMDFilm_WideGamut_Gen5.a1.v1 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.BMDFilm_WideGamut_Gen5_to_ACES.a1.v1 +#define kOfxColourspaceBmdfilmWidegamutGen5 "bmdfilm_widegamut_gen5" +#define kOfxColourspaceBmdfilmWidegamutGen5Label "BMDFilm WideGamut Gen5" +#define kOfxColourspaceBmdfilmWidegamutGen5Encoding "log" +#define kOfxColourspaceBmdfilmWidegamutGen5IsData false +#define kOfxColourspaceBmdfilmWidegamutGen5IsBasic false +#define kOfxColourspaceBmdfilmWidegamutGen5IsCore false +#define kOfxColourspaceBmdfilmWidegamutGen5IsDisplay false + +// davinci_intermediate_widegamut +// Convert DaVinci Intermediate Wide Gamut to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:DaVinci_Intermediate_WideGamut_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.DaVinci_Intermediate_WideGamut_to_ACES.a1.v1 +#define kOfxColourspaceDavinciIntermediateWidegamut "davinci_intermediate_widegamut" +#define kOfxColourspaceDavinciIntermediateWidegamutLabel "DaVinci Intermediate WideGamut" +#define kOfxColourspaceDavinciIntermediateWidegamutEncoding "log" +#define kOfxColourspaceDavinciIntermediateWidegamutIsData false +#define kOfxColourspaceDavinciIntermediateWidegamutIsBasic false +#define kOfxColourspaceDavinciIntermediateWidegamutIsCore false +#define kOfxColourspaceDavinciIntermediateWidegamutIsDisplay false + +// lin_bmd_widegamut_gen5 +// Convert Linear Blackmagic Wide Gamut (Gen 5) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:Linear_BMD_WideGamut_Gen5_to_ACES2065-1:1.0 +#define kOfxColourspaceLinBmdWidegamutGen5 "lin_bmd_widegamut_gen5" +#define kOfxColourspaceLinBmdWidegamutGen5Label "Linear BMD WideGamut Gen5" +#define kOfxColourspaceLinBmdWidegamutGen5Encoding "scene-linear" +#define kOfxColourspaceLinBmdWidegamutGen5IsData false +#define kOfxColourspaceLinBmdWidegamutGen5IsBasic false +#define kOfxColourspaceLinBmdWidegamutGen5IsCore false +#define kOfxColourspaceLinBmdWidegamutGen5IsDisplay false + +// lin_davinci_widegamut +// Convert Linear DaVinci Wide Gamut to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:Linear_DaVinci_WideGamut_to_ACES2065-1:1.0 +#define kOfxColourspaceLinDavinciWidegamut "lin_davinci_widegamut" +#define kOfxColourspaceLinDavinciWidegamutLabel "Linear DaVinci WideGamut" +#define kOfxColourspaceLinDavinciWidegamutEncoding "scene-linear" +#define kOfxColourspaceLinDavinciWidegamutIsData false +#define kOfxColourspaceLinDavinciWidegamutIsBasic false +#define kOfxColourspaceLinDavinciWidegamutIsCore false +#define kOfxColourspaceLinDavinciWidegamutIsDisplay false + +// canonlog2_cinemagamut_d55 +// Convert Canon Log 2 Cinema Gamut (Daylight) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CanonLog2_CinemaGamut-D55_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog2_CGamut_to_ACES.a1.1.0 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_CLog2_CGamut.a1.1.0 +#define kOfxColourspaceCanonlog2CinemagamutD55 "canonlog2_cinemagamut_d55" +#define kOfxColourspaceCanonlog2CinemagamutD55Label "CanonLog2 CinemaGamut D55" +#define kOfxColourspaceCanonlog2CinemagamutD55Encoding "log" +#define kOfxColourspaceCanonlog2CinemagamutD55IsData false +#define kOfxColourspaceCanonlog2CinemagamutD55IsBasic false +#define kOfxColourspaceCanonlog2CinemagamutD55IsCore false +#define kOfxColourspaceCanonlog2CinemagamutD55IsDisplay false + +// canonlog3_cinemagamut_d55 +// Convert Canon Log 3 Cinema Gamut (Daylight) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CanonLog3_CinemaGamut-D55_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog3_CGamut_to_ACES.a1.1.0 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_CLog3_CGamut.a1.1.0 +#define kOfxColourspaceCanonlog3CinemagamutD55 "canonlog3_cinemagamut_d55" +#define kOfxColourspaceCanonlog3CinemagamutD55Label "CanonLog3 CinemaGamut D55" +#define kOfxColourspaceCanonlog3CinemagamutD55Encoding "log" +#define kOfxColourspaceCanonlog3CinemagamutD55IsData false +#define kOfxColourspaceCanonlog3CinemagamutD55IsBasic false +#define kOfxColourspaceCanonlog3CinemagamutD55IsCore false +#define kOfxColourspaceCanonlog3CinemagamutD55IsDisplay false + +// lin_cinemagamut_d55 +// Convert Linear Canon Cinema Gamut (Daylight) to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:Linear-CinemaGamut-D55_to_ACES2065-1:1.0 +#define kOfxColourspaceLinCinemagamutD55 "lin_cinemagamut_d55" +#define kOfxColourspaceLinCinemagamutD55Label "Linear CinemaGamut D55" +#define kOfxColourspaceLinCinemagamutD55Encoding "scene-linear" +#define kOfxColourspaceLinCinemagamutD55IsData false +#define kOfxColourspaceLinCinemagamutD55IsBasic false +#define kOfxColourspaceLinCinemagamutD55IsCore false +#define kOfxColourspaceLinCinemagamutD55IsDisplay false + +// lin_vgamut +// Convert Linear Panasonic V-Gamut to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Panasonic:Input:Linear_VGamut_to_ACES2065-1:1.0 +#define kOfxColourspaceLinVgamut "lin_vgamut" +#define kOfxColourspaceLinVgamutLabel "Linear V-Gamut" +#define kOfxColourspaceLinVgamutEncoding "scene-linear" +#define kOfxColourspaceLinVgamutIsData false +#define kOfxColourspaceLinVgamutIsBasic false +#define kOfxColourspaceLinVgamutIsCore false +#define kOfxColourspaceLinVgamutIsDisplay false + +// vlog_vgamut +// Convert Panasonic V-Log - V-Gamut to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Panasonic:Input:VLog_VGamut_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.VLog_VGamut_to_ACES.a1.1.0 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_VLog_VGamut.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Panasonic.VLog_VGamut.a1.v1 +#define kOfxColourspaceVlogVgamut "vlog_vgamut" +#define kOfxColourspaceVlogVgamutLabel "V-Log V-Gamut" +#define kOfxColourspaceVlogVgamutEncoding "log" +#define kOfxColourspaceVlogVgamutIsData false +#define kOfxColourspaceVlogVgamutIsBasic false +#define kOfxColourspaceVlogVgamutIsCore false +#define kOfxColourspaceVlogVgamutIsDisplay false + +// lin_redwidegamutrgb +// Convert Linear REDWideGamutRGB to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:RED:Input:Linear_REDWideGamutRGB_to_ACES2065-1:1.0 +#define kOfxColourspaceLinRedwidegamutrgb "lin_redwidegamutrgb" +#define kOfxColourspaceLinRedwidegamutrgbLabel "Linear REDWideGamutRGB" +#define kOfxColourspaceLinRedwidegamutrgbEncoding "scene-linear" +#define kOfxColourspaceLinRedwidegamutrgbIsData false +#define kOfxColourspaceLinRedwidegamutrgbIsBasic false +#define kOfxColourspaceLinRedwidegamutrgbIsCore false +#define kOfxColourspaceLinRedwidegamutrgbIsDisplay false + +// log3g10_redwidegamutrgb +// Convert RED Log3G10 REDWideGamutRGB to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:RED:Input:Log3G10_REDWideGamutRGB_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.RED.Log3G10_REDWideGamutRGB.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_Log3G10_RWG.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.Log3G10_RWG_to_ACES.a1.1.0 +#define kOfxColourspaceLog3g10Redwidegamutrgb "log3g10_redwidegamutrgb" +#define kOfxColourspaceLog3g10RedwidegamutrgbLabel "Log3G10 REDWideGamutRGB" +#define kOfxColourspaceLog3g10RedwidegamutrgbEncoding "log" +#define kOfxColourspaceLog3g10RedwidegamutrgbIsData false +#define kOfxColourspaceLog3g10RedwidegamutrgbIsBasic false +#define kOfxColourspaceLog3g10RedwidegamutrgbIsCore false +#define kOfxColourspaceLog3g10RedwidegamutrgbIsDisplay false + +// lin_sgamut3 +// Convert Linear S-Gamut3 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_SGamut3_to_ACES2065-1:1.0 +#define kOfxColourspaceLinSgamut3 "lin_sgamut3" +#define kOfxColourspaceLinSgamut3Label "Linear S-Gamut3" +#define kOfxColourspaceLinSgamut3Encoding "scene-linear" +#define kOfxColourspaceLinSgamut3IsData false +#define kOfxColourspaceLinSgamut3IsBasic false +#define kOfxColourspaceLinSgamut3IsCore false +#define kOfxColourspaceLinSgamut3IsDisplay false + +// lin_sgamut3cine +// Convert Linear S-Gamut3.Cine to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_SGamut3Cine_to_ACES2065-1:1.0 +#define kOfxColourspaceLinSgamut3cine "lin_sgamut3cine" +#define kOfxColourspaceLinSgamut3cineLabel "Linear S-Gamut3.Cine" +#define kOfxColourspaceLinSgamut3cineEncoding "scene-linear" +#define kOfxColourspaceLinSgamut3cineIsData false +#define kOfxColourspaceLinSgamut3cineIsBasic false +#define kOfxColourspaceLinSgamut3cineIsCore false +#define kOfxColourspaceLinSgamut3cineIsDisplay false + +// lin_venice_sgamut3 +// Convert Linear Venice S-Gamut3 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_Venice_SGamut3_to_ACES2065-1:1.0 +#define kOfxColourspaceLinVeniceSgamut3 "lin_venice_sgamut3" +#define kOfxColourspaceLinVeniceSgamut3Label "Linear Venice S-Gamut3" +#define kOfxColourspaceLinVeniceSgamut3Encoding "scene-linear" +#define kOfxColourspaceLinVeniceSgamut3IsData false +#define kOfxColourspaceLinVeniceSgamut3IsBasic false +#define kOfxColourspaceLinVeniceSgamut3IsCore false +#define kOfxColourspaceLinVeniceSgamut3IsDisplay false + +// lin_venice_sgamut3cine +// Convert Linear Venice S-Gamut3.Cine to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_Venice_SGamut3Cine_to_ACES2065-1:1.0 +#define kOfxColourspaceLinVeniceSgamut3cine "lin_venice_sgamut3cine" +#define kOfxColourspaceLinVeniceSgamut3cineLabel "Linear Venice S-Gamut3.Cine" +#define kOfxColourspaceLinVeniceSgamut3cineEncoding "scene-linear" +#define kOfxColourspaceLinVeniceSgamut3cineIsData false +#define kOfxColourspaceLinVeniceSgamut3cineIsBasic false +#define kOfxColourspaceLinVeniceSgamut3cineIsCore false +#define kOfxColourspaceLinVeniceSgamut3cineIsDisplay false + +// slog3_sgamut3 +// Convert Sony S-Log3 S-Gamut3 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_SGamut3_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.SLog3_SGamut3.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_SGamut3.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_SGamut3_to_ACES.a1.1.0 +#define kOfxColourspaceSlog3Sgamut3 "slog3_sgamut3" +#define kOfxColourspaceSlog3Sgamut3Label "S-Log3 S-Gamut3" +#define kOfxColourspaceSlog3Sgamut3Encoding "log" +#define kOfxColourspaceSlog3Sgamut3IsData false +#define kOfxColourspaceSlog3Sgamut3IsBasic false +#define kOfxColourspaceSlog3Sgamut3IsCore false +#define kOfxColourspaceSlog3Sgamut3IsDisplay false + +// slog3_sgamut3cine +// Convert Sony S-Log3 S-Gamut3.Cine to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_SGamut3Cine_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.SLog3_SGamut3Cine.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_SGamut3Cine.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_SGamut3Cine_to_ACES.a1.1.0 +#define kOfxColourspaceSlog3Sgamut3cine "slog3_sgamut3cine" +#define kOfxColourspaceSlog3Sgamut3cineLabel "S-Log3 S-Gamut3.Cine" +#define kOfxColourspaceSlog3Sgamut3cineEncoding "log" +#define kOfxColourspaceSlog3Sgamut3cineIsData false +#define kOfxColourspaceSlog3Sgamut3cineIsBasic false +#define kOfxColourspaceSlog3Sgamut3cineIsCore false +#define kOfxColourspaceSlog3Sgamut3cineIsDisplay false + +// slog3_venice_sgamut3 +// Convert Sony S-Log3 Venice S-Gamut3 to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_Venice_SGamut3_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.Venice_SLog3_SGamut3.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_Venice_SGamut3.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3_to_ACES.a1.1.0 +#define kOfxColourspaceSlog3VeniceSgamut3 "slog3_venice_sgamut3" +#define kOfxColourspaceSlog3VeniceSgamut3Label "S-Log3 Venice S-Gamut3" +#define kOfxColourspaceSlog3VeniceSgamut3Encoding "log" +#define kOfxColourspaceSlog3VeniceSgamut3IsData false +#define kOfxColourspaceSlog3VeniceSgamut3IsBasic false +#define kOfxColourspaceSlog3VeniceSgamut3IsCore false +#define kOfxColourspaceSlog3VeniceSgamut3IsDisplay false + +// slog3_venice_sgamut3cine +// Convert Sony S-Log3 Venice S-Gamut3.Cine to ACES2065-1 +// CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_Venice_SGamut3Cine_to_ACES2065-1:1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.Venice_SLog3_SGamut3Cine.a1.v1 +// AMF Components +// -------------- +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_Venice_SGamut3Cine.a1.1.0 +// ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3Cine_to_ACES.a1.1.0 +#define kOfxColourspaceSlog3VeniceSgamut3cine "slog3_venice_sgamut3cine" +#define kOfxColourspaceSlog3VeniceSgamut3cineLabel "S-Log3 Venice S-Gamut3.Cine" +#define kOfxColourspaceSlog3VeniceSgamut3cineEncoding "log" +#define kOfxColourspaceSlog3VeniceSgamut3cineIsData false +#define kOfxColourspaceSlog3VeniceSgamut3cineIsBasic false +#define kOfxColourspaceSlog3VeniceSgamut3cineIsCore false +#define kOfxColourspaceSlog3VeniceSgamut3cineIsDisplay false + +// camera_rec709 +// Convert ACES2065-1 to Rec.709 camera OETF Rec.709 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:ITU:Utility:AP0_to_Camera_Rec709:1.0 +#define kOfxColourspaceCameraRec709 "camera_rec709" +#define kOfxColourspaceCameraRec709Label "Camera Rec.709" +#define kOfxColourspaceCameraRec709Encoding "sdr-video" +#define kOfxColourspaceCameraRec709IsData false +#define kOfxColourspaceCameraRec709IsBasic false +#define kOfxColourspaceCameraRec709IsCore false +#define kOfxColourspaceCameraRec709IsDisplay false + +// srgb_encoded_p3d65_tx +// Convert ACES2065-1 to sRGB Encoded P3-D65 primaries, D65 white point +// CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB_Encoded_P3-D65-Texture:1.0 +#define kOfxColourspaceSrgbEncodedP3d65Tx "srgb_encoded_p3d65_tx" +#define kOfxColourspaceSrgbEncodedP3d65TxLabel "sRGB Encoded P3-D65 - Texture" +#define kOfxColourspaceSrgbEncodedP3d65TxEncoding "sdr-video" +#define kOfxColourspaceSrgbEncodedP3d65TxIsData false +#define kOfxColourspaceSrgbEncodedP3d65TxIsBasic false +#define kOfxColourspaceSrgbEncodedP3d65TxIsCore false +#define kOfxColourspaceSrgbEncodedP3d65TxIsDisplay false + +/** @brief Roles - standard names used for compatibility with common OCIO configs. +*/ + +/** @brief aces_interchange +Guaranteed to be ACES2065-1. +*/ +#define kOfxColourspaceRoleAcesInterchange "aces_interchange" + +/** @brief cie_xyz_d65_interchange +CIE XYZ colorimetry with the neutral axis at D65. +*/ +#define kOfxColourspaceRoleCieXyzD65Interchange "cie_xyz_d65_interchange" + +/** @brief color_picking +The colourspace to use for colour pickers, typically a display colourspace. +*/ +#define kOfxColourspaceRoleColorPicking "color_picking" + +/** @brief color_timing +A colourspace suitable for colour grading, typically a log colourspace. +*/ +#define kOfxColourspaceRoleColorTiming "color_timing" + +/** @brief compositing_log +Any scene-referred colourspace with a log transfer function. +*/ +#define kOfxColourspaceRoleCompositingLog "compositing_log" + +/** @brief data +Image values should not be treated as colour, e.g. motion vectors or masks. Mapped to the raw colourspace. +*/ +#define kOfxColourspaceRoleData "data" + +/** @brief matte_paint +A colourspace suitable for matte painting. +*/ +#define kOfxColourspaceRoleMattePaint "matte_paint" + +/** @brief scene_linear +Any scene-referred linear colourspace. +*/ +#define kOfxColourspaceRoleSceneLinear "scene_linear" + +/** @brief texture_paint +A colourspace suitable for texture painting, typically sRGB. +*/ +#define kOfxColourspaceRoleTexturePaint "texture_paint" + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.ocio b/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.ocio new file mode 100644 index 00000000..d071cf66 --- /dev/null +++ b/include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.ocio @@ -0,0 +1,1549 @@ +ocio_profile_version: 2.3 + +environment: + {} +search_path: "" +strictparsing: true +luma: [0.2126, 0.7152, 0.0722] +name: ofx-native-v1.5_aces-v1.3_ocio-v2.3 +description: | + OpenFX 1.5 Native Mode Config + Based on: Academy Color Encoding System - Studio Config [COLORSPACES v2.1.0] [ACES v1.3] [OCIO v2.3] + ------------------------------------------------------------------------------------------ + + This "OpenColorIO" config is geared toward studios requiring a config that includes a wide variety of camera colorspaces, displays and looks. + +roles: + aces_interchange: ACES2065-1 + cie_xyz_d65_interchange: CIE-XYZ-D65 + color_picking: sRGB - Texture + color_timing: ACEScct + compositing_log: ACEScct + data: Raw + matte_paint: ACEScct + scene_linear: ACEScg + texture_paint: sRGB - Texture + +file_rules: + - ! {name: Default, colorspace: ACES2065-1} + +shared_views: + - ! {name: ACES 1.0 - SDR Video, view_transform: ACES 1.0 - SDR Video, display_colorspace: } + - ! {name: ACES 1.0 - SDR Video (D60 sim on D65), view_transform: ACES 1.0 - SDR Video (D60 sim on D65), display_colorspace: } + - ! {name: ACES 1.1 - SDR Video (P3 lim), view_transform: ACES 1.1 - SDR Video (P3 lim), display_colorspace: } + - ! {name: ACES 1.1 - SDR Video (Rec.709 lim), view_transform: ACES 1.1 - SDR Video (Rec.709 lim), display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)", view_transform: "ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)", display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim)", view_transform: "ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim)", display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim)", view_transform: "ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim)", display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (1000 nits & P3 lim)", view_transform: "ACES 1.1 - HDR Video (1000 nits & P3 lim)", display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (2000 nits & P3 lim)", view_transform: "ACES 1.1 - HDR Video (2000 nits & P3 lim)", display_colorspace: } + - ! {name: "ACES 1.1 - HDR Video (4000 nits & P3 lim)", view_transform: "ACES 1.1 - HDR Video (4000 nits & P3 lim)", display_colorspace: } + - ! {name: ACES 1.0 - SDR Cinema, view_transform: ACES 1.0 - SDR Cinema, display_colorspace: } + - ! {name: ACES 1.1 - SDR Cinema (Rec.709 lim), view_transform: ACES 1.1 - SDR Cinema (Rec.709 lim), display_colorspace: } + - ! {name: ACES 1.0 - SDR Cinema (D60 sim on DCI), view_transform: ACES 1.0 - SDR Cinema (D60 sim on DCI), display_colorspace: } + - ! {name: ACES 1.1 - SDR Cinema (D60 sim on D65), view_transform: ACES 1.1 - SDR Cinema (D60 sim on D65), display_colorspace: } + - ! {name: ACES 1.1 - SDR Cinema (D65 sim on DCI), view_transform: ACES 1.1 - SDR Cinema (D65 sim on DCI), display_colorspace: } + - ! {name: "ACES 1.1 - HDR Cinema (108 nits & P3 lim)", view_transform: "ACES 1.1 - HDR Cinema (108 nits & P3 lim)", display_colorspace: } + - ! {name: Un-tone-mapped, view_transform: Un-tone-mapped, display_colorspace: } + +displays: + sRGB - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped] + Display P3 - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped] + Rec.1886 Rec.709 - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped] + Rec.1886 Rec.2020 - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Video, ACES 1.1 - SDR Video (P3 lim), ACES 1.1 - SDR Video (Rec.709 lim), Un-tone-mapped] + Rec.2100-HLG - Display: + - ! {name: Raw, colorspace: Raw} + - ! ["ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)", Un-tone-mapped] + Rec.2100-PQ - Display: + - ! {name: Raw, colorspace: Raw} + - ! ["ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)", "ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim)", "ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim)", Un-tone-mapped] + ST2084-P3-D65 - Display: + - ! {name: Raw, colorspace: Raw} + - ! ["ACES 1.1 - HDR Video (1000 nits & P3 lim)", "ACES 1.1 - HDR Video (2000 nits & P3 lim)", "ACES 1.1 - HDR Video (4000 nits & P3 lim)", "ACES 1.1 - HDR Cinema (108 nits & P3 lim)", Un-tone-mapped] + P3-D60 - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Cinema, Un-tone-mapped] + P3-D65 - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Cinema, ACES 1.1 - SDR Cinema (Rec.709 lim), ACES 1.1 - SDR Cinema (D60 sim on D65), Un-tone-mapped] + P3-DCI - Display: + - ! {name: Raw, colorspace: Raw} + - ! [ACES 1.0 - SDR Cinema (D60 sim on DCI), ACES 1.1 - SDR Cinema (D65 sim on DCI), Un-tone-mapped] + +active_displays: [sRGB - Display, Display P3 - Display, Rec.1886 Rec.709 - Display, Rec.1886 Rec.2020 - Display, Rec.2100-HLG - Display, Rec.2100-PQ - Display, ST2084-P3-D65 - Display, P3-D60 - Display, P3-D65 - Display, P3-DCI - Display] +active_views: [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), ACES 1.1 - SDR Video (P3 lim), ACES 1.1 - SDR Video (Rec.709 lim), "ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)", "ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim)", "ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim)", "ACES 1.1 - HDR Video (1000 nits & P3 lim)", "ACES 1.1 - HDR Video (2000 nits & P3 lim)", "ACES 1.1 - HDR Video (4000 nits & P3 lim)", ACES 1.0 - SDR Cinema, ACES 1.1 - SDR Cinema (Rec.709 lim), ACES 1.0 - SDR Cinema (D60 sim on DCI), ACES 1.1 - SDR Cinema (D60 sim on D65), ACES 1.1 - SDR Cinema (D65 sim on DCI), "ACES 1.1 - HDR Cinema (108 nits & P3 lim)", Un-tone-mapped, Raw] + +looks: + - ! + name: ACES 1.3 Reference Gamut Compression + process_space: ACES2065-1 + description: | + LMT (applied in ACES2065-1) to compress scene-referred values from common cameras into the AP1 gamut + + ACEStransformID: urn:ampas:aces:transformId:v1.5:LMT.Academy.ReferenceGamutCompress.a1.v1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvLMT.Academy.ReferenceGamutCompress.a1.v1.0 + transform: ! {style: ACES-LMT - ACES 1.3 Reference Gamut Compression} + + +default_view_transform: Un-tone-mapped + +view_transforms: + - ! + name: ACES 1.0 - SDR Video + description: | + Component of ACES Output Transforms for SDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_100nits_dim.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec2020_100nits_dim.a1.0.3 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO_1.0} + + - ! + name: ACES 1.0 - SDR Video (D60 sim on D65) + description: | + Component of ACES Output Transforms for SDR D65 video simulating D60 white + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_D60sim_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_D60sim_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO-D60sim-D65_1.0} + + - ! + name: ACES 1.1 - SDR Video (P3 lim) + description: | + Component of ACES Output Transforms for SDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_P3D65limited_100nits_dim.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO-P3lim_1.1} + + - ! + name: ACES 1.1 - SDR Video (Rec.709 lim) + description: | + Component of ACES Output Transforms for SDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_Rec709limited_100nits_dim.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO-REC709lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim)" + description: | + Component of ACES Output Transforms for 1000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-1000nit-15nit-REC2020lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim)" + description: | + Component of ACES Output Transforms for 2000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-2000nit-15nit-REC2020lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim)" + description: | + Component of ACES Output Transforms for 4000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-4000nit-15nit-REC2020lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (1000 nits & P3 lim)" + description: | + Component of ACES Output Transforms for 1000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-1000nit-15nit-P3lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (2000 nits & P3 lim)" + description: | + Component of ACES Output Transforms for 2000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-2000nit-15nit-P3lim_1.1} + + - ! + name: "ACES 1.1 - HDR Video (4000 nits & P3 lim)" + description: | + Component of ACES Output Transforms for 4000 nit HDR D65 video + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-VIDEO-4000nit-15nit-P3lim_1.1} + + - ! + name: ACES 1.0 - SDR Cinema + description: | + Component of ACES Output Transforms for SDR cinema + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D60_48nits.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_48nits.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D60_48nits.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_48nits.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-CINEMA_1.0} + + - ! + name: ACES 1.1 - SDR Cinema (Rec.709 lim) + description: | + Component of ACES Output Transforms for SDR cinema + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_Rec709limited_48nits.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-CINEMA-REC709lim_1.1} + + - ! + name: ACES 1.0 - SDR Cinema (D60 sim on DCI) + description: | + Component of ACES Output Transforms for SDR DCI cinema simulating D60 white + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_48nits.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_48nits.a1.0.3 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-CINEMA-D60sim-DCI_1.0} + + - ! + name: ACES 1.1 - SDR Cinema (D60 sim on D65) + description: | + Component of ACES Output Transforms for SDR D65 cinema simulating D60 white + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_D60sim_48nits.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_D60sim_48nits.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-CINEMA-D60sim-D65_1.1} + + - ! + name: ACES 1.1 - SDR Cinema (D65 sim on DCI) + description: | + Component of ACES Output Transforms for SDR DCI cinema simulating D65 white + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_D65sim_48nits.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_D65sim_48nits.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-CINEMA-D65sim-DCI_1.1} + + - ! + name: "ACES 1.1 - HDR Cinema (108 nits & P3 lim)" + description: | + Component of ACES Output Transforms for 108 nit HDR D65 cinema + + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 + from_scene_reference: ! {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - HDR-CINEMA-108nit-7.2nit-P3lim_1.1} + + - ! + name: Un-tone-mapped + from_scene_reference: ! {style: UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD} + +display_colorspaces: + - ! + name: CIE-XYZ-D65 + aliases: [cie_xyz_d65] + family: "" + equalitygroup: "" + bitdepth: 32f + description: The "CIE XYZ (D65)" display connection colorspace. + isdata: false + allocation: uniform + + - ! + name: sRGB - Display + aliases: [srgb_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to sRGB (piecewise EOTF) + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_sRGB} + + - ! + name: Display P3 - Display + aliases: [displayp3_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Apple Display P3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_D60sim_dim.a1.0.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_D60sim_dim.a1.0.0 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_DisplayP3} + + - ! + name: Rec.1886 Rec.709 - Display + aliases: [rec1886_rec709_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Rec.1886/Rec.709 (HD video) + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_REC.1886-REC.709} + + - ! + name: Rec.1886 Rec.2020 - Display + aliases: [rec1886_rec2020_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Rec.1886/Rec.2020 (UHD video) + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec2020_100nits_dim.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_P3D65limited_100nits_dim.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_Rec709limited_100nits_dim.a1.1.0 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_REC.1886-REC.2020} + + - ! + name: Rec.2100-HLG - Display + aliases: [rec2100_hlg_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Rec.2100-HLG, 1000 nit + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_HLG.a1.1.0 + isdata: false + categories: [file-io] + encoding: hdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_REC.2100-HLG-1000nit} + + - ! + name: Rec.2100-PQ - Display + aliases: [rec2100_pq_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Rec.2100-PQ + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_1000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_2000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.Rec2020_4000nits_15nits_ST2084.a1.1.0 + isdata: false + categories: [file-io] + encoding: hdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_REC.2100-PQ} + + - ! + name: ST2084-P3-D65 - Display + aliases: [st2084_p3d65_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to ST-2084 (PQ), P3-D65 primaries + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_1000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_2000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_4000nits_15nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:RRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvRRTODT.Academy.P3D65_108nits_7point2nits_ST2084.a1.1.0 + isdata: false + categories: [file-io] + encoding: hdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_ST2084-P3-D65} + + - ! + name: P3-D60 - Display + aliases: [p3d60_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D60 (Bradford adaptation) + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D60_48nits.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D60_48nits.a1.0.3 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_G2.6-P3-D60-BFD} + + - ! + name: P3-D65 - Display + aliases: [p3d65_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D65 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_48nits.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_48nits.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_Rec709limited_48nits.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3D65_D60sim_48nits.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3D65_D60sim_48nits.a1.1.0 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_G2.6-P3-D65} + + - ! + name: P3-DCI - Display + aliases: [p3_dci_display] + family: Display + equalitygroup: "" + bitdepth: 32f + description: | + Convert CIE XYZ (D65 white) to Gamma 2.6, P3-DCI (DCI white with Bradford adaptation) + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_48nits.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_48nits.a1.0.3 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.P3DCI_D65sim_48nits.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.P3DCI_D65sim_48nits.a1.1.0 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_display_reference: ! {style: DISPLAY - CIE-XYZ-D65_to_G2.6-P3-DCI-BFD} + +colorspaces: + - ! + name: ACES2065-1 + aliases: [aces2065_1, ACES - ACES2065-1, lin_ap0] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: The "Academy Color Encoding System" reference colorspace. + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + + - ! + name: ACEScc + aliases: [ACES - ACEScc, acescc_ap1] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACEScc to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScc_to_ACES.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScc.a1.0.3 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: ACEScc_to_ACES2065-1} + + - ! + name: ACEScct + aliases: [ACES - ACEScct, acescct_ap1] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACEScct to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScct_to_ACES.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScct.a1.0.3 + isdata: false + categories: [file-io, working-space] + encoding: log + allocation: uniform + to_scene_reference: ! {style: ACEScct_to_ACES2065-1} + + - ! + name: ACEScg + aliases: [ACES - ACEScg, lin_ap1] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACEScg to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACEScg_to_ACES.a1.0.3 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_ACEScg.a1.0.3 + isdata: false + categories: [file-io, working-space, texture] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! {style: ACEScg_to_ACES2065-1} + + - ! + name: ADX10 + aliases: [Input - ADX - ADX10] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: | + Convert ADX10 to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ADX10_to_ACES.a1.0.3 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: ADX10_to_ACES2065-1} + + - ! + name: ADX16 + aliases: [Input - ADX - ADX16] + family: ACES + equalitygroup: "" + bitdepth: 32f + description: | + Convert ADX16 to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ADX16_to_ACES.a1.0.3 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: ADX16_to_ACES2065-1} + + - ! + name: Linear ARRI Wide Gamut 3 + aliases: [lin_arri_wide_gamut_3, Input - ARRI - Linear - ALEXA Wide Gamut, lin_alexawide] + family: Input/ARRI + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear ARRI Wide Gamut 3 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:Linear_ARRI_Wide_Gamut_3_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear ARRI Wide Gamut 3 to ACES2065-1 + children: + - ! {matrix: [0.680205505106279, 0.236136601606481, 0.0836578932872398, 0, 0.0854149797421404, 1.01747087860704, -0.102885858349182, 0, 0.00205652166929683, -0.0625625003847921, 1.06050597871549, 0, 0, 0, 0, 1]} + + - ! + name: ARRI LogC3 (EI800) + aliases: [arri_logc3_ei800, Input - ARRI - V3 LogC (EI800) - Wide Gamut, logc3ei800_alexawide] + family: Input/ARRI + equalitygroup: "" + bitdepth: 32f + description: | + Convert ARRI LogC3 (EI800) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC3_EI800_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.ARRI.Alexa-v3-logC-EI800.a1.v2 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_LogC_EI800_AWG.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.LogC_EI800_AWG_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: ARRI LogC3 (EI800) to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.247189638318671, log_side_offset: 0.385536998692443, lin_side_slope: 5.55555555555556, lin_side_offset: 0.0522722750251688, lin_side_break: 0.0105909904954696, direction: inverse} + - ! {matrix: [0.680205505106279, 0.236136601606481, 0.0836578932872398, 0, 0.0854149797421404, 1.01747087860704, -0.102885858349182, 0, 0.00205652166929683, -0.0625625003847921, 1.06050597871549, 0, 0, 0, 0, 1]} + + - ! + name: Linear ARRI Wide Gamut 4 + aliases: [lin_arri_wide_gamut_4, lin_awg4] + family: Input/ARRI + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear ARRI Wide Gamut 4 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:Linear_ARRI_Wide_Gamut_4_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear ARRI Wide Gamut 4 to ACES2065-1 + children: + - ! {matrix: [0.750957362824734, 0.144422786709757, 0.104619850465509, 0, 0.000821837079380207, 1.007397584885, -0.00821942196438358, 0, -0.000499952143533471, -0.000854177231436971, 1.00135412937497, 0, 0, 0, 0, 1]} + + - ! + name: ARRI LogC4 + aliases: [arri_logc4] + family: Input/ARRI + equalitygroup: "" + bitdepth: 32f + description: | + Convert ARRI LogC4 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC4_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.ARRI.ARRI-LogC4.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.LogC4_to_ACES.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_LogC4.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: ARRI LogC4 to ACES2065-1 + children: + - ! {log_side_slope: 0.0647954196341293, log_side_offset: -0.295908392682586, lin_side_slope: 2231.82630906769, lin_side_offset: 64, lin_side_break: -0.0180569961199113, direction: inverse} + - ! {matrix: [0.750957362824734, 0.144422786709757, 0.104619850465509, 0, 0.000821837079380207, 1.007397584885, -0.00821942196438358, 0, -0.000499952143533471, -0.000854177231436971, 1.00135412937497, 0, 0, 0, 0, 1]} + + - ! + name: BMDFilm WideGamut Gen5 + aliases: [bmdfilm_widegamut_gen5] + family: Input/BlackmagicDesign + equalitygroup: "" + bitdepth: 32f + description: | + Convert Blackmagic Film Wide Gamut (Gen 5) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:BMDFilm_WideGamut_Gen5_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.BlackmagicDesign.BMDFilm_WideGamut_Gen5.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_BMDFilm_WideGamut_Gen5.a1.v1 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.BMDFilm_WideGamut_Gen5_to_ACES.a1.v1 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Blackmagic Film Wide Gamut (Gen 5) to ACES2065-1 + children: + - ! {base: 2.71828182845905, log_side_slope: 0.0869287606549122, log_side_offset: 0.530013339229194, lin_side_offset: 0.00549407243225781, lin_side_break: 0.005, direction: inverse} + - ! {matrix: [0.647091325580708, 0.242595385134207, 0.110313289285085, 0, 0.0651915997328519, 1.02504756760476, -0.0902391673376125, 0, -0.0275570729194699, -0.0805887097177784, 1.10814578263725, 0, 0, 0, 0, 1]} + + - ! + name: DaVinci Intermediate WideGamut + aliases: [davinci_intermediate_widegamut] + family: Input/BlackmagicDesign + equalitygroup: "" + bitdepth: 32f + description: | + Convert DaVinci Intermediate Wide Gamut to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:DaVinci_Intermediate_WideGamut_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.DaVinci_Intermediate_WideGamut_to_ACES.a1.v1 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: DaVinci Intermediate Wide Gamut to ACES2065-1 + children: + - ! {log_side_slope: 0.07329248, log_side_offset: 0.51304736, lin_side_offset: 0.0075, lin_side_break: 0.00262409, linear_slope: 10.44426855, direction: inverse} + - ! {matrix: [0.748270290272981, 0.167694659554328, 0.0840350501726906, 0, 0.0208421234689102, 1.11190474268894, -0.132746866157851, 0, -0.0915122574225729, -0.127746712807307, 1.21925897022988, 0, 0, 0, 0, 1]} + + - ! + name: Linear BMD WideGamut Gen5 + aliases: [lin_bmd_widegamut_gen5] + family: Input/BlackmagicDesign + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear Blackmagic Wide Gamut (Gen 5) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:Linear_BMD_WideGamut_Gen5_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear Blackmagic Wide Gamut (Gen 5) to ACES2065-1 + children: + - ! {matrix: [0.647091325580708, 0.242595385134207, 0.110313289285085, 0, 0.0651915997328519, 1.02504756760476, -0.0902391673376125, 0, -0.0275570729194699, -0.0805887097177784, 1.10814578263725, 0, 0, 0, 0, 1]} + + - ! + name: Linear DaVinci WideGamut + aliases: [lin_davinci_widegamut] + family: Input/BlackmagicDesign + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear DaVinci Wide Gamut to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:Linear_DaVinci_WideGamut_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear DaVinci Wide Gamut to ACES2065-1 + children: + - ! {matrix: [0.748270290272981, 0.167694659554328, 0.0840350501726906, 0, 0.0208421234689102, 1.11190474268894, -0.132746866157851, 0, -0.0915122574225729, -0.127746712807307, 1.21925897022988, 0, 0, 0, 0, 1]} + + - ! + name: CanonLog2 CinemaGamut D55 + aliases: [canonlog2_cinemagamut_d55, Input - Canon - Canon-Log2 - Cinema Gamut Daylight, canonlog2_cgamutday] + family: Input/Canon + equalitygroup: "" + bitdepth: 32f + description: | + Convert Canon Log 2 Cinema Gamut (Daylight) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CanonLog2_CinemaGamut-D55_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog2_CGamut_to_ACES.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_CLog2_CGamut.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: CANON_CLOG2-CGAMUT_to_ACES2065-1} + + - ! + name: CanonLog3 CinemaGamut D55 + aliases: [canonlog3_cinemagamut_d55, Input - Canon - Canon-Log3 - Cinema Gamut Daylight, canonlog3_cgamutday] + family: Input/Canon + equalitygroup: "" + bitdepth: 32f + description: | + Convert Canon Log 3 Cinema Gamut (Daylight) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CanonLog3_CinemaGamut-D55_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog3_CGamut_to_ACES.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_CLog3_CGamut.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: CANON_CLOG3-CGAMUT_to_ACES2065-1} + + - ! + name: Linear CinemaGamut D55 + aliases: [lin_cinemagamut_d55, Input - Canon - Linear - Canon Cinema Gamut Daylight, lin_canoncgamutday] + family: Input/Canon + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear Canon Cinema Gamut (Daylight) to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:Linear-CinemaGamut-D55_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear Canon Cinema Gamut (Daylight) to ACES2065-1 + children: + - ! {matrix: [0.763064454775734, 0.14902116113706, 0.0879143840872056, 0, 0.00365745670512393, 1.10696038037622, -0.110617837081339, 0, -0.0094077940457189, -0.218383304989987, 1.22779109903571, 0, 0, 0, 0, 1]} + + - ! + name: Linear V-Gamut + aliases: [lin_vgamut, Input - Panasonic - Linear - V-Gamut] + family: Input/Panasonic + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear Panasonic V-Gamut to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Panasonic:Input:Linear_VGamut_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear Panasonic V-Gamut to ACES2065-1 + children: + - ! {matrix: [0.72461670413153, 0.166915288193706, 0.108468007674764, 0, 0.021390245413146, 0.984908155703054, -0.00629840111620089, 0, -0.00923556287076561, -0.00105690563900513, 1.01029246850977, 0, 0, 0, 0, 1]} + + - ! + name: V-Log V-Gamut + aliases: [vlog_vgamut, Input - Panasonic - V-Log - V-Gamut] + family: Input/Panasonic + equalitygroup: "" + bitdepth: 32f + description: | + Convert Panasonic V-Log - V-Gamut to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Panasonic:Input:VLog_VGamut_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.VLog_VGamut_to_ACES.a1.1.0 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_VLog_VGamut.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Panasonic.VLog_VGamut.a1.v1 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Panasonic V-Log - V-Gamut to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.241514, log_side_offset: 0.598206, lin_side_offset: 0.00873, lin_side_break: 0.01, direction: inverse} + - ! {matrix: [0.72461670413153, 0.166915288193706, 0.108468007674764, 0, 0.021390245413146, 0.984908155703054, -0.00629840111620089, 0, -0.00923556287076561, -0.00105690563900513, 1.01029246850977, 0, 0, 0, 0, 1]} + + - ! + name: Linear REDWideGamutRGB + aliases: [lin_redwidegamutrgb, Input - RED - Linear - REDWideGamutRGB, lin_rwg] + family: Input/RED + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear REDWideGamutRGB to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:RED:Input:Linear_REDWideGamutRGB_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear REDWideGamutRGB to ACES2065-1 + children: + - ! {matrix: [0.785058804068092, 0.0838587565440846, 0.131082439387823, 0, 0.0231738348454756, 1.08789754919233, -0.111071384037806, 0, -0.0737604353682082, -0.314590072290208, 1.38835050765842, 0, 0, 0, 0, 1]} + + - ! + name: Log3G10 REDWideGamutRGB + aliases: [log3g10_redwidegamutrgb, Input - RED - REDLog3G10 - REDWideGamutRGB, rl3g10_rwg] + family: Input/RED + equalitygroup: "" + bitdepth: 32f + description: | + Convert RED Log3G10 REDWideGamutRGB to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:RED:Input:Log3G10_REDWideGamutRGB_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.RED.Log3G10_REDWideGamutRGB.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_Log3G10_RWG.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.Log3G10_RWG_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: RED Log3G10 REDWideGamutRGB to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.224282, lin_side_slope: 155.975327, lin_side_offset: 2.55975327, lin_side_break: -0.01, direction: inverse} + - ! {matrix: [0.785058804068092, 0.0838587565440846, 0.131082439387823, 0, 0.0231738348454756, 1.08789754919233, -0.111071384037806, 0, -0.0737604353682082, -0.314590072290208, 1.38835050765842, 0, 0, 0, 0, 1]} + + - ! + name: Linear S-Gamut3 + aliases: [lin_sgamut3, Input - Sony - Linear - S-Gamut3] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear S-Gamut3 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_SGamut3_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear S-Gamut3 to ACES2065-1 + children: + - ! {matrix: [0.75298259539984, 0.143370216235557, 0.103647188364603, 0, 0.0217076974414429, 1.01531883550528, -0.0370265329467195, 0, -0.00941605274963355, 0.00337041785882367, 1.00604563489081, 0, 0, 0, 0, 1]} + + - ! + name: Linear S-Gamut3.Cine + aliases: [lin_sgamut3cine, Input - Sony - Linear - S-Gamut3.Cine] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear S-Gamut3.Cine to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_SGamut3Cine_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear S-Gamut3.Cine to ACES2065-1 + children: + - ! {matrix: [0.638788667185978, 0.272351433711262, 0.0888598991027595, 0, -0.00391590602528224, 1.0880732308974, -0.0841573248721177, 0, -0.0299072021239151, -0.0264325799101947, 1.05633978203411, 0, 0, 0, 0, 1]} + + - ! + name: Linear Venice S-Gamut3 + aliases: [lin_venice_sgamut3, Input - Sony - Linear - Venice S-Gamut3] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear Venice S-Gamut3 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_Venice_SGamut3_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear Venice S-Gamut3 to ACES2065-1 + children: + - ! {matrix: [0.793329741146434, 0.0890786256206771, 0.117591633232888, 0, 0.0155810585252582, 1.03271230692988, -0.0482933654551394, 0, -0.0188647477991488, 0.0127694120973433, 1.0060953357018, 0, 0, 0, 0, 1]} + + - ! + name: Linear Venice S-Gamut3.Cine + aliases: [lin_venice_sgamut3cine, Input - Sony - Linear - Venice S-Gamut3.Cine] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Linear Venice S-Gamut3.Cine to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:Linear_Venice_SGamut3Cine_to_ACES2065-1:1.0 + isdata: false + categories: [file-io] + encoding: scene-linear + allocation: uniform + to_scene_reference: ! + name: Linear Venice S-Gamut3.Cine to ACES2065-1 + children: + - ! {matrix: [0.674257092126512, 0.220571735923397, 0.10517117195009, 0, -0.00931360607857167, 1.10595886142466, -0.0966452553460855, 0, -0.0382090673002312, -0.017938376600236, 1.05614744390047, 0, 0, 0, 0, 1]} + + - ! + name: S-Log3 S-Gamut3 + aliases: [slog3_sgamut3, Input - Sony - S-Log3 - S-Gamut3] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 S-Gamut3 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_SGamut3_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.SLog3_SGamut3.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_SGamut3.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_SGamut3_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Sony S-Log3 S-Gamut3 to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.255620723362659, log_side_offset: 0.410557184750733, lin_side_slope: 5.26315789473684, lin_side_offset: 0.0526315789473684, lin_side_break: 0.01125, linear_slope: 6.62194371177582, direction: inverse} + - ! {matrix: [0.75298259539984, 0.143370216235557, 0.103647188364603, 0, 0.0217076974414429, 1.01531883550528, -0.0370265329467195, 0, -0.00941605274963355, 0.00337041785882367, 1.00604563489081, 0, 0, 0, 0, 1]} + + - ! + name: S-Log3 S-Gamut3.Cine + aliases: [slog3_sgamut3cine, Input - Sony - S-Log3 - S-Gamut3.Cine, slog3_sgamutcine] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 S-Gamut3.Cine to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_SGamut3Cine_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.SLog3_SGamut3Cine.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_SGamut3Cine.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_SGamut3Cine_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Sony S-Log3 S-Gamut3.Cine to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.255620723362659, log_side_offset: 0.410557184750733, lin_side_slope: 5.26315789473684, lin_side_offset: 0.0526315789473684, lin_side_break: 0.01125, linear_slope: 6.62194371177582, direction: inverse} + - ! {matrix: [0.638788667185978, 0.272351433711262, 0.0888598991027595, 0, -0.00391590602528224, 1.0880732308974, -0.0841573248721177, 0, -0.0299072021239151, -0.0264325799101947, 1.05633978203411, 0, 0, 0, 0, 1]} + + - ! + name: S-Log3 Venice S-Gamut3 + aliases: [slog3_venice_sgamut3, Input - Sony - S-Log3 - Venice S-Gamut3] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 Venice S-Gamut3 to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_Venice_SGamut3_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.Venice_SLog3_SGamut3.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_Venice_SGamut3.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Sony S-Log3 Venice S-Gamut3 to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.255620723362659, log_side_offset: 0.410557184750733, lin_side_slope: 5.26315789473684, lin_side_offset: 0.0526315789473684, lin_side_break: 0.01125, linear_slope: 6.62194371177582, direction: inverse} + - ! {matrix: [0.793329741146434, 0.089078625620677, 0.117591633232888, 0, 0.0155810585252582, 1.03271230692988, -0.0482933654551394, 0, -0.0188647477991488, 0.0127694120973433, 1.00609533570181, 0, 0, 0, 0, 1]} + + - ! + name: S-Log3 Venice S-Gamut3.Cine + aliases: [slog3_venice_sgamut3cine, Input - Sony - S-Log3 - Venice S-Gamut3.Cine, slog3_venice_sgamutcine] + family: Input/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 Venice S-Gamut3.Cine to ACES2065-1 + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3_Venice_SGamut3Cine_to_ACES2065-1:1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:IDT.Sony.Venice_SLog3_SGamut3Cine.a1.v1 + + AMF Components + -------------- + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.ACES_to_SLog3_Venice_SGamut3Cine.a1.1.0 + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3Cine_to_ACES.a1.1.0 + isdata: false + categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! + name: Sony S-Log3 Venice S-Gamut3.Cine to ACES2065-1 + children: + - ! {base: 10, log_side_slope: 0.255620723362659, log_side_offset: 0.410557184750733, lin_side_slope: 5.26315789473684, lin_side_offset: 0.0526315789473684, lin_side_break: 0.01125, linear_slope: 6.62194371177582, direction: inverse} + - ! {matrix: [0.674257092126512, 0.220571735923397, 0.10517117195009, 0, -0.00931360607857167, 1.10595886142466, -0.0966452553460855, 0, -0.0382090673002312, -0.017938376600236, 1.05614744390047, 0, 0, 0, 0, 1]} + + - ! + name: Camera Rec.709 + aliases: [camera_rec709, Utility - Rec.709 - Camera, rec709_camera] + family: Utility/ITU + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to Rec.709 camera OETF Rec.709 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ITU:Utility:AP0_to_Camera_Rec709:1.0 + isdata: false + categories: [file-io] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to Camera Rec.709 + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + - ! {gamma: 2.22222222222222, offset: 0.099, direction: inverse} + + - ! + name: Linear P3-D65 + aliases: [lin_p3d65, Utility - Linear - P3-D65, lin_displayp3, Linear Display P3] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to linear P3 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_P3-D65:1.0 + isdata: false + categories: [file-io, working-space, texture] + encoding: scene-linear + allocation: uniform + from_scene_reference: ! + name: AP0 to Linear P3-D65 + children: + - ! {matrix: [2.02490528596679, -0.689069761034766, -0.335835524932019, 0, -0.183597032256178, 1.28950620775902, -0.105909175502841, 0, 0.00905856112234766, -0.0592796840575522, 1.0502211229352, 0, 0, 0, 0, 1]} + + - ! + name: Linear Rec.2020 + aliases: [lin_rec2020, Utility - Linear - Rec.2020] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to linear Rec.2020 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_Rec2020:1.0 + isdata: false + categories: [file-io, texture] + encoding: scene-linear + allocation: uniform + from_scene_reference: ! + name: AP0 to Linear Rec.2020 + children: + - ! {matrix: [1.49040952054172, -0.26617091926613, -0.224238601275593, 0, -0.0801674998722558, 1.18216712109757, -0.10199962122531, 0, 0.00322763119162216, -0.0347764757450576, 1.03154884455344, 0, 0, 0, 0, 1]} + + - ! + name: Linear Rec.709 (sRGB) + aliases: [lin_rec709_srgb, Utility - Linear - Rec.709, lin_rec709, lin_srgb, Utility - Linear - sRGB] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to linear Rec.709 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Linear_Rec709:1.0 + isdata: false + categories: [file-io, working-space, texture] + encoding: scene-linear + allocation: uniform + from_scene_reference: ! + name: AP0 to Linear Rec.709 (sRGB) + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + + - ! + name: Gamma 1.8 Rec.709 - Texture + aliases: [g18_rec709_tx, Utility - Gamma 1.8 - Rec.709 - Texture, g18_rec709] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to 1.8 gamma-corrected Rec.709 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma1.8_Rec709-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to Gamma 1.8 Rec.709 - Texture + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + - ! {value: 1.8, style: pass_thru, direction: inverse} + + - ! + name: Gamma 2.2 AP1 - Texture + aliases: [g22_ap1_tx, g22_ap1] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to 2.2 gamma-corrected AP1 primaries, ACES ~=D60 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.2_AP1-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to Gamma 2.2 AP1 - Texture + children: + - ! {matrix: [1.45143931614567, -0.23651074689374, -0.214928569251925, 0, -0.0765537733960206, 1.17622969983357, -0.0996759264375522, 0, 0.00831614842569772, -0.00603244979102102, 0.997716301365323, 0, 0, 0, 0, 1]} + - ! {value: 2.2, style: pass_thru, direction: inverse} + + - ! + name: Gamma 2.2 Rec.709 - Texture + aliases: [g22_rec709_tx, Utility - Gamma 2.2 - Rec.709 - Texture, g22_rec709] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to 2.2 gamma-corrected Rec.709 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.2_Rec709-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to Gamma 2.2 Rec.709 - Texture + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + - ! {value: 2.2, style: pass_thru, direction: inverse} + + - ! + name: Gamma 2.4 Rec.709 - Texture + aliases: [g24_rec709_tx, g24_rec709, rec709_display, Utility - Rec.709 - Display] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to 2.4 gamma-corrected Rec.709 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_Gamma2.4_Rec709-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to Gamma 2.4 Rec.709 - Texture + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + - ! {value: 2.4, style: pass_thru, direction: inverse} + + - ! + name: sRGB Encoded AP1 - Texture + aliases: [srgb_encoded_ap1_tx, srgb_ap1] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to sRGB Encoded AP1 primaries, ACES ~=D60 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB_Encoded_AP1-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to sRGB Encoded AP1 - Texture + children: + - ! {matrix: [1.45143931614567, -0.23651074689374, -0.214928569251925, 0, -0.0765537733960206, 1.17622969983357, -0.0996759264375522, 0, 0.00831614842569772, -0.00603244979102102, 0.997716301365323, 0, 0, 0, 0, 1]} + - ! {gamma: 2.4, offset: 0.055, direction: inverse} + + - ! + name: sRGB Encoded P3-D65 - Texture + aliases: [srgb_encoded_p3d65_tx, srgb_p3d65, srgb_displayp3] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to sRGB Encoded P3-D65 primaries, D65 white point + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB_Encoded_P3-D65-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to sRGB Encoded P3-D65 - Texture + children: + - ! {matrix: [2.02490528596679, -0.689069761034766, -0.335835524932019, 0, -0.183597032256178, 1.28950620775902, -0.105909175502841, 0, 0.00905856112234766, -0.0592796840575522, 1.0502211229352, 0, 0, 0, 0, 1]} + - ! {gamma: 2.4, offset: 0.055, direction: inverse} + + - ! + name: sRGB - Texture + aliases: [srgb_tx, Utility - sRGB - Texture, srgb_texture, Input - Generic - sRGB - Texture] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: | + Convert ACES2065-1 to sRGB + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:AP0_to_sRGB-Texture:1.0 + isdata: false + categories: [file-io, texture] + encoding: sdr-video + allocation: uniform + from_scene_reference: ! + name: AP0 to sRGB Rec.709 + children: + - ! {matrix: [2.52168618674388, -1.13413098823972, -0.387555198504164, 0, -0.276479914229922, 1.37271908766826, -0.096239173438334, 0, -0.0153780649660342, -0.152975335867399, 1.16835340083343, 0, 0, 0, 0, 1]} + - ! {gamma: 2.4, offset: 0.055, direction: inverse} + + - ! + name: Raw + aliases: [Utility - Raw] + family: Utility + equalitygroup: "" + bitdepth: 32f + description: The utility "Raw" colorspace. + isdata: true + categories: [file-io, texture] + allocation: uniform + +named_transforms: + - ! + name: ARRI LogC3 - Curve (EI800) + aliases: [arri_logc3_crv_ei800, Input - ARRI - Curve - V3 LogC (EI800), crv_logc3ei800] + description: | + Convert ARRI LogC3 Curve (EI800) to Relative Scene Linear + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC3_Curve_EI800_to_Linear:1.0 + family: Input/ARRI + categories: [file-io] + encoding: log + transform: ! + name: ARRI LogC3 Curve (EI800) to Relative Scene Linear + children: + - ! {base: 10, log_side_slope: 0.247189638318671, log_side_offset: 0.385536998692443, lin_side_slope: 5.55555555555556, lin_side_offset: 0.0522722750251688, lin_side_break: 0.0105909904954696, direction: inverse} + + - ! + name: ARRI LogC4 - Curve + aliases: [arri_logc4_crv] + description: | + Convert ARRI LogC4 Curve to Relative Scene Linear + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ARRI:Input:ARRI_LogC4_Curve_to_Linear:1.0 + family: Input/ARRI + categories: [file-io] + encoding: log + transform: ! + name: ARRI LogC4 Curve to Relative Scene Linear + children: + - ! {log_side_slope: 0.0647954196341293, log_side_offset: -0.295908392682586, lin_side_slope: 2231.82630906769, lin_side_offset: 64, lin_side_break: -0.0180569961199113, direction: inverse} + + - ! + name: BMDFilm Gen5 Log - Curve + aliases: [bmdfilm_gen5_log_crv] + description: | + Convert Blackmagic Film (Gen 5) Log to Blackmagic Film (Gen 5) Linear + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:BMDFilm_Gen5_Log-Curve_to_Linear:1.0 + family: Input/BlackmagicDesign + categories: [file-io] + encoding: log + transform: ! + name: Blackmagic Film (Gen 5) Log to Linear Curve + children: + - ! {base: 2.71828182845905, log_side_slope: 0.0869287606549122, log_side_offset: 0.530013339229194, lin_side_offset: 0.00549407243225781, lin_side_break: 0.005, direction: inverse} + + - ! + name: DaVinci Intermediate Log - Curve + aliases: [davinci_intermediate_log_crv] + description: | + Convert DaVinci Intermediate Log to DaVinci Intermediate Linear + + CLFtransformID: urn:aswf:ocio:transformId:1.0:BlackmagicDesign:Input:DaVinci_Intermediate_Log-Curve_to_Linear:1.0 + family: Input/BlackmagicDesign + categories: [file-io] + encoding: log + transform: ! + name: DaVinci Intermediate Log to Linear Curve + children: + - ! {log_side_slope: 0.07329248, log_side_offset: 0.51304736, lin_side_offset: 0.0075, lin_side_break: 0.00262409, linear_slope: 10.44426855, direction: inverse} + + - ! + name: C-Log2 - Curve + aliases: [clog2_crv, Input - Canon - Curve - Canon-Log2, crv_canonlog2] + description: | + Convert CLog2 Log (arbitrary primaries) to CLog2 Linear (arbitrary primaries) + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CLog2-Curve_to_Linear:1.0 + family: Input/Canon + categories: [file-io] + encoding: log + transform: ! {style: CURVE - CANON_CLOG2_to_LINEAR} + + - ! + name: C-Log3 - Curve + aliases: [clog3_crv, Input - Canon - Curve - Canon-Log3, crv_canonlog3] + description: | + Convert CLog3 Log (arbitrary primaries) to CLog3 Linear (arbitrary primaries) + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CLog3-Curve_to_Linear:1.0 + family: Input/Canon + categories: [file-io] + encoding: log + transform: ! {style: CURVE - CANON_CLOG3_to_LINEAR} + + - ! + name: V-Log - Curve + aliases: [vlog_crv, Input - Panasonic - Curve - V-Log, crv_vlog] + description: | + Convert Panasonic V-Log Log (arbitrary primaries) to Panasonic V-Log Linear (arbitrary primaries) + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Panasonic:Input:VLog-Curve_to_Linear:1.0 + family: Input/Panasonic + categories: [file-io] + encoding: log + transform: ! + name: Panasonic V-Log Log to Linear Curve + children: + - ! {base: 10, log_side_slope: 0.241514, log_side_offset: 0.598206, lin_side_offset: 0.00873, lin_side_break: 0.01, direction: inverse} + + - ! + name: Log3G10 - Curve + aliases: [log3g10_crv, Input - RED - Curve - REDLog3G10, crv_rl3g10] + description: | + Convert RED Log3G10 Log (arbitrary primaries) to RED Log3G10 Linear (arbitrary primaries) + + CLFtransformID: urn:aswf:ocio:transformId:1.0:RED:Input:Log3G10-Curve_to_Linear:1.0 + family: Input/RED + categories: [file-io] + encoding: log + transform: ! + name: RED Log3G10 Log to Linear Curve + children: + - ! {base: 10, log_side_slope: 0.224282, lin_side_slope: 155.975327, lin_side_offset: 2.55975327, lin_side_break: -0.01, direction: inverse} + + - ! + name: S-Log3 - Curve + aliases: [slog3_crv, Input - Sony - Curve - S-Log3, crv_slog3] + description: | + Convert S-Log3 Log (arbitrary primaries) to S-Log3 Linear (arbitrary primaries) + + CLFtransformID: urn:aswf:ocio:transformId:1.0:Sony:Input:SLog3-Curve_to_Linear:1.0 + family: Input/Sony + categories: [file-io] + encoding: log + transform: ! + name: S-Log3 Log to Linear Curve + children: + - ! {base: 10, log_side_slope: 0.255620723362659, log_side_offset: 0.410557184750733, lin_side_slope: 5.26315789473684, lin_side_offset: 0.0526315789473684, lin_side_break: 0.01125, linear_slope: 6.62194371177582, direction: inverse} + + - ! + name: Rec.1886 - Curve + aliases: [rec1886_crv, Utility - Curve - Rec.1886, crv_rec1886] + description: | + Convert generic linear RGB to Rec.1886 encoded RGB + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_Rec1886-Curve:1.0 + family: Utility + categories: [file-io] + encoding: sdr-video + inverse_transform: ! + name: Linear to Rec.1886 + children: + - ! {value: 2.4, style: pass_thru, direction: inverse} + + - ! + name: Rec.709 - Curve + aliases: [rec709_crv, Utility - Curve - Rec.709, crv_rec709] + description: | + Convert generic linear RGB to generic gamma-corrected RGB + + CLFtransformID: urn:aswf:ocio:transformId:1.0:ITU:Utility:Linear_to_Rec709-Curve:1.0 + family: Utility/ITU + categories: [file-io] + encoding: sdr-video + inverse_transform: ! + name: Linear to Rec.709 + children: + - ! {gamma: 2.22222222222222, offset: 0.099, direction: inverse} + + - ! + name: sRGB - Curve + aliases: [srgb_crv, Utility - Curve - sRGB, crv_srgb] + description: | + Convert generic linear RGB to sRGB encoded RGB + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_sRGB-Curve:1.0 + family: Utility + categories: [file-io] + encoding: sdr-video + inverse_transform: ! + name: Linear to sRGB + children: + - ! {gamma: 2.4, offset: 0.055, direction: inverse} + + - ! + name: ST-2084 - Curve + aliases: [st_2084_crv] + description: | + Convert generic linear RGB to generic ST.2084 (PQ) encoded RGB mapping 1.0 to 100nits + + CLFtransformID: urn:aswf:ocio:transformId:1.0:OCIO:Utility:Linear_to_ST2084-Curve:1.0 + family: Utility + categories: [file-io] + encoding: hdr-video + inverse_transform: ! {style: CURVE - LINEAR_to_ST-2084} + diff --git a/include/ofxColour.h b/include/ofxColour.h new file mode 100644 index 00000000..9296ad70 --- /dev/null +++ b/include/ofxColour.h @@ -0,0 +1,278 @@ +#ifndef _ofxColour_h_ +#define _ofxColour_h_ + +// Copyright OpenFX and contributors to the OpenFX project. +// SPDX-License-Identifier: BSD-3-Clause + +/** @file ofxColour.h +Contains the API for colourspace data exchange. +*/ + +/** Define OFX_NO_DEFAULT_COLORSPACE_HEADER if you want to manage the +colourspace headers yourself. If this is not defined, the latest ofx-native +config will be included. +*/ +#ifndef OFX_NO_DEFAULT_COLORSPACE_HEADER +#include "ofx-native-v1.5_aces-v1.3_ocio-v2.3.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** @brief What style of colour management does the host or plug-in offer? + + - Type - string X 1 + - Property Set - host descriptor (read only), plugin descriptor (read/write), image effect instance (read only) + - Default - kOfxImageEffectPropColourManagementStyleNone + - Valid Values - This must be one of + - ::kOfxImageEffectPropColourManagementNone - no colour management + - ::kOfxImageEffectPropColourManagementBasic - only basic colourspaces from the config header may be used + - ::kOfxImageEffectPropColourManagementCore - only core colourspaces from the config header may be used + - ::kOfxImageEffectPropColourManagementFull - any colourspace from the config header may be used + - ::kOfxImageEffectPropColourManagementOCIO - any OCIO config may be used (implies use of the OCIO library) + +Hosts should set this property if they will provide colourspace information +to plug-ins. +Plug-ins should set this property if they can use host-provided colourspace +information. +Collectively, the full, core and basic styles are referred to as native +colour management. OCIO is used as the reference for the colour management +API, but is not required to implement the native styles. + +The colourspace strings used in the native styles are from an OFX-specific +OCIO config which is currently based on the OCIO ACES Studio built-in config, +studio-config-v2.1.0_aces-v1.3_ocio-v2.3, and stored for OFX purposes in +ofx-native-v1.5_aces-v1.3_ocio-v2.3.h (referred to as the config header). +Additionally, there is a scheme for cross-referencing between clips, and a set +of "basic colourspaces", which are designed to be generic names for a family of +colourspaces. When a basic colourspace is used, this means the host is free to +choose any colourspace with the same encoding and reference space (scene vs +display). + +The assumption is that OCIO > Full > Core > Basic, so the highest style +supported by both host and plug-in should usually be chosen by the host. +The chosen style must be set by the host using this property on an image +effect instance. +*/ +#define kOfxImageEffectPropColourManagementStyle "OfxImageEffectPropColourManagementStyle" + +/* String used to indicate that no colour management is available. */ +#define kOfxImageEffectPropColourManagementNone "OfxImageEffectPropColourManagementNone" +/* String used to indicate that basic colour management is available. */ +#define kOfxImageEffectPropColourManagementBasic "OfxImageEffectPropColourManagementBasic" +/* String used to indicate that core colour management is available. */ +#define kOfxImageEffectPropColourManagementCore "OfxImageEffectPropColourManagementCore" +/* String used to indicate that Full colour management is available. */ +#define kOfxImageEffectPropColourManagementFull "OfxImageEffectPropColourManagementFull" +/* String used to indicate that OCIO colour management is available. */ +#define kOfxImageEffectPropColourManagementOCIO "OfxImageEffectPropColourManagementOCIO" + +/** @brief What native mode configs are supported? + + - Type - string X N + - Property Set - host descriptor (read only), plugin descriptor (read/write) + - Valid Values - A list of config identifiers. The only currently supported + value is ofx-native-v1.5_aces-v1.3_ocio-v2.3. + +While the API for colour management is expected to be stable, the set of +colourspaces will evolve over time. This property must be set by both plug-ins +and hosts specifying the list of native mode configs that are available on each +side. +*/ +#define kOfxImageEffectPropColourManagementAvailableConfigs "OfxImageEffectPropColourManagementAvailableConfigs" + +/** @brief The native colour management config to be used for this instance + + - Type - string X 1 + - Property Set - image effect instance (read only) + - Valid Values - any string provided by the plug-in in + kOfxImageEffectPropColourManagementAvailableConfigs + +The host must set this property to indicate the native colour management config +the plug-in should be used to look up colourspace strings. It is important to +set this even in OCIO mode, to define the basic colourspaces. +*/ +#define kOfxImageEffectPropColourManagementConfig "OfxImageEffectPropColourManagementConfig" + +/** @brief The path to the OCIO config used for this instance + + - Type - string X 1 + - Property Set - image effect instance (read only) + - Valid Values - Filesystem path to the config or URI starting ocio:// + +A host must set this property on any effect instances where it has negotiated +OCIO colour management (kOfxImageEffectPropColourManagementOCIO). +Use of URIs for built-in configs, such as ocio://default is permitted. +*/ +#define kOfxImageEffectPropOCIOConfig "OfxImageEffectPropOCIOConfig" + +/** @brief The colourspace used for this clip + + - Type - string X 1 + - Property Set - clip instance (read/write) + - Valid Values - colourspace that is permitted under the style in use. + For OCIO, any string acceptable to Config::getColorSpace() + +Hosts should set this property to the colourspace of the input clip. Typically +it will be set to the working colourspace of the host but could be any valid +colourspace. + +Plug-ins may set this property on an output clip. Plug-ins which output motion +vectors or similar images which should not be colour managed should use +kOfxColourspaceRaw, + +Both host and plug-in should use the value of +kOfxImageClipPropPreferredColourspace where reasonable. + +In OCIO mode, a basic colourspace may have been requested via +kOfxImageClipPropPreferredColourspaces, but the actual colourspace used should +be reported in this property. If an OCIO host has added the basic colourspaces +to its config as roles or aliases, they would be permitted here. + +Cross-referencing between clips is possible by setting this property to +"OfxColourspace_". For example a plug-in may set this property on its +output clip to "OfxColourspace_Source", telling the host that the colourspace +of the output matches the "Source" input clip. In the basic style, plug-ins +are recommended to use cross-referencing for their output clip unless +kOfxColourspaceRaw is required. + +If a clip sets OfxImageClipPropIsMask or it only supports +OfxImageComponentAlpha, colour management is disabled and this property +must be unset. +*/ +#define kOfxImageClipPropColourspace "OfxImageClipPropColourspace" + +/** @brief The preferred colourspace for this clip + + - Type - string X N + - Property Set - clip instance (read only) and ::kOfxImageEffectActionGetClipPreferences action out args property (read/write) + - Valid Values - colourspace that is permitted under the style in use. + For Basic, any colourspace from the config header where IsBasic is true. + For Core, any colourspace from the config header where IsCore is true. + For Full, any colourspace from the config header. + For OCIO, any string acceptable to Config::getColorSpace(), or a basic colourspace. + +Plug-ins may set this property during kOfxImageEffectActionGetClipPreferences +to request images in a colourspace which is convenient for them. The +property is an ordered set of colourspace identifiers, which may be any of the +names or aliases supported by the colour management style in use. If plug-ins +prefer more esoteric colourspaces, they are encouraged to also include basic +colourspacesas a fallback. For example a colour grading plug-in which supports +a specific camera and expects a log colourspace might list: + +"arri_logc4", "arri_logc3_ei800", "ACEScct", "ofx_scene_log" + +The host is free to choose any colourspace from this list, but should favour +the first mutually agreeable colourspace, and set kOfxImageClipPropColourspace +to tell the plug-in which colourspace has been selected. A host does not need +to convert into the first choice just because it can, as this might be +inefficient, and should avoid scene-to-display or display-to-scene conversions +where possible. + +In the event that the host cannot supply images in a requested colourspace, +it may supply images in any valid colourspace. Plug-ins must check +kOfxImageClipPropColourspace to see if their request was satisfied. + +In both native and OCIO modes, it is recommended to include basic colourspaces +in this list, because this gives the host more flexibility to avoid unnecessary +colourspace conversions. + +Hosts can invoke kOfxImageEffectActionGetOutputColourspace to set this on an +output clip, which could be helpful in a generator context, and plug-ins should +follow the same logic as hosts when deciding which colourspace to use. + +It might be much less costly for a host to perform a conversion +than a plug-in, so in the example of a plug-in which performs all internal +processing in scene linear, it is sensible for the plug-in to universally +assert that preference by preferring kOfxColourspaceOfxSceneLinear, and for +the host to honour it if possible. However, if a plug-in is capable of +adapting to any input colourspace, it should not set this preference. + +Cross-referencing between clips is possible by setting this property to +"OfxColourspace_". For example, a plug-in in a transition context may set +this property on its "SourceTo" clip to "OfxColourspace_SourceFrom", telling +the host it would like both input clips to be in the same colourspace. + +If a plug-in has inputs which expect motion vectors, depth values or other +non-colour channels, it should set the preferred colourspace to +kOfxColourspaceRaw. Similarly, if a host requests outputs in a typical scene +colourspace, but the plug-in is producing motion vectors, it should ignore +the request and set kOfxImageClipPropColourspace to kOfxColourspaceRaw. +*/ +#define kOfxImageClipPropPreferredColourspaces "OfxImageClipPropPreferredColourspaces" + +/** @brief The display colourspace used in the plug-in's viewport + + - Type - string X 1 + - Property Set - image effect instance (read only) + - Valid Values - any colourspace from the config header + +Used with native colour management styles, this property is relevant +for plug-ins which have their own viewport in a custom window. Plug-ins should +not expect this to be available during a render event. +Hosts should set this property to a display colourspace which matches that +used in its own viewport. For a multi-display system, choose the colourspace +for the display device where a native window would appear by default. +A host which supports OCIO should use the OCIO-specific display and view +properties instead. + +*/ +#define kOfxImageEffectPropDisplayColourspace "OfxImageEffectPropDisplayColourspace" + +/** @brief The OCIO display to be used in the plug-in's viewport + + - Type - string X 1 + - Property Set - image effect instance (read only) + - Valid Values - OCIO display that is present in the config + +This OCIO-specific property allows the host to specify which OCIO display should be used. +If not defined, the default rules for choosing a display will be followed. +*/ +#define kOfxImageEffectPropOCIODisplay "OfxImageEffectPropOCIODisplay" + +/** @brief The OCIO view to be used in the plug-in's viewport + + - Type - string X 1 + - Property Set - image effect instance (read only) + - Valid Values - OCIO view for the display specified by kOfxImageEffectPropOCIODisplay + +This OCIO-specific property allows the host to specify which OCIO view should be used. +If not defined, the default rules for choosing a view will be followed. +*/ +#define kOfxImageEffectPropOCIOView "OfxImageEffectPropOCIOView" + +/** @brief + + This action allows a host to ask an effect, given a list of preferred + colourspaces, what colourspace will be used for its output clip. This should + be called after first gathering the plug-ins preferred input colourspaces + via OfxImageEffectActionGetClipPreferences. + + Cross-references to input clip colourspaces are permitted, for example in a + filter context, the host might request "OfxColourspace_Source". + + @param handle handle to the instance, cast to an \ref OfxImageEffectHandle + @param inArgs has the property + - \ref kOfxImageClipPropPreferredColourspaces the host's list of preferred colourspaces + + @param outArgs has the property + - \ref kOfxImageClipPropColourspace the colourspace selected by the plug-in, + which may be a cross-reference to an input clip. + + @returns + - \ref kOfxStatOK, the action was trapped and the colourspace was set in + the outArgs property set + - \ref kOfxStatReplyDefault, the action was not trapped and the host + should use the colourspace of the first input clip + - \ref kOfxStatErrMemory, in which case the action may be called again after a memory purge + - \ref kOfxStatFailed, something wrong, but no error code appropriate, plugin to post message + - \ref kOfxStatErrFatal + */ +#define kOfxImageEffectActionGetOutputColourspace "OfxImageEffectActionGetOutputColourspace" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/ofxImageEffect.h b/include/ofxImageEffect.h index 26b84a18..fecee135 100644 --- a/include/ofxImageEffect.h +++ b/include/ofxImageEffect.h @@ -307,6 +307,12 @@ These are the list of actions passed to an image effect plugin's main function. must be set to one of the pixel depths both the host and plugin supports + - a set of char \* X 1 properties, one for each of the input clips + currently attached, labelled with + ``OfxImageClipPropPreferredColourspaces_`` post pended with the clip's + name. This must be set according to the requirements of the colour + management style in use. + - a set of double X 1 properties, one for each of the input clips currently attached and the output clip, labelled with ``OfxImageClipPropPAR_`` post pended with the clip's name. This is @@ -1035,8 +1041,7 @@ Set this property on any clip which will only ever have single channel alpha ima This property acts as a hint to hosts indicating that they could feed the effect from a rotoshape (or similar) rather than an 'ordinary' clip. */ #define kOfxImageClipPropIsMask "OfxImageClipPropIsMask" - - + /** @brief The pixel aspect ratio of a clip or image. - Type - double X 1 diff --git a/scripts/genColour b/scripts/genColour new file mode 100755 index 00000000..dab251ac --- /dev/null +++ b/scripts/genColour @@ -0,0 +1,168 @@ +#!/usr/bin/env python3 + +# Copyright OpenFX and contributors to the OpenFX project. +# SPDX-License-Identifier: BSD-3-Clause + +# Extract information from an OCIO config to C header. +# Example invocation: +# OCIO=include/ofx-native-v1.5_aces-v1.3_ocio-v2.3.ocio scripts/genColour > include/ofxColourspaceList.h + +import sys +import PyOpenColorIO as OCIO +from string import Template + +header = '''#ifndef _${config_name_us}_h_ +#define _${config_name_us}_h_ + +// Copyright OpenFX and contributors to the OpenFX project. +// SPDX-License-Identifier: BSD-3-Clause + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file ofxColourspaceList.h +Contains the list of supported colourspaces. +This file was auto-generated by scripts/genColour from $config_name. +*/ + +// For use with kOfxImageEffectPropColourManagementAvailableConfigs +#define kOfxConfigIdentifier "$config_name" +''' + +footer = ''' +#ifdef __cplusplus +} +#endif + +#endif +''' + +role_docs = { + 'ofx_display_sdr': 'Any display-referred SDR video such as Rec. 709.', + 'ofx_display_hdr': 'Any display-referred HDR video such as Rec. 2100 HLG or PQ.', + 'ofx_scene_log': 'Any scene-referred colourspace with a log transfer function.', + 'ofx_scene_linear': 'Any scene-referred linear colourspace.', + 'ofx_raw': 'Image values should not be treated as colour, e.g. motion vectors or masks.', + 'aces_interchange': 'Guaranteed to be ACES2065-1.', + 'cie_xyz_d65_interchange': 'CIE XYZ colorimetry with the neutral axis at D65.', + 'color_picking': 'The colourspace to use for colour pickers, typically a display colourspace.', + 'color_timing': 'A colourspace suitable for colour grading, typically a log colourspace.', + 'compositing_log': 'Any scene-referred colourspace with a log transfer function.', + 'data': 'Image values should not be treated as colour, e.g. motion vectors or masks. Mapped to the raw colourspace.', + 'matte_paint': 'A colourspace suitable for matte painting.', + 'scene_linear': 'Any scene-referred linear colourspace.', + 'texture_paint': 'A colourspace suitable for texture painting, typically sRGB.' + } + +basic_colourspace_labels = { + 'ofx_display_sdr': 'OFX generic display SDR', + 'ofx_display_hdr': 'OFX generic display HDR', + 'ofx_scene_log': 'OFX generic scene log', + 'ofx_scene_linear': 'OFX generic scene linear', + 'ofx_raw': 'OFX generic raw' +} + +chars_to_delete = str.maketrans('', '', ' -.()') +def camel_name(name): + return ' '.join([word[0].upper() + word[1:] for word in name.replace(' ', '_').split('_')]).translate(chars_to_delete) + +define_base = '#define kOfxColourspace' + +def colourspace_short_name(spc): + name = spc.getName() + aliases = spc.getAliases() + if ' ' in name and len(aliases) > 0: + return aliases[0] + else: + return name + +def print_name(name): + print(f'{define_base}{camel_name(name)} "{name}"') + +def print_metadata(name, label, reference_space, encoding, is_data, is_basic, is_core): + print_string_property(name, 'Label', label) + print_string_property(name, 'Encoding', encoding) + print_bool_property(name, 'Data', is_data) + print_bool_property(name, 'Basic', is_basic) + print_bool_property(name, 'Core', is_core) + print_bool_property(name, 'Display', reference_space == OCIO.ReferenceSpaceType.REFERENCE_SPACE_DISPLAY) + +# Basic colourspaces are actually OCIO roles with additional metadata +def print_basic_colourspace(role): + role_name = role[0] + spc = ofx_config.getColorSpace(role[1]) + print(f'\n/** @brief {role_name}\n{role_docs[role_name]}\n*/') + print_name(role_name) + print_metadata(role_name, basic_colourspace_labels[role_name], spc.getReferenceSpaceType(), spc.getEncoding(), spc.isData(), True, True) + +def print_role(role): + role_name = role[0] + print(f'\n/** @brief {role_name}\n{role_docs[role_name]}\n*/') + print(f'{define_base}Role{camel_name(role_name)} "{role_name}"') + +def print_string_property(name, propname, value): + print(f'{define_base}{camel_name(name)}{propname} "{value}"') + +def print_bool_property(name, propname, value): + print(f'{define_base}{camel_name(name)}Is{propname} {str(value).lower()}') + +def print_list(name, list): + name_list = '{ "' + '", "'.join(list) + '" }' + print(f'{define_base}{camel_name(name)}List {name_list}') + +def print_colourspace(spc, is_core): + name = colourspace_short_name(spc) + label = spc.getName() + print(f'\n// {name}\n//', '\n// '.join(spc.getDescription().split('\n')).replace('\n// \n', '\n')) + print_name(name) + print_metadata(name, label, spc.getReferenceSpaceType(), spc.getEncoding(), spc.isData(), False, is_core) + +# OFX-specific set of basic roles +basic_roles = ['ofx_raw', 'ofx_scene_linear', 'ofx_display_sdr', 'ofx_scene_log', 'ofx_display_hdr'] + +# OFX-specific set of core colourspaces +core_spaces = ['srgb_display', 'displayp3_display', 'rec1886_rec709_display', + 'ACES2065-1', 'ACEScc', 'ACEScct', + 'ACEScg', 'lin_p3d65', 'lin_rec2020', + 'lin_rec709_srgb', 'g18_rec709_tx', 'g22_ap1_tx', + 'g22_rec709_tx', 'g24_rec709_tx', 'srgb_encoded_ap1_tx', + 'srg_encoded_p3d65_tx', 'srgb_tx', 'Raw', + 'rec1886_rec2020_display', 'rec2100_hlg_display', 'rec2100_pq_display', + 'st2084_p3d65_display', 'p3d65_display'] + +# This should be the OpenFX OCIO config created by genOCIOConfig +ofx_config = OCIO.GetCurrentConfig() + +# Add OFX-specific basic colourspaces here rather than in genOCIOConfig +# to avoid creating an expectation that these mappings should always be used. +# The assigned colourspaces are chosen simply to generate the correct +# attributes in the header. +ofx_config.setRole('ofx_display_sdr', 'rec1886_rec709_display') +ofx_config.setRole('ofx_display_hdr', 'rec2100_hlg_display') +ofx_config.setRole('ofx_scene_log', 'ACEScct') +ofx_config.setRole('ofx_scene_linear', 'ACEScg') +ofx_config.setRole('ofx_raw', 'raw') + +config_name = ofx_config.getName() +print(Template(header).substitute(config_name=config_name, + config_name_us=config_name.replace('-', '_').replace('.', '_'))) + +print('// Basic Colourspaces\n// These colourspaces are generic names for any colourspace with the correct attributes.') +for basic_role in [role for role in ofx_config.getRoles() if role[0] in basic_roles]: + print_basic_colourspace(basic_role) + +print('\n// Core Colourspaces') +for core_spc in [spc for spc in ofx_config.getColorSpaces() if colourspace_short_name(spc) in core_spaces]: + print_colourspace(core_spc, True) + +print('\n// Non-core Colourspaces') +for other_spc in [spc for spc in ofx_config.getColorSpaces() if colourspace_short_name(spc) not in core_spaces]: + print_colourspace(other_spc, False) + +print('''\n/** @brief Roles - standard names used for compatibility with common OCIO configs. +*/''') +for role in [role for role in ofx_config.getRoles() if role[0] not in basic_roles]: + print_role(role) + +print(footer) diff --git a/scripts/genOCIOConfig b/scripts/genOCIOConfig new file mode 100755 index 00000000..16eb831a --- /dev/null +++ b/scripts/genOCIOConfig @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + +# Copyright OpenFX and contributors to the OpenFX project. +# SPDX-License-Identifier: BSD-3-Clause + +# Create an OCIO config equivalant to OpenFX Native colour management +# Example invocation: +# scripts/genOCIOConfig > include/openfx-native-1.5.ocio + +import PyOpenColorIO as OCIO + +ofx_config = OCIO.Config.CreateFromBuiltinConfig('studio-config-v2.1.0_aces-v1.3_ocio-v2.3') + +# Workaround for OCIO issue #123, missing encoding on srgb_tx +srgb_tx = ofx_config.getColorSpace('srgb_tx') +srgb_tx.setEncoding('sdr-video') + +# Make all colourspaces active, future OCIO configs will also do this +ofx_config.setInactiveColorSpaces('') + +ofx_config.setName(f'ofx-native-v1.5_aces-v1.3_ocio-v2.3') +ofx_config.setDescription(f'OpenFX 1.5 Native Mode Config\nBased on: {ofx_config.getDescription()}') + +ofx_config.validate() # will throw if there's an error +print(ofx_config.serialize())