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

📄 wirefmgr.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::GetCookie(IHXPacket* pPacket, UINT32 ulIndex,                                         REF(IHXBuffer*) rpURL, REF(IHXBuffer*) rpBuffer){    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 &&                ulIndex      <  ulNumCookies)            {                // Advance up to the proper cookie                UINT32 ulURLSize    = 0;                UINT32 ulCookieSize = 0;                for (UINT32 i = 0; i < ulIndex; i++)                {                    UnPack32(pBuf, ulURLSize);                    pBuf += ulURLSize;                    UnPack32(pBuf, ulCookieSize);                    pBuf += ulCookieSize;                }                // Get the size of the URL                UnPack32(pBuf, ulURLSize);                // Get the offset of the URL                UINT32 ulURLOffset = pBuf - pBuffer->GetBuffer();                // Advance to the cookie                pBuf += ulURLSize;                // Create a nested buffer class                CHXNestedBuffer *pNestedURLBuffer = NULL;                retVal = CHXNestedBuffer::CreateObject(&pNestedURLBuffer);                if (SUCCEEDED(retVal))                {                    // Addref the object                    pNestedURLBuffer->AddRef();                    // Init the object                    retVal = pNestedURLBuffer->Init(pBuffer, ulURLOffset, ulURLSize);                    if (SUCCEEDED(retVal))                    {                        // Get the size of the cookie                        UnPack32(pBuf, ulCookieSize);                        // Get the offset of this cookie                        UINT32 ulCookieOffset = pBuf - pBuffer->GetBuffer();                        // Create a nested buffer class                        CHXNestedBuffer *pNestedCookieBuffer = NULL;                        retVal = CHXNestedBuffer::CreateObject(&pNestedCookieBuffer);                        if (SUCCEEDED(retVal))                        {                            // Addref the object                            pNestedCookieBuffer->AddRef();                            // Init the object                            retVal = pNestedCookieBuffer->Init(pBuffer, ulCookieOffset, ulCookieSize);                            if (SUCCEEDED(retVal))                            {                                // Assign the nested buffer to the out parameter                                HX_RELEASE(rpURL);                                retVal = pNestedURLBuffer->QueryInterface(IID_IHXBuffer, (void**) &rpURL);                                if (SUCCEEDED(retVal))                                {                                    HX_RELEASE(rpBuffer);                                    retVal = pNestedCookieBuffer->QueryInterface(IID_IHXBuffer, (void**) &rpBuffer);                                }                            }                        }                        HX_RELEASE(pNestedCookieBuffer);                    }                }                HX_RELEASE(pNestedURLBuffer);            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::SetNoOpInfo(UINT32 ulSize, UINT32 ulTimeStamp, REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_FAIL;    if (ulSize >= 4)    {        IHXBuffer* pBuffer = NULL;        retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer, (void**) &pBuffer);        if (SUCCEEDED(retVal))        {            retVal = pBuffer->SetSize(ulSize);            if (SUCCEEDED(retVal))            {                BYTE* pBuf = pBuffer->GetBuffer();                Pack32(pBuf, 0xFFFFFFFF);                                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);    }    return retVal;}HX_RESULT PXWireFormatManager::GetBackChannelInfo(IHXPacket* pPacket, REF(UINT32) rulHandle,                                                  REF(UINT32) rulTimeStopped){    HX_RESULT retVal = HXR_FAIL;    if (pPacket)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            BYTE* pBuf = pBuffer->GetBuffer();            if (pBuf)            {                UINT32 ulOpCode = UnPackUINT32(pBuf);                if (ulOpCode == 0x34414453) // "4ADS"                {                    rulHandle      = UnPackUINT32(pBuf);                    rulTimeStopped = UnPackUINT32(pBuf);                    retVal         = HXR_OK;                }            }        }        HX_RELEASE(pBuffer);    }    return retVal;}HX_RESULT PXWireFormatManager::SetBackChannelInfo(UINT32 ulHandle, UINT32 ulTimeStopped,                                                  REF(IHXPacket*) rpPacket){    HX_RESULT retVal = HXR_OK;    if (ulHandle)    {        IHXBuffer* pBuffer = NULL;        retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,                                                                    (void**) &pBuffer);        if (SUCCEEDED(retVal))        {            retVal = pBuffer->SetSize(12);            if (SUCCEEDED(retVal))            {                // Pack the opaque buffer                BYTE* pBuf = pBuffer->GetBuffer();                PackUINT32(pBuf, 0x34414453);                PackUINT32(pBuf, ulHandle);                PackUINT32(pBuf, ulTimeStopped);                // Create the packet                IHXPacket* pPacket = NULL;                retVal              = m_pCommonClassFactory->CreateInstance(CLSID_IHXPacket,                                                                            (void**) &pPacket);                if (SUCCEEDED(retVal))                {                    // Set the packet parameters                    retVal = pPacket->Set(pBuffer,            // opaque data                                          0,                  // time stamp                                          0,                  // stream 0                                          HX_ASM_SWITCH_OFF, // ASM flag                                          0);                 //                     if (SUCCEEDED(retVal))                    {                        // Pass the packet back                        HX_RELEASE(rpPacket);                        rpPacket = pPacket;                        rpPacket->AddRef();                    }                }                HX_RELEASE(pPacket);            }        }        HX_RELEASE(pBuffer);    }    else    {        retVal = HXR_INVALID_PARAMETER;    }    return retVal;}UINT32 PXWireFormatManager::GetEffectWireSize(PXEffect* pEffect){    UINT32 ulRet = 0;    if (pEffect)    {        ulRet += pEffect->PackedSize(HX_GET_MAJOR_VERSION(m_ulStreamVersion),                                     HX_GET_MINOR_VERSION(m_ulStreamVersion));        ulRet += kIHXPacketOverhead;    }    return ulRet;}UINT32 PXWireFormatManager::GetImageWireSize(IHXBuffer* pStreamMimeStr, UINT32 ulImageFileSize){    UINT32 ulRet = 0;    if (pStreamMimeStr && ulImageFileSize)    {        // First we add the image header packet        //        // Add fixed size of image header packet        ulRet += 18;        // Add stream mime type string length of image header packet        UINT32 ulMimeLen = strlen((const char*) pStreamMimeStr->GetBuffer());        if (ulMimeLen)        {            ulRet += ulMimeLen + 1;        }        // Add the IHXPacket overhead of the image header packet        ulRet += kIHXPacketOverhead;        // Now we make a worst-case estimate of the number of packets        // for this image.        UINT32 ulWorstCaseNumPackets = (ulImageFileSize + kMinImageDataPacketSize - 1) / kMinImageDataPacketSize;        // Now, based on this estimated number of packets we can        // compute the overhead        UINT32 ulWorstCaseOverhead   = (kIHXPacketOverhead + 8 + GetOpaqueSize((const char*) pStreamMimeStr->GetBuffer())) *                                       ulWorstCaseNumPackets;        // Now add the wire size for the image data packets - this        // is the file size plus the worst case overhead        ulRet += ulImageFileSize;        ulRet += ulWorstCaseOverhead;    }    return ulRet;}UINT32 PXWireFormatManager::GetPacketSize(IHXPacket* pPacket){    UINT32 ulSize = 0;    if (pPacket)    {        IHXBuffer* pBuffer = pPacket->GetBuffer();        if (pBuffer)        {            ulSize = pBuffer->GetSize();        }        HX_RELEASE(pBuffer);    }    return ulSize;}UINT32 PXWireFormatManager::GetOpaqueSize(const char* pszMimeType){    UINT32 ulRetVal = kDefaultOpaqueSize;    if (m_pMapMimeToOpaqueSize)    {        void *pVoid = NULL;        if (m_pMapMimeToOpaqueSize->Lookup(pszMimeType, pVoid))        {            ulRetVal = (UINT32) pVoid;        }    }    return ulRetVal;}void PXWireFormatManager::ReleaseAllCodecMimes(){    if (m_pCodecMimeList)    {        LISTPOSITION pos = m_pCodecMimeList->GetHeadPosition();        while (pos)        {            IHXBuffer* pBuffer = (IHXBuffer*) m_pCodecMimeList->GetNext(pos);            HX_RELEASE(pBuffer);        }        m_pCodecMimeList->RemoveAll();    }}void PXWireFormatManager::ReleaseAllFXPackageMimes(){    if (m_pFXPackageMimeList)    {        LISTPOSITION pos = m_pFXPackageMimeList->GetHeadPosition();        while (pos)        {            IHXBuffer* pBuffer = (IHXBuffer*) m_pFXPackageMimeList->GetNext(pos);            HX_RELEASE(pBuffer);        }        m_pFXPackageMimeList->RemoveAll();    }}void PXWireFormatManager::Deallocate(){    HX_RELEASE(m_pContext);    HX_RELEASE(m_pCommonClassFactory);    HX_RELEASE(m_pTitleStr);    HX_RELEASE(m_pAuthorStr);    HX_RELEASE(m_pCopyrightStr);    HX_RELEASE(m_pDefaultURLStr);    ReleaseAllCodecMimes();    HX_DELETE(m_pCodecMimeList);    ReleaseAllFXPackageMimes();    HX_DELETE(m_pFXPackageMimeList);    HX_DELETE(m_pMapMimeToOpaqueSize);    HX_RELEASE(m_pASMRuleBook);    HX_RELEASE(m_pStreamMimeType);}void PXWireFormatManager::Reset(){    m_ulStreamVersion     = HX_ENCODE_PROD_VERSION(0, 0, 0, 0);    m_ulStart             = 0;    m_ulDuration          = 0;    m_bIsLive             = FALSE;    m_bMinimizeLatency    = FALSE;    m_ulPreroll           = 0;    m_bPrerollAfterSeek   = TRUE;    m_ulPreData           = 0;    m_bPreDataAtStart     = TRUE;    m_ulBitrate           = 0;    m_ulDisplayWidth      = 0;    m_ulDisplayHeight     = 0;    m_bDefaultAspectFlag  = TRUE;    m_ulDefaultMaxFps     = 0;    m_ulContentVersion    = HX_ENCODE_PROD_VERSION(0, 0, 0, 0);    m_ulBackgroundColor   = 0x00000000;    m_ulBackgroundOpacity = 255;    m_pCodecListPos       = NULL;    m_pFXPackageListPos   = NULL;    m_ulRendererFlags     = 0;}UINT32 PXWireFormatManager::PackStreamHeader(BYTE*& rpBuf, BOOL bPack){    UINT32 ulSize = 0;    if (HX_GET_MAJOR_VERSION(m_ulStreamVersion) <=        HX_GET_MAJOR_VERSION(m_ulHighestSupportedStreamVersion) &&        HX_GET_MINOR_VERSION(m_ulStreamVersion) <=        HX_GET_MINOR_VERSION(m_ulHighestSupportedStreamVersion))    {        // Pack/add display width and height        ulSize += 8;        if (bPack)        {            Pack32(rpBuf, m_ulDisplayWidth);            Pack32(rpBuf, m_ulDisplayHeight);        }                // Pack/add size of default URL        ulSize += 2; // default URL size        if (m_pDefaultURLStr)        {            UINT32 ulLen = (UINT32) strlen((const char*) m_pDefaultURLStr->GetBuffer());            if (ulLen > 0)            {                ulSize += ulLen + 1;            }

⌨️ 快捷键说明

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