201023
authorhgs
Fri, 11 Jun 2010 11:20:25 +0300
changeset 27 5be06b45e413
parent 23 a297cbce4e85
201023
ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp
multimediacommscontroller/mmccfilesourcesink/inc/mccfileaudio.h
multimediacommscontroller/mmccfilesourcesink/inc/mccfilevideo.h
multimediacommscontroller/mmccfilesourcesink/src/mccfilesourceimpl.cpp
multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp
multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMCCFileSourceImpl.cpp
multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileAudio.cpp
multimediacommscontroller/mmccshared/inc/mccinternaldef.h
multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp
multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp
multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp
multimediacommsengine/tsrc/testdriver/siptester/src/10203353.rss
package_definition.xml
--- a/ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp	Fri May 28 16:08:43 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-component           ipappsrv_metadata
-source   \sf\mw\ipappsrv\ipappsrv_info\ipappsrv_metadata 
-source   \sf\mw\ipappsrv\package_definition.xml
-source   \sf\mw\ipappsrv\distribution.policy.s60
-notes_source      \component_defs\release.src
-ipr T 
--- a/multimediacommscontroller/mmccfilesourcesink/inc/mccfileaudio.h	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/inc/mccfileaudio.h	Fri Jun 11 11:20:25 2010 +0300
@@ -100,6 +100,7 @@
 	#ifdef EUNIT_TEST
         friend class UT_CMccFileAudio;
         friend class UT_CMccMultiplexer;
+        friend class UT_CMccFileSourceImpl;
     #endif	
 	};
 
--- a/multimediacommscontroller/mmccfilesourcesink/inc/mccfilevideo.h	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/inc/mccfilevideo.h	Fri Jun 11 11:20:25 2010 +0300
@@ -56,6 +56,7 @@
 	TFourCC GetFourCC();
 	TCallBack TickCallBack();
 	HBufC8* GetConfigKeyL();
+	TUint32 VideoType() const;
 
 public:
     static TInt TickVideoL( TAny* aObject );
--- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilesourceimpl.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilesourceimpl.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -28,6 +28,7 @@
 #include "mccfilevideo.h"
 #include "mccinternalevents.h"
 #include "mmccinterfacedef.h"
+#include "mccinternaldef.h"
 
 
 
@@ -368,12 +369,14 @@
     
     // Average bitrate is for the whole stream, 
     // subtract audio average to get video average
-    TUint32 averageBitRate = iFileVideo->StreamAverageBitRate() - audioBitRate;
+    TUint32 videoBitRate = iFileVideo->StreamAverageBitRate() - audioBitRate;
+    MccConversionUtility::BitRateSanitize( 
+        videoBitRate, videoBitRate, iFileVideo->VideoType() );
     
     __FILESOURCE_CONTROLL_INT1( "CMccFileSourceImpl::VideoBitRateL, videoBitRate", 
-                               averageBitRate )
+        videoBitRate )
 
-    return averageBitRate;
+    return videoBitRate;
     }
 
 // -----------------------------------------------------------------------------
--- a/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/src/mccfilevideo.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -231,7 +231,16 @@
     ExtractH264ParameterSetNALUsL( &configKey, ETrue );
     return configKey;
     }
-    
+
+// -----------------------------------------------------------------------------
+// CMccFileVideo::VideoType
+// -----------------------------------------------------------------------------
+//
+TUint32 CMccFileVideo::VideoType() const
+    {
+    return iType;
+    }
+
 // -----------------------------------------------------------------------------
 // CMccFileVideo::Position
 // -----------------------------------------------------------------------------
@@ -279,10 +288,9 @@
 //
 TReal CMccFileVideo::VideoFrameRateL()
 	{
-	// Round to have zero decimals for clearness sake
-	TReal roundedFrameRate;
-	User::LeaveIfError( Math::Round( roundedFrameRate, iFrameRate, 0 ) );
-    return roundedFrameRate;	
+    TReal modFrameRate;
+    MccConversionUtility::FrameRateSanitize( modFrameRate, iFrameRate, iType );
+    return modFrameRate;
 	}
  
 // -----------------------------------------------------------------------------
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMCCFileSourceImpl.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMCCFileSourceImpl.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -23,6 +23,7 @@
 #include "mmcccodecinformation.h"
 #include "mccresourcepool.h"
 #include "mmccinterfacedef.h"
