修改摸底测试功能、修改pattern控制逻辑
This commit is contained in:
@@ -13,7 +13,6 @@ import colour
|
||||
import numpy as np
|
||||
|
||||
import algorithm.pq_algorithm as pq_algorithm
|
||||
from app.data_range_converter import convert_pattern_params
|
||||
from app.pq.pq_result import PQResult
|
||||
|
||||
def new_pq_results(self, test_type, test_name):
|
||||
@@ -310,205 +309,12 @@ def send_fix_pattern(self, mode):
|
||||
results = []
|
||||
|
||||
try:
|
||||
# 1. 设置图案模式
|
||||
if mode == "rgb":
|
||||
self.config.set_current_pattern("rgb")
|
||||
elif mode == "gray":
|
||||
self.config.set_current_pattern("gray")
|
||||
elif mode == "accuracy": # 色准模式(SDR 和 HDR 通用 29色)
|
||||
self.config.set_current_pattern("accuracy")
|
||||
elif mode == "custom":
|
||||
self.config.set_current_pattern("custom")
|
||||
else:
|
||||
self.log_gui.log(f"未知的图案模式: {mode}", level="error")
|
||||
return None
|
||||
|
||||
# 2. 获取当前测试类型
|
||||
test_type = self.config.current_test_type
|
||||
|
||||
# 3. 根据测试类型设置信号格式和图案
|
||||
if test_type == "screen_module":
|
||||
# 屏模组测试:使用 Timing
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
self.log_gui.log("设置屏模组信号格式:", level="info")
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
|
||||
timing_str = self.config.current_test_types[test_type]["timing"]
|
||||
self.log_gui.log(f" Timing: {timing_str}", level="info")
|
||||
|
||||
# 屏模组测试:直接使用原始配置
|
||||
self.ucd.set_ucd_params(self.config)
|
||||
|
||||
elif test_type == "sdr_movie":
|
||||
# SDR 测试:设置色彩空间、Gamma 等
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
self.log_gui.log("设置 SDR 信号格式:", level="info")
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
|
||||
color_space = self.sdr_color_space_var.get()
|
||||
gamma = self.sdr_gamma_type_var.get()
|
||||
data_range = self.sdr_data_range_var.get()
|
||||
bit_depth = self.sdr_bit_depth_var.get()
|
||||
|
||||
self.log_gui.log(f" 色彩空间: {color_space}", level="info")
|
||||
self.log_gui.log(f" Gamma: {gamma}", level="info")
|
||||
self.log_gui.log(f" 数据范围: {data_range}", level="info")
|
||||
self.log_gui.log(f" 编码位深: {bit_depth}", level="info")
|
||||
|
||||
success = self.ucd.set_sdr_format(
|
||||
color_space=color_space,
|
||||
gamma=gamma,
|
||||
data_range=data_range,
|
||||
bit_depth=bit_depth,
|
||||
)
|
||||
|
||||
if success:
|
||||
self.log_gui.log("SDR 信号格式设置成功", level="success")
|
||||
else:
|
||||
self.log_gui.log("SDR 信号格式设置失败", level="error")
|
||||
|
||||
# 设置图案参数
|
||||
if mode == "accuracy":
|
||||
self.log_gui.log(f"设置 SDR 29色色准测试图案...", level="info")
|
||||
else:
|
||||
self.log_gui.log(f"设置 SDR 测试图案({mode} 模式)...", level="info")
|
||||
|
||||
# ========== ✅✅修改:使用临时配置对象 ==========
|
||||
import copy
|
||||
|
||||
# 从原始配置获取参数(每次都是干净的)
|
||||
if mode == "rgb":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_rgb["pattern_params"]
|
||||
)
|
||||
elif mode == "gray":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_gray["pattern_params"]
|
||||
)
|
||||
elif mode == "accuracy":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_accuracy["pattern_params"]
|
||||
)
|
||||
elif mode == "custom":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_temp["pattern_params"]
|
||||
)
|
||||
|
||||
self.log_gui.log(f" 使用原始 RGB 参数(前 3 个):", level="info")
|
||||
for i in range(min(3, len(original_params))):
|
||||
self.log_gui.log(f" [{i+1}] {original_params[i]}", level="info")
|
||||
|
||||
# 根据 data_range 转换
|
||||
converted_params = convert_pattern_params(
|
||||
pattern_params=original_params, data_range=data_range, verbose=False
|
||||
)
|
||||
|
||||
if data_range == "Limited":
|
||||
self.log_gui.log(" 转换为 Limited Range (16-235):", level="info")
|
||||
for i in range(min(3, len(converted_params))):
|
||||
self.log_gui.log(
|
||||
f" {original_params[i]} → {converted_params[i]}"
|
||||
, level="info")
|
||||
else:
|
||||
self.log_gui.log("Full Range,RGB 保持不变", level="success")
|
||||
|
||||
# 创建临时配置对象(不修改 self.config)
|
||||
temp_config = self.config.get_temp_config_with_converted_params(
|
||||
mode=mode, converted_params=converted_params
|
||||
)
|
||||
|
||||
# 使用临时配置设置参数
|
||||
self.ucd.set_ucd_params(temp_config)
|
||||
|
||||
self.log_gui.log(f"图案参数已设置,共 {len(converted_params)} 个图案", level="success")
|
||||
# ========== 修改结束 ==========
|
||||
|
||||
elif test_type == "hdr_movie":
|
||||
# HDR 测试:设置色彩空间、Metadata 等
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
self.log_gui.log("设置 HDR 信号格式:", level="info")
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
|
||||
color_space = self.hdr_color_space_var.get()
|
||||
data_range = self.hdr_data_range_var.get()
|
||||
bit_depth = self.hdr_bit_depth_var.get()
|
||||
max_cll = self.hdr_maxcll_var.get()
|
||||
max_fall = self.hdr_maxfall_var.get()
|
||||
|
||||
self.log_gui.log(f" 色彩空间: {color_space}", level="info")
|
||||
self.log_gui.log(f" 数据范围: {data_range}", level="info")
|
||||
self.log_gui.log(f" 编码位深: {bit_depth}", level="info")
|
||||
self.log_gui.log(f" MaxCLL: {max_cll}", level="info")
|
||||
self.log_gui.log(f" MaxFALL: {max_fall}", level="info")
|
||||
|
||||
success = self.ucd.set_hdr_format(
|
||||
color_space=color_space,
|
||||
data_range=data_range,
|
||||
bit_depth=bit_depth,
|
||||
max_cll=max_cll,
|
||||
max_fall=max_fall,
|
||||
)
|
||||
|
||||
if success:
|
||||
self.log_gui.log("HDR 信号格式设置成功", level="success")
|
||||
else:
|
||||
self.log_gui.log("HDR 信号格式设置失败", level="error")
|
||||
|
||||
# 设置图案参数
|
||||
if mode == "accuracy":
|
||||
self.log_gui.log(f"设置 HDR 29色色准测试图案...", level="info")
|
||||
else:
|
||||
self.log_gui.log(f"设置 HDR 测试图案({mode} 模式)...", level="info")
|
||||
|
||||
# ========== ✅✅修改:使用临时配置对象 ==========
|
||||
import copy
|
||||
|
||||
# 从原始配置获取参数
|
||||
if mode == "rgb":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_rgb["pattern_params"]
|
||||
)
|
||||
elif mode == "gray":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_gray["pattern_params"]
|
||||
)
|
||||
elif mode == "accuracy":
|
||||
original_params = copy.deepcopy(
|
||||
self.config.default_pattern_accuracy["pattern_params"]
|
||||
)
|
||||
|
||||
self.log_gui.log(f" 使用原始 RGB 参数(前 3 个):", level="info")
|
||||
for i in range(min(3, len(original_params))):
|
||||
self.log_gui.log(f" [{i+1}] {original_params[i]}", level="info")
|
||||
|
||||
# 根据 data_range 转换
|
||||
converted_params = convert_pattern_params(
|
||||
pattern_params=original_params, data_range=data_range, verbose=False
|
||||
)
|
||||
|
||||
if data_range == "Limited":
|
||||
self.log_gui.log(" 转换为 Limited Range (16-235):", level="info")
|
||||
for i in range(min(3, len(converted_params))):
|
||||
self.log_gui.log(
|
||||
f" {original_params[i]} → {converted_params[i]}"
|
||||
, level="info")
|
||||
else:
|
||||
self.log_gui.log("Full Range,RGB 保持不变", level="success")
|
||||
|
||||
# 创建临时配置对象
|
||||
temp_config = self.config.get_temp_config_with_converted_params(
|
||||
mode=mode, converted_params=converted_params
|
||||
)
|
||||
|
||||
self.ucd.set_ucd_params(temp_config)
|
||||
|
||||
self.log_gui.log(f"图案参数已设置,共 {len(converted_params)} 个图案", level="success")
|
||||
# ========== 修改结束 ==========
|
||||
session = self.pattern_service.prepare_session(mode, log_details=True)
|
||||
|
||||
self.log_gui.log("=" * 50, level="separator")
|
||||
|
||||
# 4. 循环发送图案并采集数据(使用原始配置的数量)
|
||||
total_patterns = len(self.config.current_pattern["pattern_params"])
|
||||
# 4. 循环发送图案并采集数据
|
||||
total_patterns = session.total_patterns
|
||||
self.log_gui.log(f"开始采集数据,共 {total_patterns} 个图案", level="info")
|
||||
settle_time = max(0.2, float(getattr(self, "pattern_settle_time", 1.0)))
|
||||
progress_step = max(
|
||||
@@ -518,14 +324,7 @@ def send_fix_pattern(self, mode):
|
||||
f"采集等待时间: {settle_time:.2f}s(可通过 pattern_settle_time 调整)"
|
||||
, level="info")
|
||||
|
||||
# 获取颜色名称列表(用于日志显示)
|
||||
color_names = None
|
||||
if mode == "accuracy":
|
||||
color_names = self.config.get_accuracy_color_names()
|
||||
|
||||
custom_pattern_names = []
|
||||
if mode == "custom" and hasattr(self.config, "get_temp_pattern_names"):
|
||||
custom_pattern_names = self.config.get_temp_pattern_names()
|
||||
display_names = session.display_names
|
||||
|
||||
for i in range(total_patterns):
|
||||
if not self.testing:
|
||||
@@ -538,17 +337,15 @@ def send_fix_pattern(self, mode):
|
||||
or ((i + 1) % progress_step == 0)
|
||||
)
|
||||
|
||||
# 设置下一个图案(显示颜色名称)
|
||||
if should_log_detail:
|
||||
if color_names and i < len(color_names):
|
||||
if display_names and i < len(display_names):
|
||||
self.log_gui.log(
|
||||
f"发送第 {i+1}/{total_patterns} 个图案: {color_names[i]}..."
|
||||
f"发送第 {i+1}/{total_patterns} 个图案: {display_names[i]}..."
|
||||
, level="info")
|
||||
else:
|
||||
self.log_gui.log(f"发送第 {i+1}/{total_patterns} 个图案...", level="info")
|
||||
|
||||
self.ucd.set_next_pattern()
|
||||
self.ucd.run()
|
||||
self.pattern_service.send_session_pattern(session, i)
|
||||
time.sleep(settle_time)
|
||||
|
||||
# 测量数据
|
||||
@@ -582,8 +379,8 @@ def send_fix_pattern(self, mode):
|
||||
)
|
||||
row_data = {
|
||||
"pattern_name": (
|
||||
custom_pattern_names[i]
|
||||
if i < len(custom_pattern_names)
|
||||
display_names[i]
|
||||
if i < len(display_names)
|
||||
else f"P {i + 1}"
|
||||
),
|
||||
"X": X,
|
||||
|
||||
Reference in New Issue
Block a user