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

📄 pximgfil.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                        UINT32      ulSessionHandle  = 0;                        retVal                       = pCodec->ParseImage(pFileBuffer,                                                                          ulNumDataPackets,                                                                          pParam,                                                                          ulSessionHandle);                        if (SUCCEEDED(retVal))                        {                            // Get width and height                            pParam->GetPropertyULONG32("ImageWidth",  m_ulImageWidth);                            pParam->GetPropertyULONG32("ImageHeight", m_ulImageHeight);                            // Get all the image data packets                            for (UINT32 i = 0; i < ulNumDataPackets && SUCCEEDED(retVal); i++)                            {                                IHXBuffer* pData   = NULL;                                IHXBuffer* pOpaque = NULL;                                BOOL        bReq    = FALSE;                                retVal              = pCodec->GetImagePacket(ulSessionHandle, i, pData, pOpaque, bReq);                                if (SUCCEEDED(retVal))                                {                                    IHXPacket* pImageDataPacket = NULL;                                    retVal                       = m_pWireFormatManager->SetImageDataInfo(ulHandle, pData, pOpaque,                                                                                                          i, 0, bReq, pImageDataPacket);                                    if (SUCCEEDED(retVal))                                    {                                        // Add image data packet to tail of the list                                        retVal = AddPacket(pImageDataPacket);                                    }                                    HX_RELEASE(pImageDataPacket);                                }                                HX_RELEASE(pData);                                HX_RELEASE(pOpaque);                            }                            // Now we're done with this parse session                            pCodec->ReleaseImage(ulSessionHandle);                        }                        HX_RELEASE(pParam);                    }                }                HX_RELEASE(pImageHeaderPacket);            }        }        HX_RELEASE(pCodec);    }    return retVal;}HX_RESULT PXImageFile::EnqueueEffectPacket(UINT32      ulEffectType,                                           UINT32      ulStart,                                           UINT32      ulDuration,                                           UINT32      ulTarget,                                           const char* pszURL,                                           UINT32      ulFillColor,                                           BOOL        bBackChannel,                                           BOOL        bLastUse,                                           BOOL        bDisplayImmediately){    HX_RESULT retVal = HXR_OK;    // Create an effect object    PXEffect* pEffect = NULL;    retVal            = PXEffect::CreateObject(&pEffect);    if (SUCCEEDED(retVal))    {        // AddRef the effect        pEffect->AddRef();        // Set a bunch of parameters        pEffect->SetEffectType((BYTE) ulEffectType);        pEffect->SetStart(ulStart);        pEffect->SetDuration(ulDuration);        pEffect->SetTarget(ulTarget);        if (pszURL)        {            pEffect->SetURL(pszURL);        }        pEffect->SetColor(ulFillColor);        pEffect->SetPostBackChannel(bBackChannel);        pEffect->SetLastUse(bLastUse);        pEffect->SetDisplayImmediately(bDisplayImmediately);        // Get the packet        IHXPacket* pEffectPacket = NULL;        retVal                     = m_pWireFormatManager->SetEffectInfo(pEffect, 0, pEffectPacket);        if (SUCCEEDED(retVal))        {            // Add the effect packet to the tail            retVal = AddPacket(pEffectPacket);        }        HX_RELEASE(pEffectPacket);    }    HX_RELEASE(pEffect);    return retVal;}void PXImageFile::ComputeStatistics(){    m_ulNumPackets = 0;    m_ulTotalBytes = 0;    if (m_pPacketList)    {        if (m_pPacketList->GetCount() > 0)        {            // Set the number of packets            m_ulNumPackets = m_pPacketList->GetCount();            // Compute the size with overhead            m_ulTotalBytes   = 0;            LISTPOSITION pos = m_pPacketList->GetHeadPosition();            while (pos)            {                IHXPacket* pListPacket = (IHXPacket*) m_pPacketList->GetNext(pos);                if (pListPacket)                {                    IHXBuffer *pListBuffer = pListPacket->GetBuffer();                    if (pListBuffer)                    {                        m_ulTotalBytes += pListBuffer->GetSize();                    }                    HX_RELEASE(pListBuffer);                }            }        }    }}HX_RESULT PXImageFile::DequeuePacket(REF(IHXPacket*) rpPacket,                                     UINT32           ulBitrate,                                     REF(INT32)       rlCurrentTimeStamp){    HX_RESULT retVal = HXR_FAIL;    if (ulBitrate && m_pPacketList)    {        if (m_pPacketList->GetCount() > 0)        {            IHXPacket* pPacket = (IHXPacket*) m_pPacketList->RemoveHead();            if (pPacket)            {                UINT32      ulTimeStamp = (UINT32) (rlCurrentTimeStamp >= 0 ? rlCurrentTimeStamp : 0);                UINT32      ulSize      = 0;                IHXPacket* pNewPacket  = NULL;                retVal                  = SetPacketTimeStamp(pPacket, ulTimeStamp,                                                             ulSize, pNewPacket);                if (SUCCEEDED(retVal))                {                    // Update the time stamp                    rlCurrentTimeStamp += (INT32) (ulSize * 8000 / ulBitrate);                    // Assign the out parameter                    HX_RELEASE(rpPacket);                    rpPacket = pNewPacket;                    rpPacket->AddRef();                }                HX_RELEASE(pNewPacket);            }            HX_RELEASE(pPacket);        }    }    return retVal;}HX_RESULT PXImageFile::GetFirstPacket(REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_FAIL;    if (m_pPacketList)    {        LISTPOSITION pos = m_pPacketList->GetHeadPosition();        if (pos)        {            IHXPacket* pPacket = (IHXPacket*) m_pPacketList->GetNext(pos);            if (pPacket)            {                HX_RELEASE(rpPacket);                rpPacket = pPacket;                rpPacket->AddRef();                m_pListItr = pos;                retVal     = HXR_OK;            }        }    }    return retVal;}HX_RESULT PXImageFile::GetNextPacket(REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_FAIL;    if (m_pPacketList && m_pListItr)    {        IHXPacket* pPacket = (IHXPacket*) m_pPacketList->GetNext(m_pListItr);        if (pPacket)        {            HX_RELEASE(rpPacket);            rpPacket = pPacket;            rpPacket->AddRef();            retVal   = HXR_OK;        }    }    return retVal;}HX_RESULT PXImageFile::SetPacketTimeStamp(IHXPacket*      pPacket,                                          UINT32           ulTimeStamp,                                          REF(UINT32)      rulPacketSize,                                          REF(IHXPacket*) rpPacket){    return FactorySetTimeStamp(pPacket, m_pCommonClassFactory, ulTimeStamp,                               rulPacketSize, rpPacket);}HX_RESULT PXImageFile::FactorySetTimeStamp(IHXPacket*             pPacket,                                           IHXCommonClassFactory* pFactory,                                           UINT32                  ulTimeStamp,                                           REF(UINT32)             rulPacketSize,                                           REF(IHXPacket*)        rpPacket){    HX_RESULT retVal = HXR_OK;    if (pPacket && pFactory)    {        // Get the packet parameters        IHXBuffer* pBuffer         = NULL;        UINT32      ulTime          = 0;        UINT16      usStreamNumber  = 0;        UINT8       ucASMFlags      = 0;        UINT16      usASMRuleNumber = 0;        retVal                      = pPacket->Get(pBuffer,                                                   ulTime,                                                   usStreamNumber,                                                   ucASMFlags,                                                   usASMRuleNumber);        if (SUCCEEDED(retVal))        {            // Create a new packet            IHXPacket* pNewPacket = NULL;            retVal                 = pFactory->CreateInstance(CLSID_IHXPacket,                                                              (void**) &pNewPacket);            if (SUCCEEDED(retVal))            {                // Set these values with the new timestamp into the new packet                retVal = pNewPacket->Set(pBuffer,                                         ulTimeStamp,                                         usStreamNumber,                                         ucASMFlags,                                         usASMRuleNumber);                if (SUCCEEDED(retVal))                {                    // Assign the out parameters                    rulPacketSize = pBuffer->GetSize();                    HX_RELEASE(rpPacket);                    rpPacket = pNewPacket;                    rpPacket->AddRef();                }            }            HX_RELEASE(pNewPacket);        }        HX_RELEASE(pBuffer);    }    else    {        retVal = HXR_INVALID_PARAMETER;    }    return retVal;}HX_RESULT PXImageFile::AddPacket(IHXPacket* pPacket, BOOL bTail){    HX_RESULT retVal = HXR_OK;    if (pPacket)    {        // Create list if it doesn't exist        if (!m_pPacketList)        {            m_pPacketList = new CHXSimpleList();            if (!m_pPacketList)            {                retVal = HXR_OUTOFMEMORY;            }        }        // AddRef the packet        pPacket->AddRef();        if (bTail)        {            // Add the packet at the tail            m_pPacketList->AddTail((void*) pPacket);        }        else        {            // Add the packet at the head            m_pPacketList->AddHead((void*) pPacket);        }    }    else    {        retVal = HXR_FAIL;    }    return retVal;}UINT32 PXImageFile::GetNumPacketsLeft() const{    return (m_pPacketList ? m_pPacketList->GetCount() : 0);}UINT32 PXImageFile::GetTotalSendTime(UINT32 ulBitrate) const{    UINT32 ulTime = 0;    if (ulBitrate)    {        ulTime = (m_ulTotalBytes * 8000 + (ulBitrate >> 1)) / ulBitrate;    }    return ulTime;}UINT32 PXImageFile::GetPacketSendTime(IHXPacket* pPacket, UINT32 ulBitrate){    UINT32 ulTime = 0;    if (pPacket && ulBitrate)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            ulTime = (pBuffer->GetSize() * 8000 + (ulBitrate >> 1)) / ulBitrate;        }        HX_RELEASE(pBuffer);    }    return ulTime;}

⌨️ 快捷键说明

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