diff --git a/pycmx/parse_cmx_statements.py b/pycmx/parse_cmx_statements.py index 53ad172..048aabd 100644 --- a/pycmx/parse_cmx_statements.py +++ b/pycmx/parse_cmx_statements.py @@ -3,7 +3,7 @@ import re from collections import namedtuple -from typing import TextIO, List +from typing import Any, TextIO, List from .statements import * from .util import collimate @@ -104,6 +104,26 @@ def _parse_remark(line, line_number) -> object: elif line.startswith("SOURCE FILE:"): return StmtSourceFile(filename=line[12:].strip(), line_number=line_number) + elif line.startswith("ASC_SOP"): + group_patterns: list[str] = re.findall(r'\((.*?)\)', line) + + v: list[list[str]] = [re.findall(r'-?\d+(\.\d+)?', a) for + a in group_patterns] + + if len(v) != 3 or any([len(a) != 3 for a in v]): + 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) + + elif line.startswith("ASC_SAT"): + ... + elif line.startswith("FRMC"): + ... else: return StmtRemark(text=line, line_number=line_number) diff --git a/pycmx/statements.py b/pycmx/statements.py index ef5df71..e9b1ab0 100644 --- a/pycmx/statements.py +++ b/pycmx/statements.py @@ -9,6 +9,11 @@ StmtEvent = namedtuple("Event", ["event", "source", "channels", "trans", StmtAudioExt = namedtuple("AudioExt", ["audio3", "audio4", "line_number"]) StmtClipName = namedtuple("ClipName", ["name", "affect", "line_number"]) StmtSourceFile = namedtuple("SourceFile", ["filename", "line_number"]) +StmtCdlSop = namedtuple("CdlSop", ['slope_r','slope_g','slope_b', + 'offset_r', 'offset_g', 'offset_b', + 'power_r', 'power_g', 'power_b', + 'line_number']) +StmtCdlSat = namedtuple("SdlSat", ['value']) StmtRemark = namedtuple("Remark", ["text", "line_number"]) StmtEffectsName = namedtuple("EffectsName", ["name", "line_number"]) StmtSourceUMID = namedtuple("Source", ["name", "umid", "line_number"]) diff --git a/tests/test_parse.py b/tests/test_parse.py index c468d78..2bbd3b4 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -137,3 +137,11 @@ class TestParse(TestCase): pycmx.Transition.Cut) self.assertEqual(event.edits[0].source_in, "18:44:20:12") + + + def test_cdl(self): + with open("tests/edls/cdl_example01.edl", "r") as f: + edl = pycmx.parse_cmx3600(f) + for event in edl.events: + if event.number == 1: + ...