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 return self._clip_name_statement.name
@property @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 Get ASC CDL Slope-Offset-Power transfer function for clip, if present
""" """
if self._asc_sop_statement is None: if self._asc_sop_statement is None:
return None return None
s = self._asc_sop_statement return self._asc_sop_statement.cdl_sop
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)
)
@property @property
def asc_sat(self) -> Optional[str]: def asc_sat(self) -> Optional[float]:
""" """
Get ASC CDL saturation value for clip, if present Get ASC CDL saturation value for clip, if present
""" """

View File

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

View File

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

View File

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