Win10 Universal App 中的自定义媒体效果

Custom media effect in Win10 Universal App

我正在开发一个使用相机的通用 Windows 应用程序,我需要为相机创建自定义效果。该应用程序是用 C# 编写的,效果是一个使用媒体基础和 IDL 定义自定义 WinRT 组件的 C++ DLL。

我已经在 Windows 8.1 上成功执行了几次,并记录了以下技巧 here, or here

我现在想在 Windows 10 UWP 上移植它。我知道 Windows 10 上存在一个已知问题,它会导致编译器失败并显示错误 "Failed to load a dependency file. Windows.winmd"(请参阅 here)。但即使有了这个修复,我也无法成功构建组件。

这是 IDL:

import "Windows.Media.idl";

#include <sdkddkver.h>

namespace MyEffect
{
    [version(NTDDI_WIN10), activatable(NTDDI_WIN10)]
    runtimeclass MyEffect
    {
        [default] interface Windows.Media.IMediaExtension;
    }
}

MIDL 命令行(经过格式化以提高可读性):

/env win32 /h "MyEffect_h.h" /W1 /char signed /enum_class 
/tlb "$(OutDir)\MyEffect.tlb" /ns_prefix 
/metadata_dir "$(WindowsSDK_MetadataFoundationPath)" 
/nologo /winrt 
/winmd "$(OutDir)\MyEffect.winmd" 

此命令成功。然后我添加以下自定义构建步骤:

mdmerge -metadata_dir “<metadata_dir>” 
        -i “$(OutDir).” 
        -o “$(OutDir)merged” 
        -partial 
        -v

并且根据以下内容,此命令总是失败并出现不同的错误:

如果我输入 $(WindowsSDK_MetadataFoundationPath),它解析为 c:\Program Files (x86)\Windows Kits\References\windows.foundation.foundationcontract.0.0.0,或 $(WindowsSDK_MetadataPath),它解析为 c:\Program Files (x86)\Windows Kits\References 它 returns 错误:

MDMERGE : error MDM2002: The type "Windows.Media.IMediaExtension" defined in file <...>\MyEffect.winmd was referenced by type MyEffect.MyEffect but could not be found.

如果我输入 $(TargetPlatformSdkMetadataLocation),解析为 c:\Program Files (x86)\Windows Kits\References\CommonConfiguration\Neutral,它 returns 错误:

MDMERGE : error MDM2012: Error 3 has occured while enumerating files in C:\Program Files (x86)\Windows Kits\References\CommonConfiguration\Neutral\*.winmd.

有人知道如何为 UWP 编译自定义 Windows 媒体效果吗?

-metadata_dir 设置为 "C:\Program Files (x86)\Windows Kits\UnionMetadata" 对我有用。