Part of #920 (rank 5). Effort S, risk low.
Problem
- The compositor decodes every recording as BT.709 limited range.
- Screen track: no colour tags at all (
color_range/space/primaries = unknown, measured). On the CPU path mf_encoder.cpp deletes MF_MT_VIDEO_NOMINAL_RANGE and MF_MT_YUV_MATRIX and lets the MFT choose the RGB32 → YUV matrix, which is not guaranteed BT.709 (hypothesis: NVENC or the Video Processor MFT may pick BT.601).
- Webcam track: range and matrix tagged, but primaries and transfer read
reserved (measured): MF_MT_VIDEO_PRIMARIES and MF_MT_TRANSFER_FUNCTION are never set.
Proposal
- Pin the conversion to BT.709 limited and tag range, matrix, primaries (
MFVideoPrimaries_BT709) and transfer (MFVideoTransFunc_709) on both tracks.
Verify
ffprobe -show_streams | grep color_ reads tv / bt709 / bt709 / bt709 on both tracks.
- Solid red captured and read back as raw YUV: Y≈63, Cb≈102, Cr≈240 (BT.709). Y≈81, Cb≈90 means BT.601.
Part of #920 (rank 5). Effort S, risk low.
Problem
color_range/space/primaries = unknown, measured). On the CPU pathmf_encoder.cppdeletesMF_MT_VIDEO_NOMINAL_RANGEandMF_MT_YUV_MATRIXand lets the MFT choose the RGB32 → YUV matrix, which is not guaranteed BT.709 (hypothesis: NVENC or the Video Processor MFT may pick BT.601).reserved(measured):MF_MT_VIDEO_PRIMARIESandMF_MT_TRANSFER_FUNCTIONare never set.Proposal
MFVideoPrimaries_BT709) and transfer (MFVideoTransFunc_709) on both tracks.Verify
ffprobe -show_streams | grep color_readstv / bt709 / bt709 / bt709on both tracks.