+#include "mccinternaldef.h"
 #include "mccunittestmacros.h"
 
 
@@ -252,6 +253,12 @@
 void UT_CMccFileSourceImpl::UT_CMccFileSourceImpl_VideoBitRateLL(  )
     {
     TUint32 videoBitRate = iSourceImp->VideoBitRateL();
+    EUNIT_ASSERT_EQUALS(videoBitRate, KMccH263ProfileZeroMinBitRateIOP); // Low bitrate increased to more interoperable
+    
+    // Test situation where no need to make iop modification for bitrate
+    iSourceImp->iFileVideo->iStreamAverageBitRate = 100000;
+    videoBitRate = iSourceImp->VideoBitRateL();
+    EUNIT_ASSERT_EQUALS(videoBitRate, iSourceImp->iFileVideo->iStreamAverageBitRate - iSourceImp->iFileAudio->iAverageBitRate);
     }
 
 void UT_CMccFileSourceImpl::UT_CMccFileSourceImpl_PositionLL(  )
--- a/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileAudio.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/Src/UT_CMccFileAudio.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -32,6 +32,7 @@
 #include "mmccinterfacedef.h"
 #include "mccresourcepool.h"
 #include "Mcculdatapath.h"
+#include "mccinternaldef.h"
 
 // CONSTRUCTION
 UT_CMccFileAudio* UT_CMccFileAudio::NewL()
@@ -315,7 +316,20 @@
 void UT_CMccFileAudio::UT_CMccFileAudio_VideoFrameRateLL(  )
     {
     TReal videoFrameRate = iAudio->VideoFrameRateL();
+    EUNIT_ASSERT_EQUALS( (TInt)videoFrameRate, 0 );
     TReal videoFrameRate2 = iVideo->VideoFrameRateL();
+    EUNIT_ASSERT_EQUALS( (TInt)videoFrameRate2, 5 );
+    
+    // Test that framerate is limited to more interoperable value if value is too high for codec type
+    iVideo->iType = MP4_TYPE_H263_PROFILE_0;
+    iVideo->iFrameRate = 21;
+    videoFrameRate2 = iVideo->VideoFrameRateL();
+    EUNIT_ASSERT_EQUALS( (TInt)videoFrameRate2, KMccH263ProfileZeroMaxFramerateIOP );
+    
+    iVideo->iType = MP4_TYPE_AVC_PROFILE_BASELINE;
+    iVideo->iFrameRate = 18;
+    videoFrameRate2 = iVideo->VideoFrameRateL();
+    EUNIT_ASSERT_EQUALS( (TInt)videoFrameRate2, 18 ); // Value not changed for AVC
     }
 
 void UT_CMccFileAudio::UT_CMccFileAudio_StartTimerL(  )
--- a/multimediacommscontroller/mmccshared/inc/mccinternaldef.h	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccshared/inc/mccinternaldef.h	Fri Jun 11 11:20:25 2010 +0300
@@ -25,6 +25,8 @@
 #include <e32base.h>
 #include <mmf/common/mmfcontroller.h>
 #include <tconvbase64.h>  
+#include <e32math.h>
+#include <3gplibrary/mp4lib.h>
 
 
 #include "rtpdef.h"
@@ -68,6 +70,10 @@
 // Increased RTP socket size in bytes, default socket size is around 4KB
 const TInt KMccIncreasedRtpSocketSize = 10000;
 
+// Values used to force better interoperability against some vendors
+const TReal KMccH263ProfileZeroMaxFramerateIOP = 15;
+const TUint32 KMccH263ProfileZeroMinBitRateIOP = 64001;
+
 // MACROS
 
 #ifdef _DEBUG
