中文说明
问题现象
Windows 上使用默认 MFT:d3d=11 解码/渲染 Dolby Vision Profile 5 视频时,从 0ms 第一帧开始就出现严重橙色/洋红/黑色失真,已经无法正常观看,并非轻微色差。seek 或恢复非零历史进度后仍然错误,并会进一步暴露 RPU/颜色附件丢失。正确结果应当是 Dolby Vision 到 SDR 色调映射后的正常颜色。
该问题可以在未修改源码的官方 mdk-examples/flutter/simple 示例中复现,因此可以排除应用 UI 或自定义播放封装。
关键证据
- 官方
simple 从 0ms 起播,第一帧日志为 player 1st video frame rendered @0.000000ms,实际画面已经严重橙色/黑色失真。
- 同一时刻 MDK 正确识别
Dolby Vision Profile 5, BL RPU,实际解码器为 MFT;日志仍报告 BT2100 PQ 到 BT709、tone map: 1、dyhdr: 1,说明这些状态标志并不代表视觉输出正确。
- 正式应用和最小探针从
828000 ms 恢复播放时同样立即出现严重错误颜色。
- seek 后发生
MF_E_TRANSFORM_STREAM_CHANGE,帧颜色变成 UNSPECIFIED。
- 随后
tone map 和 dyhdr 均从 1 变成 0,并连续出现 per frame attachment not found。
- 附件分别包含官方示例
0ms 第一帧的严重橙色/黑色失真,以及 seek 后的严重洋红/灰色失真。
预期行为
从 0ms 第一帧、任意初始位置、恢复历史进度以及每次 seek 后,都应保持正确的 Dolby Vision Profile 5 到 SDR 映射,输出正常 BT.709 颜色。发生 MFT 流变化后,应保留或重新关联逐帧 RPU/颜色附件,而不是关闭 tone mapping 和 dynamic HDR。
完整环境、复现步骤、日志转换和解码器 A/B 见下方英文说明。附件包含脱敏完整日志、官方示例 0ms 错误颜色截图和 seek 后错误颜色截图。
English
Describe the bug
On Windows, Dolby Vision Profile 5 playback through the default MFT:d3d=11 decode/render path produces severely incorrect orange/magenta/black colors from the first frame at 0 ms. The video is already unwatchable before any seek; this is not a subtle color-accuracy difference. Seeking or restoring a non-zero position remains incorrect and additionally exposes loss of the RPU/color attachment. The same frames should have normal SDR colors through Dolby Vision-to-SDR tone mapping.
At 0 ms, the official sample logs player 1st video frame rendered @0.000000ms, recognizes Profile 5, and reports BT.2100 PQ to BT.709 with tone map: 1 and dyhdr: 1, but the actual image is already severely orange/black. Our application and minimal probe at 828000 ms show the same class of severe corruption. After seeking/position restore, MFT reports MF_E_TRANSFORM_STREAM_CHANGE; the first post-seek P010 frames lose their color metadata and per-frame Dolby Vision attachment, and MDK changes tone map/dyhdr from 1 to 0.
This reproduces in the unmodified official mdk-examples/flutter/simple application, so it is not caused by our application UI or playback abstraction.
Versions / environment
fvp 0.37.3
video_player 2.11.1
- MDK
0.37.0 (git f293c14)
mdk-examples commit 128cdcd014d908c0b77ee1d45a84354a99527f0b
fvp master checked at 114a520ebff302128f526ca8c85e983c6af7a0e5
- Flutter
3.41.5, Dart 3.11.3
- Windows 11 x64 build
26200
- Intel Iris Xe Graphics, driver
32.0.101.7085
- Microsoft HEVC Video Extensions
2.5.25.0
- Windows profile build; actual video decoder reported by MDK:
MFT
Media properties
- MP4, 3840x1608, 25 fps, HEVC Main 10 /
dvhe
- Dolby Vision 1.0 Profile 5 Level 6, BL RPU, full range
- Approximately 11.4 Mbps video bitrate
- The source cannot be publicly redistributed. Additional traces or a legally permissible minimal sample can be provided if needed.
Steps to reproduce
- Check out
mdk-examples commit 128cdcd014d908c0b77ee1d45a84354a99527f0b.
- In
flutter/simple, run flutter pub get and flutter build windows --profile.
- Start the unmodified sample with a file URI as the last argument:
simple.exe "file:///C:/media/dv5_sample.mp4"
- Let playback initialize, then either seek to approximately
828271 ms or reproduce through an application that restores an initial position near 828000 ms (00:13:48.271) and pause after the post-seek frame appears.
- Observe the severely magenta/gray frame and the following log transition.
A file URI is used so the unmodified example enters its VideoPlayerController.network path. Passing a raw local path on first startup hits an unrelated example initialization issue (_controller.dispose() before _controller is initialized).
Relevant log transition
At 0 ms, the log reports Dolby Vision processing and SDR tone mapping as active, but the visual output is already severely wrong:
Dolby Vision 1.0 Profile 5 Level 6, BL RPU
opening video decoder: MFT
frame color: BT2100 PQ RGB Full
output color: BT709 UNSPECIFIED RGB Full
tone map: 1. dyhdr: 1
Immediately after seek / MFT stream change:
player.seek(828271, 1026, ...)
MF_E_TRANSFORM_STREAM_CHANGE. status: 0x100
frame color: UNSPECIFIED UNSPECIFIED UNSPECIFIED Full
tone map: 0. dyhdr: 0
per frame attachment not found
The full sanitized log is attached below.
Decoder A/B
- Default
MFT:d3d=11: hardware decoding starts quickly and identifies DV Profile 5, but the first frame at 0 ms already has severely wrong colors; positioning/seek can additionally lose its RPU/color attachment.
-c:v FFmpeg: identifies the same DV Profile 5 stream, but on this machine it did not display a first frame within approximately 50 seconds, used high CPU, and repeatedly cycled buffering from 0% to 100%; it is not a practical fallback for this 4K stream.
Expected behavior
From the first frame at 0 ms, when opening at any initial position, restoring a saved position, and after every seek, the Dolby Vision Profile 5 video should render with normal, correctly tone-mapped SDR colors. After MF_E_TRANSFORM_STREAM_CHANGE, MDK should preserve or re-associate the per-frame Dolby Vision RPU/color attachment, keep tone map: 1 and dyhdr: 1, and continue producing a correctly tone-mapped BT.709 image.
Why is the DV Profile 5 to SDR output visually incorrect even while MDK reports tone map: 1 and dyhdr: 1 at 0 ms? Is there an option that fixes the initial color conversion and restores the RPU attachment after MFT stream changes, or does this require an MDK/MFT-path fix?
Attachments
mdk-simple-dv5-mft-sanitized.txt


