diff --git a/app/runner/test_runner.py b/app/runner/test_runner.py index e58692c..b7c1b73 100644 --- a/app/runner/test_runner.py +++ b/app/runner/test_runner.py @@ -309,9 +309,26 @@ def send_fix_pattern(self, mode): self.log_gui.log("=" * 50, level="separator") - # 信号格式设置后等待电视重新锁定 HDMI 信号 - # format_changed=True 表示本次 set_video_mode 的参数与上次不同,TV 需要重新锁定 - format_changed = getattr(getattr(self, "ucd", None), "format_changed", True) + # 判定信号是否变化(决定 settle 长度)。 + # - SDR/HDR:prepare_session 内部已调用 ``apply_signal_format`` → ``set_video_mode``, + # 此时 ``format_changed`` 反映本次 vs 上次的差异,可直接读取。 + # - screen_module:prepare_session 只 stage 了 color_info/timing,未调用 + # ``set_video_mode``,``format_changed`` 仍是上次测试的陈旧值,按"潜在变化"处理。 + # 注意:必须在 prime 提交之前读取,否则 prime 的 set_video_mode 会拿当次 + # 参数与刚写入的 ``_last_sent_config`` 比对,得到 False,把这个标志覆盖掉。 + if mode == "screen_module": + format_changed = True + else: + format_changed = bool( + getattr(getattr(self, "ucd", None), "format_changed", True) + ) + + # 预热提交:prepare_session 仅 stage 了新的 color/timing/pattern, + # 真正的 ``pg.apply()`` 要到第一次发图时才发生。提前发送首个 pattern, + # 让 TV 在 signal_settle 期间就开始重新锁定信号; + # 否则前 1~2 个 pattern 会落在 TV 锁定窗口里导致测量错误。 + self.pattern_service.send_session_pattern(session, 0) + if format_changed: signal_settle = max(1.0, float(getattr(self, "signal_settle_time", 5.0))) self.log_gui.log( @@ -355,8 +372,13 @@ def send_fix_pattern(self, mode): else: self.log_gui.log(f"发送第 {i+1}/{total_patterns} 个图案...", level="info") - self.pattern_service.send_session_pattern(session, i) - time.sleep(settle_time) + # 首图已在 prime 阶段发送并经 signal_settle 稳定,无需重发也无需再等 + # settle_time;后续 pattern 走正常发图 + 等待。 + if i == 0: + pass + else: + self.pattern_service.send_session_pattern(session, i) + time.sleep(settle_time) # 测量数据 if mode == "custom": diff --git a/settings/pq_config.json b/settings/pq_config.json index 8924277..4fe447f 100644 --- a/settings/pq_config.json +++ b/settings/pq_config.json @@ -1,5 +1,5 @@ { - "current_test_type": "sdr_movie", + "current_test_type": "screen_module", "test_types": { "screen_module": { "name": "屏模组性能测试", @@ -9,7 +9,7 @@ "cct", "contrast" ], - "timing": "DMT 1600x 1200 @ 60Hz", + "timing": "OVT 1280x 720 @ 120Hz", "color_format": "RGB", "bpc": 8, "colorimetry": "sRGB",