@@ -782,6 +788,35 @@
     	User::LeaveIfError( encoder.Encode( aInput, ptrOutput ) );
     	return output;
         }
+    
+    static void FrameRateSanitize( 
+        TReal& aSanitizedFrameRate, TReal aOrigFrameRate, TUint32 aVideoType )
+        {
+        // Round to have zero decimals for clearness sake
+        User::LeaveIfError( Math::Round( aSanitizedFrameRate, aOrigFrameRate, 0 ) );
+        
+        if ( aVideoType == MP4_TYPE_H263_PROFILE_0 && 
+             aSanitizedFrameRate > KMccH263ProfileZeroMaxFramerateIOP )
+            {
+            aSanitizedFrameRate = KMccH263ProfileZeroMaxFramerateIOP;
+            }
+        }
+    
+    static void BitRateSanitize( 
+        TUint32& aSanitizedBitRate, TUint32 aOrigBitRate, TUint32 aVideoType )
+        {
+        if ( aVideoType == MP4_TYPE_H263_PROFILE_0 && 
+             aOrigBitRate > 0 && 
+             aOrigBitRate < KMccH263ProfileZeroMinBitRateIOP )
+            {
+            aSanitizedBitRate = KMccH263ProfileZeroMinBitRateIOP;
+            }
+        else 
+            {
+            aSanitizedBitRate = aOrigBitRate;
+            }
+        }
+    
     };
         
 #endif
--- a/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommscontroller/mmccsubcontroller/src/mcccodecconfigurator.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -667,14 +667,19 @@
                 __SUBCONTROLLER( "AVC" )
                 setting.iVideoFourCC = TFourCC( KMccFourCCIdAVC );
                 }
-            // Round to have zero decimals for clearness sake
-            User::LeaveIfError( Math::Round( setting.iVideoFrameRate, frameRate, 0 ) );
+
+            MccConversionUtility::FrameRateSanitize( 
+                setting.iVideoFrameRate, frameRate, videoType );
+            
             setting.iVideoFrameSize.iWidth = videoWidth;
             setting.iVideoFrameSize.iHeight = videoHeight;
             
             // Average bitrate is for the whole stream, 
             // subtract audio average to get video average
             setting.iVideoBitRate = videoAverageBitRate - audioAverageBitRate;
