Files

191 lines
4.4 KiB
Python
Raw Permalink Normal View History

2026-04-16 16:51:05 +08:00
import json
import base64
from enum import IntEnum
from typing import Union
class CMTFormat(IntEnum):
RGB_LEGACY = 0
XVYCC_422_BT601 = 1
XVYCC_444_BT601 = 2
RGB_WIDE_FIXED = 3
RGB_CEA = 4
YCBCR_422_BT601 = 5
YCBCR_444_BT601 = 6
DCI_P3 = 7
XVYCC_422_BT709 = 9
XVYCC_444_BT709 = 10
RGB_WIDE_FLOAT = 11
RGB_ADOBE = 12
YCBCR_422_BT709 = 13
YCBCR_444_BT709 = 14
COLOR_PROFILE = 15
Y_ONLY = 16
RAW = 17
class CMTVSCFormat(IntEnum):
SRGB = 0x00
RGB_WIDE_FIXED_VCS = 0x01
RGB_WIDE_FLOAT_VCS = 0x02
RGB_ADOBE_V = 0x03
RGB_DCI_P3 = 0x04
RGB_CUSTOM_PROFILE = 0x05
RGB_BT2020 = 0x06
YCBCR_444_BT601_VCS = 0x10
YCBCR_444_BT709_VCS = 0x11
YCBCR_444_XVYCC601 = 0x12
YCBCR_444_XVYCC709 = 0x13
YCBCR_444_SYCC601 = 0x14
YCBCR_444_ADOBE_YCC601 = 0x15
YCBCR_444_BT2020_YCCBCCRC = 0x16
YCBCR_444_BT2020_YCBCR = 0x17
YCBCR_422_BT601_VCS = 0x20
YCBCR_422_BT709_VCS = 0x21
YCBCR_422_XVYCC601 = 0x22
YCBCR_422_XVYCC709 = 0x23
YCBCR_422_SYCC601 = 0x24
YCBCR_422_ADOBE_YCC601 = 0x25
YCBCR_422_BT2020_YCCBCCRC = 0x26
YCBCR_422_BT2020_YCBCR = 0x27
YCBCR_420_BT601 = 0x30
YCBCR_420_BT709 = 0x31
YCBCR_420_XVYCC601 = 0x32
YCBCR_420_XVYCC709 = 0x33
YCBCR_420_SYCC601 = 0x34
YCBCR_420_ADOBE_YCC601 = 0x35
YCBCR_420_BT2020_YCCBCCRC = 0x36
YCBCR_420_BT2020_YCBCR = 0x37
Y_ONLY_DICOM = 0x40
RAW_CUSTOM_PROFILE = 0x50
YCBCR_SIMPLE_422_BT601 = 0x60
YCBCR_SIMPLE_422_BT709 = 0x61
YCBCR_SIMPLE_422_XVYCC601 = 0x62
YCBCR_SIMPLE_422_XVYCC709 = 0x63
YCBCR_SIMPLE_422_SYCC601 = 0x64
YCBCR_SIMPLE_422_ADOBE_YCC601 = 0x65
YCBCR_SIMPLE_422_BT2020_YCCBCCRC = 0x66
YCBCR_SIMPLE_422_BT2020_YCBCR = 0x67
class CMTBitDepth(IntEnum):
BPC_6 = 0
BPC_8 = 1
BPC_10 = 2
BPC_12 = 3
BPC_16 = 4
# BPP_RAW_6 = 1
# BPP_RAW_7 = 2
# BPP_RAW_8 = 3
# BPP_RAW_10 = 4
# BPP_RAW_12 = 5
# BPP_RAW_14 = 6
# BPP_RAW_16 = 7
class CMTVSCBitDepth(IntEnum):
BPC_RGB_6 = 0
BPC_RGB_8 = 1
BPC_RGB_10 = 2
BPC_RGB_12 = 3
BPC_RGB_16 = 4
BPC_YCBCR_8 = 1
BPC_YCBCR_10 = 2
BPC_YCBCR_12 = 3
BPC_YCBCR_16 = 4
# BPP_RAW_6 = 1
# BPP_RAW_7 = 2
# BPP_RAW_8 = 3
# BPP_RAW_10 = 4
# BPP_RAW_12 = 5
# BPP_RAW_14 = 6
# BPP_RAW_16 = 7
def make_cf(color_format: CMTFormat, bpc: CMTBitDepth):
return (((color_format & 15) << 1) | ((bpc & 7) << 5))
def make_vsc_cf(color_format: CMTVSCFormat, bpc: CMTVSCBitDepth):
return ((1 << 14) | ((color_format << 16) | ((bpc & 7) << 24)))
class TestReportConfigType(IntEnum):
Another = -1
Dp1_4_Source = 0
Dp2_1_Source = 1
Dp1_4_Sink = 2
Dp2_1_Sink = 3
Dp2_1_Lttpr = 4
class TestResult(IntEnum):
Unknown = -1
Passed = 0
Failed = 1
Skipped = 2
Aborted = 3
def contains(params, config_id):
for item in params:
if item.config_id_name == config_id:
return True
return False
def is_need_to_update_test_configuration(params):
if contains(params, "TSI_DP14_SRCCTS_TIMEOUT"):
return TestReportConfigType.Dp1_4_Source
elif contains(params, "TSI_DP20_SRCCTS_TIMEOUT"):
return TestReportConfigType.Dp2_1_Source
elif contains(params, "TSI_DP14_SINKCTS_TIMEOUT"):
return TestReportConfigType.Dp1_4_Sink
elif contains(params, "TSI_DP20_SINKCTS_TIMEOUT"):
return TestReportConfigType.Dp2_1_Sink
else:
return TestReportConfigType.Another
def search_bit(mask):
count = 0
if mask:
while not (mask & 1):
mask >>= 1
count += 1
return count
def update_default_value(value, default_value, mask):
old_value = default_value
offset = search_bit(mask)
value = (value << offset) & mask
old_value &= ~mask
old_value |= value
return old_value
def convert_to_cdf_json_base64(params, test_group):
group_info = str(hex(test_group)).replace("0x", "").zfill(8)
result_json = {"Header_Type": f"Group_0x{group_info}_Config"}
for item in params:
result_json.update({item.config_id_name:
f"{int(item.default_value) if isinstance(item.default_value, bool) else item.default_value}"})
temp = json.dumps(result_json, indent=4)
sample_string_bytes = temp.encode()
base64_bytes = base64.b64encode(sample_string_bytes)
base64_string = base64_bytes.decode()
return base64_string