[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] mp4/payload Umakefil, 1.37, 1.37.4.1 mp4gpyld.cpp,
From:       ckarusala () helixcommunity ! org
Date:       2011-01-29 1:31:05
Message-ID: 201101290131.p0T1V6hX012900 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/datatype/mp4/payload
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv17522

Modified Files:
      Tag: SERVER_14_2
	Umakefil mp4gpyld.cpp 
Log Message:
Synopsis
========
This CR adds support for MPEG2-TS conversion and segmentation for 
streams containing mpeg4-generic audio.


Branch : SERVER_14_2_RN, HEAD
Suggested Reviewer : Shantha, Jamie


Description:
==========
For iPhone, we currently support AAC audio only if its packetized 
using the standard RTP packetization (mp4a-latm). But few customers 
are using QuickTime Broadcaster which uses "mpeg4-generic" 
packetization by default. So this CR adds support for this.


1. We have a de-packetizer in the common code called 
"MP4GPayloadFormat" which can handle depacketizing "mpeg4-generic" 
audio streams. Updated it to create IHXPacket data structures for 
outgoing samples since it currently uses CMediaPacket client side 
data structure. Also, made few updates to stream number, rule number 
and setting the sample rate etc that are needed for server. Most of 
these changes are added under the server specific define MP4_DEPACK_IHXPACKET.


2. Updated AACPESPayload packetizer to handle FMTPConfig coming as a 
ULONG32 in stream headers instead of a C-string like the "mp4a-latm" case.


3. Updated the MPEG2 TS stream handler to handle the new MimeType and 
create the right "MP4GPayloadFormat" de-packetizer.


4. Finally, to support on-demand content, updated the MP4 packetizer 
factory to consider "audio/X-RN-QT-RAWAU" also while creating PES 
packetizers for audio.


Files Modified
==========
datatype_rn/mp4/fileformat/qtpluspacketizerfct.cpp
datatype_rn/mpeg2/payload/aacpespyld.cpp
server_rn/datatype/mpeg2ts/streamhandler.cpp
server_rn/datatype/mpeg2ts/pub/streamhandler.h
datatype/mp4/payload/Umakefil
datatype/mp4/payload/mp4gpyld.cpp
datatype/mp4/payload/pub/mp4gpyld.h


Testing Performed
=================
Unit Tests:


- Verified with RTP live streams with mpeg4-generic audio from 
Envivio 4caster and Quicktime Broadcaster. Segments are created as 
expected and playback on iPhone is good.
- Verified with OD content created by Quicktime Broadcaster with 
mpeg4-generic audio.


Integration Tests:
- None.


Leak Tests:
- None.


Performance Tests:
- None


Platforms Tested: win-x86_64-vc10
Build Verified: win-x86_64-vc10


Thanks,
Chytanya




Index: Umakefil
===================================================================
RCS file: /cvsroot/datatype/mp4/payload/Umakefil,v
retrieving revision 1.37
retrieving revision 1.37.4.1
diff -u -d -r1.37 -r1.37.4.1
--- Umakefil	24 Apr 2010 12:05:31 -0000	1.37
+++ Umakefil	29 Jan 2011 01:31:03 -0000	1.37.4.1
@@ -70,7 +70,8 @@
                     "mp4vpyld.cpp",
                     "mp4pyldutil.cpp",
                     "mp4apyld.cpp",
-                    "mp4-latm-depack.cpp")
+                    "mp4-latm-depack.cpp",
+                    "mp4gpyld.cpp")
 
 # client side packetizers and depacketizers
 if not project.IsDefined("HELIX_FEATURE_SERVER"):                         
@@ -81,7 +82,6 @@
                         "amr_rs_itr.cpp",
                         "hxamrpyld.cpp",
                         "mp4tpyld.cpp",
-                        "mp4gpyld.cpp",
                         "concatpyld.cpp",
                         "pcmpyld.cpp",
                         "mp3pyld.cpp",             

Index: mp4gpyld.cpp
===================================================================
RCS file: /cvsroot/datatype/mp4/payload/mp4gpyld.cpp,v
retrieving revision 1.17
retrieving revision 1.17.16.1
diff -u -d -r1.17 -r1.17.16.1
--- mp4gpyld.cpp	9 Oct 2009 16:23:01 -0000	1.17
+++ mp4gpyld.cpp	29 Jan 2011 01:31:03 -0000	1.17.16.1
@@ -77,6 +77,7 @@
 
 #include "sdpchunk.h"
 #include "sdptools.h"
