- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有人知道为什么 IMemAllocator:GetBuffer 的任何原因吗? (Directshow) 挂起,除了所有正在使用的样本?
我有一个使用 GMFBridge by Geraint Davies 的 directshow 应用程序连接两个图形。 GMFBridge 用于能够切换输入,但我在这种情况下不切换。该应用程序捕获音频和视频,并且应该不间断地进行。但大约 10 小时后它停止了。我发现音频和视频都卡在了对 IMemAllocator:GetBuffer 的调用中:
/* _COM_SMARTPTR_TYPEDEF(IMemAllocator, IID_IMemAllocator); */
/* IMemAllocatorPtr m_pCopyAllocator; */
hr = m_pCopyAllocator->GetBuffer(&pOut, NULL, NULL, 0);
如果所有示例都在使用中,则此函数可能会阻塞,但我很确定情况并非如此。有两个线程调用此函数,一个用于视频样本,一个用于音频样本。音频线程首先阻塞,在 GetBuffer 返回了近 60 个视频样本的缓冲区后,视频线程也阻塞了。 (这是大约 2 秒后)
在将近 8 小时后,两个线程都继续了一小段时间,首先是音频线程,在返回了 45 个用于音频样本的缓冲区之后,视频线程也解除了阻塞。
因为两个线程不会同时阻塞,所以在我看来所有样本都在使用中没有问题。
堆栈跟踪显示 quartz.dll 中的一个函数正在那个时刻被调用。
更新
看来电脑上已经安装了解码器过滤器,导致内存泄漏。该图包括 mpeg 的解码,例如使用 cyberlink 解码器的音频解码。安装ffdshow后,改用ffdshow音视频解码器,问题似乎消失了。吸取教训,不要自动依赖现有过滤器。
最佳答案
不确定我能否根据给定的信息对此进行调试。你能创建一个日志文件吗(创建一个空文件 c:\gmfbridge.txt,运行直到它挂起,然后压缩文件并通过电子邮件发送)。此外,如果您使用 _NT_SYMBOL_PATH 设置您的符号,您可以查看堆栈跟踪以了解各种线程在 quartz.dll 中的位置。
G
关于c++ - IMemAllocator :GetBuffer hangs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478403/
我想从 Python 3 中的 numpy 数组中获取缓冲区。我找到了以下代码: $ python3 Python 3.2.3 (default, Sep 25 2013, 18:25:56) [GC
为什么我收到这些代码的错误消息: TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTra
有人知道为什么 IMemAllocator:GetBuffer 的任何原因吗? (Directshow) 挂起,除了所有正在使用的样本? 我有一个使用 GMFBridge by Geraint Dav
我正在尝试理解 GetBuffer() 函数。看起来它会返回指向 CString 的指针,这在 msdn GetBuffer() 中得到了确认。 .但是,我不明白 msdn GetBuffer() 中
我知道 GetBuffer()在 C#/.NET 中的 MemoryStream 上必须小心使用,因为正如文档所描述的 here ,最后可能有未使用的字节,因此您必须确保只查看缓冲区中的第一个 Mem
在我的自定义输出引脚中,我调用 IMemAllocator->GetBuffer 来获取新样本并将数据复制到其中: HRESULT MCMyOutputPin::Deliver(IMediaSampl
我已经开始使用 C# 和 .NET Core,我正尝试在 https://stackoverflow.com/a/23739932/1459684 的答案中实现代码 但是,我的线条有问题writer.
也许我快疯了,但我已经尝试了所有我能想到的搜索组合,但我找不到不带参数的 CString::GetBuffer() 的定义。我查找的每个引用资料都描述了 CString::GetBuffer( int
下面的代码总是会抛出UnnuthorizedAccessException(无法访问MemoryStream的内部缓冲区。) byte[] buf1 = { 2, 3, 5, 7, 11 }; var
我正在努力思考 PEP3118 的 numpy 实现。缓冲区访问在 numpy 中究竟是如何工作的。 >>> p = numpy.getbuffer(numpy.arange(10)) >>> p
来自 CString to char* , ReleaseBuffer() 必须在 GetBuffer() 之后使用。但为什么?如果我在 GetBuffer() 之后不使用 ReleaseBuffer
本文整理了Java中com.jme3.scene.debug.WireBox.getBuffer()方法的一些代码示例,展示了WireBox.getBuffer()的具体用法。这些代码示例主要来源于G
许多 Windows API,例如 GetModuleFileName 等...将输出写入 char* 缓冲区。但是用std::string更方便。有没有办法让它们直接写入 std::string(或
我目前正在研究 MFC 库,我想知道为什么我应该使用 GetBuffer 成员,它返回指向 CString 对象缓冲区的指针,而不是其他允许读取和更改该对象中的字符的成员函数?例如我为什么要这样做(代
根据BytesIO docs : getbuffer() Return a readable and writable view over the contents of the buffer wit
我正在尝试创建一个多线程程序,其中所有渲染都在主线程上完成,而消息处理(和窗口创建)在辅助线程上完成。初始化函数中的下面一行代码SwapChain->GetBuffer(0, __uuidof(ID3
我正在 DirectX11 中创建一个设备和交换链,然后尝试获取后台缓冲区的纹理。创建步骤似乎有效,但无论我做什么,GetBuffer 调用总是失败并出现错误 DXGI_ERROR_INVALID_C
在 Python 3 中,我可以通过 object.getbuffer().nbytes(其中 object = ByteIO())获取 ByteIO 对象的大小,但是什么会是 Python 2 中
我正在 WP8 上开发一个使用原生音频的应用程序。我使用 wasapi 来捕获和呈现客户端。我初始化了默认设备并运行 GetService 方法来获取 IAudioCaptureClient。然后,我
我有一个处理大量 RESTful 请求的 IIS7 应用程序池。当事情变热时,CPU 使用率达到 100%,请求需要很长时间才能处理。 在使用 ANTS 进行分析时,我们发现大部分 CPU 时间通常都
我是一名优秀的程序员,十分优秀!