[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