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

📄 imagemgr.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            }        }        else        {            retVal = HXR_NOT_INITIALIZED;        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}HX_RESULT PXImageManager::OnImageDataPacket(UINT32 ulHandle, IHXBuffer* pOpaque, IHXBuffer* pData){    HX_RESULT retVal  = HXR_OK;    if (ulHandle && pOpaque && pData)    {        // If we get a packet for which we don't have an image, we will just        // throw it away.        PXImageHelper* pHelper = NULL;        HX_RESULT rv           = GetImageHelper(ulHandle, &pHelper);        if (SUCCEEDED(rv))        {            if (!pHelper->GetIgnoreDataPackets())            {                retVal = pHelper->OnImageDataPacket(pOpaque, pData);            }        }        HX_RELEASE(pHelper);    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}void PXImageManager::ReleasePresentationImages(){    if (m_pHandleToImageMap)    {        // Run through the map, deleting all image objects        POSITION pos = m_pHandleToImageMap->GetStartPosition();        while (pos)        {            // Get the object pointer at the current position            // and advance to the next position            LONG32 lKey     = 0;            void*  pElement = NULL;            m_pHandleToImageMap->GetNextAssoc(pos, lKey, pElement);            // Release the object            PXImageHelper* pHelper = (PXImageHelper*) pElement;            HX_RELEASE(pHelper);        }        // Clear the map        m_pHandleToImageMap->RemoveAll();    }}HX_RESULT PXImageManager::GetImage(UINT32 ulHandle, PXImage** ppImage) const{    HX_RESULT retVal = HXR_OK;    if (ulHandle && ppImage)    {        if (m_pHandleToImageMap)        {            // Set out parameter default            *ppImage = NULL;            // Check to see if there really is an entry for this handle            void* pVoid         = NULL;            BOOL  bEntryPresent = m_pHandleToImageMap->Lookup((LONG32) ulHandle, pVoid);            if (bEntryPresent)            {                // Get the helper object                PXImageHelper* pHelper = (PXImageHelper*) pVoid;                if (pHelper)                {                    retVal = pHelper->GetFrame(0, ppImage);                }                else                {                    retVal = HXR_FAIL;                }            }            else            {                retVal = HXR_FAIL;            }        }        else        {            retVal = HXR_NOT_INITIALIZED;        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}HX_RESULT PXImageManager::IsImagePresent(UINT32 ulHandle, BOOL* pbPresent) const{    HX_RESULT retVal = HXR_OK;    if (ulHandle && pbPresent)    {        // Set default        *pbPresent = FALSE;        if (m_pHandleToImageMap)        {            // Check to see if there really is an entry for this handle            void* pVoid = NULL;            *pbPresent  = m_pHandleToImageMap->Lookup((LONG32) ulHandle, pVoid);        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}BOOL PXImageManager::IsImagePresent(UINT32 ulHandle) const{    BOOL bPresent = FALSE;    IsImagePresent(ulHandle, &bPresent);    return bPresent;}HX_RESULT PXImageManager::IsImageCompletelyDecoded(UINT32 ulHandle, BOOL* pbComplete){    HX_RESULT retVal = HXR_OK;    if (ulHandle && pbComplete)    {        // Set default        *pbComplete = FALSE;        PXImageHelper* pHelper = NULL;        retVal                 = GetImageHelper(ulHandle, &pHelper);        if (SUCCEEDED(retVal))        {            *pbComplete = pHelper->AllBytesDecoded();        }        HX_RELEASE(pHelper);    }    else    {        retVal = HXR_INVALID_PARAMETER;    }    return retVal;}HX_RESULT PXImageManager::GetNumImages(UINT32* pulNumImages) const{    HX_RESULT retVal = HXR_OK;    if (pulNumImages)    {        // Set default        *pulNumImages = 0;        if (m_pHandleToImageMap)        {            *pulNumImages = m_pHandleToImageMap->GetCount();        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}UINT32 PXImageManager::GetNumImages() const{    UINT32 ulNum = 0;    GetNumImages(&ulNum);    return ulNum;}HX_RESULT PXImageManager::GetDisplayImage(PXImage** ppImage){    HX_RESULT retVal = HXR_OK;    if (ppImage)    {        if (m_pDisplayImage)        {            *ppImage = m_pDisplayImage;            (*ppImage)->AddRef();        }        else        {            retVal = HXR_UNEXPECTED;        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}HX_RESULT PXImageManager::GetDisplaySubImage(PXImage** ppImage, UINT32 ulX, UINT32 ulY,                                             UINT32 ulW, UINT32 ulH, BOOL bCopy){    HX_RESULT   retVal    = HXR_OK;    PXImage*    pSubImage = NULL;    IHXBuffer* pScratch  = NULL;    if (ppImage)    {        // Assign default for out parameter        *ppImage = NULL;        // Make sure we're initialized        if (m_pDisplayImage)        {            // Create an image object            retVal = PXImage::CreateObject(&pSubImage);            if (SUCCEEDED(retVal))            {                // Addref the image                pSubImage->AddRef();                if (bCopy)                {                    // We need a COPY of the subrect of the display image (as                    // opposed to just referencing the same memory. Therefore,                    // we will: 1) determine how many bytes we need; 2) get                    // a scratch buffer which has that many bytes; and 3) init                    // the image with that buffer                    if (ulW == 0 || ulW > (UINT32) m_pDisplayImage->GetWidth())                    {                        ulW = m_pDisplayImage->GetWidth();                    }                    if (ulX + ulW > (UINT32) m_pDisplayImage->GetWidth())                    {                        ulX = m_pDisplayImage->GetWidth() - ulW;                    }                    if (ulH == 0 || ulH > (UINT32) m_pDisplayImage->GetHeight())                    {                        ulH = m_pDisplayImage->GetHeight();                    }                    if (ulY + ulH > (UINT32) m_pDisplayImage->GetHeight())                    {                        ulH = m_pDisplayImage->GetHeight() - ulY;                    }                    UINT32 ulBytesNeeded = ulW * ulH * m_ulDefaultBytesPerPixel;                    retVal               = GetScratchBuffer(ulBytesNeeded, &pScratch);                    if (SUCCEEDED(retVal))                    {                        retVal = pSubImage->CreateSubImageFromBuffer(m_pDisplayImage,                                                                     (INT32) ulX,                                                                     (INT32) ulY,                                                                     (INT32) ulW,                                                                     (INT32) ulH,                                                                     pScratch);                    }                }                else                {                    // We only need a reference to the display image's buffer. So                    // we can just create a subimage that refs the display image's                    // image store.                    retVal = pSubImage->CreateSubImage(m_pDisplayImage,                                                       (INT32) ulX,                                                       (INT32) ulY,                                                       (INT32) ulW,                                                       (INT32) ulH);                }                if (SUCCEEDED(retVal))                {                    // Set the out parameter                    *ppImage = pSubImage;                    // Addref it before it goes out                    (*ppImage)->AddRef();                }            }        }        else        {            retVal = HXR_NOT_INITIALIZED;        }    }    else    {        retVal = HXR_INVALID_PARAMETER;    }    // Release our local ref    HX_RELEASE(pScratch);    HX_RELEASE(pSubImage);#ifdef XXXMEH_DEBUG_ASSERT    // Debug-only assert    HX_ASSERT(SUCCEEDED(retVal));#endif    return retVal;}HX_RESULT PXImageManager::GetDisplaySubImage(PXImage** ppImage, const PXRect& rSubRect, BOOL bCopy){    return GetDisplaySubImage(ppImage, (INT32) rSubRect.GetX(), (INT32) rSubRect.GetY(),                              (INT32) rSubRect.GetWidth(), (INT32) rSubRect.GetHeight(), bCopy);}

⌨️ 快捷键说明

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