中文说明
问题现象
Windows 上使用默认
MFT:d3d=11解码/渲染 Dolby Vision Profile 5 视频时,从0ms第一帧开始就出现严重橙色/洋红/黑色失真,已经无法正常观看,并非轻微色差。seek 或恢复非零历史进度后仍然错误,并会进一步暴露 RPU/颜色附件丢失。正确结果应当是 Dolby Vision 到 SDR 色调映射后的正常颜色。该问题可以在未修改源码的官方
mdk-examples/flutter/simple示例中复现,因此可以排除应用 UI 或自定义播放封装。关键证据
simple从0ms起播,第一帧日志为player 1st video frame rendered @0.000000ms,实际画面已经严重橙色/黑色失真。Dolby Vision Profile 5, BL RPU,实际解码器为MFT;日志仍报告BT2100 PQ到BT709、tone map: 1、dyhdr: 1,说明这些状态标志并不代表视觉输出正确。828000 ms恢复播放时同样立即出现严重错误颜色。MF_E_TRANSFORM_STREAM_CHANGE,帧颜色变成UNSPECIFIED。tone map和dyhdr均从1变成0,并连续出现per frame attachment not found。0ms第一帧的严重橙色/黑色失真,以及 seek 后的严重洋红/灰色失真。预期行为
从
0ms第一帧、任意初始位置、恢复历史进度以及每次 seek 后,都应保持正确的 Dolby Vision Profile 5 到 SDR 映射,输出正常 BT.709 颜色。发生 MFT 流变化后,应保留或重新关联逐帧 RPU/颜色附件,而不是关闭 tone mapping 和 dynamic HDR。完整环境、复现步骤、日志转换和解码器 A/B 见下方英文说明。附件包含脱敏完整日志、官方示例
0ms错误颜色截图和 seek 后错误颜色截图。English
Describe the bug
On Windows, Dolby Vision Profile 5 playback through the default
MFT:d3d=11decode/render path produces severely incorrect orange/magenta/black colors from the first frame at0 ms. The video is already unwatchable before any seek; this is not a subtle color-accuracy difference. Seeking or restoring a non-zero position remains incorrect and additionally exposes loss of the RPU/color attachment. The same frames should have normal SDR colors through Dolby Vision-to-SDR tone mapping.At
0 ms, the official sample logsplayer 1st video frame rendered @0.000000ms, recognizes Profile 5, and reports BT.2100 PQ to BT.709 withtone map: 1anddyhdr: 1, but the actual image is already severely orange/black. Our application and minimal probe at828000 msshow the same class of severe corruption. After seeking/position restore, MFT reportsMF_E_TRANSFORM_STREAM_CHANGE; the first post-seek P010 frames lose their color metadata and per-frame Dolby Vision attachment, and MDK changestone map/dyhdrfrom1to0.This reproduces in the unmodified official
mdk-examples/flutter/simpleapplication, so it is not caused by our application UI or playback abstraction.Versions / environment
fvp 0.37.3video_player 2.11.10.37.0 (git f293c14)mdk-examplescommit128cdcd014d908c0b77ee1d45a84354a99527f0bfvpmaster checked at114a520ebff302128f526ca8c85e983c6af7a0e53.41.5, Dart3.11.32620032.0.101.70852.5.25.0MFTMedia properties
dvheSteps to reproduce
mdk-examplescommit128cdcd014d908c0b77ee1d45a84354a99527f0b.flutter/simple, runflutter pub getandflutter build windows --profile.828271 msor reproduce through an application that restores an initial position near828000 ms(00:13:48.271) and pause after the post-seek frame appears.A file URI is used so the unmodified example enters its
VideoPlayerController.networkpath. Passing a raw local path on first startup hits an unrelated example initialization issue (_controller.dispose()before_controlleris initialized).Relevant log transition
At
0 ms, the log reports Dolby Vision processing and SDR tone mapping as active, but the visual output is already severely wrong:Immediately after seek / MFT stream change:
The full sanitized log is attached below.
Decoder A/B
MFT:d3d=11: hardware decoding starts quickly and identifies DV Profile 5, but the first frame at0 msalready has severely wrong colors; positioning/seek can additionally lose its RPU/color attachment.-c:v FFmpeg: identifies the same DV Profile 5 stream, but on this machine it did not display a first frame within approximately 50 seconds, used high CPU, and repeatedly cycled buffering from 0% to 100%; it is not a practical fallback for this 4K stream.Expected behavior
From the first frame at
0 ms, when opening at any initial position, restoring a saved position, and after every seek, the Dolby Vision Profile 5 video should render with normal, correctly tone-mapped SDR colors. AfterMF_E_TRANSFORM_STREAM_CHANGE, MDK should preserve or re-associate the per-frame Dolby Vision RPU/color attachment, keeptone map: 1anddyhdr: 1, and continue producing a correctly tone-mapped BT.709 image.Why is the DV Profile 5 to SDR output visually incorrect even while MDK reports
tone map: 1anddyhdr: 1at0 ms? Is there an option that fixes the initial color conversion and restores the RPU attachment after MFT stream changes, or does this require an MDK/MFT-path fix?Attachments
mdk-simple-dv5-mft-sanitized.txt
