⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wbmprend.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    }                }            }        }        HX_RELEASE(pBuffer);    }    return retVal;}STDMETHODIMP CWBMPRenderer::OnTimeSyncOffset(UINT32 ulTime){    // We should force a redraw ONLY on the first time sync after the image    // has finished decoding    if (m_bFirstDraw)    {        // Redraw our data by damaging the entire area of our data        HXxSize size;        m_pSite->GetSize(size);        HXxRect damageRect = {0, 0, size.cx, size.cy};        m_pSite->DamageRect(damageRect);        m_pSite->ForceRedraw();        // Clear the first draw flag        m_bFirstDraw = FALSE;    }    return HXR_OK;}STDMETHODIMP CWBMPRenderer::GetWindowSize(REF(HXxSize) rSize){    rSize.cx = m_ulImageWidth;    rSize.cy = m_ulImageHeight;    return HXR_OK;}STDMETHODIMP CWBMPRenderer::IsMouseOverActiveLink(INT16 x, INT16 y, REF(BOOL) rbActive, REF(IHXBuffer*) rpLink){    HX_RESULT retVal = HXR_OK;    // We are NOT over a link    rbActive = FALSE;    return retVal;}STDMETHODIMP CWBMPRenderer::RMASurfaceUpdate(IHXVideoSurface* pSurface){    if (pSurface && m_pSite && m_pDisplayImage)    {        // Get the size of the site        HXxSize size;        m_pSite->GetSize(size);        // Set up the dst rect        HXxRect rDestRect = { 0, 0, size.cx, size.cy};        // Set up the src rect        HXxRect rSrcRect  = { 0,                              0,                              m_pDisplayImage->GetWidth(),                              m_pDisplayImage->GetHeight() };        // Set the values in the bitmap info header        HXBitmapInfoHeader cHeader;        cHeader.biSize          = 40;        cHeader.biWidth         = m_pDisplayImage->GetWidth();        cHeader.biHeight        = m_pDisplayImage->GetHeight();        cHeader.biPlanes        = 1;        cHeader.biBitCount      = 32;        cHeader.biCompression   = HX_RGB;        cHeader.biSizeImage     = 0;        cHeader.biXPelsPerMeter = 0;        cHeader.biYPelsPerMeter = 0;        cHeader.biClrUsed       = 0;        cHeader.biClrImportant  = 0;        cHeader.rcolor          = 0;        cHeader.gcolor          = 0;        cHeader.bcolor          = 0;        // Get the image store        IHXBuffer* pBuffer = NULL;        m_pDisplayImage->GetImageStore(&pBuffer);        if (pBuffer)        {            // Blit to the video surface            pSurface->Blt(pBuffer->GetBuffer(),                          &cHeader,                          rDestRect,                          rSrcRect);        }        HX_RELEASE(pBuffer);    }    return HXR_OK;}STDMETHODIMP CWBMPRenderer::HandleClick(INT16 x, INT16 y){    return HXR_OK;}HX_RESULT STDAPICALLTYPE CWBMPRenderer::HXCreateInstance(IUnknown** ppIUnknown){    HX_RESULT retVal = HXR_OK;    if (ppIUnknown)    {        // Set default        *ppIUnknown = NULL;        // Create the object        CWBMPRenderer *pObj = new CWBMPRenderer();        if (pObj)        {            // QI for IUnknown            retVal = pObj->QueryInterface(IID_IUnknown, (void**) ppIUnknown);        }        else        {            retVal = HXR_OUTOFMEMORY;        }        if (FAILED(retVal))        {            HX_DELETE(pObj);        }    }    else    {        retVal = HXR_FAIL;    }    return HXR_OK;}HX_RESULT CWBMPRenderer::RMASurfaceUpdate2(IHXSubRectVideoSurface* pSurface,                                           HXxRect*                 pExtents,                                           HXxBoxRegion*              pDirtyRegion ){    if (pSurface && m_pSite && m_pDisplayImage)    {        // Get the size of the site        HXxSize size;        m_pSite->GetSize(size);                //Scale dirty rects.        float fx = (float)m_pDisplayImage->GetWidth()/(float)size.cx;        float fy = (float)m_pDisplayImage->GetHeight()/(float)size.cy;        //Go through each rect in the dirty region and scale it to         //generate the src rects.        HXBOX* pSrcRects = new HXBOX[pDirtyRegion->numRects];        for( int i=0 ; i<pDirtyRegion->numRects; i++ )        {            pSrcRects[i].x1 = (float)pDirtyRegion->rects[i].x1*fx+.5;            pSrcRects[i].x2 = (float)pDirtyRegion->rects[i].x2*fx+.5;            pSrcRects[i].y1 = (float)pDirtyRegion->rects[i].y1*fy+.5;            pSrcRects[i].y2 = (float)pDirtyRegion->rects[i].y2*fy+.5;        }        //Set up Src region.        HXxBoxRegion srcRegion;        srcRegion.numRects = pDirtyRegion->numRects;        srcRegion.rects    = pSrcRects;                // Set the values in the bitmap info header        HXBitmapInfoHeader cHeader;        cHeader.biSize          = 40;        cHeader.biWidth         = m_pDisplayImage->GetWidth();        cHeader.biHeight        = m_pDisplayImage->GetHeight();        cHeader.biPlanes        = 1;        cHeader.biBitCount      = 32;        cHeader.biCompression   = HX_RGB;        cHeader.biSizeImage     = 0;        cHeader.biXPelsPerMeter = 0;        cHeader.biYPelsPerMeter = 0;        cHeader.biClrUsed       = 0;        cHeader.biClrImportant  = 0;        cHeader.rcolor          = 0;        cHeader.gcolor          = 0;        cHeader.bcolor          = 0;                // Get the image store        IHXBuffer* pBuffer = NULL;        m_pDisplayImage->GetImageStore(&pBuffer);        if (pBuffer)        {            // Blit to the video surface            pSurface->BltSubRects(pBuffer->GetBuffer(),                                  &cHeader,                                  pDirtyRegion,                                  &srcRegion, 1.0/fx, 1.0/fy);        }        HX_RELEASE(pBuffer);        HX_VECTOR_DELETE(pSrcRects);    }    return HXR_OK;}void CWBMPRenderer::_AttachSite(){    //Lets subscribe to the sub rect messages, HX_SURFACE_UPDATE2.    IHXSubRectSite* pSubRectSite = NULL;    m_pSite->QueryInterface(IID_IHXSubRectSite, (void**)&pSubRectSite);    if( pSubRectSite )    {        //If so, since IHXSubRectSite inheirits from IHXSite, lets        //just swap the pointers and sign up for the service.        HX_RELEASE( m_pSite );        m_pSite = pSubRectSite;        pSubRectSite->SendSubRectMessages(TRUE);    }}STDMETHODIMP CWBMPRenderer::GetName(REF(const char*) rpszName){    rpszName = (const char*) m_pszName;    return HXR_OK;}STDMETHODIMP CWBMPRenderer::GetDescription(REF(const char*) rpszDescription){    rpszDescription = (const char*) m_pszDescription;    return HXR_OK;}STDMETHODIMP CWBMPRenderer::GetMimeTypes(REF(const char**) rppszMimeType){    rppszMimeType = (const char**) m_ppszMimeType;    return HXR_OK;}STDMETHODIMP_(UINT32) CWBMPRenderer::GetPluginVersion(){    return TARVER_ULONG32_VERSION;}STDMETHODIMP_(UINT32) CWBMPRenderer::GetInitialGranularity(){    return 200;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -