7#if defined(WITH_OPENCOLORIO)
20OCIO_NAMESPACE::ConstProcessorRcPtr create_ocio_display_processor(
23 using namespace OCIO_NAMESPACE;
25 const ConstConfigRcPtr &ocio_config = config.get_ocio_config();
27 GroupTransformRcPtr group = GroupTransform::Create();
29 const char *from_colorspace = display_parameters.from_colorspace.c_str();
32 if (display_parameters.scale != 1.0f || display_parameters.use_white_balance) {
34 ColorSpaceTransformRcPtr ct = ColorSpaceTransform::Create();
35 ct->setSrc(from_colorspace);
36 ct->setDst(ROLE_SCENE_LINEAR);
37 group->appendTransform(ct);
40 from_colorspace = ROLE_SCENE_LINEAR;
43 MatrixTransformRcPtr mt = MatrixTransform::Create();
47 if (display_parameters.use_white_balance) {
49 config, display_parameters.temperature, display_parameters.tint);
53 group->appendTransform(mt);
57 bool use_look = (display_parameters.look !=
nullptr && display_parameters.look[0] !=
'\0');
59 const char *look_output =
nullptr;
62 look_output = LookTransform::GetLooksResultColorSpace(
63 ocio_config, ocio_config->getCurrentContext(), display_parameters.look.c_str());
65 catch (Exception &exception) {
66 report_exception(exception);
70 if (look_output !=
nullptr && look_output[0] != 0) {
71 LookTransformRcPtr lt = LookTransform::Create();
72 lt->setSrc(from_colorspace);
73 lt->setDst(look_output);
74 lt->setLooks(display_parameters.look.c_str());
75 group->appendTransform(lt);
78 from_colorspace = look_output;
87 DisplayViewTransformRcPtr dvt = DisplayViewTransform::Create();
88 dvt->setSrc(from_colorspace);
89 dvt->setLooksBypass(use_look);
90 dvt->setView(display_parameters.view.c_str());
91 dvt->setDisplay(display_parameters.display.c_str());
92 group->appendTransform(dvt);
95 if (display_parameters.exponent != 1.0f) {
96 ExponentTransformRcPtr et = ExponentTransform::Create();
97 const double value[4] = {display_parameters.exponent,
98 display_parameters.exponent,
99 display_parameters.exponent,
102 group->appendTransform(et);
105 if (display_parameters.inverse) {
106 group->setDirection(TRANSFORM_DIR_INVERSE);
111 ConstProcessorRcPtr p;
113 p = ocio_config->getProcessor(group);
115 catch (Exception &exception) {
116 report_exception(exception);
MatBase< T, NumCol, NumRow > transpose(const MatBase< T, NumRow, NumCol > &mat)
float3x3 calculate_white_point_matrix(const Config &config, const float temperature, const float tint)
MatBase< float, 3, 3 > float3x3
MatBase< double, 4, 4 > double4x4
static MatBase identity()