From 024456737749de06d44cf9bb8abcad9cb84b2798 Mon Sep 17 00:00:00 2001 From: Spencer Magnusson Date: Wed, 6 Aug 2025 17:04:04 -0700 Subject: [PATCH] Fix color deserialization, add schema Signed-off-by: Spencer Magnusson --- .../otio-serialized-schema-only-fields.md | 9 ++++++++ docs/tutorials/otio-serialized-schema.md | 21 +++++++++++++++++++ src/opentimelineio/deserialization.cpp | 6 +++--- .../console/autogen_serialized_datamodel.py | 1 + .../opentimelineio/core/_core_utils.py | 1 + tests/test_json_backend.py | 4 ++++ 6 files changed, 39 insertions(+), 3 deletions(-) diff --git a/docs/tutorials/otio-serialized-schema-only-fields.md b/docs/tutorials/otio-serialized-schema-only-fields.md index 814b5ae1de..09a4c2b254 100644 --- a/docs/tutorials/otio-serialized-schema-only-fields.md +++ b/docs/tutorials/otio-serialized-schema-only-fields.md @@ -31,6 +31,15 @@ parameters: ## Module: opentimelineio.core +### Color.1 + +parameters: +- *a* +- *b* +- *g* +- *name* +- *r* + ### Composable.1 parameters: diff --git a/docs/tutorials/otio-serialized-schema.md b/docs/tutorials/otio-serialized-schema.md index 8627c436c4..1b9dcd0b87 100644 --- a/docs/tutorials/otio-serialized-schema.md +++ b/docs/tutorials/otio-serialized-schema.md @@ -56,6 +56,27 @@ parameters: ## Module: opentimelineio.core +### Color.1 + +*full module path*: `opentimelineio.core.Color` + +*documentation*: + +``` +:class:`Color` is a definition of red, green, blue, and alpha double floating point values, allowing + conversion between different formats. To be considered interoperable, the sRGB transfer function +encoded values, ranging between zero and one, are expected to be accurate to within 1/255 of the +intended value. Round-trip conversions may not be guaranteed outside that. This Color class is meant + for use in user interface elements, like marker or clip coloring, NOT for image pixel content. +``` + +parameters: +- *a*: +- *b*: +- *g*: +- *name*: +- *r*: + ### Composable.1 *full module path*: `opentimelineio.core.Composable` diff --git a/src/opentimelineio/deserialization.cpp b/src/opentimelineio/deserialization.cpp index 0e99e8af6e..952a89e4ce 100644 --- a/src/opentimelineio/deserialization.cpp +++ b/src/opentimelineio/deserialization.cpp @@ -590,13 +590,13 @@ SerializableObject::Reader::_decode(_Resolver& resolver) } else if (schema_name_and_version == "Color.1") { - float r, g, b, a; + double r, g, b, a; std::string name; - return _fetch("r", &r) + return _fetch("name", &name) + && _fetch("r", &r) && _fetch("g", &g) && _fetch("b", &b) && _fetch("a", &a) - && _fetch("name", &name) ? std::any(Color(r, g, b, a, name)) : std::any(); } diff --git a/src/py-opentimelineio/opentimelineio/console/autogen_serialized_datamodel.py b/src/py-opentimelineio/opentimelineio/console/autogen_serialized_datamodel.py index ca62f79bd1..3a33763d28 100644 --- a/src/py-opentimelineio/opentimelineio/console/autogen_serialized_datamodel.py +++ b/src/py-opentimelineio/opentimelineio/console/autogen_serialized_datamodel.py @@ -159,6 +159,7 @@ def _generate_model_for_module(mod, classes, modules): otio.opentime.RationalTime, otio.opentime.TimeRange, otio.opentime.TimeTransform, + otio.core.Color ) ) ] diff --git a/src/py-opentimelineio/opentimelineio/core/_core_utils.py b/src/py-opentimelineio/opentimelineio/core/_core_utils.py index d58791a67b..e79965460a 100644 --- a/src/py-opentimelineio/opentimelineio/core/_core_utils.py +++ b/src/py-opentimelineio/opentimelineio/core/_core_utils.py @@ -26,6 +26,7 @@ "opentime.RationalTime", "opentime.TimeRange", "opentime.TimeTransform", + "opentimelineio.core.Color", "opentimelineio.core.SerializableObject" ) diff --git a/tests/test_json_backend.py b/tests/test_json_backend.py index da61274d5f..5f9c46ed07 100755 --- a/tests/test_json_backend.py +++ b/tests/test_json_backend.py @@ -47,6 +47,10 @@ def test_timetransform(self): tt = otio.opentime.TimeTransform() self.check_against_baseline(tt, "empty_timetransform") + def test_color(self): + tt = otio.core.Color() + self.check_against_baseline(tt, "empty_color") + def test_track(self): st = otio.schema.Track( name="test_track",