【问题标题】:custom MFT in windows phone appWindows Phone 应用程序中的自定义 MFT
【发布时间】: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);

没有创建任何灰度实例,也没有调用任何方法。 所以,我想知道它是如何工作的?

谢谢,

塞巴斯蒂安

【问题讨论】:

    标签: windows-runtime windows-phone-8.1 ms-media-foundation


    【解决方案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 及其所有功能。希望查看这些会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多