Windows Phone 应用程序中的自定义 MFT
Posted
技术标签:
【中文标题】Windows Phone 应用程序中的自定义 MFT【英文标题】:custom MFT in windows phone app 【发布时间】:2014-11-10 22:45:19 【问题描述】:我需要创建一个自定义 MFT,因为这是在 windows phone 8.1(运行时,无 silverlight)上获取 YUV 格式的原始帧的唯一方法。
我知道这并不容易,但我别无选择。
我正在尝试学习 GrayscaleTransform 的例子:https://code.msdn.microsoft.com/windowsapps/Media-Capture-Sample-adf87622
但我真的不明白它是如何工作的。 我看到的唯一在应用程序中对 C++ 灰度有参考的是:
_mediaCaptureMgr.AddEffectAsync(Windows.Media.Capture.MediaStreamType.Photo,"GrayscaleTransform.GrayscaleEffect", null);
没有创建任何灰度实例,也没有调用任何方法。 所以,我想知道它是如何工作的?
谢谢,
塞巴斯蒂安
【问题讨论】:
【参考方案1】:MediaCapture 示例在其 Pakage.appxmanifest 第 35 行中注册了 GrayscaleTransform.GrayscaleEffect:
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>GrayscaleTransform.dll</Path>
<ActivatableClass ActivatableClassId="GrayscaleTransform.GrayscaleEffect" ThreadingModel="both" />
</InProcessServer>
</Extension>
这让 MediaCapture 对象找到添加的效果并将其添加到媒体管道。
应用还可以使用MediaExtensionManager class 注册 MFT。
【讨论】:
但是灰度实例化在哪里?我可以看到它的构造函数,析构函数,几十个方法,但是我没有看到任何主函数? 它基于对 AddEffectAsync 的调用在 MediaCapture 元素内部实例化。然后将其添加到媒体管道并在解码器和渲染器之间调用。 但是谁调用了灰度类中的方法呢? 这被称为媒体会话内部。应用程序通过在 MediaCapture 元素上调用 AddEffectAsync 来触发此操作,然后 MediaCapture 元素将 MFT 添加到管道中。请参阅msdn.microsoft.com/en-us/library/windows/desktop/… 处的图表 那么当 AddEffectAsync 调用自定义 MFT 时,它是实例化并放入管道中?这个 MFT 在 cpp 文件中的输入和输出在哪里?我不想要这种灰度效果,只是捕捉 YUV 格式的原始帧,你能给我一些提示吗?【参考方案2】:我想你在问在哪里可以找到灰度 cpp 文件本身。在解决方案资源管理器中,您可以在 MediaExtensions/MFExtensions/GrayscaleTransform/GrayscaleTransform.Shared/ 下找到它
在那里您将看到 Grayscale.cpp 及其所有功能。希望查看这些会有所帮助。
【讨论】:
以上是关于Windows Phone 应用程序中的自定义 MFT的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Phone 8.1 / Windows 10 上创建自定义 VirtualizingPanel?
TextBox.TextChanged 事件在 Windows Phone 7 模拟器上触发两次