Short answer: You must ship a DMFT as an INF-installed driver package (not just a regsvr32 COM DLL), so it falls under Windows driver/driver-package installation rules. Test-signing is fine for development and personal testing, but not for production distribution — for broad deployment you should follow the Windows Hardware Developer Center/driver-signing path. Implementation-wise, a DMFT receives whatever mediatypes the KS pin/devproxy exposes, so if the camera exposes compressed MJPEG your DMFT will see that mediatype and will need to decode -> flip -> (re)encode or negotiate an uncompressed input mediatype. For best compatibility, produce NV12 outputs and use Media Foundation allocators and work queues per the DMFT design guidance.
Concrete points and steps
- Installation/signing
- A DMFT is installed via a custom INF that registers the DMFT CLSID under the device key (Device MFT design guide and UVC guide). You can’t rely on a simple global regsvr32 registration for device-wide DMFT behavior.
- For development/personal use, test-signed driver packages are supported (see Introduction to Test-Signing). Do not use test signatures for production releases.
- For production distribution follow Microsoft’s driver-signing policies (Hardware Dev Center / EV-code-signing where required) and the Driver signing guidance.
- Frame-server / Frame-Server-like restrictions
- The official docs require per-device INF registration and, on some OS builds, both 32-bit and 64-bit DMFT registration for external cameras (see UVC guide). The docs do not state extra "Frame Server only" signing exceptions; assume normal driver-package signing policy applies.
- Implementing the horizontal flip
- The DMFT receives samples in the input mediatype the KS pin exposes; input mediatypes must match the driver’s mediatypes (Device MFT design guide). If the pin is MJPEG you will receive compressed MJPEG samples and must decode them to raw (or request the device to output an uncompressed mediatype) before pixel-level flips.
- For raw formats you can implement a flip by manipulating the pixel rows, but be careful: NV12 is planar (luma plane and subsampled chroma) and must be reversed per-plane with correct chroma handling; YUY2 is packed and requires swapping chroma pairs accordingly. The DMFT design guide requires the use of MF allocator APIs for non-inplace outputs, and recommends NV12 as the preferred output format.
- You must implement the required DMFT interfaces (IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl, IMFMediaEventGenerator) and use Media Foundation work queues (no custom thread creation).
Recommended next steps
- Implement your DMFT to accept the device’s input mediatypes and produce NV12 output (or negotiate uncompressed input).
- For development, test-sign the package and install via INF on your test machine. Validate with apps (Teams/Zoom/Chrome) that use the camera via the capture pipeline.
- For distribution, prepare a driver submission and follow Hardware Dev Center signing guidance.
Two quick questions to focus next advice:
- Do you plan to distribute this beyond your own machine(s) (production/other users)?
- Which Windows versions/builds do you primarily want to support (Windows 10, Windows 11, specific build numbers)?
Relevant docs (read first):
- DMFT design guide: https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/dmft-design
- UVC camera implementation guide (INF, Platform DMFT notes): https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-camera-implementation-guide
- Test-signing summary: https://learn.microsoft.com/en-us/windows-hardware/drivers/install/introduction-to-test-signing
- Driver signing policy: https://learn.microsoft.com/en-us/windows-hardware/drivers/install/driver-signing
- INF overview (INF-driven install required): https://learn.microsoft.com/en-us/windows-hardware/drivers/install/overview-of-inf-files
If you want, answer the two questions above and I’ll give a focused checklist (INF directives, exact interfaces to implement, and the minimal set of formats to support for a robust flip transform).