在imedicontrol上直接显示MP4Demux应用程序内存不足
DirectShow MP4Demux application out of memory on IMediaControl::Run
我正在使用Geraint Davies的MP4Demux来传输一些以前编码的mp4文件。
在过去的调查中,我发现MP4Demux在加载时为所有原子分配内存。对于较小的文件,这工作ok,但使用较大的mp4文件(约1.2GB),我得到一个内存不足的错误在imedi控件::运行。
一种选择是重写/编辑mp4 demux,使其具有内存池/循环缓冲区,并且仅在需要/请求时读取帧,但我想知道是否有更简单的解决方案,例如以某种方式增加DirectShow应用程序可以使用的内存(虽然它是32位控制台应用程序)。
图中典型的内存消费者是内存分配器。撇开潜在的原因不谈,有时分配过多:缓冲区太多和/或缓冲区太大。分配通常发生在停止到暂停的转换中,这可能是Run
调用的一部分(它实际上是Pause
调用的一部分,但是如果您在停止时调用Run
,那么也会有隐式的Pause
调用)。
无论原因是什么,分配器是首先要检查的:暂停图形并检查进程私有字节,进程虚拟地址消耗,分配器属性(GraphStudioNext和DirectShowSpy应该一起能够做到这一点),并检查它是否有意义或它是抓取太多。
有时它只是使进程太接近虚拟地址空间限制而不是立即失败,但是内存压力使其他东西在不久之后失败。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 在imedicontrol上直接显示MP4Demux应用程序内存不足