媒体基础:读取示例 - 访问冲突异常
Media Foundation: ReadSample - Access Violation Exception
>上下文:我正在研究向下采样的效果,然后向上采样视频文件。 我正在使用Media Foundation .NET在C#中公开MF。 程序当前经过以下过程:
- 拍摄高分辨率视频并在每一帧中读取(SourceReader & ReadSample(
- 使用在字节级别操作的自定义代码进行下采样
- 将向下采样的数据写入新的低分辨率视频文件(使用 SinkWriter(
- 对媒体基础支持的一系列分辨率重复此操作 再次
- 使用操作每个字节的自定义代码将采样视频读回和向上读取采样到下面列表中的下一个更高分辨率
- 将新数据写入更高分辨率的文件(再次使用 SinkWriter(
我正在使用的分辨率是:
- 2560,1440
- 2346,1320
- 2134,1200
- 1920,1080
- 1706,960
- 1494,840
- 1280,720
- 1068,600
- 854,480
- 640,360
- 428,240
- 214,120
现状:这几乎完美地工作。 我运行了向下采样过程,并有 11 个向下采样的视频文件(上面列表中的每种分辨率一个(,以及原始的 1440p 视频。 然后,我阅读了这 11 个视频中的每一个和样本。 它适用于其中的 10 个。
问题:当我尝试将 (1280,720( 视频提升到 (1494,840( 时,我得到:
System.AccessViolationException:"试图读取或写入受保护的内存。这通常表明其他内存已损坏。
。当我尝试在第一帧中阅读时。 我不知道为什么。 源读取器配置正常(至少没有错误返回(。我执行诸如Marshal.Copy之类的操作,将采样的帧数据放入托管内存空间,我最初认为这是问题所在。 代码并没有走那么远 - 只是在我尝试读取第一帧示例时出错。读取样本正在尝试...catch 块,但异常仍未处理,因此不返回其他错误信息。
我不想只是开始粘贴无用的代码,所以请让我知道什么是有用的,我会补充这个问题。 大部分代码取自SourceReader和SinkWriter的MS教程。 还值得记住的是,这在大多数情况下都有效,因此代码不会因此而"损坏"。
我尝试在发布和调试、x86 和 x64 中进行编译。 还尝试在Visual Studio选项中抑制JIT优化。
关于下一步去哪里看的任何想法?
不知道为什么媒体基础.NET会导致问题,但解决方案只是设置属性: MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING 而不是 MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING
启用高级处理后,它的行为正常。
- 写入访问冲突异常
- 在C++中删除双向链表的头节点后出现访问冲突异常
- Visual Studio图形调试器引发读取访问冲突异常
- 尝试将 std::cerr 重定向到文件时出现访问冲突异常
- 媒体基础:读取示例 - 访问冲突异常
- 链表的访问冲突异常
- 进入函数之前的访问冲突异常
- 删除函数 c++ 的读取访问冲突异常
- 无法使用 C++ catch(..) 捕获访问冲突异常
- 在Visual Studio Community中使用glfw3 glew和opengl获取访问冲突异常
- 访问动态 2D 字符数组时引发访问冲突异常
- 从静态库使用 Boost Asio 时访问冲突异常
- 为什么访问冲突异常不能被 捕获.NET4.0.
- glGenBuffers 访问冲突异常
- unsigned char*导致访问冲突异常
- 注入DLL的函数中出现访问冲突异常(5)
- 删除二叉搜索树中的节点中的 Visual Studio 中的访问冲突异常
- 提升 Asio tcp::接受者访问冲突异常
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 为什么此代码会引发访问冲突异常