解决IBasicVideo::GetCurrentImage返回0x8000ffff(E_UNEXPECTED Catastrophic failure)错误

解决IBasicVideo::GetCurrentImage返回0x8000ffff(E_UNEXPECTED Catastrophic failure)错误经过查阅一番资料后,得到如下的解决方案:方案1:使用替代的接口ISampleGrabber,代替IBasicVideo,具体调用的函数为:ISampleGrabber::GetCurrentBuffer.可以参考文章:dshow中使用SampleGrabberfilter抓取图像。在我的开发环境win10+vs2013下没能找到ISampleGrabber接口;而在官方文档中提到ISa…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

经过查阅一番资料后,得到如下的解决方案:

  • 方案1:使用替代的接口ISampleGrabber,代替IBasicVideo,具体调用的函数为:ISampleGrabber::GetCurrentBuffer.可以参考文章:dshow中使用Sample Grabber filter抓取图像。在我的开发环境win10 + vs2013下没能找到ISampleGrabber接口;而在官方文档中提到ISampleGrabber接口已经被废弃。所以不建议使用此方案。顺便说一句,网上有方案解决找不到ISampleGrabber接口的问题,ISampleGrabber接口存在于QEdit.h中。
     
  • 方案二:使用 IVMRWindowlessControl9::GetCurrentImage;此方法需要用户自己释放它返回的内存。所以频繁的调用可能会有一定的问题。官方文档也有说明:This method can be called at any time, no matter what state the filter is in, whether running, stopped or paused. However, frequent calls to this method will degrade video playback performance. 所以在不频繁使用的情况下可以用此方案。
     
  • 方案三:还是使用IBasicVideo的接口。只不过修改底层的渲染器为VMR9,MS为了兼容问题,所以默认的情况下并不是使用VMR9渲染器。官方文档说明如下:

    Video Renderer only:

    This method fails if the renderer is using DirectDraw acceleration. Unfortunately, this depends on the end-user’s hardware configuration, so in practice this method is not reliable.

    Pause the Video Renderer before calling this method. Otherwise, the method returns VFW_E_NOT_PAUSED. Make sure that the pause operation has completed by calling IMediaControl::GetState; if the pause operation has not completed, the GetCurrentImage method returns E_UNEXPECTED. Depending on what data the source filter has available, the video renderer is not guaranteed to service this request. If no image is available, it returns E_FAIL.

    Video Mixing Renderer only:

    This method is reliable regardless of whether the VMR is using DirectDraw acceleration and regardless of the current graph state (running, stopped, or paused).

    Video Renderer and Video Mixing Renderer:

    To obtain the required buffer size to hold the image, call this method with a NULL pointer in the pDIBImage parameter. The method returns the required buffer size in the pBufferSize parameter. Allocate a buffer of that size and call the method again, with pDIBImage pointing to the buffer. On the second call, use pBufferSize to specify the buffer size. If the buffer is too small to hold the complete image, the method returns E_OUTOFMEMORY.

    If the method succeeds, the buffer is filled with the entire DIB image, including the BITMAPINFOHEADER structure, plus any palette entries and bit masks as defined in the Win32 BITMAPINFO structure. The format of the image depends on the type provided by the source filter, and cannot be specified in advance.

关于VM9的创建与使用可以参考:https://blog.csdn.net/a812073479/article/details/82994703

 

 

        

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189981.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle 查看服务器密码修改,如何修改oracle用户密码「建议收藏」

    oracle 查看服务器密码修改,如何修改oracle用户密码「建议收藏」修改oracle用户密码的方法:首先连接oracle数据库所在服务器,并进入oracle控制台;然后输入“selectusernamefromdba_users”查看用户列表;最后输入修改用户口令即可。本教程操作环境:windows7系统、oracle版,DELLG3电脑。修改oracle用户密码的方法:1、用CRT以安装oracle数据库的用户连接oracle数据库所在服务器。(以服务…

    2022年7月28日
    5
  • idea2022 2.5激活码获取【最新永久激活】

    (idea2022 2.5激活码获取)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M2OME2TZY-eyJsaWNlbnNlSW…

    2022年3月13日
    782
  • 数据库中什么是变量名_数据库表名命名规范

    数据库中什么是变量名_数据库表名命名规范codeIf简介:Github开源项目特点:1,支持中文;2,变量命名:Github,Bitbucket,GoogleCode,Codeplex,Sourceforge,FedoraProjec的项目源码3,可以查询代码片段及其代码库链接:http://unbug.github.io/codelf/举个例子查看代码查看代码片段查看代码片段更多文章,请关注博客:http://blog

    2022年9月21日
    1
  • 转的两种读音区分_category怎么读

    转的两种读音区分_category怎么读类别类别是一种为现有的类添加新方法的方式。利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,

    2022年8月4日
    6
  • ajax处理跨域_django跨域解决方案

    ajax处理跨域_django跨域解决方案原文:Javascript跨域和Ajax跨域解决方案 摘要:跨域请求,顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。这种情况很常见,比如说通过style标签加载外部样式表文件、通过img标签加载外部图片、通过script标签加载外部脚本文件、通过Webfont加载字体文件等等。默认情况下,脚本访问文档属性等数据采用的是同源策略(Sameorigi…

    2022年8月24日
    5
  • 数据分析师面试准备

    数据分析师面试准备数据分析师面试准备惊醒。突然发现再要一个月就要过年了,过了年再过个两周就三月了。三月……又到了招聘季。

    2022年6月3日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号