[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] mp4/payload h264packetizer.cpp,1.4,1.5
From: vkeinonen () helixcommunity ! org
Date: 2009-06-29 10:04:00
Message-ID: 200906291110.n5TBATFl017888 () mailer ! progressive-comp ! com
[Download RAW message or body]
Update of /cvsroot/datatype/mp4/payload
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv28649
Modified Files:
h264packetizer.cpp
Log Message:
Merge fixes from producer branch (ASM flags, memory leaks, proper mode
spelling).
Index: h264packetizer.cpp
===================================================================
RCS file: /cvsroot/datatype/mp4/payload/h264packetizer.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- h264packetizer.cpp 12 Jun 2009 23:59:44 -0000 1.4
+++ h264packetizer.cpp 29 Jun 2009 10:03:58 -0000 1.5
@@ -450,11 +450,16 @@
}
}
- // Set the RTP Payload type
- m_pHeader->SetPropertyULONG32("RTPPayloadType", RTP_PAYLOAD_INTERLEAVE);
+ // Set the RTP Payload type unless already present
+ ULONG32 ulRPT = RTP_PAYLOAD_INTERLEAVE;
+
+ if (!SUCCEEDED(m_pHeader->GetPropertyULONG32("RTPPayloadType", ulRPT)))
+ {
+ m_pHeader->SetPropertyULONG32("RTPPayloadType", RTP_PAYLOAD_INTERLEAVE);
+ }
nWritten = SafeSprintf(pSDPBuf + nWritten, ulSDPBufLength,
- "a=fmtp:%u ", RTP_PAYLOAD_INTERLEAVE);
+ "a=fmtp:%u", ulRPT);
ulSDPBufLength -= nWritten;
@@ -596,7 +601,6 @@
pNALPacket->packetValid = TRUE;
pNALPacket->rtpPacket = FALSE;
pNALPacket->pBuffer = pPacket->GetBuffer();
- HX_ADDREF(pNALPacket->pBuffer);
pNALPacket->ulTimeStamp = pPacket->GetTime();
pNALPacket->usStream = pPacket->GetStreamNumber();
pNALPacket->uASMFlags = pPacket->GetASMFlags();
@@ -606,6 +610,7 @@
{
pNALPacket->rtpPacket = TRUE;
pNALPacket->ulRTPTimeStamp = pRPkt->GetRTPTime();
+ HX_RELEASE(pRPkt);
}
}
return pNALPacket;
@@ -667,7 +672,11 @@
ulPacketLen = 0;
}
m_NALPacketList.AddTail(pNALPacket);
- bPacketAdded = TRUE;
+ if (!bPacketAdded)
+ {
+ pNALPacket->firstPacket = TRUE;
+ bPacketAdded = TRUE;
+ }
}
}
}
@@ -684,7 +693,7 @@
ConstructAggregationPacket();
#else
#ifdef QTCONFIG_NON_INTERLEAVE_MODE
-#ifdef QTCONFIG_SIMPLIFIED_NON_INTERLEAVE_MODE
+#ifdef QTCONFIG_SIMPLIFIED_NON_INTERLEAVE
CreateSingleNALPacket();
#else
// Create the packet immediately to avoid losing timing information
@@ -718,11 +727,6 @@
{
/* Transfering ownership here */
pPacket = (IHXPacket*)m_FinishedPktList.RemoveHead();
-
- // TMP to be removed
- IHXBuffer* pBuffer = pPacket->GetBuffer();
- UINT8* pData = pBuffer->GetBuffer();
- UINT32 ulBuffSize = pBuffer->GetSize();
}
else if (HXR_OK == res)
{
@@ -787,6 +791,29 @@
(void**)&pBuf)) &&
(HXR_OK == pBuf->SetSize(ulPacketLength)))
{
+ UINT32 uiASMFlags = pNALPacket->uASMFlags;
+
+ if (pNALPacket->firstPacket)
+ {
+ uiASMFlags &= ~HX_ASM_SIDE_EFFECT;
+ uiASMFlags |= HX_ASM_SWITCH_OFF;
+ }
+ else if (pNALPacket->usASMRule == 0)
+ {
+ uiASMFlags &= ~(HX_ASM_SWITCH_ON | HX_ASM_SWITCH_OFF | HX_ASM_SIDE_EFFECT);
+ }
+ else
+ {
+ if (uiASMFlags & HX_ASM_SWITCH_ON)
+ {
+ uiASMFlags &= ~HX_ASM_SWITCH_OFF;
+ uiASMFlags |= HX_ASM_SIDE_EFFECT;
+ }
+ else
+ {
+ uiASMFlags &= ~(HX_ASM_SWITCH_OFF | HX_ASM_SIDE_EFFECT);
+ }
+ }
memcpy(pBuf->GetBuffer(), pNALPacket->pData, pNALPacket->ulSize);
if (pNALPacket->rtpPacket)
{
@@ -794,18 +821,16 @@
res = pRPkt->SetRTP(pBuf, pNALPacket->ulTimeStamp,
pNALPacket->ulRTPTimeStamp,
pNALPacket->usStream,
- pNALPacket->uASMFlags,
+ uiASMFlags,
pNALPacket->usASMRule);
}
else
{
res = pNewPkt->Set(pBuf, pNALPacket->ulTimeStamp,
pNALPacket->usStream,
- pNALPacket->uASMFlags,
+ uiASMFlags,
pNALPacket->usASMRule);
}
- HX_DELETE(pNALPacket);
-
if (HXR_OK == res)
{
m_bPendingFlush = FALSE;
@@ -814,6 +839,10 @@
}
else
{
+ if (pRPkt)
+ {
+ HX_DELETE(pRPkt);
+ }
if(pNewPkt)
{
HX_DELETE(pNewPkt);
@@ -824,6 +853,7 @@
}
}
}
+ HX_DELETE(pNALPacket);
}
else
{
@@ -1185,7 +1215,7 @@
ulPacketLength -= (MAX_PACKET_SIZE - ulHeaderSize);
if (uiASMFlags & HX_ASM_SWITCH_ON)
{
- if (bFirstFragment)
+ if (bFirstFragment && pNALPacket->firstPacket)
{
uiASMFlags &= ~HX_ASM_SIDE_EFFECT;
uiASMFlags |= HX_ASM_SWITCH_OFF;
@@ -1198,7 +1228,7 @@
else
{
uiASMFlags &= ~(HX_ASM_SWITCH_OFF | HX_ASM_SIDE_EFFECT);
- if (bFirstFragment)
+ if (bFirstFragment && pNALPacket->firstPacket)
uiASMFlags |= HX_ASM_SWITCH_OFF;
}
}
@@ -1210,6 +1240,7 @@
{
if (pNALPacket->usASMRule != 0)
{
+ uiASMFlags &= ~HX_ASM_SWITCH_OFF;
uiASMFlags |= HX_ASM_SIDE_EFFECT;
}
else
@@ -1220,7 +1251,7 @@
else
{
uiASMFlags &= ~(HX_ASM_SWITCH_OFF | HX_ASM_SIDE_EFFECT);
- if (bFirstFragment)
+ if (bFirstFragment && pNALPacket->firstPacket)
uiASMFlags |= HX_ASM_SWITCH_OFF;
}
// ASMRULE should be set according to last packet
@@ -1252,6 +1283,10 @@
}
else
{
+ if (pRPkt)
+ {
+ HX_DELETE(pRPkt);
+ }
if(pNewPkt)
{
HX_DELETE(pNewPkt);
_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic