📄 chxpckts.cpp
字号:
return 0;
}
/************************************************************************
* Method:
* IHXPacket::Set
*/
STDMETHODIMP
CHXRTPPacket::Set(IHXBuffer* pBuffer,
ULONG32 ulTime,
UINT16 uStreamNumber,
UINT8 unASMFlags,
UINT16 unASMRuleNumber)
{
m_ulRTPTime = ulTime;
return _Set(pBuffer,
ulTime,
uStreamNumber,
unASMFlags,
unASMRuleNumber);
}
/************************************************************************
* Method:
* IHXRTPPacket::GetRTP
*/
STDMETHODIMP
CHXRTPPacket::GetRTP(REF(IHXBuffer*) pBuffer,
REF(ULONG32) ulTime,
REF(ULONG32) ulRTPTime,
REF(UINT16) uStreamNumber,
REF(UINT8) unASMFlags,
REF(UINT16) unASMRuleNumber)
{
ulRTPTime = m_ulRTPTime;
return _Get(pBuffer,
ulTime,
uStreamNumber,
unASMFlags,
unASMRuleNumber);
}
/************************************************************************
* Method:
* IHXRTPPacket::GetRTPTime
*/
STDMETHODIMP_(ULONG32)
CHXRTPPacket::GetRTPTime()
{
return m_ulRTPTime;
}
/************************************************************************
* Method:
* IHXRTPPacket::SetRTP
*/
STDMETHODIMP
CHXRTPPacket::SetRTP(IHXBuffer* pBuffer,
ULONG32 ulTime,
ULONG32 ulRTPTime,
UINT16 uStreamNumber,
UINT8 unASMFlags,
UINT16 unASMRuleNumber)
{
m_ulRTPTime = ulRTPTime;
return _Set(pBuffer,
ulTime,
uStreamNumber,
unASMFlags,
unASMRuleNumber);
}
/////////////////////////////////////////////////////////////////////////
// CHXHeader
//
/////////////////////////////////////////////////////////////////////////
// Method:
// IUnknown::QueryInterface
// Purpose:
// Implement this to export the interfaces supported by your
// object.
//
STDMETHODIMP
CHXHeader::QueryInterface(REFIID riid, void** ppvObj)
{
if (IsEqualIID(riid, IID_IUnknown))
{
AddRef();
*ppvObj = this;
return HXR_OK;
}
else if (IsEqualIID(riid, IID_IHXValues))
{
AddRef();
*ppvObj = (IHXValues*)this;
return HXR_OK;
}
*ppvObj = NULL;
return HXR_NOINTERFACE;
}
/////////////////////////////////////////////////////////////////////////
// Method:
// IUnknown::AddRef
// Purpose:
// Everyone usually implements this the same... feel free to use
// this implementation.
//
STDMETHODIMP_(ULONG32)
CHXHeader::AddRef()
{
return InterlockedIncrement(&m_lRefCount);
}
/////////////////////////////////////////////////////////////////////////
// Method:
// IUnknown::Release
// Purpose:
// Everyone usually implements this the same... feel free to use
// this implementation.
//
STDMETHODIMP_(ULONG32)
CHXHeader::Release()
{
if (InterlockedDecrement(&m_lRefCount) > 0)
{
return m_lRefCount;
}
delete this;
return 0;
}
CHXHeader::CValue&
CHXHeader::CValue::operator= (CHXHeader::CValue const& rhs)
{
CValue(rhs).Swap(*this);
return *this;
}
CHXHeader::~CHXHeader()
{
for (Map::iterator i = m_Map.begin(); i != m_Map.end(); ++i)
{
delete[] (char*)i->first;
}
}
CHXHeader::CValue::~CValue()
{
HX_RELEASE(m_pIBuffer);
HX_RELEASE(m_pIString);
}
bool
CHXHeader::MyCompare::operator()(const char* p1, const char* p2) const
{
return (m_PreserveCase ? strcmp(p1, p2) : strcmpi(p1, p2)) < 0;
}
STDMETHODIMP
CHXHeader::SetPropertyULONG32(const char* pPropertyName,
ULONG32 uPropertyValue)
{
return SetProperty(pPropertyName, &CValue::m_lVal, uPropertyValue);
}
STDMETHODIMP
CHXHeader::GetPropertyULONG32(const char* pPropertyName,
REF(ULONG32) uPropertyValue)
{
return GetProperty(pPropertyName, &CValue::m_lVal, uPropertyValue);
}
STDMETHODIMP
CHXHeader::GetFirstPropertyULONG32(REF(const char*) pPropertyName,
REF(ULONG32) uPropertyValue)
{
m_ULONG32Position = m_Map.begin();
return GetNextProperty(
pPropertyName,
&CValue::m_lVal,
uPropertyValue,
m_ULONG32Position);
}
STDMETHODIMP
CHXHeader::GetNextPropertyULONG32(REF(const char*) pPropertyName,
REF(ULONG32) uPropertyValue)
{
if (m_ULONG32Position == m_Map.end())
{
return HXR_FAIL;
}
return GetNextProperty(
pPropertyName,
&CValue::m_lVal,
uPropertyValue,
++m_ULONG32Position);
}
STDMETHODIMP
CHXHeader::SetPropertyBuffer(const char* pPropertyName,
IHXBuffer* pPropertyValue)
{
if (!pPropertyValue)
{
return HXR_FAIL;
}
return SetProperty(pPropertyName, &CValue::m_pIBuffer, pPropertyValue);
}
STDMETHODIMP
CHXHeader::GetPropertyBuffer(const char* pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
return GetProperty(pPropertyName, &CValue::m_pIBuffer, pPropertyValue);
}
STDMETHODIMP
CHXHeader::GetFirstPropertyBuffer(REF(const char*) pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
m_BufferPosition = m_Map.begin();
return GetNextProperty(
pPropertyName,
&CValue::m_pIBuffer,
pPropertyValue,
m_BufferPosition);
}
STDMETHODIMP
CHXHeader::GetNextPropertyBuffer(REF(const char*) pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
if (m_BufferPosition == m_Map.end())
{
return HXR_FAIL;
}
return GetNextProperty(
pPropertyName,
&CValue::m_pIBuffer,
pPropertyValue,
++m_BufferPosition);
}
STDMETHODIMP
CHXHeader::SetPropertyCString(const char* pPropertyName,
IHXBuffer* pPropertyValue)
{
if (!pPropertyValue)
{
return HXR_FAIL;
}
return SetProperty(pPropertyName, &CValue::m_pIString, pPropertyValue);
}
STDMETHODIMP
CHXHeader::GetPropertyCString(const char* pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
return GetProperty(pPropertyName, &CValue::m_pIString, pPropertyValue);
}
STDMETHODIMP
CHXHeader::GetFirstPropertyCString(REF(const char*) pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
m_CStringPosition = m_Map.begin();
return GetNextProperty(
pPropertyName,
&CValue::m_pIString,
pPropertyValue,
m_CStringPosition);
}
STDMETHODIMP
CHXHeader::GetNextPropertyCString(REF(const char*) pPropertyName,
REF(IHXBuffer*) pPropertyValue)
{
if (m_CStringPosition == m_Map.end())
{
return HXR_FAIL;
}
return GetNextProperty(
pPropertyName,
&CValue::m_pIString,
pPropertyValue,
++m_CStringPosition);
}
void
CHXHeader::PreserveCase(BOOL bPreserve)
{
HX_ASSERT(m_Map.empty());
Map(MyCompare(bPreserve)).swap(m_Map);
}
void
CHXHeader::mergeHeaders(IHXValues* pDestHeaders,
IHXValues* pSrcHeaders)
{
#if 0
if (!pDestHeaders || !pSrcHeaders) return;
// XXXHP - caveat emptor
CHXHeader& sourceHeader = *((CHXHeader*) pSrcHeaders);
CHXHeader& destHeader = *((CHXHeader*) pDestHeaders);
for (Map::const_iterator i = sourceHeader.m_Map.begin (); i != sourceHeader.m_Map.end (); ++i)
{
Map::iterator j = destHeader.m_Map.find(i->first);
if (j != destHeader.m_Map.end())
{
CValue& lhs = j->second;
const CValue& rhs = i->second;
if (rhs.m_lValValid) lhs.Set(&CValue::m_lVal, rhs.m_lVal);
if (rhs.m_pIBuffer) lhs.Set(&CValue::m_pIBuffer, rhs.m_pIBuffer);
if (rhs.m_pIString) lhs.Set(&CValue::m_pIString, rhs.m_pIString);
}
else
{
char* pTmp = new char[strlen(i->first) + 1];
strcpy(pTmp, i->first); /* Flawfinder: ignore */
Map::value_type newVal(pTmp, i->second);
newVal.second.m_Key = newVal.first;
destHeader.m_Map.insert(newVal);
}
}
#else
if (pSrcHeaders && pDestHeaders)
{
// add these headers to the existing ones
//
const char* pPropName = NULL;
UINT32 ulPropValue = 0;
HX_RESULT rc =
pSrcHeaders->GetFirstPropertyULONG32(pPropName, ulPropValue);
while (SUCCEEDED(rc))
{
pDestHeaders->SetPropertyULONG32(pPropName, ulPropValue);
rc = pSrcHeaders->GetNextPropertyULONG32(pPropName, ulPropValue);
}
IHXBuffer* pBuffer = NULL;
rc = pSrcHeaders->GetFirstPropertyBuffer(pPropName, pBuffer);
while (SUCCEEDED(rc))
{
pDestHeaders->SetPropertyBuffer(pPropName, pBuffer);
pBuffer->Release();
rc = pSrcHeaders->GetNextPropertyBuffer(pPropName, pBuffer);
}
rc = pSrcHeaders->GetFirstPropertyCString(pPropName, pBuffer);
while (SUCCEEDED(rc))
{
pDestHeaders->SetPropertyCString(pPropName, pBuffer);
pBuffer->Release();
rc = pSrcHeaders->GetNextPropertyCString(pPropName, pBuffer);
}
}
#endif
}
_CStoreName::_CStoreName() : m_strName()
{
}
_CStoreName::~_CStoreName()
{
}
const
CHXString& _CStoreName::GetName() const
{
return m_strName;
}
void
_CStoreName::SetName(const char* szName)
{
m_strName = szName;
}
_CStoreNameUINT32Pair::_CStoreNameUINT32Pair() : m_ulValue(0)
{
}
_CStoreNameUINT32Pair::~_CStoreNameUINT32Pair()
{
}
UINT32
_CStoreNameUINT32Pair::GetValue()
{
return m_ulValue;
}
void
_CStoreNameUINT32Pair::SetValue(UINT32 ulValue)
{
m_ulValue = ulValue;
}
_CStoreNameBufferPair::_CStoreNameBufferPair() : m_pbufValue(NULL)
{
}
_CStoreNameBufferPair::~_CStoreNameBufferPair()
{
HX_RELEASE(m_pbufValue);
}
IHXBuffer*
_CStoreNameBufferPair::GetValue()
{
if (m_pbufValue)
{
m_pbufValue->AddRef();
}
return m_pbufValue;
}
void
_CStoreNameBufferPair::SetValue(IHXBuffer* pbufValue)
{
HX_RELEASE(m_pbufValue);
m_pbufValue = pbufValue;
if (m_pbufValue)
{
m_pbufValue->AddRef();
}
}
#if 0
IHXBuffer*
CHXHeader::encodeBuffer(IHXBuffer* pBuffer)
{
//XXXBAB - come back to this soon...
CHXBuffer* pEncodedBuffer = new CHXBuffer;
pEncodedBuffer->AddRef();
pEncodedBuffer->Set(pBuffer->GetBuffer(), pBuffer->GetSize());
return pEncodedBuffer;
}
IHXBuffer*
CHXHeader::encodeCString(IHXBuffer* pBuffer)
{
CHXString tmp;
const char* pStr = (const char*)pBuffer->GetBuffer();
BOOL inEscape = FALSE;
for(size_t i=0;i<strlen(pStr);++i)
{
switch(pStr[i])
{
case '\n':
{
tmp += "\\n";
}
break;
case '\t':
{
tmp += "\\t";
}
break;
case '\r':
{
tmp += "\\r";
}
break;
case '\"':
{
tmp += "\\\"";
}
break;
case '\\':
{
tmp += "\\\\";
}
break;
default:
{
tmp += pStr[i];
}
}
}
CHXBuffer* pEncodedBuffer = new CHXBuffer;
pEncodedBuffer->AddRef();
pEncodedBuffer->Set((const BYTE*)(const char*)tmp, tmp.GetLength()+1);
return pEncodedBuffer;
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -