Skip to content

Commit 71c64e9

Browse files
committed
Implement support for viewing rules.
Signed-off-by: Thomas Mansencal <[email protected]>
1 parent 9fccca1 commit 71c64e9

File tree

3 files changed

+137
-79
lines changed

3 files changed

+137
-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: 57 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",
@@ -1121,6 +1122,7 @@ def generate_config_aces(
11211122
"display": display_name,
11221123
"view": view_transform_name,
11231124
"view_transform": view_transform_name,
1125+
"rule": transform_data["viewing_rule"],
11241126
}
11251127
if shared_view not in shared_views:
11261128
LOGGER.info(
@@ -1239,12 +1241,42 @@ def ordering(element: str) -> int:
12391241
"transform_type": "BuiltinTransform",
12401242
"style": "UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD",
12411243
},
1244+
"rule": "Any Scene-linear or Log",
12421245
}
1246+
1247+
video_view_transform = {
1248+
"name": "Video (colorimetric)",
1249+
"from_reference": {
1250+
"transform_type": "MatrixTransform",
1251+
"matrix": [
1252+
1.0000000000,
1253+
0.0000000000,
1254+
0.0000000000,
1255+
0.0000000000,
1256+
0.0000000000,
1257+
1.0000000000,
1258+
0.0000000000,
1259+
0.0000000000,
1260+
0.0000000000,
1261+
0.0000000000,
1262+
1.0000000000,
1263+
0.0000000000,
1264+
0.0000000000,
1265+
0.0000000000,
1266+
0.0000000000,
1267+
1.0000000000,
1268+
],
1269+
},
1270+
"reference_space": ocio.REFERENCE_SPACE_DISPLAY,
1271+
"rule": "Any Video",
1272+
}
1273+
12431274
for display_name in display_names:
12441275
untonemapped_shared_view = {
12451276
"display": display_name,
12461277
"view": untonemapped_view_transform["name"],
12471278
"view_transform": untonemapped_view_transform["name"],
1279+
"rule": untonemapped_view_transform["rule"],
12481280
}
12491281
LOGGER.info(
12501282
'Adding "%s" shared view to "%s" display.',
@@ -1255,6 +1287,21 @@ def ordering(element: str) -> int:
12551287
if untonemapped_shared_view not in shared_views:
12561288
shared_views.append(untonemapped_shared_view)
12571289

1290+
video_shared_view = {
1291+
"display": display_name,
1292+
"view": video_view_transform["name"],
1293+
"view_transform": video_view_transform["name"],
1294+
"rule": video_view_transform["rule"],
1295+
}
1296+
LOGGER.info(
1297+
'Adding "%s" shared view to "%s" display.',
1298+
video_shared_view["view"],
1299+
display_name,
1300+
)
1301+
1302+
if video_shared_view not in shared_views:
1303+
shared_views.append(video_shared_view)
1304+
12581305
raw_view = {
12591306
"display": display_name,
12601307
"view": "Raw",
@@ -1291,17 +1338,25 @@ def ordering(element: str) -> int:
12911338
},
12921339
colorspaces=colorspaces + displays,
12931340
looks=looks,
1294-
view_transforms=[*view_transforms, untonemapped_view_transform],
1341+
view_transforms=[
1342+
*view_transforms,
1343+
untonemapped_view_transform,
1344+
video_view_transform,
1345+
],
12951346
shared_views=shared_views,
12961347
views=shared_views + views,
12971348
active_displays=display_names,
1298-
active_views=[*active_views, "Un-tone-mapped", "Raw"],
1349+
active_views=[*active_views, "Un-tone-mapped", "Video (colorimetric)", "Raw"],
12991350
file_rules=[
13001351
{
13011352
"name": "Default",
13021353
"colorspace": scene_reference_colorspace["name"],
13031354
}
13041355
],
1356+
viewing_rules=[
1357+
{"name": "Any Scene-linear or Log", "encodings": ["log", "scene-linear"]},
1358+
{"name": "Any Video", "encodings": ["sdr-video", "hdr-video"]},
1359+
],
13051360
default_view_transform=untonemapped_view_transform["name"],
13061361
profile_version=build_configuration.ocio,
13071362
)

0 commit comments

Comments
 (0)