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

📄 pxgifrnd.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    else    {        retVal = HXR_UNEXPECTED;    }        return retVal;}STDMETHODIMP CGIFRenderer::OnPause(UINT32 ulTimeBeforePause){    MLOG_MISC(m_pErrorMessages,              "0x%08x::OnPause(%lu)\n",              this, ulTimeBeforePause);    // Set the paused flag    m_bPaused = TRUE;    return HXR_OK;}STDMETHODIMP CGIFRenderer::OnBuffering(UINT32 ulReason, UINT16 usPercentComplete){    MLOG_MISC(m_pErrorMessages,              "0x%08x::OnBuffering(%lu,%u)\n",              this, ulReason, usPercentComplete);    return HXR_OK;}STDMETHODIMP CGIFRenderer::OnEndofPackets(){    MLOG_MISC(m_pErrorMessages,              "0x%08x::OnEndofPackets()\n",              this);    return HXR_OK;}STDMETHODIMP CGIFRenderer::EndStream(){    MLOG_MISC(m_pErrorMessages,              "0x%08x::EndStream()\n",              this);    // We're finished with the stream, but we may have    // more rendering to do    HX_RELEASE(m_pStream);    return HXR_OK;}STDMETHODIMP CGIFRenderer::AttachSite(IHXSite *pSite){    MLOG_MISC(m_pErrorMessages,              "0x%08x::AttachSite(0x%08x)\n",              this, pSite);    // Check for input error    if (pSite == NULL)    {        return HXR_INVALID_PARAMETER;    }    // Check to see if we alredy have a site interface    if (m_pMISUSSite)    {        return HXR_UNEXPECTED;    }    // Save a copy of the IHXSite interface    m_pMISUSSite = pSite;    m_pMISUSSite->AddRef();    // Fill in the size    m_cSize.cx = m_ulWidth;    m_cSize.cy = m_ulHeight;    // Tell the site of our size    m_pMISUSSite->SetSize(m_cSize);    // Lets see if we have a new site that supports sub rects.    IHXSubRectSite* pSubRectSite = NULL;    if(HXR_OK == m_pMISUSSite->QueryInterface(IID_IHXSubRectSite,                                              (void**)&pSubRectSite))    {        //If so, since IHXSubRectSite inheirits from IHXSite, lets just        //swap the pointers and sign up for the service.        HX_RELEASE(m_pMISUSSite);        m_pMISUSSite = pSubRectSite;        pSubRectSite->SendSubRectMessages(TRUE);        // Set the flag        m_bCanBltSubRects = TRUE;    }    // Set the site attached flag    m_bSiteAttached = TRUE;    return HXR_OK;}STDMETHODIMP CGIFRenderer::DetachSite(){    MLOG_MISC(m_pErrorMessages,              "0x%08x::DetachSite()\n",              this);    if (m_pCallback)    {        if (m_pCallback->IsCallbackPending())        {            m_pCallback->RemovePendingCallback();        }    }    if (m_pClientAdviseSink)    {        m_pClientAdviseSink->Close();    }    // Release the callback    // XXXMEH - MUST DO THIS HERE or we'll have circular    // dependency and leak CGIFRenderers    HX_RELEASE(m_pCallback);    // Release our site interface    HX_RELEASE(m_pMISUSSite);    // We're done with these...    if (m_pMISUS)    {        m_pMISUS->ReleaseSingleSiteUser();    }    HX_RELEASE(m_pMISUS);    // Clear the site attached flag    m_bSiteAttached = FALSE;    return HXR_OK;}STDMETHODIMP_(BOOL) CGIFRenderer::NeedsWindowedSites(){    return FALSE;}STDMETHODIMP CGIFRenderer::InitializeStatistics(UINT32 ulRegistryID){    MLOG_MISC(m_pErrorMessages,              "0x%08x::InitializeStatistics(%lu)\n",              this, ulRegistryID);    // Add our renderer name to the HXRegistry    IHXRegistry *pRegistry = NULL;    HX_RESULT retVal = m_pContext->QueryInterface(IID_IHXRegistry, (void **) &pRegistry);    if (retVal == HXR_OK)    {        // Get the current registry key name        IHXBuffer *pszRegistryName = NULL;        retVal                      = pRegistry->GetPropName(ulRegistryID, pszRegistryName);        if (retVal == HXR_OK)        {            // Create an IHXBuffer to hold the name                    IHXBuffer* pValue = NULL;            if (m_pCommonClassFactory)            {                IUnknown* pUnknown = NULL;                m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer, (void**)&pUnknown);                if (pUnknown)                {                    pUnknown->QueryInterface(IID_IHXBuffer, (void**)&pValue);                    HX_RELEASE(pUnknown);                }            }            if (!pValue)            {                HX_RELEASE(pszRegistryName);                HX_RELEASE(pRegistry);                return HXR_OUTOFMEMORY;            }            pValue->AddRef();            // Create the key name            char szRegistryEntry[MAX_DISPLAY_NAME] = {0}; /* Flawfinder: ignore */            SafeSprintf(szRegistryEntry, MAX_DISPLAY_NAME, "%s.name", pszRegistryName->GetBuffer());            // Set the key value            retVal = pValue->Set((const BYTE*) m_pszName, strlen(m_pszName) + 1);            if (retVal != HXR_OK)            {                HX_RELEASE(pValue);                HX_RELEASE(pszRegistryName);                HX_RELEASE(pRegistry);                return retVal;            }            // Add the key/value pair to the registry            pRegistry->AddStr(szRegistryEntry, pValue);            HX_RELEASE(pValue);            HX_RELEASE(pszRegistryName);        }        HX_RELEASE(pRegistry);    }    return retVal;}STDMETHODIMP CGIFRenderer::UpdateStatistics(){    MLOG_MISC(m_pErrorMessages,              "0x%08x::UpdateStatistics()\n",              this);    return HXR_OK;}STDMETHODIMP CGIFRenderer::SetPropertyULONG32(const char* pName, ULONG32 ulVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        // Clear the update needed flag        BOOL bUpdateNeeded = FALSE;        if (!strcmp(pName, "backgroundOpacity"))        {            if (ulVal > 255) ulVal = 255;            if (ulVal != m_ulBackgroundOpacity) bUpdateNeeded = TRUE;            m_ulBackgroundOpacity = ulVal;        }        else if (!strcmp(pName, "mediaOpacity"))        {            if (ulVal > 255) ulVal = 255;            if (ulVal != m_ulMediaOpacity) bUpdateNeeded = TRUE;            m_ulMediaOpacity = ulVal;        }        else if (!strcmp(pName, "chromaKey"))        {            if (ulVal != m_ulMediaChromaKey) bUpdateNeeded = TRUE;            m_ulMediaChromaKey         = ulVal;            m_bMediaChromaKeySpecified = TRUE;        }        else if (!strcmp(pName, "chromaKeyTolerance"))        {            if (ulVal != m_ulMediaChromaKeyTolerance) bUpdateNeeded = TRUE;            m_ulMediaChromaKeyTolerance = ulVal;        }        else if (!strcmp(pName, "chromaKeyOpacity"))        {            if (ulVal != m_ulMediaChromaKeyOpacity) bUpdateNeeded = TRUE;            m_ulMediaChromaKeyOpacity = ulVal;        }        // Did any values change?        if (bUpdateNeeded)        {            // If we have not seen our first time sync yet, then            // there is no need to update the buffer, since the first            // copy has not been done yet            if (!m_bFirstTimeSync && m_pGIFCodec)            {                // Compute the current frame we are on (note that                // m_ulCurImg contains the index of the NEXT frame                // that we are about to draw                UINT32 ulCurFrame = (m_ulCurImg > 0 ? m_ulCurImg - 1 : 0);                // Update the buffer                // XXXMEH - optimization for later. In some cases if we                 // just changed the media opacity, then it may not be necessary                // to start back at the beginning and rebuild the frame buffer                // from the first frame.                m_pGIFCodec->GetRGBImageEx(-1,                                           ulCurFrame,                                           m_pOutputBuffer->GetBuffer(),                                           m_pGIFCodec->GetLogicalScreenWidth(),                                           m_pGIFCodec->GetLogicalScreenHeight(),                                           m_ulPadWidth,                                           m_ulBytesPerPixel,                                           m_bRowsInverted,                                           m_bRGBOrdering,                                           m_ulBackgroundColor,                                           (m_ulMediaOpacity == 255 ? FALSE : TRUE),                                           m_ulMediaOpacity,                                           m_bMediaChromaKeySpecified,                                           m_ulMediaChromaKey,                                           m_ulMediaChromaKeyTolerance,                                           m_ulMediaChromaKeyOpacity);                // XXXMEH - do dumb assignment for now. We should later check                // chroma key to find if any colors were actually encountered.                if (m_ulBackgroundOpacity < 255 ||                    m_ulMediaOpacity < 255      ||                    m_bMediaChromaKeySpecified)                {                    m_bUsesAlphaChannel = TRUE;                }            }        }        retVal = m_pValues->SetPropertyULONG32(pName, ulVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetPropertyULONG32(const char* pName, REF(ULONG32) rulVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetPropertyULONG32(pName, rulVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetFirstPropertyULONG32(REF(const char*) rpName, REF(ULONG32) rulVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetFirstPropertyULONG32(rpName, rulVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetNextPropertyULONG32(REF(const char*) rpName, REF(ULONG32) rulVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetNextPropertyULONG32(rpName, rulVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::SetPropertyBuffer(const char* pName, IHXBuffer* pVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->SetPropertyBuffer(pName, pVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetPropertyBuffer(const char* pName, REF(IHXBuffer*) rpVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetPropertyBuffer(pName, rpVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetFirstPropertyBuffer(REF(const char*) rpName, REF(IHXBuffer*) rpVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetFirstPropertyBuffer(rpName, rpVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::GetNextPropertyBuffer(REF(const char*) rpName, REF(IHXBuffer*) rpVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        retVal = m_pValues->GetNextPropertyBuffer(rpName, rpVal);    }    return retVal;}STDMETHODIMP CGIFRenderer::SetPropertyCString(const char* pName, IHXBuffer* pVal){    HX_RESULT retVal = HXR_FAIL;    if (m_pValues)    {        // Check for the default SMIL namespace        BOOL bUpdateNeeded = FALSE;        if (!strcmp(pName, "SMILDefaultNamespace"))        {            if (m_ulBackgroundOpacity != 0)            {                bUpdateNeeded = TRUE;            }            m_ulBackgroundOpacity = 0;            // Update the background color            UINT32 ulBgAlpha    = 255 - m_ulBackgroundOpacity;            m_ulBackgroundColor = (m_ulBackgroundColor & 0x00FFFFFF) |

⌨️ 快捷键说明

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