大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189981.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...