retyping some CDL items

This commit is contained in:
2025-12-16 16:22:30 -08:00
parent d071d6c27e
commit 1d78f11b11
4 changed files with 33 additions and 33 deletions

View File

@@ -139,26 +139,17 @@ class Edit:
return self._clip_name_statement.name
@property
def asc_sop(self) -> Optional[AscSopComponents[str]]:
def asc_sop(self) -> Optional[AscSopComponents[float]]:
"""
Get ASC CDL Slope-Offset-Power transfer function for clip, if present
"""
if self._asc_sop_statement is None:
return None
s = self._asc_sop_statement
return AscSopComponents(
slope=Rgb(red=s.slope_r, green=s.slope_g,
blue=s.slope_b),
offset=Rgb(red=s.offset_r, green=s.offset_g,
blue=s.offset_g),
power=Rgb(red=s.power_r, green=s.power_g,
blue=s.power_b)
)
return self._asc_sop_statement.cdl_sop
@property
def asc_sat(self) -> Optional[str]:
def asc_sat(self) -> Optional[float]:
"""
Get ASC CDL saturation value for clip, if present
"""

View File

@@ -4,6 +4,8 @@
import re
from typing import TextIO, List
from pycmx.cdl import AscSopComponents, Rgb
from .statements import (StmtCdlSat, StmtCdlSop, StmtFrmc, StmtRemark,
StmtTitle, StmtUnrecognized, StmtFCM, StmtAudioExt,
StmtClipName, StmtEffectsName, StmtEvent,
@@ -117,11 +119,19 @@ def _parse_remark(line, line_number) -> object:
return StmtRemark(line, line_number)
else:
return StmtCdlSop(slope_r=v[0][0], slope_g=v[0][1],
slope_b=v[0][2], offset_r=v[1][0],
offset_g=v[1][1], offset_b=v[1][2],
power_r=v[2][0], power_g=v[2][1],
power_b=v[2][2], line_number=line_number)
try:
return StmtCdlSop(cdl_sop=AscSopComponents(
slope=Rgb(red=float(v[0][0]), green=float(v[0][1]),
blue=float(v[0][2])),
offset=Rgb(red=float(v[1][0]), green=float(v[1][1]),
blue=float(v[1][2])),
power=Rgb(red=float(v[2][0]), green=float(v[2][1]),
blue=float(v[2][2]))
),
line_number=line_number)
except ValueError:
return StmtRemark(line, line_number)
elif line.startswith("ASC_SAT"):
value = re.findall(r'(-?\d+(\.\d+)?)', line)
@@ -130,7 +140,12 @@ def _parse_remark(line, line_number) -> object:
return StmtRemark(line, line_number)
else:
return StmtCdlSat(value=value[0][0], line_number=line_number)
try:
return StmtCdlSat(value=float(value[0][0]),
line_number=line_number)
except ValueError:
return StmtRemark(line, line_number)
elif line.startswith("FRMC"):
match = re.match(
@@ -142,9 +157,9 @@ def _parse_remark(line, line_number) -> object:
else:
try:
return StmtFrmc(start=int(match.group(1)),
return StmtFrmc(start=int(match.group(1)),
end=int(match.group(2)),
duration=int(match.group(3)),
duration=int(match.group(3)),
line_number=line_number)
except ValueError:
return StmtRemark(line, line_number)

View File

@@ -5,6 +5,8 @@ from collections import namedtuple
from typing import NamedTuple
from pycmx.cdl import AscSopComponents
class StmtTitle(NamedTuple):
title: str
@@ -48,20 +50,12 @@ class StmtSourceFile(NamedTuple):
class StmtCdlSop(NamedTuple):
slope_r: str
slope_g: str
slope_b: str
offset_r: str
offset_g: str
offset_b: str
power_r: str
power_g: str
power_b: str
cdl_sop: AscSopComponents[float]
line_number: int
class StmtCdlSat(NamedTuple):
value: str
value: float
line_number: int

View File

@@ -146,13 +146,13 @@ class TestParse(TestCase):
sop = event.edits[0].asc_sop
self.assertIsNotNone(sop)
assert sop
self.assertEqual(sop.slope.red, "0.9405")
self.assertEqual(sop.offset.green, "-0.0276")
self.assertEqual(sop.slope.red, float("0.9405"))
self.assertEqual(sop.offset.green, float("-0.0276"))
sat = event.edits[0].asc_sat
self.assertIsNotNone(sat)
assert sat
self.assertEqual(sat, '0.9640')
self.assertEqual(sat, float('0.9640'))
def test_frmc(self):
with open("tests/edls/cdl_frmc_example01.edl", "r") as f: