Skip to content

Commit b24e150

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

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",
@@ -1119,6 +1120,7 @@ def generate_config_aces(
11191120
"display": display_name,
11201121
"view": view_transform_name,
11211122
"view_transform": view_transform_name,
1123+
"rule": transform_data["viewing_rule"],
11221124
}
11231125
if shared_view not in shared_views:
11241126
LOGGER.info(
@@ -1237,12 +1239,41 @@ def ordering(element: str) -> int:
12371239
"transform_type": "BuiltinTransform",
12381240
"style": "UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD",
12391241
},
1242+
"rule": "Any Scene-linear or Log",
12401243
}
1244+
1245+
video_view_transform = {
1246+
"name": "Video (colorimetric)",
1247+
"from_reference": {
1248+
"transform_type": "MatrixTransform",
1249+
"matrix": [
1250+
1.0000000000,
1251+
0.0000000000,
1252+
0.0000000000,
1253+
0.0000000000,
1254+
0.0000000000,
1255+
1.0000000000,
1256+
0.0000000000,
1257+
0.0000000000,
1258+
0.0000000000,
1259+
0.0000000000,
1260+
1.0000000000,
1261+
0.0000000000,
1262+
0.0000000000,
1263+
0.0000000000,
1264+
0.0000000000,
1265+
1.0000000000,
1266+
],
1267+
},
1268+
"rule": "Any Video",
1269+
}
1270+
12411271
for display_name in display_names:
12421272
untonemapped_shared_view = {
12431273
"display": display_name,
12441274
"view": untonemapped_view_transform["name"],
12451275
"view_transform": untonemapped_view_transform["name"],
1276+
"rule": untonemapped_view_transform["rule"],
12461277
}
12471278
LOGGER.info(
12481279
'Adding "%s" shared view to "%s" display.',
@@ -1253,6 +1284,21 @@ def ordering(element: str) -> int:
12531284
if untonemapped_shared_view not in shared_views:
12541285
shared_views.append(untonemapped_shared_view)
12551286

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

0 commit comments

Comments
 (0)