Skip to content

Commit 662da0e

Browse files
committed
Implement support for viewing rules.
Signed-off-by: Thomas Mansencal <[email protected]>
1 parent 0012991 commit 662da0e

File tree

3 files changed

+136
-79
lines changed

3 files changed

+136
-79
lines changed

opencolorio_config_aces/config/generation/common.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,7 @@ def generate_config(
409409

410410
if data.file_rules:
411411
file_rules = ocio.FileRules()
412-
rule_index = 0
413-
for file_rule in reversed(data.file_rules):
412+
for i, file_rule in enumerate(data.file_rules):
414413
name = file_rule["name"]
415414
colorspace = file_rule["colorspace"]
416415
regex = file_rule.get("regex")
@@ -431,8 +430,7 @@ def generate_config(
431430
regex,
432431
colorspace,
433432
)
434-
file_rules.insertRule(rule_index, name, colorspace, regex)
435-
rule_index += 1
433+
file_rules.insertRule(i, name, colorspace, regex)
436434
else:
437435
LOGGER.debug(
438436
'Adding "%s" file rule with "%s" pattern and "%s" '
@@ -442,15 +440,20 @@ def generate_config(
442440
extension,
443441
colorspace,
444442
)
445-
file_rules.insertRule(rule_index, name, colorspace, pattern, extension)
446-
rule_index += 1
443+
file_rules.insertRule(i, name, colorspace, pattern, extension)
447444
config.setFileRules(file_rules)
448445

449446
if data.viewing_rules:
450447
viewing_rules = ocio.ViewingRules()
451-
for _i, _viewing_rule in enumerate(reversed(data.viewing_rules)):
452-
LOGGER.warning("Inserting a viewing rule is not supported yet!")
453-
# viewing_rules.insertRule()
448+
for i, viewing_rule in enumerate(data.viewing_rules):
449+
name = viewing_rule["name"]
450+
encodings = viewing_rule["encodings"]
451+
LOGGER.debug(
452+
'Adding "%s" viewing rule with "%s" encodings.', name, encodings
453+
)
454+
viewing_rules.insertRule(i, name)
455+
for encoding in encodings:
456+
viewing_rules.addEncoding(i, encoding)
454457
config.setViewingRules(viewing_rules)
455458

456459
if data.default_view_transform is not None:

opencolorio_config_aces/config/reference/generate/config.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,7 @@ def generate_config_aces(
916916
"builtin_transform_style",
917917
"linked_display_colorspace_style",
918918
"interface",
919+
"viewing_rule",
919920
"encoding",
920921
"categories",
921922
"aliases",
@@ -1120,6 +1121,7 @@ def generate_config_aces(
11201121
"display": display_name,
11211122
"view": view_transform_name,
11221123
"view_transform": view_transform_name,
1124+
"rule": transform_data["viewing_rule"],
11231125
}
11241126
if shared_view not in shared_views:
11251127
LOGGER.info(
@@ -1238,12 +1240,41 @@ def ordering(element: str) -> int:
12381240
"transform_type": "BuiltinTransform",
12391241
"style": "UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD",
12401242
},
1243+
"rule": "Any Scene-linear or Log",
12411244
}
1245+
1246+
video_view_transform = {
1247+
"name": "Video (colorimetric)",
1248+
"from_reference": {
1249+
"transform_type": "MatrixTransform",
1250+
"matrix": [
1251+
1.0000000000,
1252+
0.0000000000,
1253+
0.0000000000,
1254+
0.0000000000,
1255+
0.0000000000,
1256+
1.0000000000,
1257+
0.0000000000,
1258+
0.0000000000,
1259+
0.0000000000,
1260+
0.0000000000,
1261+
1.0000000000,
1262+
0.0000000000,
1263+
0.0000000000,
1264+
0.0000000000,
1265+
0.0000000000,
1266+
1.0000000000,
1267+
],
1268+
},
1269+
"rule": "Any Video",
1270+
}
1271+
12421272
for display_name in display_names:
12431273
untonemapped_shared_view = {
12441274
"display": display_name,
12451275
"view": untonemapped_view_transform["name"],
12461276
"view_transform": untonemapped_view_transform["name"],
1277+
"rule": untonemapped_view_transform["rule"],
12471278
}
12481279
LOGGER.info(
12491280
'Adding "%s" shared view to "%s" display.',
@@ -1254,6 +1285,21 @@ def ordering(element: str) -> int:
12541285
if untonemapped_shared_view not in shared_views:
12551286
shared_views.append(untonemapped_shared_view)
12561287

1288+
video_shared_view = {
1289+
"display": display_name,
1290+
"view": video_view_transform["name"],
1291+
"view_transform": video_view_transform["name"],
1292+
"rule": video_view_transform["rule"],
1293+
}
1294+
LOGGER.info(
1295+
'Adding "%s" shared view to "%s" display.',
1296+
video_shared_view["view"],
1297+
display_name,
1298+
)
1299+
1300+
if video_shared_view not in shared_views:
1301+
shared_views.append(video_shared_view)
1302+
12571303
raw_view = {
12581304
"display": display_name,
12591305
"view": "Raw",
@@ -1290,17 +1336,25 @@ def ordering(element: str) -> int:
12901336
},
12911337
colorspaces=colorspaces + displays,
12921338
looks=looks,
1293-
view_transforms=[*view_transforms, untonemapped_view_transform],
1339+
view_transforms=[
1340+
*view_transforms,
1341+
untonemapped_view_transform,
1342+
video_view_transform,
1343+
],
12941344
shared_views=shared_views,
12951345
views=shared_views + views,
12961346
active_displays=display_names,
1297-
active_views=[*active_views, "Un-tone-mapped", "Raw"],
1347+
active_views=[*active_views, "Un-tone-mapped", "Video (colorimetric)", "Raw"],
12981348
file_rules=[
12991349
{
13001350
"name": "Default",
13011351
"colorspace": scene_reference_colorspace["name"],
13021352
}
13031353
],
1354+
viewing_rules=[
1355+
{"name": "Any Scene-linear or Log", "encodings": ["log", "scene-linear"]},
1356+
{"name": "Any Video", "encodings": ["sdr-video", "hdr-video"]},
1357+
],
13041358
default_view_transform=untonemapped_view_transform["name"],
13051359
profile_version=build_configuration.ocio,
13061360
)

0 commit comments

Comments
 (0)