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?

Windows Phone 7 室内地图控制

TextBox.TextChanged 事件在 Windows Phone 7 模拟器上触发两次

如何在 Windows Phone 8 中更改数据透视表头模板

PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享

Windows 安装程序,在 C++ 中访问自定义操作中的自定义属性