gpt4 book ai didi

c++ - Windows Media Foundation:IMFSourceReader::SetCurrentMediaType 执行时间问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:43 28 4
gpt4 key购买 nike

我目前正致力于从视频捕获设备中检索图像数据。对我来说重要的是我有一个相当特定格式的原始输出数据,我需要一个连续的数据流。因此我想使用 IMFSourceReader。我非常了解它是如何工作的。为了使整个管道正常工作,我检查了相机的输出格式并查看了可用的媒体基础转换 (MFT)。

这里的关键函数是IMFSourceReader::SetCurrentMediaType。我想详细说明我发现的一个关键功能。如果我只是使用带有所需输出格式参数的函数,它会更改一些参数,如 fps 或分辨率,但调用会成功。当我第一次使用带有我想要的参数和错误子类型(如 MJPG 或其他)的原生媒体类型调用该函数并使用我想要的参数和正确再次调用它时> subtype 调用成功,我得到了正确的参数。我怀疑这只有在合适的 MFT(解码器)可用时才是正确的。

到目前为止,我已经击败了 WMF,获得了我想要的东西。现在的问题是,第二次调用 IMFSourceReader::SetCurrentMediaType 需要很长时间。持续时间在很大程度上取决于所使用的相机。从 0.5s 到 10s 不等。老实说,我真的不知道为什么要花这么长时间,但我认为正确转换路径的计算和/或转换的初始化是问题所在。我发现过多地加载和卸载了相同的 dll(ntasn1.dll、ncrypt.dll、igd10iumd32.dll)。但是我自己加载一次并没有改变任何东西。

那么有人知道这个问题并且有快速解决方法吗?

或者有人知道解决方法:

  1. 通过媒体基础获取原始图像数据而不使用IMFSourceReader
  2. 自己选择并加载转换,以支持源阅读器调用?

最佳答案

您基本上首先描述了 Source Reader 的工作方式。底层媒体源有自己的媒体类型,如果读者需要适应请求的媒体类型和最接近的原始媒体类型,它可以提供转换。

视频捕获设备往往会公开许多 [本地] 媒体类型(我有一个网络摄像头,其中列举了 475 种!),因此如果格式适配不顺利,源代码阅读器可能需要一些时间来尝试一种或另一种转换。

请注意,您可以通过应用 certain attributes 来禁用源阅读器的转换像 MF_READWRITE_DISABLE_CONVERTERS,在这种情况下,无法直接在源上设置视频格式会导致失败。

您还可以读取原始设备格式的数据,并通过将数据输入一个或一系列 MFT 来自行解码/转换/处理。通常,当您在源阅读器上设置相应格式时,源阅读器会为您管理 MFT。但是,如果您愿意,您也可以自己做。不幸的是,您无法构建 MFT 链供源代码阅读器管理。要么将其完全留在源阅读器上,要么设置 native 媒体类型,从阅读器中以原始格式读取数据,然后通过执行 IMFTransform::ProcessInput 管理您这边的 MFT, IMFTransform::ProcessOutput 和 friend 。这不像源代码阅读器那么容易,但也是可行的。

关于c++ - Windows Media Foundation:IMFSourceReader::SetCurrentMediaType 执行时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740817/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com