+            
+            MccConversionUtility::BitRateSanitize( 
+                            setting.iVideoBitRate, setting.iVideoBitRate, videoType );
             }
         else
             {
--- a/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommsengine/mmceshared/src/mcecomamrwbcodec.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -306,6 +306,7 @@
     //if offerer codec represents the sent offer and mcc codec the answer
     
     // Bitrates field contains also additional information, mask it away
+	/*
     TUint mccBitrates = ( aMccCodec.AllowedBitrates() & KMceAllowedAmrWbBitrateAll );
     TUint mceBitrates = ( iAllowedBitrates & KMceAllowedAmrWbBitrateAll );
     
@@ -314,7 +315,9 @@
 	                mceBitrates > mccBitrates ) :
                   ( mceBitrates && mccBitrates == 0 ||
 	                mceBitrates < mccBitrates );
-	
+	                
+	*/
+//	User::LeaveIfError( notValid ? KErrNotSupported : KErrNone );
 	if ( aMccCodec.CodecMode() != (TCodecMode)iCodecMode )
 		{
 		// codec-mode was different, fail.
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -916,28 +916,43 @@
                 const TUint8 KAddrOffsetFromNetType = 4;
                 TInt addr_offset = 
                     value.Match( KMatchIp ) + KAddrOffsetFromNetType;
-                TPtrC8 remoteRtcpAddr = value.Mid( addr_offset );
+                TPtrC8 remoteRtcpAddrTxt = value.Mid( addr_offset );
                 
                 const TUint8 KPortOffsetFromIP = 1;
                 TInt port_offset = 
                     value.Match( KMatchIN ) - KPortOffsetFromIP;
-                TPtrC8 remoteRtcpPort = value.Left( port_offset );
-                
+                HBufC8* dataRemoteRtcpPort = value.Left( port_offset ).AllocLC();
+                TPtr8 remoteRtcpPort( dataRemoteRtcpPort->Des() );
+                remoteRtcpPort.TrimAll();
                 TLex8 lexPT( remoteRtcpPort );
                 User::LeaveIfError( lexPT.Val( rtcpPort, EDecimal ) );
                 // copy the address into correct format
                 TBuf16 <KMaxAddressLength> input;
-                input.Copy( remoteRtcpAddr );      
-                
+                input.Copy( remoteRtcpAddrTxt );      
+                input.TrimAll();
                 MCEMM_DEBUG_SVALUE( "Found RTCP address", input )
                 
-                aStream.SetRemoteRtcpMediaAddrL( input );
+                TInetAddr remoteRtcpAddr;
+                User::LeaveIfError( remoteRtcpAddr.Input( input ) ); 
+                TInetAddr localIpAddr( aStream.Session()->iLocalIpAddress );
+                TBool validRemoteRtcpAddr( 
+                    remoteRtcpAddr.IsLoopback() || !localIpAddr.Match( remoteRtcpAddr ) );
+                MCEMM_DEBUG_DVALUE( "Remote RTCP addr valid:", validRemoteRtcpAddr )
+                if ( validRemoteRtcpAddr )
+                    {
+                    aStream.SetRemoteRtcpMediaAddrL( input );
+                    }
+                CleanupStack::PopAndDestroy( dataRemoteRtcpPort );
                 }
             else
                 {
                 // only port present
-                TLex8 lexPT( value );
+                HBufC8* dataRemoteRtcpPort = value.AllocLC();
+                TPtr8 remoteRtcpPort( dataRemoteRtcpPort->Des() );
+                remoteRtcpPort.TrimAll();
+                TLex8 lexPT( remoteRtcpPort );
                 User::LeaveIfError ( lexPT.Val( rtcpPort, EDecimal ) );
+                CleanupStack::PopAndDestroy( dataRemoteRtcpPort );
                 }
 
 			aStream.SetRemoteRtcpMediaPort( rtcpPort );
@@ -1040,9 +1055,9 @@
     else if ( secureSession && aRole == EMceRoleAnswerer && aUpdate )
         {
         // for long session
-        if ( secureSession->iKeyNeedUpdated )
+          if( secureSession->SdpCryptoAttributeCount( aMediaLine ) )
         	{
-        	secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ;
+            secureSession->DecodeSecureDesSdpUpdateL( aStream, aMediaLine ) ;
         	}
         }
     else if ( secureSession && aRole == EMceRoleOfferer )
--- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp	Fri Jun 11 11:20:25 2010 +0300
@@ -908,6 +908,42 @@
     EUNIT_ASSERT( mediaStream->iRemoteRtcpAddress.IsUnspecified() )
     audioLine->AttributeFields().ResetAndDestroy();
     
+    // Rtcp attribute has incorrectly our local address, it should not be used
+    mediaStream->Session()->iLocalIpAddress.Input( _L("10.20.30.40") );
+    rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp:5020 IN IP4 10.20.30.40\r\n" ) );
+    audioLine->AttributeFields().AppendL( rtcp );
+    CleanupStack::Pop( rtcp );
+    iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream );
+    EUNIT_ASSERT_EQUALS( 5020, mediaStream->iRemoteRtcpPort )
+    EUNIT_ASSERT( mediaStream->iRemoteRtcpAddress.IsUnspecified() )  // Not changed
+    audioLine->AttributeFields().ResetAndDestroy();
+
+    // Rtcp attrubute is local loopback address, ok to use
+    rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp:5020 IN IP4 127.0.0.1\r\n" ) );
+    audioLine->AttributeFields().AppendL( rtcp );
+    CleanupStack::Pop( rtcp );
+    iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream );
+    EUNIT_ASSERT_EQUALS( 5020, mediaStream->iRemoteRtcpPort )
+    EUNIT_ASSERT_EQUALS( INET_ADDR( 127,0,0,1 ), mediaStream->iRemoteRtcpAddress.Address() )
+    audioLine->AttributeFields().ResetAndDestroy();
+    
+    // Incorrect white space usage
+    rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp: 5050  IN IP4 2.2.2.2 \r\n" ) );
+    audioLine->AttributeFields().AppendL( rtcp );
+    CleanupStack::Pop( rtcp );
+    iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream );
+    EUNIT_ASSERT_EQUALS( 5050, mediaStream->iRemoteRtcpPort )
+    EUNIT_ASSERT_EQUALS( INET_ADDR( 2,2,2,2 ), mediaStream->iRemoteRtcpAddress.Address() )
+    audioLine->AttributeFields().ResetAndDestroy();
+    
+    rtcp = CSdpAttributeField::DecodeLC( _L8( "a=rtcp:  50506\r\n" ) );
+    audioLine->AttributeFields().AppendL( rtcp );
+    CleanupStack::Pop( rtcp );
+    iSdpCodec->DecodeRemoteRtcpFieldL( *audioLine, *mediaStream );
+    EUNIT_ASSERT_EQUALS( 50506, mediaStream->iRemoteRtcpPort )
+    EUNIT_ASSERT_EQUALS( INET_ADDR( 2,2,2,2 ), mediaStream->iRemoteRtcpAddress.Address() )
+    audioLine->AttributeFields().ResetAndDestroy();
+       
     CleanupStack::PopAndDestroy( sdp );
     }
     
