<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    directdraw顯示yuv視頻,出現屏保時,yuv顯示不出來,表面丟失

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 原因是:

    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/7289716RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全