zoukankan      html  css  js  c++  java
  • directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失

    原因是:

    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; 

  • 相关阅读:
    Codeforces Round #443 Div. 1
    linux中ps命令
    占cpu 100%的脚本
    检查Linux系统cpu--内存---磁盘的脚本
    jQuery对象的属性操作
    关于js的一些收集
    Linux命令集合
    使用python操作excel表格
    Linux7.3系统 升级python到3.6使用ping主机脚本
    一个别人的线程池的编写
  • 原文地址:https://www.cnblogs.com/lidabo/p/4055510.html
Copyright © 2011-2022 走看看