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

📄 wirefmgr.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }    return retVal;}HX_RESULT PXWireFormatManager::SetImageDataInfo(UINT32 ulHandle, IHXBuffer* pData, IHXBuffer* pOpaque,                                                UINT32 ulPacketIndex, UINT32 ulTimeStamp, BOOL bRequired,                                                REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_FAIL;    if (ulHandle && pData)    {        // Create an IHXBuffer        IHXBuffer* pBuffer = NULL;        retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,                                                                    (void**) &pBuffer);        if (SUCCEEDED(retVal))        {            // Compute the size// XXXMEH - move seq num into opaque temporarily//            UINT32 ulSize = 12; // packet type, handle, seq num            UINT32 ulSize = 8; // packet type, handle            if (pOpaque)            {                ulSize += pOpaque->GetSize();            }            ulSize += pData->GetSize();            // Set the size of the buffer            retVal = pBuffer->SetSize(ulSize);            if (SUCCEEDED(retVal))            {                // Pack the buffer                //                // First we pack the generic (codec-agnostic) header                BYTE* pBuf = pBuffer->GetBuffer();                Pack32(pBuf, kPacketTypeImageData);                Pack32(pBuf, ulHandle);// XXXMEH - move seq num into opaque temporarily//                Pack32(pBuf, ulPacketIndex);                // Now we pack the codec-specific per-packet opaque data                if (pOpaque)                {                    memcpy(pBuf, pOpaque->GetBuffer(), pOpaque->GetSize()); /* Flawfinder: ignore */                    pBuf += pOpaque->GetSize();                }                // Now we pack the codec-specific data straight from the file                memcpy(pBuf, pData->GetBuffer(), pData->GetSize()); /* Flawfinder: ignore */                pBuf += pData->GetSize();                // Create an IHXPacket                IHXPacket* pPacket = NULL;                retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXPacket,                                                                            (void**) &pPacket);                if (SUCCEEDED(retVal))                {                    retVal = pPacket->Set(pBuffer,              // opaque data                                          ulTimeStamp,          // time stamp                                          0,                    // stream 0                                          HX_ASM_SWITCH_ON,    // ASM flag                                          (bRequired ? 1 : 0)); // ASM rule (0 if not required, 1 if required)                    if (SUCCEEDED(retVal))                    {                        // Assign to out parameter                        HX_RELEASE(rpPacket);                        rpPacket = pPacket;                        rpPacket->AddRef();                    }                }                HX_RELEASE(pPacket);            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::GetEffectType(IHXPacket* pPacket, REF(UINT32) rulType){    HX_RESULT retVal = HXR_FAIL;    if (pPacket)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            BYTE* pBuf = pBuffer->GetBuffer();            if (pBuf)            {                UINT32 ulPacketType = 0;                UnPack32(pBuf, ulPacketType);                if (ulPacketType == PXWireFormatManager::kPacketTypeEffect)                {                    UINT32 ulFlags      = 0;                    UINT32 ulEffectType = 0;                    UnPack32(pBuf, ulFlags);                    UnPack32(pBuf, rulType);                    retVal = HXR_OK;                }            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::GetEffectInfo(IHXPacket* pPacket, PXEffect** ppEffect){    HX_RESULT retVal = HXR_OK;    if (pPacket && ppEffect)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            BYTE* pBuf = pBuffer->GetBuffer();            if (pBuf)            {                UINT32 ulType = 0xFFFFFFFF;                UnPack32(pBuf, ulType);                if (ulType == kPacketTypeEffect)                {                    // Create an effect object                    PXEffect* pEffect = NULL;                    retVal            = PXEffect::CreateObject(&pEffect);                    if (SUCCEEDED(retVal))                    {                        // AddRef the object                        pEffect->AddRef();                        // Initialize it from the opaque data                        pBuf -= 4; // back up to the beginning                        pEffect->UnPack(pBuf, HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                              HX_GET_MINOR_VERSION(m_ulStreamVersion));                        if (SUCCEEDED(retVal))                        {                            // Assign the out parameter                            *ppEffect = pEffect;                            (*ppEffect)->AddRef();                        }                    }                    // Release our ref on the packet                    HX_RELEASE(pEffect);                }                else                {                    retVal = HXR_FAIL;                }            }            else            {                retVal = HXR_FAIL;            }        }        else        {            retVal = HXR_FAIL;        }        HX_RELEASE(pBuffer);    }    else    {        retVal = HXR_INVALID_PARAMETER;    }    return retVal;}HX_RESULT PXWireFormatManager::SetEffectPacketParameters(IHXPacket* pPacket,	UINT32 ulEffectType, UINT32 ulStart, UINT32 ulDuration){    HX_RESULT retVal = HXR_FAIL;    if (pPacket)    {        IHXBuffer* pOldBuffer    = NULL;        UINT32      ulOldTime     = 0;        UINT16      usOldStrNum   = 0;        UINT8       ucOldASMFlags = 0;        UINT16      usOldRuleNum  = 0;        retVal = pPacket->Get(pOldBuffer, ulOldTime, usOldStrNum, ucOldASMFlags,		    usOldRuleNum);        if (SUCCEEDED(retVal))        {            PXEffect* pEffect = NULL;            retVal            = PXEffect::CreateObject(&pEffect);            if (SUCCEEDED(retVal))            {		pEffect->AddRef();                BYTE* pBuf = pOldBuffer->GetBuffer();                pEffect->UnPack(pBuf,                                HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                HX_GET_MINOR_VERSION(m_ulStreamVersion));                // Update the parameters                pEffect->SetEffectType((BYTE) ulEffectType);                pEffect->SetStart(ulStart);                pEffect->SetDuration(ulDuration);                // Get a new buffer for it                IHXBuffer* pNewBuffer = NULL;                retVal                 = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,                                                                               (void**) &pNewBuffer);                if (SUCCEEDED(retVal))                {                    // Set its size                    retVal = pNewBuffer->SetSize(pEffect->PackedSize(HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                                                     HX_GET_MINOR_VERSION(m_ulStreamVersion)));                    if (SUCCEEDED(retVal))                    {                        // Pack the new effect                        BYTE* pBuf = pNewBuffer->GetBuffer();                        pEffect->Pack(pBuf,                                      HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                      HX_GET_MINOR_VERSION(m_ulStreamVersion));                        // Set the new buffer into the packet                        retVal = pPacket->Set(pNewBuffer, ulOldTime, usOldStrNum,                                              ucOldASMFlags, usOldRuleNum);                    }                }                HX_RELEASE(pNewBuffer);            }            HX_RELEASE(pEffect);        }        HX_RELEASE(pOldBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::SetEffectInfo(PXEffect* pEffect, UINT32 ulTimeStamp, REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_FAIL;    if (pEffect)    {        // Create an IHXBuffer        IHXBuffer* pBuffer = NULL;        retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,                                                                    (void**) &pBuffer);        if (SUCCEEDED(retVal))        {            // Compute the size            UINT32 ulSize = pEffect->PackedSize(HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                                HX_GET_MINOR_VERSION(m_ulStreamVersion));            // Set the size of the buffer            retVal = pBuffer->SetSize(ulSize);            if (SUCCEEDED(retVal))            {                // Pack the buffer                BYTE* pBuf = pBuffer->GetBuffer();                pEffect->Pack(pBuf,                              HX_GET_MAJOR_VERSION(m_ulStreamVersion),                              HX_GET_MINOR_VERSION(m_ulStreamVersion));                // Create an IHXPacket                IHXPacket* pPacket = NULL;                retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXPacket,                                                                            (void**) &pPacket);                if (SUCCEEDED(retVal))                {                    retVal = pPacket->Set(pBuffer,           // opaque data                                          ulTimeStamp,       // time stamp                                          0,                 // stream 0                                          HX_ASM_SWITCH_ON, // ASM flag                                          1);                // ASM rule 1                    if (SUCCEEDED(retVal))                    {                        // Assign to out parameter                        HX_RELEASE(rpPacket);                        rpPacket = pPacket;                        rpPacket->AddRef();                    }                }                HX_RELEASE(pPacket);            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::SetCookieInfo(UINT32 ulNumCookies, IHXBuffer** ppURL, IHXBuffer** ppCookie,                                             UINT32 ulTimeStamp, REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_OK;    if (ulNumCookies && ppURL && ppCookie)    {        // Compute size of packet        UINT32 ulSize = 8;        UINT32 i      = 0;        for (i = 0; i < ulNumCookies; i++)        {            if (ppURL[i] && ppCookie[i])            {                ulSize += 4;                      // Size of URL                ulSize += ppURL[i]->GetSize();    // URL                ulSize += 4;                      // Size of Set-Cookie                ulSize += ppCookie[i]->GetSize(); // Set-Cookie            }            else            {                retVal = HXR_FAIL;            }        }        if (SUCCEEDED(retVal))        {            // Create opaque data buffer            IHXBuffer* pBuffer = NULL;            retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer, (void**) &pBuffer);            if (SUCCEEDED(retVal))            {                // Set its size                retVal = pBuffer->SetSize(ulSize);                if (SUCCEEDED(retVal))                {                    // Pack the buffer                    BYTE* pBuf = pBuffer->GetBuffer();                    Pack32(pBuf, kPacketTypeCookie);                    Pack32(pBuf, ulNumCookies);                    for (i = 0; i < ulNumCookies; i++)                    {                        Pack32(pBuf, ppURL[i]->GetSize());                        memcpy(pBuf, ppURL[i]->GetBuffer(), ppURL[i]->GetSize()); /* Flawfinder: ignore */                        pBuf += ppURL[i]->GetSize();                        Pack32(pBuf, ppCookie[i]->GetSize());                        memcpy(pBuf, ppCookie[i]->GetBuffer(), ppCookie[i]->GetSize()); /* Flawfinder: ignore */                        pBuf += ppCookie[i]->GetSize();                    }                    // Create an IHXPacket object                    IHXPacket* pPacket = NULL;                    retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXPacket, (void**) &pPacket);                    if (SUCCEEDED(retVal))                    {                        // Set the packet parameters                        retVal = pPacket->Set(pBuffer,           // opaque data                                              ulTimeStamp,       // time stamp                                              0,                 // stream 0                                              HX_ASM_SWITCH_ON, // ASM flag                                              0);                // ASM rule 0                        if (SUCCEEDED(retVal))                        {                            // Assign the out parameters                            HX_RELEASE(rpPacket);                            rpPacket = pPacket;                            rpPacket->AddRef();                        }                    }                    HX_RELEASE(pPacket);                }            }            HX_RELEASE(pBuffer);        }    }    else    {        retVal = HXR_FAIL;    }    return retVal;}HX_RESULT PXWireFormatManager::GetNumCookies(IHXPacket* pPacket, REF(UINT32) rulNumCookies){    HX_RESULT retVal = HXR_FAIL;    if (pPacket)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            BYTE*  pBuf         = pBuffer->GetBuffer();            UINT32 ulPacketType = 0;            UINT32 ulNumCookies = 0;            UnPack32(pBuf, ulPacketType);            UnPack32(pBuf, ulNumCookies);            if (ulPacketType == kPacketTypeCookie)            {                retVal        = HXR_OK;                rulNumCookies = ulNumCookies;

⌨️ 快捷键说明

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