@@ -1349,7 +1385,6 @@
     CleanupStack::PopAndDestroy( sdp );
 
     }
-    
 
 
 void UT_CMceMediaSdpCodec::UT_CMceMediaSdpCodec_DecodeDirectionLL()
--- a/multimediacommsengine/tsrc/testdriver/siptester/src/10203353.rss	Fri May 28 16:08:43 2010 +0300
+++ b/multimediacommsengine/tsrc/testdriver/siptester/src/10203353.rss	Fri Jun 11 11:20:25 2010 +0300
@@ -1,42 +1,42 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-// 10203353.RSS
-//
-#include <ecom/registryinfo.rh>
-
-RESOURCE REGISTRY_INFO theInfo
-{
-dll_uid = 0x10203353;
-interfaces = 
-    {
-    INTERFACE_INFO
-        {
-        interface_uid = 0x10203352;
-        implementations = 
-            {
-            IMPLEMENTATION_INFO
-                {
-                implementation_uid = 0x10203353;
-                version_no = 1;
-                display_name = "SIPTester";
-                default_data = "SIPTester";				
-                opaque_data = "some extra data";
-                }            
-            };
-        }
-    };
-}
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// 10203353.RSS
+//
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x10203353;
+interfaces = 
+    {
+    INTERFACE_INFO
+        {
+        interface_uid = 0x10203352;
+        implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x10203353;
+                version_no = 1;
+                display_name = "SIPTester";
+                default_data = "SIPTester";				
+                opaque_data = "some extra data";
+                }            
+            };
+        }
+    };
+}
--- a/package_definition.xml	Fri May 28 16:08:43 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="ipappsrv" name="IP App Services" levels="framework generic server conn plugin">
-    <collection id="multimediacommscontroller" name="Multimedia Comms Controller" level="conn">
-      <component id="mmccinterface" filter="s60" name="MMCC Interface">
-        <!-- <unit bldFile="multimediacommscontroller/mmccinterface/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccinterface/tsrc/ut_interface/group"/> -->
-      </component>
-      <component id="mmccjitterbuffer" filter="s60" name="Jitter Buffer">
-        <!-- <unit bldFile="multimediacommscontroller/mmccjitterbuffer/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccjitterbuffer/tsrc/ut_jitterbuffer/group"/> -->
-      </component>
-      <component id="mmccqoscontroller" filter="s60" name="QoS Controller">
-        <!-- <unit bldFile="multimediacommscontroller/mmccqoscontroller/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccqoscontroller/tsrc/ut_qoscontroller/group"/> -->
-      </component>
-      <component id="mmccmultiplexer" filter="s60" name="MMCC Multiplexer">
-        <!-- <unit bldFile="multimediacommscontroller/mmccmultiplexer/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccmultiplexer/tsrc/ut_multiplexer/group"/> -->
-      </component>
-      <component id="mmccsubcontroller" filter="s60" name="MMCC Subcontroller">
-        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/tsrc/ut_rtpmediaclock/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccsubcontroller/tsrc/ut_subcontroller/group"/> -->
-      </component>
-      <component id="mmcccontroller" filter="s60" name="MMCC Controller" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmcccontroller/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmcccontroller/tsrc/ut_controller/group"/> -->
-      </component>
-      <component id="mmccredpayloadformat" filter="s60" name="Redundancy Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccredpayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccredpayloadformat/tsrc/ut_redpayloadformat/group"/> -->
-      </component>
-      <component id="mmccamrpayloadformat" filter="s60" name="AMR Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccamrpayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccamrpayloadformat/tsrc/ut_amrpayloadformat/group"/> -->
-      </component>
-      <component id="mmccg711payloadformat" filter="s60" name="G711 Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccg711payloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccg711payloadformat/tsrc/ut_g711payloadformat/group"/> -->
-      </component>
-      <component id="mmccg729payloadformat" filter="s60" name="G729 Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccg729payloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccg729payloadformat/tsrc/ut_g729payloadformat/group"/> -->
-      </component>
-      <component id="mmccilbcpayloadformat" filter="s60" name="ILBC Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccilbcpayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccilbcpayloadformat/tsrc/ut_ilbcpayloadformat/group"/> -->
-      </component>
-      <component id="mmccdtmfpayloadformat" filter="s60" name="DTMF Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccdtmfpayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccdtmfpayloadformat/tsrc/ut_dtmfpayloadformat/group"/> -->
-      </component>
-      <component id="mmccrtpsourcesink" filter="s60" name="RTP Source Sink" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccrtpsourcesink/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccrtpsourcesink/tsrc/ut_rtpsourcesink/group"/> -->
-      </component>
-      <component id="mmccvideosourcesink" filter="s60" name="Video Source Sink" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccvideosourcesink/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccvideosourcesink/tsrc/ut_videosourcesink/group"/> -->
-      </component>
-      <component id="mmcch263payloadformat" filter="s60" name="H263 Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmcch263payloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmcch263payloadformat/tsrc/ut_h263payloadformat/group"/> -->
-      </component>
-      <component id="mmccanypayloadformat" filter="s60" name="Any Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccanypayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccanypayloadformat/tsrc/ut_anypayloadformat/group"/> -->
-      </component>
-      <component id="mmccfilesourcesink" filter="s60" name="MMCC File Source Sink" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccfilesourcesink/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccfilesourcesink/tsrc/ut_filesourcesink/group"/> -->
-      </component>
-      <component id="mmccanysourcesink" filter="s60" name="Any Source Sink" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccanysourcesink/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccanysourcesink/tsrc/ut_anysourcesink/group"/> -->
-      </component>
-      <component id="mmccavcpayloadformat" filter="s60" name="AVC Payload Format" class="plugin">
-        <!-- <unit bldFile="multimediacommscontroller/mmccavcpayloadformat/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/mmccavcpayloadformat/tsrc/ut_avcpayloadformat/group"/> -->
-      </component>
-      <component id="multimediacommscontroller_build" filter="s60" name="Multimedia Comms Controller Build">
-              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
-        <unit bldFile="multimediacommscontroller/group"/>
-      </component>
-      <component id="multimediacommscontroller_test" filter="s60" name="Multimedia Comms Controller Test" purpose="development">
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpsubthreads/dptests/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpsubthreads/clienttests/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/componenttests/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/subcontrollerstub/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/jitterbuffertestconsole/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/rtpsourcesink/group"/> -->
-        <!-- <unit bldFile="multimediacommscontroller/tsrc/testconsoles/mcpconsole/group"/> -->
-      </component>
-    </collection>
-    <collection id="multimediacommsengine" name="Multimedia Comms Engine" level="generic">
-      <component id="mmcesrv" filter="s60" name="Multimedia Comms Engine Server">
-        <!-- <unit bldFile="multimediacommsengine/mmcesrv/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceevent/tsrc/ut_event/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceevent/tsrc/ut_event/sip_stub/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/group"/> -->
-      </component>
-      <component id="mmcecli" filter="s60" name="Multimedia Comms Engine Client">
-        <!-- <unit bldFile="multimediacommsengine/mmcecli/group"/> -->
-      </component>
-      <component id="mmcefloorctrlengine" filter="s60" name="MCE Floor Control Engine">
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/fctestpplugin/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/fctestpplugin2/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlengine/tsrc/ut_floorctrlengine/group"/> -->
-      </component>
-      <component id="mmcefloorctrlplugin" filter="s60" name="MCE Floor Control Plugin" class="plugin">
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlplugin/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/mmcefloorctrlplugin/tsrc/ut_floorctrlplugin/group"/> -->
-      </component>
-      <component id="multimediacommsengine_build" filter="s60" name="Multimedia Comms Engine Build">
-              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
-        <unit bldFile="multimediacommsengine/group"/>
-      </component>
-      <component id="multimediacommsengine_test" filter="s60" name="Multimedia Comms Engine Test" purpose="development">
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/mcetestuiplugin/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/iceplugin_stub/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/ttcnresolverplugin/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin2/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mcetestui/mcetestuiengine/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/group/s60_public_sdk"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/iceplugin_stub/tsrc/test/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/testdriver/group"/> -->
-        <!-- <unit bldFile="multimediacommsengine/tsrc/mmctestdriver/mcetester/voipplugin/group"/> -->
-      </component>
-    </collection>
-    <collection id="natfw" name="NAT Framework" level="framework">
-      <component id="natfwsettings" filter="s60" name="NAT Framework Settings" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwsettings/group"/> -->
-        <!-- <unit bldFile="natfw/natfwsettings/tsrc/ut_cnatfwnatsettings/group"/> -->
-      </component>
-      <component id="natfwconnectionmultiplexer" filter="s60" name="NAT Framework Connection Multiplexer" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/group"/> -->
-        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/tsrc/muxtestconsole/group"/> -->
-        <!-- <unit bldFile="natfw/natfwconnectionmultiplexer/tsrc/ut_connectionmultiplexer/group"/> -->
-      </component>
-      <component id="natfwclient" filter="s60" name="NAT Framework Client" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwclient/group"/> -->
-        <!-- <unit bldFile="natfw/natfwclient/tsrc/ut_natfwclient/group"/> -->
-      </component>
-      <component id="natfwsocketmediaconnwrapper" filter="s60" name="Socket Media Connection Wrapper" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwsocketmediaconnwrapper/group"/> -->
-        <!-- <unit bldFile="natfw/natfwsocketmediaconnwrapper/tsrc/ut_socketmediaconnwrapper/group"/> -->
-      </component>
-      <component id="natfwunsaf_protocols" filter="s60" name="UNSAF Protocols" introduced="^2">
-          <!-- consider expanding name to UNilateral Self- Address Fixing Protocols -->
-        <!-- <unit bldFile="natfw/natfwunsaf_protocols/group"/> -->
-        <!-- <unit bldFile="natfw/natfwunsaf_protocols/tsrc/ut_unsaf_codec/group"/> -->
-        <!-- <unit bldFile="natfw/natfwunsaf_protocols/tsrc/ut_unsaf_transport/group"/> -->
-      </component>
-      <component id="natfwstunturnclient" filter="s60" name="STUN TURN Client" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwstunturnclient/group"/> -->
-        <!-- <unit bldFile="natfw/natfwstunturnclient/tsrc/ut_stunturnclient/group"/> -->
-      </component>
-      <component id="natfwstunserver" filter="s60" name="STUN Server" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwstunserver/group"/> -->
-        <!-- <unit bldFile="natfw/natfwstunserver/tsrc/ut_cnatfwstunsrv/group"/> -->
-      </component>
-      <component id="natfwicecandidatehandler" filter="s60" name="ICE Candidate Handler" class="plugin" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwicecandidatehandler/group"/> -->
-        <!-- <unit bldFile="natfw/natfwicecandidatehandler/tsrc/ut_icecandidatehandler/group"/> -->
-      </component>
-      <component id="natfwstunplugin" filter="s60" name="STUN Plugin" class="plugin" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwstunplugin/group"/> -->
-        <!-- <unit bldFile="natfw/natfwstunplugin/tsrc/ut_cnatfwstunplugin/group"/> -->
-      </component>
-      <component id="natfwturnplugin" filter="s60" name="TURN Plugin" class="plugin" introduced="^2">
-        <!-- <unit bldFile="natfw/natfwturnplugin/group"/> -->
-        <!-- <unit bldFile="natfw/natfwturnplugin/tsrc/ut_cnatfwturnplugin/group"/> -->
-      </component>
-      <component id="natfw_build" filter="s60" name="NAT Framework Build" introduced="^2">
-              <!-- contents of this component need to be distributed out to the other commented-out bld.infs or the other components need to be collapsed into one -->
-        <unit bldFile="natfw/group"/>
-      </component>
-      <component id="natfw_test" filter="s60" name="NAT Framework Test" purpose="development" introduced="^2">
-        <!-- <unit bldFile="natfw/tsrc/natfwtestconsoles/natfwtestconsole/group"/> -->
-      </component>
-    </collection>
-    <collection id="natplugins" name="NAT Plugins" level="plugin">
-         <!-- are the extra test units in here needed at all? Either incorperate into main unit as test projects or remove-->
-      <component id="natpcliprovisioningnatfwadapter" filter="s60" name="Client Provisioning NAT Framework Traversal Adapter" class="plugin" introduced="^2">
-        <unit bldFile="natplugins/natpcliprovisioningnatfwadapter/group"/>
-        <!-- <unit bldFile="natplugins/natpcliprovisioningnatfwadapter/tsrc/t_natfwtraversaladapter/group"/> -->
-      </component>
-      <component id="natpdevmgmtnatfwadapter" filter="s60" name="Device Management NAT Framework Traversal Adapter" class="plugin">
-        <unit bldFile="natplugins/natpdevmgmtnatfwadapter/group"/>
-        <!-- <unit bldFile="natplugins/natpdevmgmtnatfwadapter/tsrc/ut_cnsmldmnatfwtraversaladapter/group"/> -->
-      </component>
-      <component id="natptraversalcontroller" filter="s60" name="NAT Traversal Controller" class="plugin">
-        <unit bldFile="natplugins/natptraversalcontroller/group"/>
-        <!-- <unit bldFile="natplugins/natptraversalcontroller/tsrc/ut_nattraversalcontroller/group"/> -->
-      </component>
-      <component id="natpnatfwsdpprovider" filter="s60" name="NAT Framework SDP Provider" class="plugin">
-        <unit bldFile="natplugins/natpnatfwsdpprovider/group"/>
-        <!-- <unit bldFile="natplugins/natpnatfwsdpprovider/tsrc/testconsole/group"/> -->
-        <!-- <unit bldFile="natplugins/natpnatfwsdpprovider/tsrc/ut_natfwsdpprovider/group"/> -->
-      </component>
-    </collection>
-    <collection id="ipappsrv_info" name="IP App Services Info" level="plugin">
-      <component id="ipappsrv_metadata" name="IP App Services Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="ipappsrv_info/ipappsrv_metadata/ipappsrv_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>