博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
阅读量:6591 次
发布时间:2019-06-24

本文共 809 字,大约阅读时间需要 2 分钟。

原因是:

DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分配给其他程序. 如果表面丢失, 对此表面的操作都会返回 DDERR_SURFACELOST , 此时应该调用 IDirectDrawSurface 接口方法 Restore 来恢复表面(重新申请内存或显存)。

 

伪代码如下:

hr = m_lpDDSOffscreen->Lock(rcDest,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL);

if (hr==DDERR_SURFACELOST) 
{
 
hr = m_lpDDSOffscreen->Restore(); 
hr = m_lpDDSOffscreen->Lock(rcDest,&ddsd,DDLOCK_WAIT,NULL); 
 if (FAILED(hr))
 {
  return DD_FALSE;
 }

 

//将数据拷贝到离屏表面,然后使用blt块传输到主表面

 

 HRESULT ddrval;

 ddrval=lpDDSPrimary->Blt(NULL, lpDDSOffscreen, NULL, DDBLT_WAIT, NULL);

 if (ddrval==DDERR_SURFACELOST)

 {
  lpDDSPrimary->Restore();
 }

 

这样当屏保,锁屏,修改屏幕分辨率,表面都可以恢复,视频显示正常

 

这里也可以使用 ddraw对象,恢复所有表面,方法如下:

 lpDD->RestoreAllSurfaces();

 

其中

 LPDIRECTDRAW7           lpDD; 

本文转自:http://blog.csdn.net/smilestone322/article/details/7289716
你可能感兴趣的文章
使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
查看>>
Maven依赖Scope标签用法
查看>>
ajax加载数据到页面无法打印的解决办法
查看>>
js 验证中文
查看>>
MySQL给查询结果添加一表表示行号或名次(1)
查看>>
Linux下运行java DES AES加解密
查看>>
DataNode 运行状况
查看>>
牛津词典 2018 年度词汇 ——「有毒」!
查看>>
XIB的是用
查看>>
Learning Data Structure_2_线性表、栈和队列
查看>>
驱动外置+原版安装方式『XLOS_Windows8_Pro_X86纯净版_V1.0』
查看>>
Android Arcface人脸识别sdk使用工具类
查看>>
android studio单个工程文件的代理设置
查看>>
Agent admitted failure to sign using the key
查看>>
grep 应用
查看>>
我的友情链接
查看>>
Linux实验室 CentOS关机大法
查看>>
一行命令获取当前JVM所有可设置的参数以及当前默认值
查看>>
spring与struts2 mvc共存web.xml简单配置
查看>>
Python web爬虫
查看>>