fix(ambilight): [PKG-AMBILIGHT-PROXY-01] sample canvas output pixels after resizing

This commit is contained in:
Harvey Zhao committed 2026-09-12 12:04:41 +08:00
1 parent 959cccf515
commit 20f062bc90
19 files changed
+508 -20

No files matched your search

+22
View File
@@ -70,3 +70,25 @@ chapter,专项安装命令的存在不代表全部包已加入该门槛。
初始失败及明确限制见 [类型验证证据](baselines/ambilight-types-validation.json) 和
[实施记录](changes/2026-09-12-PKG-AMBILIGHT-04-types.md)。类型与两代导出具体风险已
关闭;当前待做范围为05/06,旧阶段记录保留其当时状态。
## 05拆出:Canvas输出尺寸
PKG-AMBILIGHT-PROXY-01从组合检查中独立修复采样边界:Canvas用实际width/height,
原生video保留videoWidth/videoHeight。`yarn test:ambilight`加入3项输出resize/零尺寸
与正常视频测试;修改前2失败/1通过,候选加历史/契约专项56项通过。
`yarn test:browser test/browser/ambilight-proxy.spec.js test/browser/ambilight-lifecycle.spec.js`
合计27项:6项真正Canvas组合(实际npm5.4.0/候选×三引擎)、3项实际npm5.1.7不支持
proxy配置的原生播放能力对照、18项原生生命周期和跨域恢复。Canvas组合使用实际工作区
代理源码和真实视频解码,通过公开callback绘制九色均匀区域,用原生getImageData
检查九格颜色。不是下载媒体或模拟canvas返回值;这不是实际npm代理归档兼容证明。
首次把5.1.7也当作代理是错误假设,诊断显示VIDEO节点、代理drawCount=0;旧option
声明和真实Artplayer.option都不存在proxy,最终断言明确此能力边界。初始失败及中间
诊断保留。本子项不关闭05最终设备/代理生命周期要求;代理自身仍需PKG-CANVAS系列
完成后回归,不能从Ambilight视图清理推导代理已无残余绘帧。见
[实施记录](changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md)。
子项最终56项Node专项、27项浏览器及978项CI通过,无skip;证据见
[代理采样验证](baselines/ambilight-proxy-validation.json)。05新增PKG-CANVAS-04依赖,
等待最终代理实现后再执行整体组合验收,当前保留todo;下一步先核对代理发布契约。
@@ -0,0 +1,198 @@
{
"schemaVersion": 1,
"task": "PKG-AMBILIGHT-PROXY-01",
"status": "done",
"parentCommit": "959cccf5151edafef16310b3ede38c3cd1614e50",
"change": "Internal sampling source accepts native video or canvas; canvas buffer width/height replaces forwarded video dimensions for canvas only.",
"checks": [
{
"command": "node --test test/ambilight-proxy.test.js (before source fix)",
"result": "expected-negative-control",
"tests": 3,
"failed": 2,
"passedNormalVideo": 1
},
{
"command": "node --test test/ambilight-proxy.test.js test/ambilight-lifecycle.test.js test/ambilight.test.js refactor/scripts/ambilight-contract.test.mjs",
"result": "pass",
"tests": 56
},
{
"command": "playwright test test/browser/ambilight-proxy.spec.js test/browser/ambilight-lifecycle.spec.js",
"result": "pass",
"tests": 27,
"actualCanvasCombinations": 6,
"oldCoreLacksProxyCapabilityObservations": 3,
"nativeLifecycleCases": 18,
"skipped": 0,
"stats": {
"startTime": "2026-09-12T03:57:46.543Z",
"duration": 33749.014,
"expected": 27,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"report": "refactor/.cache/ambilight-proxy01-final-results/report.json",
"archivedResults": "refactor/.cache/ambilight-proxy01-final-results/results",
"originalResultsPrefix": "refactor/.cache/browser/results",
"scope": "actual workspace canvas proxy with native video decode and native Canvas nine-color post-processing callback; 5.4.0/candidate proxy, 5.1.7 native capability boundary, three engines"
},
{
"command": "tsc -p packages/artplayer-plugin-ambilight/tsconfig.json and focused eslint --no-fix",
"result": "pass"
},
{
"command": "yarn build artplayer-plugin-ambilight",
"result": "pass",
"formats": [
"main",
"legacy",
"esm",
"docs/compiled copies"
]
},
{
"command": "yarn ci:check",
"result": "pass",
"tests": {
"unit": 881,
"engineering": 14,
"baseline": 83,
"mainTotal": 978,
"repeatedContractExecutions": 44
},
"strictProductionTypeScriptFiles": 278
}
],
"failedIterations": [
{
"report": "refactor/.cache/ambilight-proxy01-before-results/report.json",
"scope": "Initial Chromium: two actual proxy color failures, one unsupported 5.1.7 proxy assumption"
},
{
"report": "refactor/.cache/ambilight-proxy01-first-fixed-results/report.json",
"scope": "Six actual proxy combinations pass, three unsupported 5.1.7 cases fail before draw"
},
{
"report": "refactor/.cache/ambilight-proxy01-capability-probe-results/report.json",
"scope": "Ready wait does not change old core VIDEO host; 24 pass, 3 unsupported-proxy failures; state attachments identify native host"
},
{
"log": "refactor/.cache/ambilight-proxy01-ci.log",
"scope": "New prerequisite left parent incorrectly doing; plan guard rejected unfinished dependency. Parent now todo until Canvas migration and this child are complete."
}
],
"inputs": [
{
"file": "packages/artplayer-plugin-ambilight/src/sampler.ts",
"sha256LF": "e6f4ea2795b500aa2ac8ffe4b65da4269e8b3457a9912808537bdacfbe9f5328"
},
{
"file": "packages/artplayer-plugin-ambilight/src/index.ts",
"sha256LF": "9db25144798ee667bc420b3e1f0b00ef6855185d26cefca45e05271354bf8591"
},
{
"file": "packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.js",
"sha256LF": "21ee5227f26cfff6e82ee6932f6eafc9741fa3be0ec2f5252a47b53ceea14599"
},
{
"file": "packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.legacy.js",
"sha256LF": "c3ed1a54e44a0202811d70378cb19edf87b1ebd010d05fe96ebe64d0b4301d5d"
},
{
"file": "packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.mjs",
"sha256LF": "ef126959819c4973da27dbb1e60ccccc54386c23f8c7750ce1ba4d38f306aaaa"
},
{
"file": "packages/artplayer-proxy-canvas/src/index.js",
"sha256LF": "4b5922b05b46adf0d54ae92025b5c70456a5b8c87819c797ef91eb50e0c8f4d4"
},
{
"file": "packages/artplayer-proxy-canvas/package.json",
"sha256LF": "4df3a0098730cfc12232fc57066fd1f7159bbd41dce87904fa51f39b82252eed"
},
{
"file": "test/ambilight-proxy.test.js",
"sha256LF": "f284ea3069d66c36b62756cef468701c6fbc91cd17343843715d59b03779b928"
},
{
"file": "test/browser/ambilight-proxy.spec.js",
"sha256LF": "048d6b12dd26d174e978fcc68abed47df17ff232cb351583e4785ebbae6e5122"
},
{
"file": "test/browser/ambilight-lifecycle.spec.js",
"sha256LF": "321693a24d33f0c7aee02fd4137b55175386562a645ba138e15c3a51d6348d2c"
},
{
"file": "test/browser/server.mjs",
"sha256LF": "af513e1e64f875668b6a7cbd060276d85d930e0cc1715577e97907cc26c3b58d"
},
{
"file": "test/helpers/ambilight.js",
"sha256LF": "8cb80dba5270860afc121e3a02336a6cdb20b0a6a41e058cde11efe9174fba4f"
},
{
"file": "refactor/baselines/vast-core.json",
"sha256LF": "bb703cf37591211f78719665aed0e0cb2524ec5618dad48e6b8e2dbfef132b8e"
},
{
"file": "refactor/baselines/releases.json",
"sha256LF": "56054ecd0b861c91a14bf83fcb4243ab6f5ddb27004ad8eb98901c1f85f9b426"
},
{
"file": "package.json",
"sha256LF": "a94c6ded6fecef73e84932eb1f7c31de42e1ca02814fcd69c807f50c52fc8924"
}
],
"logs": [
{
"file": "refactor/.cache/ambilight05-proxy-before.log",
"sha256": "02856164dc6566f05aa2336159f06352130356a86b046774acef09c8a4017090"
},
{
"file": "refactor/.cache/ambilight-proxy01-node-before.log",
"sha256": "c43e7fd44d1227028443339300fe940c7d2e483aa6bd6740f4f084b40da9ca73"
},
{
"file": "refactor/.cache/ambilight-proxy01-unit.log",
"sha256": "dbed1c54e564b2cdbfd587eb46961bc3288eef4c249943c94e5196f9d678d496"
},
{
"file": "refactor/.cache/ambilight-proxy01-browser.log",
"sha256": "68ec5effee410003f046d78bd9fb22858a5fd999f4328c0bd26e92206dec312a"
},
{
"file": "refactor/.cache/ambilight-proxy01-browser-final.log",
"sha256": "f5ef93ef517b1f1d66152699db77734d318d4a970d5d8f8259004c494e414bc0"
},
{
"file": "refactor/.cache/ambilight-proxy01-browser-corrected.log",
"sha256": "b3702456e39ed6e8be3504a123065d4004b8e9f17ceaf6bbf53c124dd42e98da"
},
{
"file": "refactor/.cache/ambilight-proxy01-build.log",
"sha256": "74a43735bbd36337dc218a3990b9f3571bdb8cf9b1115782ff325a0b4a6530e4"
},
{
"file": "refactor/.cache/ambilight-proxy01-lint-final.log",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"file": "refactor/.cache/ambilight-proxy01-ci.log",
"sha256": "312049cd0a59b220249a033eef5589d22d9755b9c06b6988e89d4828742eb49f"
},
{
"file": "refactor/.cache/ambilight-proxy01-ci-final.log",
"sha256": "306ccefd21e8d8d860e9b576f8b6aa00cb057dde86c21a0b583e417584aa2b16"
}
],
"limitations": [
"The actual npm core 5.1.7 option declaration and runtime option object lack proxy. It is not counted as a canvas combination.",
"Proxy source is current workspace JS, not an immutable npm proxy release. Freeze proxy history in PKG-CANVAS-01.",
"Proxy-owned async bitmap/RAF/terminal semantics remain unrefactored and are not validated by Ambilight grid removal.",
"PKG-AMBILIGHT-05 depends on PKG-CANVAS-04 and remains todo for final integration/device acceptance; task 06 remains todo.",
"Only formatting line breaks changed in the browser test after its final successful run; focused lint passed afterward. Candidate and proxy executed bundle bytes are recorded in report attachments.",
"No public type or export changes, no dependency installation, push, version bump or publication."
]
}
@@ -0,0 +1,44 @@
# PKG-AMBILIGHT-PROXY-01 Canvas输出取色边界
从05组合检查中拆出可独立验证的源码修复;05仍需最终代理迁移后的组合和设备证据。
当前实际proxy-canvas源码由本步输入哈希固定,未把工作区代理版本当作npm历史包。
## 复现与修改
原生canvas proxy在输出buffer改变尺寸后仍转发底层videoWidth/videoHeight。Ambilight
原实现按转发媒体尺寸截取canvas,导致九宫格采样偏向左上角;浏览器真实视频解码后
通过代理公开callback绘制九色native Canvas图案,以均匀颜色直接验证各区域取色,
不mock像素读取、代理工厂或媒体播放。初始Chromium中5.4.0/候选核心均取错颜色。
采样模块内部来源类型明确为HTMLVideoElement或HTMLCanvasElement;根据nodeName
区分Canvas输出,使用其width/height。原生video仍使用videoWidth/videoHeight,显示
宽高不影响取色。保留频率/生命周期/公共Option/Result及所有导出;Canvas零输出
尺寸不采样,恢复尺寸后可继续。不使用跨window容易失效的instanceof判断。
3项Node用例在修改前2失败/1正常视频通过,修改后与既有回归共56项通过。覆盖输出
二次resize、原生视频显示尺寸与零Canvas输出恢复。完整三格式构建、专项lint/严格
TS以及完整CI978项通过(881单元+14工程+83基线),另44项重复契约观察。
## 纠正历史能力假设
最初把5.1.7也当作canvas组合,读取不到代理draw回调;增加ready等待仍失败。
诊断附件明确实际节点为VIDEO,而不是CANVAS。核对实际npm5.1.7的option声明和
浏览器Artplayer.option均没有proxy配置,证明旧核心直接忽略该选项。这不是Canvas
取色修复失败,也不能声称对该核心验证了代理。最终用单独能力断言记录该历史限制,
同时确认原生Ambilight仍可播放取色;不会向旧核心注入虚构代理支持。
最终浏览器矩阵包含6项真正canvas组合(5.4.0/候选×三引擎)、3项5.1.7无proxy配置
但原生播放的能力对照、18项既有原生视频生命周期/跨域恢复。失败与通过报告分开归档。
Canvas代理本身仍是未迁移代码,其异步绘帧/终止/事件归属继续由PKG-CANVAS-01至06
核验;本步不能据“移除了Ambilight DOM”推断代理已无残余RAF。05增加PKG-CANVAS-04
前置依赖,在依赖满足前保留todo并记录预检证据;06完整分发/demo也未完成。本子任务
完成后独立本地commit,无推送/发布。下一步推进PKG-CANVAS-01发布契约,随后迁移代理。
## 验证收尾
最终27项浏览器全部通过,无skip;56项Node专项通过,278个生产TS文件严格检查。
报告、输入哈希、初始颜色错误/中间能力诊断和完整CI日志见
[验证证据](../baselines/ambilight-proxy-validation.json)。期间计划检查正确拒绝了新依赖
未完成却将父任务标doing的状态;已改为依赖满足前todo,再完成本子任务。格式lint
修正仅将对象字段换行,未修改已经通过的浏览器测试含义。
+8 -5
View File
@@ -2,9 +2,9 @@
> 由 tasks.json 生成。请修改数据后运行 `node refactor/scripts/plan.mjs --write`,不要手改本表。
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 220 项,范围 22 个包及工作区/示例。
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 221 项,范围 22 个包及工作区/示例。
状态:todo 126 / doing 6 / blocked 0 / done 88 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
状态:todo 126 / doing 6 / blocked 0 / done 89 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
@@ -16,7 +16,7 @@
| --- | --- | --- |
| artplayer | 5.4.1 | CORE-01, CORE-02, CORE-03, CORE-04, CORE-05, CORE-06, CORE-07, CORE-08, CORE-09, CORE-10, CORE-11, CORE-12, CORE-13, CORE-14, CORE-15, CORE-16, CORE-17, CORE-18, CORE-19, CORE-20, CORE-21, CORE-23, CORE-22, CORE-24 |
| artplayer-plugin-ads | 2.1.0 | PKG-ADS-01, PKG-ADS-02, PKG-ADS-03, PKG-ADS-04, PKG-ADS-05, PKG-ADS-06 |
| artplayer-plugin-ambilight | 1.1.0 | PKG-AMBILIGHT-01, PKG-AMBILIGHT-02, PKG-AMBILIGHT-03, PKG-AMBILIGHT-04, PKG-AMBILIGHT-05, PKG-AMBILIGHT-06 |
| artplayer-plugin-ambilight | 1.1.0 | PKG-AMBILIGHT-01, PKG-AMBILIGHT-02, PKG-AMBILIGHT-03, PKG-AMBILIGHT-04, PKG-AMBILIGHT-PROXY-01, PKG-AMBILIGHT-05, PKG-AMBILIGHT-06 |
| artplayer-plugin-asr | 2.1.0 | PKG-ASR-01, PKG-ASR-02, PKG-ASR-03, PKG-ASR-04, PKG-ASR-05, PKG-ASR-06 |
| artplayer-plugin-audio-track | 1.1.0 | PKG-AUDIO-01, PKG-AUDIO-02, PKG-AUDIO-03, PKG-AUDIO-04, PKG-AUDIO-05, PKG-AUDIO-06 |
| artplayer-plugin-auto-thumbnail | 1.1.0 | PKG-AUTO-THUMB-01, PKG-AUTO-THUMB-02, PKG-AUTO-THUMB-03, PKG-AUTO-THUMB-04, PKG-AUTO-THUMB-05, PKG-AUTO-THUMB-06 |
@@ -31,7 +31,7 @@
| artplayer-plugin-multiple-subtitles | 1.2.0 | PKG-MULTI-SUB-01, PKG-MULTI-SUB-02, PKG-MULTI-SUB-03, PKG-MULTI-SUB-04, PKG-MULTI-SUB-05, PKG-MULTI-SUB-06 |
| artplayer-plugin-vast | 1.2.0 | PKG-VAST-01, PKG-VAST-02, PKG-VAST-03, PKG-VAST-04, PKG-VAST-05, PKG-VAST-06 |
| artplayer-plugin-vtt-thumbnail | 1.1.0 | PKG-VTT-THUMB-01, PKG-VTT-THUMB-02, PKG-VTT-THUMB-03, PKG-VTT-THUMB-04, PKG-VTT-THUMB-05, PKG-VTT-THUMB-06 |
| artplayer-proxy-canvas | 1.1.0 | PKG-CANVAS-01, PKG-CANVAS-02, PKG-CANVAS-03, PKG-CANVAS-04, PKG-CANVAS-05, PKG-CANVAS-06 |
| artplayer-proxy-canvas | 1.1.0 | PKG-AMBILIGHT-PROXY-01, PKG-CANVAS-01, PKG-CANVAS-02, PKG-CANVAS-03, PKG-CANVAS-04, PKG-CANVAS-05, PKG-CANVAS-06 |
| artplayer-proxy-mediabunny | 1.2.0 | PKG-MB-01, PKG-MB-02, PKG-MB-03, PKG-MB-04, PKG-MB-05, PKG-MB-06, PKG-MB-07, PKG-MB-08, PKG-MB-09, PKG-MB-10 |
| artplayer-tool-iframe | 1.1.0 | PKG-IFRAME-01, PKG-IFRAME-02, PKG-IFRAME-03, PKG-IFRAME-04, PKG-IFRAME-05, PKG-IFRAME-06 |
| artplayer-tool-thumbnail | 4.4.0 | PKG-TOOL-THUMB-01, PKG-TOOL-THUMB-02, PKG-TOOL-THUMB-03, PKG-TOOL-THUMB-04, PKG-TOOL-THUMB-05, PKG-TOOL-THUMB-06 |
@@ -152,7 +152,8 @@
| PKG-AMBILIGHT-02 | artplayer-plugin-ambilight<br>建立特有行为与错误测试 | PKG-AMBILIGHT-01, ENG-03, ENG-05 | 跨域 canvas 失败、零尺寸、暂停、重复 start/stop 和 destroy | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | M | done |
| PKG-AMBILIGHT-03 | artplayer-plugin-ambilight<br>整理内部职责与资源 | PKG-AMBILIGHT-02, CORE-03, CORE-12 | 取色计算与绘帧分离,统一 RAF 和 DOM 清理 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | M | done |
| PKG-AMBILIGHT-04 | artplayer-plugin-ambilight<br>迁移自有源码和公开类型 | PKG-AMBILIGHT-03, ENG-04, ENG-06, CORE-07 | canvas 上下文、参数及 start/stop 的明确类型 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | M | done |
| PKG-AMBILIGHT-05 | artplayer-plugin-ambilight<br>验证新旧核心和组合 | PKG-AMBILIGHT-04, CORE-22 | 原生 video、canvas proxy 的能力边界及销毁无帧循环 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | M | todo |
| PKG-AMBILIGHT-PROXY-01 | artplayer-plugin-ambilight, artplayer-proxy-canvas<br>修复Canvas代理输出尺寸与取色区域 | PKG-AMBILIGHT-04, CORE-22 | 按Canvas实际输出buffer取色,原生video保留intrinsic尺寸,明确5.1.7没有proxy配置 | 旧错误复现、三引擎实际代理九色区域对照及原生视频回归通过;不把本子项当作最终代理/设备验收 | M | done |
| PKG-AMBILIGHT-05 | artplayer-plugin-ambilight<br>验证新旧核心和组合 | PKG-AMBILIGHT-04, CORE-22, PKG-AMBILIGHT-PROXY-01, PKG-CANVAS-04 | 原生 video、canvas proxy 的能力边界及销毁无帧循环 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | M | todo |
| PKG-AMBILIGHT-06 | artplayer-plugin-ambilight<br>验证分发并同步文档 | PKG-AMBILIGHT-05, ENG-07 | ambilight.js 示例及样式/分发验证 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | M | todo |
## 5 包迁移:artplayer-plugin-audio-track
@@ -480,6 +481,8 @@
- PKG-AMBILIGHT-02: [记录](changes/2026-09-12-PKG-AMBILIGHT-02-tests.md) [记录](baselines/ambilight-behavior-validation.json) [记录](ambilight-validation.md)
- PKG-AMBILIGHT-03: [记录](changes/2026-09-12-PKG-AMBILIGHT-03-lifecycle.md) [记录](ambilight-validation.md) [记录](baselines/ambilight-lifecycle-validation.json)
- PKG-AMBILIGHT-04: [记录](changes/2026-09-12-PKG-AMBILIGHT-04-types.md) [记录](ambilight-validation.md) [记录](baselines/ambilight-types-validation.json)
- PKG-AMBILIGHT-PROXY-01: [记录](changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md) [记录](ambilight-validation.md) [记录](baselines/ambilight-proxy-validation.json)
- PKG-AMBILIGHT-05: [记录](changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md) [记录](ambilight-validation.md)
- PKG-AUDIO-01: [记录](changes/2026-09-12-PKG-AUDIO-01-contract.md) [记录](baselines/audio-track-contract.md) [记录](baselines/audio-track-release.json)
- PKG-AUDIO-02: [记录](changes/2026-09-12-PKG-AUDIO-02-tests.md) [记录](audio-validation.md) [记录](baselines/audio-validation.json)
- PKG-AUDIO-03: [记录](changes/2026-09-12-PKG-AUDIO-03-lifecycle.md) [记录](baselines/audio-lifecycle-validation.json)
+11
View File
@@ -1,5 +1,16 @@
# 进度与证据
## 最新完成:Ambilight-PROXY-01 Canvas输出区域修复
组合测试复现Canvas缩放后仍按底层视频尺寸截取而取错九格颜色;内部明确video/canvas
来源类型,Canvas采用输出buffer尺寸,原生video保留intrinsic尺寸。3项新Node测试
修改前2失败/1正常通过,专项56项、最终27项浏览器及978项完整CI通过。浏览器实际
覆盖6项Canvas组合、3项5.1.7没有proxy配置的原生能力对照、18项既有生命周期回归,
没有把未启用代理算作组合通过。新增独立子任务,当前221项:89 done、6 doing、
126 todo。05增加PKG-CANVAS-04依赖,代理自身仍未迁移;下一步PKG-CANVAS-01核对
真实发布和历史契约,再推进TS迁移。见 [实施记录](changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md)
和 [验证证据](baselines/ambilight-proxy-validation.json)。独立本地提交,无推送/发布。
## 最新完成:Ambilight-04 公开类型与两代导出
公共声明补齐可选调用,保留1.1.0的Parameters推导;CJS直接调用与历史.default自别名
+1
View File
@@ -154,3 +154,4 @@
| AMBILIGHT-LIFE-01 | open / 已复现 | Ambilight sampling and RAF/DOM ownership lack terminal/error handling | PKG-AMBILIGHT-02, PKG-AMBILIGHT-03, PKG-AMBILIGHT-05 |
| AMBILIGHT-TYPE-01 | resolved / 已复现 | Ambilight declarations disagree with optional factory argument and differ across published generations | PKG-AMBILIGHT-04, PKG-AMBILIGHT-06 |
| AMBILIGHT-DIST-01 | resolved / 已复现 | Ambilight 1.0.0 CommonJS default namespace differs from callable 1.1.0 | PKG-AMBILIGHT-04, PKG-AMBILIGHT-06 |
| AMBILIGHT-PROXY-01 | resolved / 已复现 | Canvas proxy output pixels differ from forwarded video dimensions | PKG-AMBILIGHT-PROXY-01, PKG-AMBILIGHT-05 |
+20
View File
@@ -3319,6 +3319,26 @@
"refactor/baselines/ambilight-types-validation.json"
],
"resolutionRationale": "Actual production and installed root/legacy callable factories have self default identity, native ESM default is callable and script globals match. Public default/import= consumers pass. Broader deep-import/demo/package-browser review remains task 06."
},
{
"id": "AMBILIGHT-PROXY-01",
"title": "Canvas proxy output pixels differ from forwarded video dimensions",
"confirmation": "reproduced",
"status": "resolved",
"owners": [
"PKG-AMBILIGHT-PROXY-01",
"PKG-AMBILIGHT-05"
],
"compatibleResolution": "Sample Canvas width/height while native video retains intrinsic videoWidth/videoHeight; preserve public calls and lifecycle.",
"closureCriteria": "Node resize/zero-size/normal-video and actual supported-core canvas palette comparisons pass across three engines.",
"evidence": [
"refactor/changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md"
],
"resolutionEvidence": [
"refactor/changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
"refactor/baselines/ambilight-proxy-validation.json"
],
"resolutionRationale": "Node output resize/zero-size and normal video tests pass; actual 5.4.0/candidate canvas proxy nine-color regions pass across three engines. Actual 5.1.7 lacks proxy option and is recorded as a native capability observation, not a canvas pass. Proxy-owned lifecycle and final device acceptance remain tasks CANVAS and AMBILIGHT-05."
}
]
}
+29 -2
View File
@@ -1536,6 +1536,28 @@
"baselines/ambilight-types-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-PROXY-01",
"phase": "5 包迁移:artplayer-plugin-ambilight",
"title": "修复Canvas代理输出尺寸与取色区域",
"scope": [
"artplayer-plugin-ambilight",
"artplayer-proxy-canvas"
],
"dependsOn": [
"PKG-AMBILIGHT-04",
"CORE-22"
],
"status": "done",
"risk": "M",
"deliverable": "按Canvas实际输出buffer取色,原生video保留intrinsic尺寸,明确5.1.7没有proxy配置",
"acceptance": "旧错误复现、三引擎实际代理九色区域对照及原生视频回归通过;不把本子项当作最终代理/设备验收",
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
"ambilight-validation.md",
"baselines/ambilight-proxy-validation.json"
]
},
{
"id": "PKG-AMBILIGHT-05",
"phase": "5 包迁移:artplayer-plugin-ambilight",
@@ -1545,13 +1567,18 @@
],
"dependsOn": [
"PKG-AMBILIGHT-04",
"CORE-22"
"CORE-22",
"PKG-AMBILIGHT-PROXY-01",
"PKG-CANVAS-04"
],
"status": "todo",
"risk": "M",
"deliverable": "原生 video、canvas proxy 的能力边界及销毁无帧循环",
"acceptance": "最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成",
"evidence": []
"evidence": [
"changes/2026-09-12-PKG-AMBILIGHT-PROXY-01-sampling.md",
"ambilight-validation.md"
]
},
{
"id": "PKG-AMBILIGHT-06",