+#include "aacconstants.h"
 #include "mp4gpyld.h"
 
 
@@ -105,6 +106,8 @@
     , m_ulSamplesPerSecond  (1000)
     , m_ulRTPSamplesPerSecond(0)
     , m_ulAUDuration	    (0)
+    , m_usStreamNumber      (MAX_UINT16)
+    , m_usBaseRule          (0)
 {
     ;
 }
@@ -250,8 +253,14 @@
 
     if (pHeader)
     {
-	m_pStreamHeader = pHeader;
-	m_pStreamHeader->AddRef();
+        m_pStreamHeader = pHeader;
+        m_pStreamHeader->AddRef();
+
+        UINT32 ulTmp = 0;
+        if (SUCCEEDED(m_pStreamHeader->GetPropertyULONG32("BaseRule", ulTmp)))
+        {
+            m_usBaseRule = (UINT16)ulTmp;
+        }
     }
 
     if (m_bPacketize)
@@ -401,6 +410,21 @@
 					    m_ulRTPSamplesPerSecond);
     }
 
+#ifdef MP4_DEPACK_IHXPACKET
+    if (SUCCEEDED(retVal))
+    {
+         m_pStreamHeader->SetPropertyULONG32("SamplesPerSecond",
+             m_ulSamplesPerSecond);
+    }
+
+    if (SUCCEEDED(retVal) &&
+        (strcasecmp(pMimeTypeData, "audio/mpeg4-generic") == 0))
+    {
+        UINT32 ulFrameDurationInMS = (eAACMaxFrameDurationInSamples * 1000) / m_ulRTPSamplesPerSecond;
+        SetAUDuration(ulFrameDurationInMS);
+    }
+#endif //MP4_DEPACK_IHXPACKET
+
     HX_RELEASE(pMimeType);
 
     return retVal;
@@ -661,6 +685,11 @@
 			      m_ulSamplesPerSecond);
     }
 
+    if (m_usStreamNumber == MAX_UINT16)
+    {
+        m_usStreamNumber = pPacket->GetStreamNumber();
+    }
+
     if (m_bPacketize)
     {
 	retVal = SetPacketizerPacket(pPacket);
@@ -749,6 +778,52 @@
 {
     HX_RESULT retVal = HXR_NOTIMPL;
 
+#ifdef MP4_DEPACK_IHXPACKET
+    retVal = HXR_OK;
+    CMediaPacket* pMediaPacket = NULL;
+    IHXBuffer* pBuffer = NULL;
+    
+    retVal = CreateMediaPacket(pMediaPacket);
+
+    if (HXR_OK == retVal && pMediaPacket)
+    {
+        retVal = m_pClassFactory->CreateInstance(CLSID_IHXBuffer, (void **)&pBuffer);
+
+        if (SUCCEEDED(retVal) && pBuffer)
+        {
+            retVal = pBuffer->Set(pMediaPacket->m_pData, pMediaPacket->m_ulDataSize);
+        }
+
+        if (SUCCEEDED(retVal))
+        {
+            if(m_bUsesRTPPackets)
+            {
+                retVal = m_pClassFactory->CreateInstance(CLSID_IHXRTPPacket, (void **)&pOutPacket);
+
+                ((IHXRTPPacket*)pOutPacket)->SetRTP(pBuffer,
+                                                    pMediaPacket->m_ulTime,
+                                                    pMediaPacket->m_ulTime,
+                                                    m_usStreamNumber,
+                                                    HX_ASM_SWITCH_ON|HX_ASM_SWITCH_OFF,
+                                                    m_usBaseRule + 1);
+            }
+            else
+            {
+                retVal = m_pClassFactory->CreateInstance(CLSID_IHXPacket, (void **)&pOutPacket);
+
+                pOutPacket->Set(pBuffer,
+                                pMediaPacket->m_ulTime,
+                                m_usStreamNumber,
+                                HX_ASM_SWITCH_ON|HX_ASM_SWITCH_OFF,
+                                m_usBaseRule + 1);
+            }
+        }
+
+        HX_RELEASE(pBuffer);
+        CMediaPacket::DeletePacket(pMediaPacket);
+    }
+#endif //MP4_DEPACK_IHXPACKET
+
     return retVal;
 }
 


_______________________________________________
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