Revision: 201033 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:41:40 +0300
branchRCL_3
changeset 24 6c1dfe4da5dd
parent 23 e42293e811d8
child 25 63223d4fd956
Revision: 201033 Kit: 201035
layers.sysdef.xml
mmappcomponents/asxparser/group/asxparser.mmp
mmappcomponents/asxparser/inc/AsxParser_debug.h
mmappcomponents/asxparser/src/asxparser.cpp
mmappcomponents/asxparser/test/test.cpp
mmappcomponents/asxparser/test/test.mmp
mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp
mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp
mmappcomponents/collectionhelper/inc/mpxcollectioncachedhelper.h
mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp
mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp
mmappcomponents/harvester/collectionmediator/group/mpxcollectionmediator.mmp
mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp
mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h
mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h
mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp
mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp
mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp
mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp
mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
mmappcomponents/harvester/server/group/mpxharvester.mmp
mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp
mmappcomponents/harvester/utility/group/mpxharvesterutility.mmp
mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp
mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobjectmanager.cpp
mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobserver.cpp
mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/cteststoragemgr.cpp
mmappcomponents/playbackhelper/group/playbackhelper.mmp
mmappcomponents/playbackhelper/inc/playbackhelper_log.h
mmappcomponents/playbackhelper/src/streaminglinkmodel.cpp
mmappcomponents/playlistengine/group/mpxplaylistengine.mmp
mmappcomponents/playlistengine/group/mpxplaylistrecognizer.mmp
mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp
mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h
mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/group/CollectionHelperTestClass.pkg
mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp
mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg
mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini
mmappfw_plat/group/bld.inf
mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp
mmappfw_plat/harvester_utility_api/tsrc/mpxharvestertest/src/mpxharvestertestBlocks.cpp
mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf
mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h
mmappfw_plat/mpx_base_view_plugins_api/tsrc/conf/tcmpxbaseviewpluginstest.cfg
mmappfw_plat/mpx_base_view_plugins_api/tsrc/conf/ui_mpxbaseviewpluginstest.cfg
mmappfw_plat/mpx_base_view_plugins_api/tsrc/init/TestFramework.ini
mmappfw_plat/mpx_base_view_plugins_api/tsrc/ui_mpxbaseviewpluginstest/group/ui_mpxbaseviewpluginstest.pkg
mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h
mmappfw_plat/mpx_common_api/tsrc/ui_commontestclass/src/testmpxpluginhandlerbase.cpp
mmappfw_plat/mpx_common_definition_api/group/bld.inf
mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg
mmappfw_plat/mpx_playback_utility_api/tsrc/group/bld.inf
mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testcollectionplugintype.h
mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testcommonpluginuids.h
mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testplaybackplugintype.h
mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testviewplugintype.h
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/bld.inf
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytestdefs.h
mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/data/e0000201.rss
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/group/bld.inf
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/group/testvideoplaybackplugin.mmp
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/inc/testvideoplaybackplugin.h
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackplugin.cpp
mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackpluginproxy.cpp
mmappfw_plat/mpx_view_utility_api/group/bld.inf
mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h
mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h
mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtestmains60.h
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.pro
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtestmains60.h
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.cpp
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.pro
mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/tsrc.pro
mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp
mpx/collectionframework/collectionengine/group/mpxcollectionengine.mmp
mpx/collectionframework/collectionengine/src/mpxcollectioncache.cpp
mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp
mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp
mpx/collectionframework/collectionserver/group/mpxcollectionserver.mmp
mpx/collectionframework/collectionutility/group/mpxcollectionutility.mmp
mpx/collectionframework/collectionutility/src/mpxcollectionopenutility.cpp
mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp
mpx/commonframework/common/group/mpxcommon.mmp
mpx/commonframework/common/src/mpxcollectionpath.cpp
mpx/commonframework/common/src/mpxdataarray.cpp
mpx/commonframework/common/src/mpxdrmmediawmaagent.cpp
mpx/commonframework/common/src/mpxheapmanager.cpp
mpx/commonframework/common/src/mpxpluginhandlerbase.cpp
mpx/commonframework/common/src/mpxplugininfo.cpp
mpx/commonframework/common/src/mpxuser.cpp
mpx/mpxviewframeworkqt/bwins/mpxviewframeworkqt.def
mpx/mpxviewframeworkqt/eabi/mpxviewframeworkqt.def
mpx/mpxviewframeworkqt/inc/mpxplugindata.h
mpx/mpxviewframeworkqt/inc/mpxplugindataparser.h
mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver.h
mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver_p.h
mpx/mpxviewframeworkqt/mpxviewframeworkqt.pro
mpx/mpxviewframeworkqt/rom/mpxviewframeworkqt.iby
mpx/mpxviewframeworkqt/rom/rom.pri
mpx/mpxviewframeworkqt/src/mpxplugindata.cpp
mpx/mpxviewframeworkqt/src/mpxplugindataparser.cpp
mpx/mpxviewframeworkqt/src/mpxviewframework.cpp
mpx/mpxviewframeworkqt/src/mpxviewpluginresolver.cpp
mpx/mpxviewframeworkqt/src/mpxviewpluginresolver_p.cpp
mpx/playbackframework/playbackengine/group/mpxplaybackengine.mmp
mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp
mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp
mpx/playbackframework/playbackserver/group/mpxplaybackserver.mmp
mpx/playbackframework/playbackutility/group/mpxplaybackutility.mmp
mpx/viewframework/baseviewplugins/group/mpxviewplugin.mmp
mpx/viewframework/viewutility/group/mpxviewutility.mmp
mpx/viewframework/viewutility/src/mpxviewplugininfo.cpp
qtms/SIS/QTMS_udeb_STUB_SIS.bat
qtms/SIS/qtms.pkg
qtms/bwins/qtmsu.def
qtms/data/create_qtms_stub_sis.bat
qtms/data/qtmsapi_stub.pkg
qtms/data/qtmsapi_stub.sis
qtms/eabi/qtmsu.def
qtms/inc/qtmsamrimpl.h
qtms/inc/qtmsbufferimpl.h
qtms/inc/qtmscallimpl.h
qtms/inc/qtmsclientsinkimpl.h
qtms/inc/qtmsclientsourceimpl.h
qtms/inc/qtmsdtmfimpl.h
qtms/inc/qtmsfactoryimpl.h
qtms/inc/qtmsg711impl.h
qtms/inc/qtmsg729impl.h
qtms/inc/qtmsgaineffectimpl.h
qtms/inc/qtmsglobalgaineffectimpl.h
qtms/inc/qtmsglobalroutingimpl.h
qtms/inc/qtmsglobalvoleffectimpl.h
qtms/inc/qtmsilbcimpl.h
qtms/inc/qtmsinbandtoneimpl.h
qtms/inc/qtmsmembuffer.h
qtms/inc/qtmsmicsourceimpl.h
qtms/inc/qtmsmodemsinkimpl.h
qtms/inc/qtmsmodemsourceimpl.h
qtms/inc/qtmspcmimpl.h
qtms/inc/qtmsringtoneimpl.h
qtms/inc/qtmssinkimpl.h
qtms/inc/qtmssourceimpl.h
qtms/inc/qtmsspeakersinkimpl.h
qtms/inc/qtmsstreamimpl.h
qtms/inc/qtmsvolumeeffectimpl.h
qtms/inc/qtmswrapperexport.h
qtms/inc/tmsutility.h
qtms/qtmsapi.pro
qtms/rom/qtms.iby
qtms/src/qtmsamr.cpp
qtms/src/qtmsamrimpl.cpp
qtms/src/qtmsbufferimpl.cpp
qtms/src/qtmscall.cpp
qtms/src/qtmscallimpl.cpp
qtms/src/qtmsclientsink.cpp
qtms/src/qtmsclientsinkimpl.cpp
qtms/src/qtmsclientsource.cpp
qtms/src/qtmsclientsourceimpl.cpp
qtms/src/qtmsdtmf.cpp
qtms/src/qtmsdtmfimpl.cpp
qtms/src/qtmseffect.cpp
qtms/src/qtmsfactory.cpp
qtms/src/qtmsfactoryimpl.cpp
qtms/src/qtmsformat.cpp
qtms/src/qtmsg711.cpp
qtms/src/qtmsg711impl.cpp
qtms/src/qtmsg729.cpp
qtms/src/qtmsg729impl.cpp
qtms/src/qtmsgaineffect.cpp
qtms/src/qtmsgaineffectimpl.cpp
qtms/src/qtmsglobalgaineffect.cpp
qtms/src/qtmsglobalgaineffectimpl.cpp
qtms/src/qtmsglobalrouting.cpp
qtms/src/qtmsglobalroutingimpl.cpp
qtms/src/qtmsglobalvoleffect.cpp
qtms/src/qtmsglobalvoleffectimpl.cpp
qtms/src/qtmsilbc.cpp
qtms/src/qtmsilbcimpl.cpp
qtms/src/qtmsinbandtone.cpp
qtms/src/qtmsinbandtoneimpl.cpp
qtms/src/qtmsmembuffer.cpp
qtms/src/qtmsmicsource.cpp
qtms/src/qtmsmicsourceimpl.cpp
qtms/src/qtmsmodemsink.cpp
qtms/src/qtmsmodemsinkimpl.cpp
qtms/src/qtmsmodemsource.cpp
qtms/src/qtmsmodemsourceimpl.cpp
qtms/src/qtmspcm.cpp
qtms/src/qtmspcmimpl.cpp
qtms/src/qtmsringtone.cpp
qtms/src/qtmsringtoneimpl.cpp
qtms/src/qtmsspeakersink.cpp
qtms/src/qtmsspeakersinkimpl.cpp
qtms/src/qtmsstream.cpp
qtms/src/qtmsstreamimpl.cpp
qtms/src/qtmsvolumeeffect.cpp
qtms/src/qtmsvolumeeffectimpl.cpp
sysdef_1_4_0.dtd
sysdef_1_5_1.dtd
--- a/layers.sysdef.xml	Thu Aug 19 10:24:28 2010 +0300
+++ b/layers.sysdef.xml	Tue Aug 31 15:41:40 2010 +0300
@@ -1,14 +1,16 @@
 <?xml version="1.0"?>
-<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
   <!ENTITY layer_real_source_path "sf/mw/mmappfw" >
 ]> 
 
-<SystemDefinition name="avdomain" schema="1.4.0">
+<SystemDefinition name="mmappfw" schema="1.5.1">
 	<systemModel>
   <!-- Common file for prebuild layers-->
   	<layer name="mw_layer">
 			<module name="mmappfw">
 				<unit unitID="mmappfw" mrp="" bldFile="&layer_real_source_path;/group" name="mmappfw" />
+				<unit unitID="mpxviewframeworkqt" name="mpxviewframeworkqt" bldFile="&layer_real_source_path;/mpx/mpxviewframeworkqt" proFile="mpxviewframeworkqt.pro" qmakeArgs="-r -config rom" mrp=""/>
+				<unit unitID="qtms" name="qtms" bldFile="&layer_real_source_path;/qtms" proFile="qtmsapi.pro" qmakeArgs="-r -config rom" mrp=""/>
 			</module>
     </layer>   
     
@@ -27,6 +29,8 @@
   	<layer name="mw_mmappfw_layer">
 			<module name="mmappfw_group">
 				<unit unitID="mmappfw_group" mrp="" bldFile="&layer_real_source_path;/group" name="mmappfw_group" />
+        <unit unitID="mpxviewframeworkqt_group" name="mpxviewframeworkqt_group" bldFile="&layer_real_source_path;/mpx/mpxviewframeworkqt" proFile="mpxviewframeworkqt.pro" qmakeArgs="-r -config rom" mrp=""/>
+        <unit unitID="qtms_group" name="qtms_group" bldFile="&layer_real_source_path;/qtms" proFile="qtmsapi.pro" qmakeArgs="-r -config rom" mrp=""/>
 			</module>
     </layer>
 
--- a/mmappcomponents/asxparser/group/asxparser.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/asxparser/group/asxparser.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 9.1.3 %
+// Version : %version: 9.1.5 %
 
 
 #include <platform_paths.hrh>
--- a/mmappcomponents/asxparser/inc/AsxParser_debug.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/asxparser/inc/AsxParser_debug.h	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4.1.2 %
+// Version : %version: 4.1.4 %
 
 
 #ifndef __MP_DEBUG_H__
--- a/mmappcomponents/asxparser/src/asxparser.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/asxparser/src/asxparser.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: e003sa33#10.1.6 %
+// Version : %version: 10.1.5.1.4 %
 
 
 
@@ -26,11 +26,11 @@
 #include <utf.h>
 #include <asxparser.h>
 
-#include <xmlengdomimplementation.h>
-#include <xmlengdomparser.h>
-#include <xmlengdocument.h>
-#include <xmlengelement.h>
-#include <xmlengnodelist.h>
+#include <xml/dom/xmlengdomimplementation.h>
+#include <xml/dom/xmlengdomparser.h>
+#include <xml/dom/xmlengdocument.h>
+#include <xml/dom/xmlengelement.h>
+#include <xml/dom/xmlengnodelist.h>
 
 #include "AsxParser_debug.h"
 
@@ -421,7 +421,7 @@
 {
     iVersion = KErrNotFound;
 
-    TInt size;
+    TInt size = 0;
     User::LeaveIfError( aFile.Size( size ) );
 
     if ( size > KMaxAsxFileSize )
--- a/mmappcomponents/asxparser/test/test.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/asxparser/test/test.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 7 %
+// Version : %version: 9 %
 
 #include <e32base.h>
 #include <e32cons.h>
--- a/mmappcomponents/asxparser/test/test.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/asxparser/test/test.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 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"
@@ -15,7 +15,8 @@
  *
 */
 
-// Version : %version: 10 %
+// Version : %version: 12 %
+
 
 
 #include <platform_paths.hrh>
--- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -600,8 +600,7 @@
     
     switch ( aEventType )
         {
-    	case EEventItemClicked:      // fallthrough
-        case EEventItemSingleClicked:   
+        case EEventItemSingleClicked:   // fallthrough
         case EEventEnterKeyPressed:
             {
             TBool closeDialog = HandleListSelectionL();
--- a/mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -56,9 +56,11 @@
 LIBRARY                 usbman.lib
 LIBRARY                 apgrfx.lib
 LIBRARY                 mpxmetadataextractor.lib
+
+LIBRARY                 metadatautility.lib
+
 #ifdef RD_MPX_TNM_INTEGRATION
 LIBRARY                 thumbnailmanager.lib
-
 #endif //RD_MPX_TNM_INTEGRATION
 
 #if defined(ARMCC)
--- a/mmappcomponents/collectionhelper/inc/mpxcollectioncachedhelper.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/collectionhelper/inc/mpxcollectioncachedhelper.h	Tue Aug 31 15:41:40 2010 +0300
@@ -618,6 +618,12 @@
     * @param aDestination destination media to copt attributes to
     */
     void DoAppendMTPL( CMPXMedia& aSrc, CMPXMedia& aDestination );
+    
+    /**
+    * Attempt to set missing Metadata info in specific case
+    * @param aMedia media object to be checked and adding the info if needed
+    */
+    void SetMissingMetadataL(CMPXMedia* aMedia);
 
 #ifdef RD_MPX_COLLECTION_CACHE
 
--- a/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extended collection helper with an internal caching array
-*  Version     : %version: e003sa33#27.1.12.1.3 % 
+*  Version     : %version: da1mmcf#27.1.12.3.5 % 
 *
 */
 
@@ -43,9 +43,17 @@
 #include "mpxcollectionhelpercommon.h"
 #include <mpxmetadataextractor.h>
 
+#include <MetaDataUtility.h>        // for SetMissingMetadataL
+#include <MetaDataFieldContainer.h> // for SetMissingMetadataL
+
 // CONSTANTS
 const TInt KCacheCount = 10;
 
+_LIT( K3GPFileExt, ".3gp" );
+_LIT( K3G2FileExt, ".3g2" );
+_LIT( KODFFileExt, ".odf" );
+_LIT( KO4AFileExt, ".o4a" );
+
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -884,6 +892,9 @@
                 {
                 case EAdd:
                     {
+                    TRAP( error, SetMissingMetadataL( media ) );    // doing this only before initial add
+                    MPX_DEBUG2( "CMPXCollectionCachedHelper::Commit, SetMissingMetadataL, err = %d", error );
+
                     TRAP(error,
                         CMPXCollectionHelperImp::AddL( media );
                         );
@@ -1188,5 +1199,113 @@
         aDestination.SetTObjectValueL( KMPXMediaMTPDrmStatus, val );
         }
     }
+
+// ---------------------------------------------------------------------------
+// Attempt to set missing Metadata info in specific case
+// ---------------------------------------------------------------------------
+// 
+void CMPXCollectionCachedHelper::SetMissingMetadataL(CMPXMedia* aMedia)
+    {
+    MPX_FUNC("CMPXCollectionCachedHelper::SetMissingMetadataL");
+    
+    const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
+    TParsePtrC parse( path );
+
+    // only do this for file that might not be natively supported by PC
+    if ( ( parse.Ext().CompareF(K3GPFileExt) == 0 )
+        || ( parse.Ext().CompareF(K3G2FileExt) == 0 )
+        || ( parse.Ext().CompareF(KODFFileExt) == 0 )
+        || ( parse.Ext().CompareF(KO4AFileExt) == 0 ) )
+        {
+        TBool isTitleMissing = EFalse;
+        TBool isArtistMissing = EFalse;
+        TBool isAlbumMissing = EFalse;
+
+        if ( aMedia->ValueText( KMPXMediaGeneralTitle ).Length() == 0 )
+            isTitleMissing = ETrue;
+    
+        if ( aMedia->ValueText( KMPXMediaMusicArtist ).Length() == 0 )
+            isArtistMissing = ETrue;
+    
+        if ( aMedia->ValueText( KMPXMediaMusicAlbum ).Length() == 0 )
+            isAlbumMissing = ETrue;
+
+        MPX_DEBUG4("CMPXCollectionCachedHelper::SetMissingMetadataL, isTitleMissing = %d, isArtistMissing = %d, isAlbumMissing = %d", isTitleMissing, isArtistMissing, isAlbumMissing);
+
+        // only do this if one of the following is missing:
+        // - Title
+        // - Artist
+        // - Album
+        // but can easily be extended to support any category field like: composer, genre
+        if ( isTitleMissing || isArtistMissing || isAlbumMissing )
+            {
+            // metadataextractor should be used instead, but not until CreateMediaL can be called without add/TN of the embedded art
+            // CR is needed to add parameter (TBool aAlbumArtNeeded = ETrue)  // ETrue by default, for all existing caller
+            // for now use MDU instead
+            CMetaDataUtility* metadataUtility = CMetaDataUtility::NewL();
+            
+            CleanupStack::PushL( metadataUtility );
+            metadataUtility->OpenFileL( path );
+            
+            MPX_DEBUG1( "CMPXCollectionCachedHelper::SetMissingMetadataL, CMetaDataUtility::OpenFileL succeed" );
+            
+            const CMetaDataFieldContainer& metaCont = metadataUtility->MetaDataFieldsL();
+        
+            for ( TInt i = 0; i < metaCont.Count(); i++ )
+                {
+                TMetaDataFieldId fieldType;
+                TMPXAttributeData attribute;
+            
+                metaCont.FieldIdAt( i, fieldType );  // get the field type
+                
+                switch ( fieldType )
+                    {
+                    case EMetaDataSongTitle:    // fall through
+                    case EMetaDataArtist:       // fall through
+                    case EMetaDataAlbum:
+                        {
+                        if ( ( isTitleMissing && ( fieldType == EMetaDataSongTitle ) )
+                            || ( isArtistMissing && ( fieldType == EMetaDataArtist ) )
+                            || ( isAlbumMissing && ( fieldType == EMetaDataAlbum ) ) )
+                            {
+                            HBufC* value = metaCont.At( i, fieldType ).AllocL();
+                            CleanupStack::PushL( value );
+                            
+                            TPtr valptr = value->Des();
+                            valptr.Trim();
+
+                            // replace '\t' as ' '
+                            for ( TInt i = 0; i < value->Length(); i++ )
+                                {
+                                if ( valptr[i] == TText( '\t' ) )
+                                    valptr[i] = TText( ' ' );
+                                }
+                            
+                            if ( fieldType == EMetaDataSongTitle )
+                                attribute = KMPXMediaGeneralTitle;
+                            else if ( fieldType == EMetaDataArtist )
+                                attribute = KMPXMediaMusicArtist;
+                            else
+                                attribute = KMPXMediaMusicAlbum;
+
+                            MPX_DEBUG3( "fieldType = %d, value = %S", fieldType, &valptr );
+                            aMedia->SetTextValueL( attribute , *value );
+                            CleanupStack::PopAndDestroy( value );                                
+                            }
+                        }
+
+                        break;
+
+                    default:
+
+                        break;
+                    }
+                }
+
+            metadataUtility->ResetL();
+            CleanupStack::PopAndDestroy( metadataUtility );
+            }
+        }
+    }
             
 // END OF FILE
--- a/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -549,25 +549,19 @@
 
     CMPXMedia* foundMedia(NULL);
 
-    switch ( ary && ary->Count() )  //lint !e961
+    if ( ary && ary->Count() )
         {
-        case 0:
-            User::Leave(KErrNotFound);
-        case 1:
-            {
-            foundMedia = CMPXMedia::NewL(*ary->AtL(0));
-            CleanupStack::PushL(foundMedia);
-            foundMedia->SetTObjectValueL<TUid>(
-                KMPXMediaGeneralCollectionId, TUid::Uid(col) );
-            CleanupStack::Pop(foundMedia);
-            break;
-            }
-        default:
-            User::Leave(KErrCorrupt);
+        foundMedia = CMPXMedia::NewL(*ary->AtL(0));
+        CleanupStack::PushL(foundMedia);
+        foundMedia->SetTObjectValueL<TUid>( KMPXMediaGeneralCollectionId, TUid::Uid(col) );
+        CleanupStack::Pop(foundMedia);
         }
-
+    else
+        {
+        User::Leave(KErrNotFound);    
+        }
+    
     CleanupStack::PopAndDestroy(result);
-
     return foundMedia;
     }
 
--- a/mmappcomponents/harvester/collectionmediator/group/mpxcollectionmediator.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/collectionmediator/group/mpxcollectionmediator.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -53,4 +53,7 @@
 deffile ../eabi/ 
 #elif defined(WINSCW)
 deffile ../bwinscw/ 
-#endif
\ No newline at end of file
+#endif
+
+SMPSAFE
+
--- a/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -77,3 +77,5 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
--- a/mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h	Tue Aug 31 15:41:40 2010 +0300
@@ -24,11 +24,11 @@
 // Please update the increment number for each increment 
 // Please update the version number for each schema change
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT( KHarvesterDBName, "harvesterdbv10_1.dat" );
-_LIT( KHarvesterDBNameEMMC, "harvesterdbv10_1i.dat" );
+_LIT( KHarvesterDBName, "harvesterdbv10_2.dat" );
+_LIT( KHarvesterDBNameEMMC, "harvesterdbv10_2i.dat" );
 #else
-_LIT( KHarvesterDBName, "harvesterdbv10_1n.dat" );
-_LIT( KHarvesterDBNameEMMC, "harvesterdbv10_1in.dat" );
+_LIT( KHarvesterDBName, "harvesterdbv10_2n.dat" );
+_LIT( KHarvesterDBNameEMMC, "harvesterdbv10_2in.dat" );
 #endif 
 _LIT( KHarvesterDBPattern, "harvesterdbv*.dat" );
 
--- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h	Tue Aug 31 15:41:40 2010 +0300
@@ -211,7 +211,7 @@
     *
     * @return TInt64 estimated file size
     */
-    TInt64 CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize );
+    TInt64 CalculateInitalDummyDBSizeL( TVolumeInfo& aVol, TInt aOrigDbSize );
 
     /**
     * Remove dummy file
--- a/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -192,14 +192,6 @@
         do
             {
             TRAP(err, iDirScan->NextL(iDir));
-            if( !iDir && !err ) 
-                {
-                // if iDir NULL and no error, there are no 
-                // more directories in the structure
-                // in this case there is no leaving functions called before
-                // returning err has to be 0
-                break;
-                }
             blocked = iObserver.IsPathBlockedL( iDirScan->FullPath() );
             if( blocked )
                 {
@@ -254,14 +246,6 @@
                 {
                 MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL iDirScan->NextL()");
                 TRAP(err, iDirScan->NextL(iDir));
-                if( !iDir && !err ) 
-                    {
-                    // if iDir NULL and no error, there are no 
-                    // more directories in the structure
-                    // in this case there is no leaving functions called before
-                    // returning err has to be 0
-                    break;
-                    }
                 MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path %S", &iDirScan->FullPath());
                 blocked = iObserver.IsPathBlockedL( iDirScan->FullPath() );
                 MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path blocked %i", blocked);
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -862,7 +862,7 @@
 // CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL
 // ---------------------------------------------------------------------------
 //
-TInt64 CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize )
+TInt64 CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL( TVolumeInfo& aVol, TInt aOrigDbSize )
     {
     MPX_FUNC("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL");
     TInt64 size;
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Handles all file related activities
-*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.9 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.5.4 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -343,11 +343,12 @@
                 // Remove current drive from the scanned drives list
                 TParse fileNameParser;
                 User::LeaveIfError(fileNameParser.Set(iFilteredDrivesToScan[index],NULL,NULL));
-                TPtrC driveName(fileNameParser.Drive());
+                TFileName driveName(fileNameParser.Drive());
                 TInt driveNumber = TDriveUnit( driveName );
                 if (currentDriveNumber == driveNumber)
                     {
                     iFilteredDrivesToScan.Remove(index);
+                    iFilteredOutOfDisk = ETrue;
                     count--;
                     }
                 else
@@ -356,7 +357,6 @@
                     }
                 }
             iDBManager->CloseDatabase(static_cast<TDriveNumber>(currentDriveNumber));
-            iFilteredOutOfDisk = ETrue;
             }
         }
 
--- a/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Active object to extract metadata 
-*  Version     : %version: da1mmcf#16.2.3.1.6 % 
+*  Version     : %version: da1mmcf#16.2.3.1.5.2.1 % 
 *
 */
 
--- a/mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -61,3 +61,6 @@
 #elif defined(WINSCW)
 deffile ../bwinscw/ 
 #endif
+
+SMPSAFE
+
--- a/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  This class is responsible for reading file info
-*  Version     : %version: e003sa33#5.1.3.1.10 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: e003sa33#5.1.3.1.6.2.3 % << Don't touch! Updated by Synergy at check-out.
 *
 *  Copyright © 2005 Nokia. All rights reserved.
 */
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.15 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.8 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -52,7 +52,7 @@
 #ifdef RD_MPX_TNM_INTEGRATION
 _LIT( KImageFileType, "image/jpeg" );
 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 2; 
+const TInt KMPXMaxThumbnailRequest = 2;
 #endif //RD_MPX_TNM_INTEGRATION
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -186,10 +186,10 @@
     aNewProperty = NULL;
     iFileName = aFile;
     iMetadataOnly = aMetadataOnly;
-    
+
     // populate the task array
     AddTasksL();
-    
+
     // execute all tasks in the array
     while ( iArrayTasks.Count() )
         {
@@ -211,10 +211,10 @@
                 }
             break;
             }
-        
+
         iArrayTasks.Remove( 0 );
         }
-    
+
     aNewProperty = iMedia;
     iMedia = NULL;  // ownership transferred.
     CleanUp();
@@ -236,9 +236,6 @@
     // Album
     aMediaProp.SetTextValueL( KMPXMediaMusicAlbum,
                               KNullDesC );
-    // Year
-    aMediaProp.SetTObjectValueL<TInt64>( KMPXMediaMusicYear,
-                                         (TInt64) 0 );
     // Track
     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumTrack,
                               KNullDesC );
@@ -254,6 +251,10 @@
     // URL
     aMediaProp.SetTextValueL( KMPXMediaMusicURL,
                               KNullDesC );
+    // AlbumArtist
+    aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist,
+                              KNullDesC );
+    
     }
 
 // ---------------------------------------------------------------------------
@@ -267,20 +268,20 @@
     const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
     HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
     mimeType8->Des().Append( mimeType );
-    
+
     // Continue to extract metadata even if fail.
     MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
     CleanupStack::PopAndDestroy( mimeType8 );
-    
+
     // Get MetadataUtility Container
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
 
     // Get DRM data
     // Need the protected flag from metadataUtility Container
     MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) );
-    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data", 
+    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data",
             drmerror );
-        
+
     // Get metadata fields
     TInt count( metaCont.Count() );
     for( TInt i=0; i<count; ++i )
@@ -289,19 +290,19 @@
 
         HBufC* value = NULL;
         metaCont.FieldIdAt( i, fieldType );  // get the field type
-        
+
         // get the value, except for album art
         if ( fieldType != EMetaDataJpeg )
            {
             MPX_TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
            if ( KErrNone != err )
                {
-               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
+               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);
                continue;
-               }     
+               }
            CleanupStack::PushL( value );
            }
-        
+
         switch( fieldType )
             {
             case EMetaDataSongTitle:
@@ -409,70 +410,82 @@
                                       *value );
                 break;
                 }
-            case EMetaDataDuration:     
-                {                  
+            case EMetaDataDuration:
+                {
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
-                
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
                 // Verify if WMA, get the duration
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
 
                     // Perform the duration conversion
                     TLex lexer( *value );
                     TInt32 duration ( 0 );
-                    lexer.Val( duration );   // [second]      
+                    lexer.Val( duration );   // [second]
                     duration *= 1000;        // [msec]
-                
+
                     iMedia->SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
-                                                duration );      
-                
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);  
+                                                duration );
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);
                     }
                 break;
                 }
-            case EMetaDataSampleRate:     
-                {                  
+            case EMetaDataSampleRate:
+                {
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
-                
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
                 // Verify if WMA, get the sample rate
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
 
                     // Perform the sample rate conversion
                     TLex lexer( *value );
                     TInt32 sampleRate ( 0 );
-                    lexer.Val( sampleRate );         
-                    
+                    lexer.Val( sampleRate );
+
                     iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
                                                       sampleRate );
-                           
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);  
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);
                     }
                 break;
                 }
-            case EMetaDataBitRate:     
-                {                  
+            case EMetaDataBitRate:
+                {
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
-                
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
+
                 // Verify if WMA, get the duration
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
 
                     // Perform the duration conversion
                     TLex lexer( *value );
                     TInt32 bitRate ( 0 );
-                    lexer.Val( bitRate );   
-                
+                    lexer.Val( bitRate );
+
                     iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
                                                      bitRate );
-                
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);  
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);
+                    }
+                break;
+                }
+            case EMetaDataAlbumArtist:
+                {
+                TPtr valptr = value->Des();
+                valptr.Trim();
+                TInt vallen = value->Length();
+                if (vallen>0)
+                    {
+                    FindAndReplaceForbiddenChars(valptr, vallen);
+                    iMedia->SetTextValueL(KMPXMediaMusicAlbumArtist, *value);
                     }
                 break;
                 }
@@ -493,7 +506,7 @@
             }
         if (fieldType != EMetaDataJpeg)
             {
-            CleanupStack::PopAndDestroy( value );       
+            CleanupStack::PopAndDestroy( value );
             }
         }
     }
@@ -513,25 +526,25 @@
     if( iFileOpenError == KErrNone )
         {
         const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);
         iFile.Size( size );
         iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
-        
+
         // Verify if WMA, skip getting info from MMF
         if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
             {
             // No need to get MMF support
-            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");
             }
         else
             {
-            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");
             // Duration, bitrate, samplerate, etc
             //
             if( !iMetadataOnly )
             {
                 MPX_TRAPD(err2, iFileInfoUtil->OpenFileL(
-                          iFile, 
+                          iFile,
                           iMedia->ValueText(KMPXMediaGeneralMimeType)));
                 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
                 if( KErrNone == err2 )
@@ -546,7 +559,7 @@
 
                     MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
                     }
-                
+
                 iFileInfoUtil->Reset();
                 }
             }
@@ -582,22 +595,22 @@
 // CMPXMetadataExtractor::ThumbnailPreviewReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailPreviewReady( 
+void CMPXMetadataExtractor::ThumbnailPreviewReady(
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailPreviewReady()");
     }
-        
+
 
 // ---------------------------------------------------------------------------
 // CMPXMetadataExtractor::ThumbnailReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/, 
+void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/,
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId aId )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
-    
+
     // Remove thumbnail id from array.
     TInt index = iArrayTNRequestId.Find( aId );
     if ( index >= 0 )
@@ -622,8 +635,8 @@
 
     CMPXMetadataExtractor* ptr =
         static_cast<CMPXMetadataExtractor*>(aPtr);
-        
-    // Timer expired before thumbnail callback occurred. Stop wait loop to unblock. 
+
+    // Timer expired before thumbnail callback occurred. Stop wait loop to unblock.
     ptr->StopWaitLoop();
     return KErrNone;
     }
@@ -636,7 +649,7 @@
     MPX_FUNC("CMPXMetadataExtractor::StopWaitLoop()");
     // Cancel timer
     CancelTimeoutTimer();
-    
+
     // Stop wait loop to unblock.
     if ( iTNSyncWait->IsStarted() )
         {
@@ -646,12 +659,12 @@
     }
 
 // ----------------------------------------------------------------------------
-// Cancel timer. 
+// Cancel timer.
 // ----------------------------------------------------------------------------
 void CMPXMetadataExtractor::CancelTimeoutTimer()
     {
     MPX_FUNC("CMPXMetadataExtractor::CancelTimeoutTimer()");
-    
+
     // Cancel timer.
     if ( iTimer && iTimer->IsActive() )
         {
@@ -668,12 +681,12 @@
     MPX_FUNC("CMPXMetadataExtractor::ExtractAlbumArtL()");
     TInt err = KErrNone;
     iCancelled = EFalse;
-    
+
     if ( !aMedia->IsSupported(KMPXMediaGeneralUri) )
         {
         return KErrArgument;
         }
-    
+
     // Get full file name.
     const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
     MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
@@ -695,7 +708,7 @@
             HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC();   // make a local copy of sampleData
             source = CThumbnailObjectSource::NewLC(
                 value8, mimeType, path );    // give up ownership of value8
-            
+
             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer");
             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
             iArrayTNRequestId.Append( tnId );
@@ -706,7 +719,7 @@
             {
             source = CThumbnailObjectSource::NewLC(
                 path, KImageFileType  );
-            
+
             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path");
             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
             iArrayTNRequestId.Append( tnId );
@@ -721,7 +734,7 @@
     RArray<TMetaDataFieldId> wantedFields;
     CleanupClosePushL( wantedFields );
     wantedFields.Append(EMetaDataJpeg);
-    
+
     // Open file
     if ( aMedia->IsSupported(KMPXMediaGeneralMimeType) )
         {
@@ -737,7 +750,7 @@
         MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) );
         }
     CleanupStack::PopAndDestroy( &wantedFields );
-    
+
     if ( !err )
         {
         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
@@ -756,28 +769,28 @@
 // ----------------------------------------------------------------------------
 // Add album art to media object.
 // ----------------------------------------------------------------------------
-void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia, 
+void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia,
                                                const TDesC& aFile )
     {
     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
-    
+
     // get metadata container.
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
     TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
-   
+
     if ( data8.Length() )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
 #ifdef RD_MPX_TNM_INTEGRATION
-        HBufC8* value8 = NULL; 
+        HBufC8* value8 = NULL;
         MPX_TRAPD( err, value8 = data8.AllocL() );
         if ( KErrNone != err )
             {
             MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
             return;
-            }              
+            }
         CleanupStack::PushL( value8 );
-    
+
         TBuf<256> mimeType;
         mimeType.Copy( KImageFileType );
         CThumbnailObjectSource* source = CThumbnailObjectSource::NewL(
@@ -786,9 +799,9 @@
         iArrayTNRequestId.Append( tnId ); // add thumbnail id to array
         CleanupStack::Pop( value8 );
         delete source;
-        
+
         aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
-#endif // RD_MPX_TNM_INTEGRATION          
+#endif // RD_MPX_TNM_INTEGRATION
         aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
         }
     }
@@ -926,10 +939,23 @@
         {
         TDataType dataType;
         TUid dummyUid(KNullUid);
-        iAppArc.AppForDocument(iFileName, dummyUid, dataType);
+        // File handle based mime type recogniton required , because AppArc does 
+        // not have All Files capa required for files in private folders 
+        TDataRecognitionResult result;
+        RFs fs;
+		RFile rFile;
+        User::LeaveIfError(fs.Connect());
+		CleanupClosePushL(fs);
+        User::LeaveIfError(fs.ShareProtected());
+        User::LeaveIfError(rFile.Open(fs, iFileName, EFileShareReadersOrWriters));
+		CleanupClosePushL(rFile);
+        User::LeaveIfError(iAppArc.RecognizeData(rFile, result)); 
+        CleanupStack::PopAndDestroy(&rFile);
+        CleanupStack::PopAndDestroy(&fs);
+        dataType = result.iDataType;
         iMedia->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() );
         }
-        
+
     // Initially set default tags.
     SetDefaultL( *iMedia );
     }
@@ -981,23 +1007,23 @@
         MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaAsyncL Request ongoing. Abort!" );
         User::Leave( KErrAbort );
         }
-    
+
     iCancelled = EFalse;
     iFileOpenError = KErrNone;
     iFileName = aFile;
     iObs = aObs;
     iMetadataOnly = aMetadataOnly;
-    
+
     // populate the task array
     AddTasksL();
-    
+
     // Start task timer to execute task
     if ( iArrayTasks.Count() )
         {
         if ( iTaskTimer->IsActive() )
             {
             iTaskTimer->Cancel();
-            }   
+            }
         iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this ));
         }
     }
@@ -1009,7 +1035,7 @@
 TInt CMPXMetadataExtractor::OpenFile()
     {
     MPX_FUNC("CMPXMetadataExtractor::OpenFile()");
-    
+
     // Open the file
     iFile.Close();
     TInt error = iFile.Open( iFs, iFileName, EFileRead | EFileShareReadersOrWriters );
@@ -1025,7 +1051,7 @@
     {
     MPX_FUNC("CMPXMetadataExtractor::AddTasks()");
     iFileOpenError = OpenFile();
-    
+
     // Do not change the order of the task below.
     iArrayTasks.Reset();
     if ( iFileOpenError == KErrNone )
@@ -1066,7 +1092,7 @@
 void CMPXMetadataExtractor::HandleTaskTimerExpired()
     {
     MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
-    
+
     if ( iTaskTimer && iTaskTimer->IsActive() )
         {
         iTaskTimer->Cancel();
@@ -1083,13 +1109,13 @@
             }
         iArrayTasks.Reset();
         }
-    
+
     // Remove task at index 0.
     if ( iArrayTasks.Count() )
         {
         iArrayTasks.Remove( 0 );
         }
-    
+
     // check if we have any more task to run
     if ( iArrayTasks.Count() )
         {
@@ -1104,7 +1130,7 @@
             iObs->HandleCreateMediaComplete( iMedia, error );
             iMedia = NULL;  // ownership transferred.
             }
-        
+
         CleanUp();
         }
     }
@@ -1135,7 +1161,7 @@
     // Validate the objects to be used
     MPX_ASSERT(iMedia);
     MPX_ASSERT(iDrmMediaUtility);
-    
+
     // File Path
     TParsePtrC parse( iFileName );
     iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
@@ -1143,7 +1169,7 @@
     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName);
 
     // get the protected flag from MetadataUtility Container
-    TPtrC ptr = aMetaCont.Field( EMetaDataProtected );  
+    TPtrC ptr = aMetaCont.Field( EMetaDataProtected );
     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr);
     _LIT( KNonProtected, "0" );
     if ( ptr.Compare( KNonProtected ) == 0 )
@@ -1154,7 +1180,7 @@
         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
         }
-    else  
+    else
         {  // DRM file
 
         // DRM Rights
@@ -1206,20 +1232,20 @@
 
         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
-    
+
         iDrmMediaUtility->Close();
-    
+
         }  // DRM file
 
-    
+
     // verify the file open status
     if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
         {
         dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
         }
-    
+
     // Finally set the db flag
     //
     iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags );
-   
+
     }
--- a/mmappcomponents/harvester/server/group/mpxharvester.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -62,3 +62,6 @@
 LIBRARY                 usbman.lib
 LIBRARY                 PlatformEnv.lib
 LIBRARY                 disknotifyhandler.lib
+
+SMPSAFE
+
--- a/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -191,9 +191,9 @@
 		
         if (value == EMtpPSStatusActive)
             {
-                MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start");
-                iObserver.HandleSystemEventL( EUSBMTPStartEvent, removableDrive );
-                iState = KUsbPersonalityIdMTP;
+            MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start");
+            iObserver.HandleSystemEventL( EUSBMTPStartEvent, removableDrive );
+            iState = KUsbPersonalityIdMTP;
             }
         else if( value != EMtpPSStatusReadyToSync )
             {
--- a/mmappcomponents/harvester/utility/group/mpxharvesterutility.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/harvester/utility/group/mpxharvesterutility.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -45,4 +45,7 @@
 deffile ../eabi/ 
 #elif defined(WINSCW)
 deffile ../bwinscw/ 
-#endif
\ No newline at end of file
+#endif
+
+SMPSAFE
+
--- a/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4.1.3 %
+// Version : %version: 4.1.6 %
 
 
 #include <platform_paths.hrh>
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -124,7 +124,7 @@
             PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size size=%d, err=%d" ), size, err );
             if( err == KErrNone && size > 0 )
                 {
-                HBufC8* sampleData = HBufC8::NewLC( size * sizeof( TUint8 ) );    // + sampleData
+                HBufC8* sampleData = HBufC8::NewLC( size );    // + sampleData
                 TPtr8 samplePtr = sampleData->Des();
                 err = sampleFile.Read( samplePtr );
                 PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Read err=%d" ), err );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -126,7 +126,7 @@
 
             if( size > 0 )
                 {
-                HBufC8* sampleData = HBufC8::NewLC( size * sizeof(TUint8) );    // + sampleData
+                HBufC8* sampleData = HBufC8::NewLC( size );    // + sampleData
                 TPtr8 samplePtr = sampleData->Des();
                 User::LeaveIfError( sampleFile.Read( samplePtr ) );
                 iMTPTypeArray->SetByDesL( samplePtr );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -314,8 +314,6 @@
     {
     PRINT( _L( "MM MTP => CMoveObject::GetPreviousPropertiesL" ) );
 
-    const TDesC& suid( aObject.DesC( CMTPObjectMetaData::ESuid ) );
-
     // same storage, not necessary to get the properties
     if ( iSameStorage )
         return;
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -902,7 +902,7 @@
             delete iSampleData;
             iSampleData = NULL;
 
-            iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) );
+            iSampleData = HBufC8::NewL( numElements );
             TPtr8 samplePtr = iSampleData->Des();
             mtpTypeArray.ToDes( samplePtr );
             RFile sampleFile;
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -480,6 +480,8 @@
     //__ASSERT_DEBUG(!iColSet, _MTP_PANIC(KMtpPrtPncCat, ENullPointer)); // Must have iColSet == NULL
 
     // Make sure any quotes in the aMatchCriteria are doubled...
+    // coverity[incorrect_multiplication]
+    // coverity[buffer_alloc]
     HBufC* matchText = HBufC::NewLC( 2 * aMatchCriteria.Length() );
     TPtr pMatchText( matchText->Des() );
     TInt srcLen = aMatchCriteria.Length();
--- a/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobjectmanager.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobjectmanager.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -84,6 +84,7 @@
         const TMTPObjectMgrQueryParams& aParams,
         RMTPObjectMgrQueryContext& aContext, RArray<TUint>& aHandles ) const
     {
+    CleanupClosePushL( aHandles ); 
     PRINTF3( ">CTestObjectManager::GetObjectHandlesL storage = 0x%x parent = 0x%x format = 0x%x", aParams.iStorageId, aParams.iParentHandle, aParams.iFormatCode );
     for ( TInt i = 0; i < iMTPObjects.Count(); i++ )
          {
@@ -103,6 +104,7 @@
          }
     aContext.Close();
     PRINTF0( "<CTestObjectManager::GetObjectHandlesL" );
+    CleanupStack::Pop(); 
     }
       
 void CTestObjectManager::GetObjectSuidsL( 
--- a/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobserver.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/ctestobserver.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -737,6 +737,7 @@
 
 void CTestObserver::GetArrayValue( MMTPDataProviderConfig::TParameter aParam, RArray<TUint>& aArray ) const
     {
+    CleanupClosePushL( aArray ); 
     PRINTF1( ">CTestObserver::GetArrayValue aParam = %d", aParam );
     switch (aParam)
         {
@@ -751,4 +752,5 @@
             User::Leave( KErrArgument );
         }
     PRINTF0( "<CTestObserver::GetArrayValue" );
+    CleanupStack::Pop(); 
     }
--- a/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/cteststoragemgr.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/tsrc/mtpdataprovidertestmodule/src/cteststoragemgr.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -432,6 +432,7 @@
  void CTestStorageMgr::GetAvailableDrivesL(
          RArray<TDriveNumber>& aDrives ) const
     {
+    CleanupClosePushL( aDrives ); 
     PRINTF0( ">CTestStorageMgr::GetAvailableDrivesL" );
     aDrives.Reset();
     for ( TUint i = 0; ( i < iMapDriveToStorage.Count() ); i++ )
@@ -443,6 +444,7 @@
             }
         }
     PRINTF0( "<CTestStorageMgr::GetAvailableDrivesL" );
+    CleanupStack::Pop(); 
     }
 
 void CTestStorageMgr::GetLogicalStoragesL(
--- a/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/playbackhelper/group/playbackhelper.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version:  6 %
+// Version : %version:  9 %
 
 
 #include <data_caging_paths.hrh>
--- a/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/playbackhelper/inc/playbackhelper_log.h	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 5 %
+// Version : %version: 7 %
 
 
 #ifndef PLAYBACKHELPER_LOG_H
--- a/mmappcomponents/playbackhelper/src/streaminglinkmodel.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/playbackhelper/src/streaminglinkmodel.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4 %
+// Version : %version: 4.1.1 %
 
 
 
@@ -559,6 +559,8 @@
 
     TInt size = 0;
     TInt result = KErrNone;
+    
+    TBool linkadded = EFalse;
 
     if ( aRamFile.Size( size ) == KErrNone && size <= KMaxLinkFileSize )
     {
@@ -576,6 +578,8 @@
         // Get links from buffer
         while ( ret == KErrNone )
         {
+            linkadded = EFalse;
+        
             // Create a linkitem ptr
             LinkStruct* linkItem = new( ELeave ) LinkStruct;   
             CleanupStack::PushL( linkItem );
@@ -593,14 +597,23 @@
                 {
                     ptr2.TrimRight();
                     iLinkArray.Append( linkItem );
+                    linkadded = ETrue;
                 }
             }
             else
             {
                 iLinkArray.Append( linkItem );
+                linkadded = ETrue;
             }
             
-            CleanupStack::Pop(2); // pop the linkItem and the HbufC created for linkItem->link
+            if ( linkadded )
+            {
+                CleanupStack::Pop(2); // pop the linkItem and the HbufC created for linkItem->link               
+            }                              
+            else 
+            {
+                CleanupStack::PopAndDestroy(2); //pop and destroy linkItem and the HbufC created for linkItem->link
+            }
         }
 
         CleanupStack::PopAndDestroy(2);  // buffer, recognizer
@@ -636,6 +649,8 @@
     iLinkCount = 0;
 
     TInt ret = KErrNone;
+    
+    TBool linkadded = EFalse;
 
     if ( aAsxParser )
     {
@@ -650,6 +665,9 @@
 
             for (TInt i=1; i <= urlCount; i++)
             {
+
+                linkadded = EFalse;
+                
                 // Get the asx struct from the parser
                 asxItem = aAsxParser->GetUrl(i);
                 // Set the url to the bufferptr
@@ -677,15 +695,23 @@
                     {
                         ptr2.TrimRight();
                         iLinkArray.Append( linkItem );
+                        linkadded = ETrue;
                     }
                 }
                 else
                 {
                     iLinkArray.Append( linkItem );
+                    linkadded = ETrue;
                 }
-                
-                CleanupStack::Pop(2); // pop the linkItem and the HbufC created for linkItem->link 
-
+                                              
+                if ( linkadded )
+                {
+                    CleanupStack::Pop(2); // pop the linkItem and the HbufC created for linkItem->link                    
+                }                              
+                else 
+                {
+                    CleanupStack::PopAndDestroy(2); //pop and destroy linkItem and the HbufC created for linkItem->link
+                }
             }
 
             CleanupStack::PopAndDestroy();  //recognizer
--- a/mmappcomponents/playlistengine/group/mpxplaylistengine.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/playlistengine/group/mpxplaylistengine.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -51,4 +51,6 @@
 LIBRARY   charconv.lib
 LIBRARY   mpxcommon.lib
 
+SMPSAFE
+
 // End of File
--- a/mmappcomponents/playlistengine/group/mpxplaylistrecognizer.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/playlistengine/group/mpxplaylistrecognizer.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -46,5 +46,6 @@
 LIBRARY         bafl.lib
 LIBRARY         mpxcommon.lib
 
+SMPSAFE
 
 // End of File
--- a/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 4 %
+// Version : %version: 6 %
 
 
 #include <data_caging_paths.hrh>
--- a/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 3 %
+// Version : %version: 6 %
 
 
 #ifndef VIDEOPLAYLISTUTILITY_LOG_H
--- a/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/group/CollectionHelperTestClass.pkg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/group/CollectionHelperTestClass.pkg	Tue Aug 31 15:41:40 2010 +0300
@@ -50,7 +50,7 @@
 "..\..\data\1.alb"   -   "e:\data\sounds\digital\1.alb" 
 "..\..\data\1.mp3"   -   "e:\data\sounds\digital\1.mp3"
 "..\..\data\1.wma"   -   "e:\data\sounds\digital\1.wma"
-                   
+
 "\epoc32\release\armv5\urel\CollectionHelperTestClass.dll"   -   "c:\Sys\Bin\CollectionHelperTestClass.dll"
   
 ; Embedded SIS 
--- a/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -138,19 +138,19 @@
         ENTRY( "AddSong", CCollectionHelperTestClass::AddSongL ),
         ENTRY( "RemoveSong", CCollectionHelperTestClass::RemoveSongL ),
         ENTRY( "AddAbstractAlbum", CCollectionHelperTestClass::AddAbstractAlbumL ),
-       ENTRY( "RemoveAbstractAlbum", CCollectionHelperTestClass::RemoveAbstractAlbumL ),
+        ENTRY( "RemoveAbstractAlbum", CCollectionHelperTestClass::RemoveAbstractAlbumL ),
         ENTRY( "SetAbstractAlbum", CCollectionHelperTestClass::SetAbstractAlbumL ),
         ENTRY( "SetSongAlbumArtist", CCollectionHelperTestClass::SetSongAlbumArtistL ),
         ENTRY( "GetSongAlbumArtist", CCollectionHelperTestClass::GetSongAlbumArtistL ),
-ENTRY( "SetAbstractAlbumArtist", CCollectionHelperTestClass::SetAbstractAlbumArtistL ),
-ENTRY( "GetAbstractAlbumArtist", CCollectionHelperTestClass::GetAbstractAlbumArtistL ),
-ENTRY( "UpdateAbstractAlbumName", CCollectionHelperTestClass::UpdateAbstractAlbumNameL ),
-  ENTRY("GetAbstractAlbumAndSongs",CCollectionHelperTestClass::GetAbstractAlbumAndSongsL),
+        ENTRY( "SetAbstractAlbumArtist", CCollectionHelperTestClass::SetAbstractAlbumArtistL ),
+        ENTRY( "GetAbstractAlbumArtist", CCollectionHelperTestClass::GetAbstractAlbumArtistL ),
+        ENTRY( "UpdateAbstractAlbumName", CCollectionHelperTestClass::UpdateAbstractAlbumNameL ),
+        ENTRY("GetAbstractAlbumAndSongs",CCollectionHelperTestClass::GetAbstractAlbumAndSongsL),
         ENTRY( "RenameAbstractAlbum", CCollectionHelperTestClass::RenameAbstractAlbumL ),
         ENTRY( "CloseUiHelper", CCollectionHelperTestClass::CloseUiHelperL ),
         ENTRY( "CloseHelper", CCollectionHelperTestClass::CloseHelperL ),
         ENTRY( "CloseCachedHelper", CCollectionHelperTestClass::CloseCachedHelperL ),        
-		};
+        };
 
     const TInt count = sizeof( KFunctions ) / 
                         sizeof( TStifFunctionInfo );
--- a/mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg	Tue Aug 31 15:41:40 2010 +0300
@@ -31,7 +31,6 @@
 // Collection Helper Test Class
 // ==================================================
 
-
 [Test]
 title 1. Create UI Helper
 create CollectionHelperTestClass test
@@ -65,7 +64,6 @@
 pause 1000
 [Endtest]
 
-
 [Test]
 title 4. Add Song
 create CollectionHelperTestClass test
@@ -114,7 +112,6 @@
 pause 1000
 [Endtest]
 
-
 [Test]
 title 8. Associate Song with AbstractAlbum
 create CollectionHelperTestClass test
@@ -127,7 +124,6 @@
 pause 1000
 [Endtest]
 
-
 [Test]
 title 9. Set SongAlbumArtist
 create CollectionHelperTestClass test
@@ -140,7 +136,6 @@
 pause 1000
 [Endtest]
 
-
 [Test]
 title 10. Get SongAlbumArtist
 create CollectionHelperTestClass test
@@ -184,7 +179,6 @@
 pause 1000
 [Endtest]
 
-
 [Test]
 title 13. Update AbstractAlbumName
 create CollectionHelperTestClass test
@@ -211,8 +205,8 @@
 delete test
 pause 1000
 [Endtest]
+
 [Test]
-
 title 15. Rename AbstractAlbum
 create CollectionHelperTestClass test
 test OpenCollectionUtility
--- a/mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini	Tue Aug 31 15:41:40 2010 +0300
@@ -174,4 +174,4 @@
 [End_Logger_Defaults]
 # -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
-# End of file
\ No newline at end of file
+# End of file
--- a/mmappfw_plat/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -13,13 +13,13 @@
 *
 * Description:  Includes all the Domain API specific bld.inf files, which 
 *                export files.
-*  Version     : %version: 1.1.4.1.3.3.5.1.1 %
+*  Version     : %version: da1ido#1.1.4.1.3.3.8 %
 *
 */
 
 
 #include <bldvariant.hrh>
-#include "../../inc/mmappfwbldvariant.hrh"
+#include "../inc/mmappfwbldvariant.hrh"
 
 #include "../collection_helper_api/group/bld.inf"
 #include "../harvester_collection_mediator_api/group/bld.inf"
@@ -46,3 +46,4 @@
 #endif
 #include "../playback_helper_api/group/bld.inf"
 #include "../videoplaylist_utility_api/group/bld.inf"
+#include "../qt_telephony_multimedia_service_api/group/bld.inf"
--- a/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -49,7 +49,11 @@
 LIBRARY         euser.lib
 LIBRARY         bafl.lib estor.lib ecom.lib stiftestinterface.lib
 LIBRARY         stiftestengine.lib 
-LIBRARY   		mpxcollectionmediator.lib mpxcollectionutility.lib mpxcollectionview.lib mpxcollectionengine.lib mpxcollectionhelper.lib mpxcommon.lib 
+LIBRARY         mpxcollectionmediator.lib
+LIBRARY         mpxcollectionutility.lib
+LIBRARY         mpxcollectionengine.lib
+LIBRARY         mpxcollectionhelper.lib
+LIBRARY         mpxcommon.lib 
 
 LANG            SC
 
--- a/mmappfw_plat/harvester_utility_api/tsrc/mpxharvestertest/src/mpxharvestertestBlocks.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/harvester_utility_api/tsrc/mpxharvestertest/src/mpxharvestertestBlocks.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -388,16 +388,16 @@
 
 		for( TInt i = 0; i < 5; i++ )
 		    {
-	    err = iFileMan->Copy(KFrom, KTo);
- 		if ( err != KErrNone )
- 			{
-			iLog->Log(_L("CopyTestFile returned: %d"), err);
+            err = iFileMan->Copy(KFrom, KTo);
+	        if ( err != KErrNone )
+	            {
+	            iLog->Log(_L("CopyTestFile returned: %d"), err);
 	            User::After( 1000000 );
 	            }
 	        else
 	            {
-			break;
-			}
+                break;
+	            }
 		    }
         }
     return err;
@@ -422,17 +422,18 @@
 
 		for( TInt i = 0; i < 5; i++ )
 		    {
-	    err = iFileMan->Delete(KFrom);
- 		if ( err != KErrNone )
- 			{
-			iLog->Log(_L("DeleteTestFile returned: %d"), err);
+            err = iFileMan->Delete(KFrom);
+	        if ( err != KErrNone )
+	            {
+	            iLog->Log(_L("DeleteTestFile returned: %d"), err);
 	            User::After( 1000000 );
 	            }
 	        else
 	            {
-			break;
-			}
+                break;
+	            }
 		    }
+
         }
     return err;
     }
@@ -714,17 +715,17 @@
 			{
             for( TInt i = 0; i < 5; i++ )
                 {
-		    TRAP(err, iHarvester->DeleteFilesL(*files));
-	 		if ( err != KErrNone )
-	 			{
-				iLog->Log(_L("DeleteFilesL sync returned: %d"), err);
+                TRAP(err, iHarvester->DeleteFilesL(*files));
+                if ( err != KErrNone )
+                    {
+                    iLog->Log(_L("DeleteFilesL sync returned: %d"), err);
                     User::After( 1000000 );
                     }
                 else
                     {
                     break;
                     }
-				}
+                }
 			}
 		else
 			{
--- a/mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -27,5 +27,8 @@
 ../inc/mpxakndialogplugin.h                 MW_LAYER_PLATFORM_EXPORT_PATH(mpxakndialogplugin.h)                  
 ../inc/mpxaknviewplugin.h                   MW_LAYER_PLATFORM_EXPORT_PATH(mpxaknviewplugin.h)                
 ../inc/mpxviewplugin.h                      MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.h)                       
-../inc/mpxviewplugin.hrh                    MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.hrh)                     
+../inc/mpxviewplugin.hrh                    MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.hrh)
 
+// new for 10.1 QT
+../inc/mpxviewpluginqt.h                    MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewpluginqt.h)                   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef MPXVIEWPLUGIN_H
+#define MPXVIEWPLUGIN_H
+
+#ifdef BUILD_VIEWFRAMEWORK
+#define VFDLL_EXPORT Q_DECL_EXPORT
+#else
+#define VFDLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#include <QObject>
+
+class QGraphicsWidget;
+class MpxViewPlugin;
+
+class VFDLL_EXPORT MpxPluginViewInterface {
+
+  public:
+    virtual MpxViewPlugin *viewPlugin() = 0;
+    
+    };
+
+Q_DECLARE_INTERFACE(MpxPluginViewInterface , "org.nokia.mmdt.MpxViewPlugin/1.0" );
+
+class VFDLL_EXPORT MpxViewPlugin : public QObject, public MpxPluginViewInterface {
+
+    Q_OBJECT
+    Q_INTERFACES(MpxPluginViewInterface)
+
+  public:
+	
+	/* COMMENT:
+	 * following two methods are kind of second-phase create & destroy. Rationale for this step is that
+	 * we need some way to promote lazy resources allocation (on application demand) and early resource
+	 * deallocation (again, on application direct command).
+	 */
+
+	/**
+	 * createView is the second operation (after plugin construction which is done somewhere 
+	 * in the plugin framework) executed in the application layer to make a fully operational 
+	 * View Plugin descendant.
+	 * I should allocate all of those resources that are required by plugin, but which are
+	 * too expensive to allocate in constructor (eg. in case of plugin prefetching).
+	 */
+	virtual void createView() = 0;	
+
+	/**
+	 * destroyView is an operation that should be executed just before plugin deletion.
+	 * Implementation should destroy all of resources allocated during createView execution.
+	 * It's reason d'etre is based on a fact, that application doesn't controll when exactly
+	 * plugin will be deleted, so destructor execution could be postponed still holding resources.
+	 */
+	virtual void destroyView() = 0;
+
+	/* COMMENT:
+	 * view activation and deactivation are reversible operations
+	 * that allows us to give up resources that we could temporary deallocate when that 
+	 * specific view plugin goes into background.
+	 */
+
+	/**
+	 * Called to notice view activation.
+	 */
+	virtual void activateView() = 0;
+
+	/**
+	 * Called to notice view deactivation.
+	 */
+	virtual void deactivateView() = 0;
+
+	/**
+	 * gives actual view component, ready to put somewhere into the app layout.
+	 * However, beware that calling to activate/deactivate in the meantime
+	 * can invalidate that pointer.
+	 * 
+	 * NOTE: Returned type is choosen to be as generic as possible, 
+	 * so please ensure that it fulfills all your needs (it was HbView* before)
+	 */
+	virtual QGraphicsWidget* getView() = 0;
+
+  public slots:
+
+	/**
+	 * Signalled by application when orientation has changed.
+	 */	
+	virtual void orientationChange(Qt::Orientation orientation) = 0;
+
+	/**
+	 * Implementation should take care either to implement
+       * go-back operation internally or to emit proper
+	 * command signal to delegate that responsibility to
+	 * framework (eg. to switch to previous view).
+	 */	
+	virtual void back() = 0;
+
+  signals:
+
+	/**
+	 * Command is the only way to notify from plugin to application
+	 * about action needed to be executed.
+	 *
+	 * @param aCommand  enumeration of command type. 
+	 * Currently supported are: ViewBack, CloseApp, GoToNowPlaying, GoToCollectionView.
+	 * NOTE: It should be specified how to determine between broadly supported operations 
+	 * (back, close etc.) and application/plugin specific (go to collection, go to now playing etc.)
+	 *
+	 * There is also one major issue here, that there is no guaranted order of command delivery,
+	 * so there is second option to use common observer pattern. Should be discussed.
+	 */	
+	void command(int aCommand);
+	
+  public:
+
+    virtual MpxViewPlugin *viewPlugin() { return this; }
+
+};
+
+#endif /*MPXVIEWPLUGIN_H_*/
+
--- a/mmappfw_plat/mpx_base_view_plugins_api/tsrc/conf/tcmpxbaseviewpluginstest.cfg	Thu Aug 19 10:24:28 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-
-[Test]
-title 1: CMPXAknViewPluginDestruct
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 1
-[Endtest] 
-
-[Test]
-title 2: CMPXAknViewPluginCreateViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 2
-[Endtest]
-
-[Test]
-title 3: CMPXAknViewPluginDestroyView
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 3
-[Endtest]
-
-[Test]
-title 4: CMPXAknViewPluginActivateViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 4
-[Endtest]
-
-[Test]
-title 5: CMPXAknViewPluginSetAsDefaultViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 5
-[Endtest]
-
-[Test]
-title 6: CMPXAknViewPluginDeactivateView
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 6
-[Endtest]
-
-[Test]
-title 7: CMPXAknDialogPluginDestruct
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 7
-[Endtest] 
-
-[Test]
-title 8: CMPXAknDialogPluginCreateViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 8
-[Endtest]
-
-[Test]
-title 9: CMPXAknDialogPluginDestroyView
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 9
-[Endtest]
-
-[Test]
-title 10: CMPXAknDialogPluginActivateViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 10
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 17
-[Endtest]
-
-[Test]
-title 11: CMPXAknDialogPluginSetAsDefaultViewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 11
-[Endtest]
-
-[Test]
-title 12: CMPXAknDialogPluginDeactivateView
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 12
-[Endtest]
-
-[Test]
-title 13: CMPXViewPluginNewL
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 13
-[Endtest] 
-
-[Test]
-title 14: CMPXViewPluginDestruct
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 14
-[Endtest] 
-
-[Test]
-title 15: CMPXViewPluginSetObserver
-run testscripter c:\testframework\ui_mpxbaseviewpluginstest.cfg 15
-[Endtest]
-
--- a/mmappfw_plat/mpx_base_view_plugins_api/tsrc/conf/ui_mpxbaseviewpluginstest.cfg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_base_view_plugins_api/tsrc/conf/ui_mpxbaseviewpluginstest.cfg	Tue Aug 31 15:41:40 2010 +0300
@@ -91,7 +91,6 @@
 [Test]
 title 10: CMPXAknDialogPluginActivateViewL
 create ui_mpxbaseviewpluginstest foobar
-bringtoforeground
 foobar CDummyMPXAknDialogPluginConstruct
 foobar CMPXAknDialogPluginCreateViewL
 foobar CMPXAknDialogPluginActivateViewL
@@ -99,7 +98,6 @@
 foobar CMPXAknDialogPluginDestroyView
 foobar CDummyMPXViewPluginDesConstruct 
 delete foobar
-sendtobackground
 [Endtest]
 
 [Test]
@@ -149,14 +147,3 @@
 delete foobar
 [Endtest]
 
-[Test]# lsf key
-title PressKey
-pause 10000
-presskey global EKeyDevice0
-[Endtest] 
-
-[Test]# rsf key
-title PressKey
-pause 10000
-presskey global EKeyDevice1
-[Endtest] 
--- a/mmappfw_plat/mpx_base_view_plugins_api/tsrc/init/TestFramework.ini	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_base_view_plugins_api/tsrc/init/TestFramework.ini	Tue Aug 31 15:41:40 2010 +0300
@@ -89,8 +89,8 @@
 # name of the test module when adding new test module
 
 [New_Module]
-ModuleName= testcombiner
-TestCaseFile= c:\testframework\tcmpxbaseviewpluginstest.cfg
+ModuleName= testscripter
+TestCaseFile= c:\testframework\ui_mpxbaseviewpluginstest.cfg
 [End_Module]
 
 
--- a/mmappfw_plat/mpx_base_view_plugins_api/tsrc/ui_mpxbaseviewpluginstest/group/ui_mpxbaseviewpluginstest.pkg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_base_view_plugins_api/tsrc/ui_mpxbaseviewpluginstest/group/ui_mpxbaseviewpluginstest.pkg	Tue Aug 31 15:41:40 2010 +0300
@@ -48,9 +48,8 @@
 
 ; Install files
 
-"..\..\init\TestFramework.ini"   -   "c:\testframework\TestFramework.ini" 
+;"..\..\init\TestFramework.ini"   -   "c:\testframework\TestFramework.ini" 
 "..\..\conf\ui_mpxbaseviewpluginstest.cfg"   -   "c:\testframework\ui_mpxbaseviewpluginstest.cfg"
-"..\..\conf\tcmpxbaseviewpluginstest.cfg"   -   "c:\testframework\tcmpxbaseviewpluginstest.cfg"
 
 "\epoc32\release\armv5\urel\ui_mpxbaseviewpluginstest.dll"   -   "c:\Sys\Bin\ui_mpxbaseviewpluginstest.dll"
   
--- a/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h	Tue Aug 31 15:41:40 2010 +0300
@@ -46,6 +46,7 @@
 const TMPXAttributeData KMPXMediaMusicAlbumArtThumbnailSize={KMPXMediaIdMusic,0x800}; // TSint
 const TMPXAttributeData KMPXMediaMusicAlbumArtChanged={KMPXMediaIdMusic,0x1000}; // TInt
 const TMPXAttributeData KMPXMediaMusicAlbumArtist={KMPXMediaIdMusic,0x2000}; // Text
+const TMPXAttributeData KMPXMediaMusicAlbumId={KMPXMediaIdMusic,0x4000}; // TMPXItemId
 const TMPXAttributeData KMPXMediaMusicAll={KMPXMediaIdMusic,0xffffffff}; // Text
 
 /** 
@@ -68,6 +69,7 @@
     EMPXMediaMusicAlbumArtThumbnail=0x400,
     EMPXMediaMusicAlbumArtThumbnailSize=0x800,
     EMPXMediaMusicAlbumArtist=0x2000,
+    EMPXMediaMusicAlbumId=0x4000,
     EMPXMediaMusicAll=0xffffffff
     };
 
--- a/mmappfw_plat/mpx_common_api/tsrc/ui_commontestclass/src/testmpxpluginhandlerbase.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_common_api/tsrc/ui_commontestclass/src/testmpxpluginhandlerbase.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -24,7 +24,6 @@
 
 // Begin MPXPluginHandlerBase testing implementation (mpxpluginhandlerbase.h)============================
 const TUid KMPXPPluginHandlerBaseUid = {0x12345};
-
 const TUid KMPXPlaybackInterfaceUid = {0x101FFC05};
 class CDummyMpxPluginHandler : public CMPXPluginHandlerBase,
                                public MMPXPluginHandlerObserver
@@ -602,7 +601,7 @@
 
     CDummyMpxPluginHandler pluginHandler;
     
-    //TInt index = pluginHandler.IndexOf(KMPXPPluginHandlerBaseUid);    
+    //TInt index = pluginHandler.IndexOf(KMPXPPluginHandlerBaseUid);
     TRAPD( err, pluginHandler.PluginFlagsL(KMPXPPluginHandlerBaseUid));
     // Using the invalid id (KMPXPPluginHandlerBaseUid), so it is right if the 
     // return err is KErrNotFound.
--- a/mmappfw_plat/mpx_common_definition_api/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_common_definition_api/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -36,4 +36,5 @@
 ../inc/mpxmessage2.h                             MW_LAYER_PLATFORM_EXPORT_PATH(mpxmessage2.h)              
 ../inc/mpxpathconfiguration.hrh                  MW_LAYER_PLATFORM_EXPORT_PATH(mpxpathconfiguration.hrh)   
 ../inc/mpxprivatecrkeys.h                        MW_LAYER_PLATFORM_EXPORT_PATH(mpxprivatecrkeys.h)         
-../inc/mpxsearchcriteria.h                       MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h)        
\ No newline at end of file
+../inc/mpxsearchcriteria.h                       MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h)
+../inc/EqualizerConstants.h                      MW_LAYER_PLATFORM_EXPORT_PATH(EqualizerConstants.h)
\ No newline at end of file
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg	Tue Aug 31 15:41:40 2010 +0300
@@ -26,6 +26,12 @@
 // Timers
 KTimerEndTest 5000             // 5 sec
 
+// Properties for SetL
+EPbPropertyVolume 0
+EPbPropertyPosition 10
+
+
+
 [Enddefine]
 
 
@@ -251,3 +257,526 @@
 delete pbutil
 [Endtest] 
 
+[Test]
+//
+//  Test Video play
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play
+//
+title 14  MMPXPlaybackUtilityVideoCommandPlayL(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video play, then stop
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Stop
+//
+title 15  MMPXPlaybackUtilityVideoCommandPlayClose(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video play, then pause
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Pause
+//
+title 16  MMPXPlaybackUtilityVideoCommandPlayandPause(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video play, then playpause
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, PlayPause
+//
+title 17  MMPXPlaybackUtilityVideoCommandPlayPause(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video play, then playpause twice
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, PlayPause, PlayPause
+//
+title 18  MMPXPlaybackUtilityVideoCommandPlayPausePlay(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayPauseL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video playcomplete
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Play Complete
+//
+title 19  MMPXPlaybackUtilityVideoCommandPlayComplete(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayCompleteL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video seeking forward
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Seek Forward
+//
+title 20  MMPXPlaybackUtilityVideoCommandSeekForwardPlayState(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandSeekForwardL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video seeking backward
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Seek Backward
+//
+title 21  MMPXPlaybackUtilityVideoCommandSeekBackwardPlayState(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandSeekBackwardL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video seeking forward while paused
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Pause, Seek Forward
+//
+title 22  MMPXPlaybackUtilityVideoCommandSeekForwardPauseState(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandSeekForwardL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video seeking backward while paused
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Pause, Seek Backward
+//
+title 23  MMPXPlaybackUtilityVideoCommandSeekBackwardPauseState(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandSeekBackwardL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video play with RFile64
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - Init64L with RFile64, File MPEG4_VBR_176x144_15fps.3gp
+//  - File64L to get RFile64 file handler
+//
+title 24  MMPXPlaybackUtilityVideoFile64PlayL
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInit64L MPEG4_VBR_176x144_15fps.3gp
+pause 1000
+pbutil MMPXPlaybackUtilityFile64L
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest]
+
+
+[Test]
+//
+//  Test Video close after stop
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Stop, close
+//
+title 25  MMPXPlaybackUtilityVideoCommandPlayStopClose(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandCloseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video close
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Close
+//
+title 26  MMPXPlaybackUtilityVideoCommandPlayClose(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandCloseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+
+[Test]
+//
+//  Test Video set position (jump while playing)
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Set Position
+//
+title 27  MMPXPlaybackUtilityVideoSetPosition(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilitySetL EPbPropertyPosition 100
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest]
+
+
+[Test]
+//
+//  Test Video set volume
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Set Volume
+//
+title 28  MMPXPlaybackUtilityVideoSetVolume(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilitySetL EPbPropertyVolume 15
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest]
+
+[Test]
+//
+//  Test Video play command while already playing
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play
+//
+title 29  MMPXPlaybackUtilityVideoCommandPlayPlayL(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video playpause command in stopped state
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Stop, PlayPause
+//
+title 30  MMPXPlaybackUtilityVideoCommandStopPlayPause(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video pause command while already paused
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Pause, Pause
+//
+title 31  MMPXPlaybackUtilityVideoCommandPausePauseL(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video pause command in stopped state
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Stop, Pause
+//
+title 32  MMPXPlaybackUtilityVideoCommandStopPause(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPauseL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video stop command in stopped state
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Play, Stop, Stop
+//
+title 33  MMPXPlaybackUtilityVideoCommandStopStop(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandPlayL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest] 
+
+[Test]
+//
+//  Test Video stop command while in buffering state
+//  - UtilityL with Mode NewPlayer, Category Video
+//  - Add Observer
+//  - SelectPlayerL with HelixPlugin UID
+//  - InitL with URI, File Battle_160x100_30kbps.rm
+//  - Init, Stop
+//
+title 34  MMPXPlaybackUtilityVideoCommandInitStop(uri)
+create mpxplaybackutilitytest pbutil
+pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer
+pbutil MMPXPlaybackUtilityAddObserverL
+pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid
+pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm
+pause 1000
+pbutil MMPXPlaybackUtilityCommandStopL
+pause KTimerEndTest
+pbutil EndTest
+delete pbutil
+[Endtest]
\ No newline at end of file
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -28,5 +28,6 @@
 
 PRJ_TESTMMPFILES
 #include "../mpxplaybackutilitytest/group/bld.inf"
+#include "../testvideoplaybackplugin/group/bld.inf"
 
 //  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testcollectionplugintype.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2002 - 2007 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:  define collection collection plugin type enum
+*
+*/
+
+#ifndef TESTCOLLECTIONPLUGINTYPE_H
+#define TESTCOLLECTIONPLUGINTYPE_H
+
+#include "testcommonpluginuids.h"
+
+// Collection Plugin Test Types.
+//
+enum TCollectionTestPluginType
+    {
+    ECollectionTestPluginType = KCollectionTestPluginType,
+    ECollectionTestPluginType2 = KCollectionTestPluginType2,
+    ECollectionTestPluginType3 = KCollectionTestPluginType3
+    };
+
+
+#endif // TESTCOLLECTIONPLUGINTYPE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testcommonpluginuids.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2002 - 2007 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:  define commonly used uids
+*
+*/
+
+#ifndef TESTCOMMONPLUGINUIDS_H
+#define TESTCOMMONPLUGINUIDS_H
+
+#define KCollectionTestPlugin           0xE0000101  // dll uid
+#define KCollectionTestPluginImpId      0xE0000102  // implementation uid
+#define KCollectionTestPluginType       0xE0000103  // refer TCollectionTestPluginType
+#define KCollectionTestPlugin2          0xE0000111  // dll uid
+#define KCollectionTestPluginImpId2     0xE0000112  // implementation uid
+#define KCollectionTestPluginType2      0xE0000113  // refer TCollectionTestPluginType
+#define KCollectionTestPlugin3          0xE0000121  // dll uid
+#define KCollectionTestPluginImpId3     0xE0000122  // implementation uid
+#define KCollectionTestPluginType3      0xE0000123  // refer TCollectionTestPluginType
+
+#define KPlaybackTestVideoPlugin        0xE0000201  // dll uid
+#define KPlaybackTestVideoPluginImpId   0xE0000202  // implementation uid
+#define KPlaybackTestPluginType         0xE0000203  // refer TPlaybackTestPluginType
+#define KPlaybackTestPlugin2            0xE0000211  // dll uid
+#define KPlaybackTestPluginImpId2       0xE0000212  // implementation uid
+#define KPlaybackTestPluginType2        0xE0000213  // refer TPlaybackTestPluginType
+#define KPlaybackTestPlugin3            0xE0000221  // dll uid
+#define KPlaybackTestPluginImpId3       0xE0000222  // implementation uid
+#define KPlaybackTestPluginType3        0xE0000223  // refer TPlaybackTestPluginType
+
+#define KViewTestPlugin                 0xE0000301  // dll uid
+#define KViewTestPluginImpId            0xE0000302  // implementation uid
+#define KViewTestPluginType             0xE0000303 
+
+#define KViewTestPlugin2                0xE0000304  // dll uid
+#define KViewTestPlugin2ImpId           0xE0000305  // implementation uid
+#define KViewTestPluginType2            0xE0000306 
+
+#define KViewTestPlugin3                0xE0000307  // dll uid
+#define KViewTestPlugin3ImpId           0xE0000308  // implementation uid
+#define KViewTestPluginType3            0xE0000309 
+
+#define KViewTestPlugin4                0xE000030A  // dll uid
+#define KViewTestPlugin4ImpId           0xE000030B  // implementation uid
+#define KViewTestPluginType4            0xE000030C 
+#define KViewTestPlugin4BetterMatch     0xE000030D  // dll uid
+#define KViewTestPlugin4BetterMatchImpId        0xE000030E  // implementation uid
+#define KViewTestPlugin4BetterMatchCriteria     0xE000030F
+
+#define KViewTestPlugin5Low             0xE0000311  // dll uid
+#define KViewTestPlugin5LowImpId        0xE0000312  // implementation uid
+#define KViewTestPluginType5            0xE0000313 
+#define KViewTestPlugin5High            0xE0000314  // dll uid
+#define KViewTestPlugin5HighImpId       0xE0000315  // implementation uid
+
+#define KViewTestPlugin6                0xE0000317  // dll uid
+#define KViewTestPlugin6ImpId           0xE0000318  // implementation uid
+#define KViewTestPluginType6            0xE0000319 
+
+
+#define KPlaylistTestPluginM3u              0xE000031A  // dll uid
+#define KPlaylistTestPluginM3uImpId         0xE000031B  // implementation uid
+
+#endif // TESTCOMMONPLUGINUIDS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testplaybackplugintype.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2002 - 2007 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:  define playback plugin type enum
+*
+*/
+
+#ifndef TESTPLAYBACKPLUGINTYPE_H
+#define TESTPLAYBACKPLUGINTYPE_H
+
+#include "testcommonpluginuids.h"
+
+// Collection Plugin Test Types.
+//
+enum TPlaybackTestPluginType
+    {
+    EPlaybackTestPluginType = KPlaybackTestPluginType,
+    EPlaybackTestPluginType2 = KPlaybackTestPluginType2,
+    EPlaybackTestPluginType3 = KPlaybackTestPluginType3
+    };
+
+
+#endif // TESTPLAYBACKPLUGINTYPE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testviewplugintype.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2002 - 2007 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:  define view plugin type enum
+*
+*/
+
+#ifndef TESTVIEWPLUGINTYPE_H
+#define TESTVIEWPLUGINTYPE_H
+
+#include "testcommonpluginuids.h"
+
+// View Plugin Test Types.
+//
+enum TViewTestPluginType
+    {
+    EViewPluginTypeTest = KViewPluginTypeTest,
+    EViewPluginTypeTest2 = KViewPluginTypeTest2,
+    EViewPluginTypeTest3 = KViewPluginTypeTest3,
+    EViewPluginTypeTest4 = KViewPluginTypeTest4,
+    EViewPluginTypeTest5 = KViewPluginTypeTest5,
+    EViewPluginTypeTest6 = KViewPluginTypeTest6
+    };
+
+enum TViewTestPluginMatchCriteria
+    {
+    EViewPluginMatchCriteria4 = KViewTestPlugin4BetterMatchCriteria
+    };
+
+#endif // TESTVIEWPLUGINTYPE_H
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -25,6 +25,9 @@
 PRJ_TESTEXPORTS
 // NOTE: If using ARS requirements all export operations should be done under this.
 // 'abld test export'
+../../conf/mpxplaybackutilitytest.cfg          /epoc32/winscw/c/testframework/mpxplaybackutilitytest.cfg
+../../init/Testframework.ini           /epoc32/winscw/c/testframework/testframework.ini
+
 
 PRJ_EXPORTS
 // Specify the source file followed by its destination here
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -36,7 +36,9 @@
 
 MW_LAYER_SYSTEMINCLUDE
 
-USERINCLUDE     ../inc 
+USERINCLUDE     ../inc
+
+USERINCLUDE     ../../inc 
 
 SOURCEPATH      ../src
 
@@ -54,7 +56,9 @@
 LIBRARY         stiftestengine.lib 
 LIBRARY         mpxplaybackutility.lib 
 LIBRARY         mpxcommon.lib
-LIBRARY         mpxcollectionutility.lib
+LIBRARY		mpxcollectionutility.lib
+LIBRARY		bafl.lib
+
 
 LANG            SC
 
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg	Tue Aug 31 15:41:40 2010 +0300
@@ -34,14 +34,8 @@
 
 ; Install files
 "\epoc32\release\armv5\udeb\mpxplaybackutilitytest.dll" - "!:\Sys\Bin\mpxplaybackutilitytest.dll"
+"\epoc32\release\armv5\udeb\testvideoplaybackplugin.dll" - "!:\Sys\Bin\testvideoplaybackplugin.dll"
+"\epoc32\data\z\resource\plugins\testvideoplaybackplugin.rsc" - "!:\resource\plugins\testvideoplaybackplugin.rsc"
+
 "..\..\init\TestFramework.ini" - "c:\testframework\TestFramework.ini" 
 "..\..\conf\mpxplaybackutilitytest.cfg" - "c:\testframework\mpxplaybackutilitytest.cfg"
-
-"..\..\data\mmc\Battle_160x100_30kbps.rm"   -   "f:\testing\data\Battle_160x100_30kbps.rm"
-"..\..\data\mmc\20k_H263_WB_176x144_15fps.3gp"   -   "f:\testing\data\20k_H263_WB_176x144_15fps.3gp"
-"..\..\data\mmc\30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4"   -   "f:\testing\data\30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4"
-"..\..\data\mmc\80k_H264_AAC16M22_176x144_15fps.3gp"   -   "f:\testing\data\80k_H264_AAC16M22_176x144_15fps.3gp"
-"..\..\data\mmc\DivX_MP3_256x112_30fps_300Kbps.avi"   -   "f:\testing\data\DivX_MP3_256x112_30fps_300Kbps.avi"
-"..\..\data\mmc\honey_im_home_horror_ad.avi"   -   "f:\testing\data\honey_im_home_horror_ad.avi"
-"..\..\data\mmc\MPEG4_VBR_176x144_15fps.3gp"   -   "f:\testing\data\MPEG4_VBR_176x144_15fps.3gp"
-"..\..\data\mmc\XVID_176x144_15fps_261Kbps.avi"   -   "f:\testing\data\XVID_176x144_15fps_261Kbps.avi"
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h	Tue Aug 31 15:41:40 2010 +0300
@@ -40,14 +40,14 @@
 _LIT( KmpxplaybackutilitytestLogFile, "mpxplaybackutilitytest.txt" ); 
 _LIT( KmpxplaybackutilitytestLogFileWithTitle, "mpxplaybackutilitytest_[%S].txt" );
 // data file
-_LIT( KmpxplaybackutilityTestFilePath, "C:\\testing\\data\\" );
+_LIT( KmpxplaybackutilityTestFilePath, "C:\\" );
 #else
-_LIT( KmpxplaybackutilitytestLogPath, "f:\\logs\\testframework\\mpxplaybackutilitytest\\" ); 
+_LIT( KmpxplaybackutilitytestLogPath, "c:\\logs\\testframework\\mpxplaybackutilitytest\\" ); 
 // Log file
 _LIT( KmpxplaybackutilitytestLogFile, "mpxplaybackutilitytest.txt" ); 
 _LIT( KmpxplaybackutilitytestLogFileWithTitle, "mpxplaybackutilitytest_[%S].txt" );
 // data file
-_LIT( KmpxplaybackutilityTestFilePath, "f:\\testing\\data\\" );
+_LIT( KmpxplaybackutilityTestFilePath, "c:\\" );
 #endif
 
 // FUNCTION PROTOTYPES
@@ -204,6 +204,17 @@
     TInt MMPXPlaybackUtilityAddObserverL(CStifItemParser& /*aItem*/);
     TInt MMPXPlaybackUtilityRemoveObserverL(CStifItemParser& /*aItem*/);
     TInt MMPXPlaybackUtilityPlayerManagerSelectPlayerL(CStifItemParser& /*aItem*/);
+    
+    TInt MMPXPlaybackUtilityCommandPlayL ( CStifItemParser & /*aItem*/ );
+    TInt MMPXPlaybackUtilityCommandStopL ( CStifItemParser & /*aItem*/ );
+    TInt MMPXPlaybackUtilityCommandPauseL ( CStifItemParser & /*aItem*/);
+    TInt MMPXPlaybackUtilityCommandPlayPauseL ( CStifItemParser & /*Item*/);
+    TInt MMPXPlaybackUtilityCommandPlayCompleteL ( CStifItemParser & /*Item*/);
+    TInt MMPXPlaybackUtilityCommandSeekForwardL ( CStifItemParser & /*Item*/);
+    TInt MMPXPlaybackUtilityCommandSeekBackwardL ( CStifItemParser & /*Item*/);
+    TInt MMPXPlaybackUtilityCommandCloseL ( CStifItemParser & /*Item*/);
+    TInt MMPXPlaybackUtilitySetL(CStifItemParser& /*aItem*/ );
+    
     TInt EndTest(CStifItemParser& /*aItem*/);
    
     /**
@@ -219,6 +230,8 @@
     RFs iFs;
     TInt iCallbackError;
     RFile iFile;
+    TFileName iFileName;
+
 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     RFile64 iFile64;
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytestdefs.h	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytestdefs.h	Tue Aug 31 15:41:40 2010 +0300
@@ -21,8 +21,26 @@
 const TInt KGeneralPlaybackMsgOffset = 0;
 const TInt KVideoPlaybackMsgOffset = 100;
 const TInt KStifPlaybackMsgOffset = 200;
+
+
+
+
 const TInt KMPXMessageStif = 0x20011397;
 
+//
+//  TInt for Command Id
+//
+const TMPXAttributeData KMPXStifPlaybackCommand = { KMPXMessageStif, 0x01 };
+
+
+enum TMPXStifCommand
+{
+    EPbStifPlayComplete,
+    EPbStifSeekForward,
+    EPbStifSeekBackward
+
+};
+
 
 #endif      // MPXPLAYBACKUTILITYTESTDEFS_H
 
--- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -18,6 +18,10 @@
 
 
 // [INCLUDE FILES] - do not remove
+#include <sysutil.h>
+#include <s32file.h>
+#include <bautils.h> 
+
 #include <e32svr.h>
 #include <StifParser.h>
 #include <Stiftestinterface.h>
@@ -32,6 +36,9 @@
 #include <mpxcollectionplaylist.h>
 #include "mpxplaybackutilitytest.h"
 #include "mpxplaybackutilitytestdefs.h"
+#include "testcommonpluginuids.h"
+
+const TUid KPbTestVideoPlugin = {KPlaybackTestVideoPluginImpId};
 
 // ============================ MEMBER FUNCTIONS ===============================
 // ---------------------------------------------------------------------------
@@ -40,52 +47,54 @@
 // ---------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError )");
+    iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage: Error %d"), aError);
+    if ( !aError )
     {
-    iLog->Log(_L("Cmpxharvestertest::HandlePlaybackMessage: Error %d"), aError);
-    if ( !aError )
-        {
         TMPXMessageId id( *(aMessage->Value<TMPXMessageId>(KMPXMessageGeneralId)) );
         TInt event( *aMessage->Value<TInt>( KMPXMessageGeneralEvent ) );
         TInt type( *aMessage->Value<TInt>( KMPXMessageGeneralType ) );
         TInt data( *aMessage->Value<TInt>( KMPXMessageGeneralData ) );
 
         if ( KMPXMessageGeneral == id )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() General event = %d type = %d  value = %d"),
                          event, type, data );
             RemoveExpectedEventL( KGeneralPlaybackMsgOffset + event, type, data );
-            }
+        }
         else if ( KMPXMediaIdVideoPlayback == id )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() Video event = %d type = %d  value = %d"),
                          event, type, data );
             RemoveExpectedEventL( KVideoPlaybackMsgOffset + event, type, data );
-            }
+        }
         else if ( KMPXMessageStif )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() STIF event = %d type = %d  value = %d"),
                          event, type, data );
             RemoveExpectedEventL( KStifPlaybackMsgOffset + event, type, data );
-            }
-        }
-    else
-        {
-        if ( !iCallbackError )
-            {
-            iCallbackError = aError;
-            }
         }
     }
+    else
+    {
+        if ( !iCallbackError )
+        {
+            iCallbackError = aError;
+        }
+    }
+}
 
 // ---------------------------------------------------------------------------
 //  Handle playback property.
 // ---------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError )
-    {
-    iLog->Log(_L("Cmpxharvestertest::HandlePropertyL: Property %d, Value %d, Error %d"), 
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError )");
+    iLog->Log(_L("Cmpxplaybackutilitytest::HandlePropertyL: Property %d, Value %d, Error %d"), 
             aProperty, aValue, aError);   
-    }
+}
 
 // ---------------------------------------------------------------------------
 //  Method is called continously until aComplete=ETrue, signifying that 
@@ -97,18 +106,20 @@
                                                      const MDesCArray* aSubPlayers,
                                                      TBool aComplete,
                                                      TInt aError )
-    {
-    iLog->Log(_L("Cmpxharvestertest::HandleSubPlayerNamesL: Complete %d, Error %d"), aComplete, aError);   
-    }
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::HandleSubPlayerNamesL( TUid aPlayer, const MDesCArray* aSubPlayers, TBool aComplete, TInt aError)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::HandleSubPlayerNamesL: Complete %d, Error %d"), aComplete, aError);   
+}
 
 // ---------------------------------------------------------------------------
 //  Call back of media request.
 // ---------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::HandleMediaL( const CMPXMedia& aProperties, TInt aError )
-    {
-    iLog->Log(_L("Cmpxharvestertest::HandleMediaL: Error %d"), aError);   
-    }
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::HandleMediaL( const CMPXMedia& aProperties, TInt aError )");
+    iLog->Log(_L("Cmpxplaybackutilitytest::HandleMediaL: Error %d"), aError);   
+}
 
 // ---------------------------------------------------------------------------
 //  Handle completion of a asynchronous command.
@@ -116,9 +127,10 @@
 // ---------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::HandlePlaybackCommandComplete( CMPXCommand* aCommandResult, TInt aError )
-    {
-    iLog->Log(_L("Cmpxharvestertest::HandlePlaybackCommandComplete: Error %d"), aError);   
-    }
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::HandlePlaybackCommandComplete( CMPXCommand* aCommandResult, TInt aError )");
+    iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackCommandComplete: Error %d"), aError);   
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::Delete
@@ -127,15 +139,26 @@
 // -----------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::Delete()
-    {
-    iMPXPlaybackUtility->Close();
+{
+    TInt delerr = KErrNone;
+    
+    iMPXPlaybackUtility->Close();    
 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     iFile64.Close();
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     iFile.Close();
+    
+    if ( BaflUtils::FileExists( iFs, iFileName ) )
+    {
+        User::After( 1000000 * 10 );
+        delerr = BaflUtils::DeleteFile(iFs,iFileName);
+        iLog->Log(_L("deleting tempfile delerr=%d"),delerr);       
+    }    
     iFs.Close();
     iExpectedEventArray->ResetAndDestroy();
-    }
+      
+}
+
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::CreateL
@@ -144,21 +167,22 @@
 // -----------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::CreateL()
-    {
+{
     iFs.Connect();
     iFs.ShareProtected();
 
     iExpectedEventArray = new (ELeave) CArrayPtrFlat<TMpxPlaybackTestEvent>( 1 );
     iCallbackError = KErrNone;
     iMPXPlaybackUtility = NULL;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::AddExpectedEventL
 // -----------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::AddExpectedEventL( TInt aEvent, TInt aType, TInt aData )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::AddExpectedEventL( TInt aEvent, TInt aType, TInt aData )");
     iLog->Log(_L("Cmpxplaybackutilitytest::AddExpectedEventL() event = %d type = %d  value = %d"),
                  aEvent, aType, aData );
     
@@ -167,24 +191,25 @@
     event->iType = aType;
     event->iData = aData;
     iExpectedEventArray->AppendL( event );
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::RemoveExpectedEventL
 // -----------------------------------------------------------------------------
 //
 void Cmpxplaybackutilitytest::RemoveExpectedEventL( TInt aEvent, TInt aType, TInt aData )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::RemoveExpectedEventL( TInt aEvent, TInt aType, TInt aData )");
     iLog->Log(_L("Cmpxplaybackutilitytest::RemoveExpectedEventL() event = %d type = %d  value = %d"),
                  aEvent, aType, aData );
     
     if ( (iExpectedEventArray->Count() > 0) &&
-         ((*iExpectedEventArray)[0]->iEvent == aEvent) )
-        {
+         ((*iExpectedEventArray)[0]->iEvent == aEvent) && ((*iExpectedEventArray)[0]->iType == aType))
+    {
         iLog->Log(_L("Cmpxplaybackutilitytest::RemoveExpectedEventL() event = %d removed."), aEvent);
         iExpectedEventArray->Delete( 0 );
-        }
     }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::RunMethodL
@@ -192,9 +217,9 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::RunMethodL( CStifItemParser& aItem ) 
-    {
+{
     static TStifFunctionInfo const KFunctions[] =
-        {  
+    {  
         // Copy this line for every implemented function.
         // First string is the function name used in TestScripter script file.
         // Second is the actual implementation member function. 
@@ -216,14 +241,25 @@
         ENTRY( "MMPXPlaybackUtilityAddObserverL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL ),
         ENTRY( "MMPXPlaybackUtilityRemoveObserverL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL ),
         ENTRY( "MMPXPlaybackUtilityPlayerManagerSelectPlayerL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL ),
+        
+        ENTRY( "MMPXPlaybackUtilityCommandPlayL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayL ),
+        ENTRY( "MMPXPlaybackUtilityCommandStopL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandStopL ),
+        ENTRY( "MMPXPlaybackUtilityCommandPauseL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPauseL ),
+        ENTRY( "MMPXPlaybackUtilityCommandPlayPauseL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayPauseL ),
+        ENTRY( "MMPXPlaybackUtilityCommandPlayCompleteL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayCompleteL ),
+        ENTRY( "MMPXPlaybackUtilityCommandSeekForwardL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekForwardL ),
+        ENTRY( "MMPXPlaybackUtilityCommandSeekBackwardL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekBackwardL ),
+        ENTRY( "MMPXPlaybackUtilityCommandCloseL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandCloseL ),
+        ENTRY( "MMPXPlaybackUtilitySetL", Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL),
+        
         ENTRY( "EndTest", Cmpxplaybackutilitytest::EndTest ),
-        };
+    };
 
     const TInt count = sizeof( KFunctions ) / 
                         sizeof( TStifFunctionInfo );
    
     return RunInternalL( KFunctions, count, aItem );
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL
@@ -232,28 +268,29 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL( CStifItemParser& aItem )
-	{
-	iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL"));
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL( CStifItemParser& aItem )");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL"));
 	TInt err = KErrNone;
     TInt mode;
    
     if ( aItem.GetNextInt(mode) != KErrNone )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityNewL - Missing playback mode."));
         err = KErrArgument;
         return err;
-        }
+    }
 
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewL: mode %d"), mode);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL: mode %d"), mode);
 	TRAP( err,iMPXPlaybackUtility = MMPXPlaybackUtility::NewL(TUid::Uid(mode), this ));
     
 	if (err!= KErrNone)
-		{
-		iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewL: error %d"), err);
-		}
+    {
+		iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL: error %d"), err);
+    }
 	
 	return err;
-	}
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL
@@ -262,35 +299,36 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL"));
     TInt err = KErrNone;
     TInt mode;
     TInt category;
     if ( aItem.GetNextInt(category) != KErrNone )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing category."));
         err = KErrArgument;
         return err;
-        }
+    }
 
     if ( aItem.GetNextInt(mode) != KErrNone )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing playback mode."));
         err = KErrArgument;
         return err;
-        }
+    }
 
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: category %d"), category);
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: mode %d"), mode);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL: category %d"), category);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL: mode %d"), mode);
     TRAP( err,iMPXPlaybackUtility = MMPXPlaybackUtility::NewL((TMPXCategory)category, TUid::Uid(mode), this ));
     
     if (err!= KErrNone)
-        {
-        iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: error %d"), err);
-        }
+    {
+        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL: error %d"), err);
+    }
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL
@@ -299,26 +337,27 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL( CStifItemParser& aItem )
-	{
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL"));
 	TInt err = KErrNone;
 	TInt mode = 0;
 	
 	aItem.GetNextInt(mode);
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityL: mode %d"), mode);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL: mode %d"), mode);
 	if ( mode )
-	    {
+    {
 	    TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL(TUid::Uid(mode)));
-	    }
+    }
 	else
-	    {
+    {
         TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL());
-	    }
+    }
     
-	iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityL: error %d"), err);
+	iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL: error %d"), err);
 	
 	return err;
-	}
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL
@@ -327,35 +366,36 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL"));
     TInt err = KErrNone;
     TInt category;
     TInt mode = 0;
     
     if ( aItem.GetNextInt(category) != KErrNone )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing category."));
         err = KErrArgument;
         return err;
-        }
+    }
 
     aItem.GetNextInt(mode);
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: category %d"), category);
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: mode %d"), mode);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL: category %d"), category);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL: mode %d"), mode);
     if ( mode )
-        {
+    {
         TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL((TMPXCategory)category, TUid::Uid(mode)));
-        }
+    }
     else
-        {
+    {
         TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL((TMPXCategory)category));
-        }
+    }
     
-    iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: error %d"), err);
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL: error %d"), err);
     
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL
@@ -364,7 +404,8 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL( CStifItemParser& /*aItem*/ )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL( CStifItemParser& )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL"));
     TInt err = KErrNone;
     CMPXCollectionPlaylist* playlist = CMPXCollectionPlaylist::NewL();
@@ -373,7 +414,7 @@
     CleanupStack::PopAndDestroy(playlist);
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL - error=%d"),err);
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL
@@ -382,35 +423,60 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL"));
-    TInt err = KErrNone;
+    TInt err = KErrNone; 
     TPtrC string;
-   
+    
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();        
+    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
-        TBuf<120> uri;
+    {
+        //TBuf<120> uri;
+        TFileName uri;
         uri.Append(KmpxplaybackutilityTestFilePath);
         uri.Append(string);
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL - uri = %S."), &uri);
+        iFileName = uri;
+
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile.Create( iFs, uri, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile.Close();
+        }
+                                     
         TRAP(err,iMPXPlaybackUtility->InitL(uri));
         
         if ( !err )
-            {
+        {
             TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
             AddExpectedEventL(event, 0, 0);
+            
             event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
             AddExpectedEventL(event, 0, 0);
+
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStateInitialised, 0);
+            
+            if ( player->UidL() == KPbTestVideoPlugin )
+            {
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateBuffering, 0);
             }
-        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL - error=%d"),err);
         }
+        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL - error=%d"),err);                  
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInitWithUriL - Missing file name."));
         err = KErrArgument;
-        }
+    }
+    
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL
@@ -419,43 +485,68 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL"));
     TInt err = KErrNone;
     TPtrC string;
+    
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();
    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
+    {
         TBuf<120> KFrom;
         KFrom.Append(KmpxplaybackutilityTestFilePath);
         KFrom.Append(string);
+        iFileName = KFrom;
+        
         if ( iFile.SubSessionHandle() )
-            {
+        {
             iFile.Close();
-            }
+        }
+        
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile.Create( iFs, KFrom, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile.Close();
+        }
+        
         err = iFile.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters);
+        
         if ( err == KErrNone )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL - Open passed."));
             TRAP(err,iMPXPlaybackUtility->InitL(iFile));
             
             if ( !err )
-                {
+            {
                 TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
                 AddExpectedEventL(event, 0, 0);
+                
                 event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
                 AddExpectedEventL(event, 0, 0);
+                
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateInitialised, 0);
+                
+                if ( player->UidL() == KPbTestVideoPlugin )
+                {
+                    event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                    AddExpectedEventL(event, EPbStateBuffering, 0);
                 }
             }
+        }
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL - error=%d"),err);
-        }
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInitWithRFileL - Missing file name."));
         err = KErrArgument;
-        }
+    }
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL
@@ -464,36 +555,60 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL"));
     TInt err = KErrNone;
     TPtrC string;
     TInt accessPoint = 1;
    
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();
+    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
+    {
         TBuf<120> uri;
         uri.Append(KmpxplaybackutilityTestFilePath);
         uri.Append(string);
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL - uri = %S."), &uri);
+        iFileName = uri;
+
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile.Create( iFs, uri, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile.Close();
+        }
+        
         TRAP(err,iMPXPlaybackUtility->InitStreamingL(uri, NULL, accessPoint));
         
         if ( !err )
-            {
+        {
             TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
             AddExpectedEventL(event, 0, 0);
+            
             event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
             AddExpectedEventL(event, 0, 0);
+            
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStateInitialised, 0);
+            
+            if ( player->UidL() == KPbTestVideoPlugin )
+            {
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateBuffering, 0);
             }
-        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL - error=%d"),err);
+                        
         }
+        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL - error=%d"),err);
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInitStreamingWithUriL - Missing file name."));
         err = KErrArgument;
-        }
+    }
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL
@@ -502,44 +617,69 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL"));
     TInt err = KErrNone;
     TPtrC string;
     TInt accessPoint = 1;
     
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();
+    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
+    {
         TBuf<120> KFrom;
         KFrom.Append(KmpxplaybackutilityTestFilePath);
         KFrom.Append(string);
+        iFileName = KFrom;
+        
         if ( iFile.SubSessionHandle() )
-            {
+        {
             iFile.Close();
-            }
+        }
+        
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile.Create( iFs, KFrom, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile.Close();
+        }
+        
         err = iFile.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters);
         if ( err == KErrNone )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL - Open passed."));
             TRAP(err,iMPXPlaybackUtility->InitStreamingL(iFile, accessPoint));
 
             if ( !err )
-                {
+            {
                 TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
                 AddExpectedEventL(event, 0, 0);
+                
                 event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
                 AddExpectedEventL(event, 0, 0);
+
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateInitialised, 0);
+            
+                if ( player->UidL() == KPbTestVideoPlugin )
+                {
+                    event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                    AddExpectedEventL(event, EPbStateBuffering, 0);
                 }
+                                
             }
+        }
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL - error=%d"),err);
-        }
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInitStreamingWithRFileL - Missing file name."));
         err = KErrArgument;
-        }
+    }
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L
@@ -548,7 +688,8 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L"));
     TInt err = KErrNone;
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
@@ -557,39 +698,64 @@
 #else // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     TPtrC string;
    
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();
+    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
+    {
         TBuf<120> KFrom;
         KFrom.Append(KmpxplaybackutilityTestFilePath);
         KFrom.Append(string);
+        iFileName = KFrom;
+        
         if ( iFile64.SubSessionHandle() )
-            {
+        {
             iFile64.Close();
-            }
+        }
+        
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile64.Create( iFs, KFrom, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile64.Close();
+        }
+        
         err = iFile64.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters);
+        
         if ( err == KErrNone )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L - Open passed."));
             TRAP(err,iMPXPlaybackUtility->Init64L(iFile64));
             
             if ( !err )
-                {
+            {
                 TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
                 AddExpectedEventL(event, 0, 0);
+                
                 event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
                 AddExpectedEventL(event, 0, 0);
+
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateInitialised, 0);
+
+                if ( player->UidL() == KPbTestVideoPlugin )
+                {
+                    event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                    AddExpectedEventL(event, EPbStateBuffering, 0);
                 }
+                                
             }
+        }
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L - error=%d"),err);
-        }
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInit64L - Missing file name."));
         err = KErrArgument;
-        }
+    }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L
@@ -598,7 +764,8 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L( CStifItemParser& aItem )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L( CStifItemParser& aItem )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L"));
     TInt err = KErrNone;
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
@@ -608,39 +775,63 @@
     TPtrC string;
     TInt accessPoint = 1;
     
+    MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
+    MMPXPlayer* player = manager.CurrentPlayer();
+    
     if( aItem.GetNextString( string ) == KErrNone )
-        {
+    {
         TBuf<120> KFrom;
         KFrom.Append(KmpxplaybackutilityTestFilePath);
         KFrom.Append(string);
+        iFileName = KFrom;
+        
         if ( iFile64.SubSessionHandle() )
-            {
+        {
             iFile64.Close();
-            }
+        }
+        
+        if ( ! BaflUtils::FileExists( iFs, iFileName ) )
+        {             
+            err = iFile64.Create( iFs, KFrom, EFileShareAny );
+            iLog->Log(_L("creating tempfile error=%d"),err);
+            iFile64.Close();
+        }
+        
         err = iFile64.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters);
+        
         if ( err == KErrNone )
-            {
+        {
             iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L - Open passed."));
             TRAP(err,iMPXPlaybackUtility->InitStreaming64L(iFile64, accessPoint));
 
             if ( !err )
-                {
+            {
                 TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged;
                 AddExpectedEventL(event, 0, 0);
+                
                 event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete;
                 AddExpectedEventL(event, 0, 0);
+                
+                event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                AddExpectedEventL(event, EPbStateInitialised, 0);
+                
+                if ( player->UidL() == KPbTestVideoPlugin )
+                {
+                    event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+                    AddExpectedEventL(event, EPbStateBuffering, 0);                                
                 }
             }
+        }
         iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L - error=%d"),err);
-        }
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityInitStreaming64L - Missing file name."));
         err = KErrArgument;
-        }
+    }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L
@@ -649,7 +840,8 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L( CStifItemParser& /*aItem*/ )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L( CStifItemParser& )");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L"));
     TInt err = KErrNone;
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
@@ -659,13 +851,13 @@
     RFile64* file64Ptr=NULL;
     TRAP(err, file64Ptr=iMPXPlaybackUtility->Source()->File64L());
     if ( !file64Ptr->SubSessionHandle() )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityFile64L - file64 = NULL."));
-        }
+    }
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L - error=%d"),err);
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL
@@ -674,13 +866,14 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL( CStifItemParser& /*aItem*/ )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL( CStifItemParser&)");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL"));
     TInt err = KErrNone;
     TRAP(err, iMPXPlaybackUtility->AddObserverL(*this));
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL - error=%d"),err);
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL
@@ -689,13 +882,14 @@
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL( CStifItemParser& /*aItem*/ )
-    {
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL( CStifItemParser&)");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL"));
     TInt err = KErrNone;
     TRAP(err, iMPXPlaybackUtility->RemoveObserverL(*this));
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL - error=%d"),err);
     return err;
-    }
+}
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL
@@ -703,51 +897,499 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL(CStifItemParser& aItem)
-    {
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL( CStifItemParser& aItem )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL(CStifItemParser& aItem)");
     iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL"));
     TInt uidInt;
     TInt err = KErrNone;
     
     // read in UID
     if ( aItem.GetNextInt(uidInt) != KErrNone )
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - Missing UID."));
         err = KErrArgument;
         return err;
-        }
+    }
 
     iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - UID = 0x%x."), uidInt);
     if ( iMPXPlaybackUtility )
-        {
+    {
         MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager();
-        TRAP( err, manager.SelectPlayerL( TUid::Uid(uidInt) ) );
+        
+        if (uidInt == 0x10282551)
+        {
+            iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL video uid"));    
+            MPX_DEBUG2(("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - uidInt = %d."), uidInt);
+            TRAP( err, manager.SelectPlayerL( KPbTestVideoPlugin ) );
+        }
+        else 
+        {
+            iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL NOT video uid"));    
+            MPX_DEBUG1(("MMPXPlaybackUtilityPlayerManagerSelectPlayerL NOT video uid"));
+            TRAP( err, manager.SelectPlayerL( TUid::Uid(uidInt) ) );
+        }
         iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - SelectPlayer err = %d."), err);
-        }
+    }
     else
-        {
+    {
         iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - MPX Playback Utility not created."));
         err = KErrGeneral;
+    }
+    return err;
+}
+
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayL")); 
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralType, EPbCmdPlay);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+    
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandPlayL err from commandl: , err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandPlayL err from commandl: , err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandPlayL no error from commandl:"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandPlayL no err from commandl:"));   
+     
+        TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+        
+        if ( s != EPbStatePlaying )
+        {
+            TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;        
+            AddExpectedEventL(event, EPbStatePlaying, 0);
         }
+    }
+        
+    CleanupStack::PopAndDestroy (cmd);
+    
     return err;
+}
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandStopL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandStopL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandStopL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandStopL")); 
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralType, EPbCmdStop);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+    
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandStopL err from commandl: , err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandStopL err from commandl: , err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandStopL no error from commandl:"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandStopL no err from commandl:"));   
+        
+        TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+        
+        if ( s != EPbStateStopped )
+        {
+            TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStateStopped, 0);
+        }
+                
     }
+        
+    CleanupStack::PopAndDestroy (cmd);
+    
+    return err;          
+}
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPauseL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPauseL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPauseL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPauseL")); 
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralType, EPbCmdPause);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+    
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandPauseL err from commandl: , err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandPauseL err from commandl: , err = %d."), err);
+    
+    if ( !err )
+    {    
+        iLog->Log(_L("MMPXPlaybackUtilityCommandPauseL no error from commandl:"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandPauseL no err from commandl:"));   
+        
+        TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+        
+        if ( s == EPbStatePlaying )
+        {
+            TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePaused, 0);
+        }
+                
+    }
+        
+    CleanupStack::PopAndDestroy (cmd);    
+    
+    return err;               
+}
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayPauseL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayPauseL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayPauseL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayPauseL")); 
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralType, EPbCmdPlayPause);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+    
+    TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandPlayPauseL err from commandl: err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandPlayPauseL err from commandl: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandPlayPauseL no error from commandl"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandPlayPauseL no error from commandl"));
+        
+        
+        
+        if (s == EPbStatePlaying)
+        {
+            iLog->Log(_L("MMPXPlaybackUtilityCommandPlayPauseL EPbStatePlaying:"));
+            MPX_DEBUG1(("MMPXPlaybackUtilityCommandPlayPauseL EPbStatePlaying:")); 
+            TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePaused, 0);
+        }
+        else
+        {
+            iLog->Log(_L("MMPXPlaybackUtilityCommandPlayPauseL State is not playing:"));
+            MPX_DEBUG1(("MMPXPlaybackUtilityCommandPlayPauseL State is not playing:")); 
+            TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePlaying, 0);
+        }
+    }
+        
+    CleanupStack::PopAndDestroy (cmd);
+    
+    return err;               
+}
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayCompleteL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayCompleteL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayCompleteL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandPlayCompleteL")); 
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXMessageStif);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+    
+    cmd->SetTObjectValueL<TMPXStifCommand>( KMPXStifPlaybackCommand,
+                                             EPbStifPlayComplete );
+        
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));    
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandPlayCompleteL error from commandl: err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandPlayCompleteL error from commandl: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandPlayCompleteL no error from commandl"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandPlayCompleteL no error from commandl"));
+        
+        TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPropertyChanged;
+        AddExpectedEventL(event, EPbPropertyPosition, 0);
+        
+        event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+        AddExpectedEventL(event, EPbStateStopped, 0);            
+    }
+    
+    CleanupStack::PopAndDestroy (cmd);
+    
+    return err;
+}
+
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekForwardL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekForwardL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekForwardL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekForwardL")); 
+    
+    TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXMessageStif);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TMPXStifCommand>( KMPXStifPlaybackCommand,
+                                             EPbStifSeekForward );
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, s);
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+
+    iLog->Log(_L("MMPXPlaybackUtilityCommandSeekForwardL error from commandl: err = %d"), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandSeekForwardL error from commandl: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandSeekForwardL no error from commandl"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandSeekForwardL no error from commandl"));
+        
+        TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+        AddExpectedEventL(event, EPbStatePluginSeeking, 0);
+        
+        event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPropertyChanged;
+        AddExpectedEventL(event, EPbPropertyPosition, 0);
+        
+        if ( s == EPbStatePlaying )
+        {
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePlaying, 0);
+        }
+        else if ( s == EPbStatePaused )
+        {
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePaused, 0);    
+        }
+    }
+    CleanupStack::PopAndDestroy (cmd);
+    
+    return err;
+}
+
+
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekBackwardL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekBackwardL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekBackwardL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandSeekBackwardL")); 
+    
+    TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXMessageStif);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TMPXStifCommand>( KMPXStifPlaybackCommand,
+                                             EPbStifSeekBackward );
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, s);
+    
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+
+    iLog->Log(_L("MMPXPlaybackUtilityCommandSeekBackwardL error from commandl: err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandSeekBackwardL error from commandl: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandSeekForwardL no error from commandl"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandSeekForwardL no error from commandl"));
+        
+        TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+        AddExpectedEventL(event, EPbStatePluginSeeking, 0);
+        
+        event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPropertyChanged;
+        AddExpectedEventL(event, EPbPropertyPosition, 0);
+        
+        if ( s == EPbStatePlaying )
+        {
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePlaying, 0);
+        }
+        else if ( s == EPbStatePaused )
+        {
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStatePaused, 0);    
+        }        
+    }
+    
+    CleanupStack::PopAndDestroy (cmd);
+       
+    return err;
+}
+
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandCloseL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandCloseL( CStifItemParser& /*aItem*/ )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandCloseL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityCommandCloseL")); 
+    
+    TMPXPlaybackState s = iMPXPlaybackUtility->StateL();
+    
+    //create command
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+    
+    cmd->SetTObjectValueL<TInt>(KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral);
+    cmd->SetTObjectValueL<TBool>(KMPXCommandGeneralDoSync, ETrue);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralType, EPbCmdClose);
+    cmd->SetTObjectValueL<TInt>(KMPXCommandPlaybackGeneralData, 0);
+        
+    TRAPD(err,iMPXPlaybackUtility->CommandL( *cmd ));
+    
+    iLog->Log(_L("MMPXPlaybackUtilityCommandCloseL err from commandl: err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilityCommandCloseL err from commandl: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilityCommandCloseL no error from commandl:"));
+        MPX_DEBUG1(("MMPXPlaybackUtilityCommandCloseL no err from commandl:")); 
+        
+        TInt event;
+        
+        if ( s != EPbStateStopped )
+        {
+            event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EStateChanged;
+            AddExpectedEventL(event, EPbStateStopped, 0);
+        }                    
+    }
+        
+    CleanupStack::PopAndDestroy (cmd);
+    
+    return err;                
+}
+
+
+// -----------------------------------------------------------------------------
+// Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL
+// -----------------------------------------------------------------------------
+//
+TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL( CStifItemParser& aItem )
+{
+    MPX_FUNC_EX("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL(CStifItemParser&)");
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL")); 
+    
+    TInt err = KErrNone;
+    TInt property;
+    TInt value;
+    
+
+    if( aItem.GetNextInt( property ) != KErrNone )
+    {
+        MPX_DEBUG1(("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL missing property " ));
+        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL missing property " ));
+        err = KErrArgument;
+        return err;
+    }
+
+    if ( aItem.GetNextInt( value ) != KErrNone)
+    {
+        MPX_DEBUG1(("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL missing value " ));
+        iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL missing value " ));
+        err = KErrArgument;
+        return err;
+    }
+
+    MPX_DEBUG3(("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL property = %d, value = %d"), property, value );
+    iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilitySetL property = %d, value %d") , property, value );
+
+    TRAP(err, iMPXPlaybackUtility->SetL((TMPXPlaybackProperty)property, value ));    
+    
+    iLog->Log(_L("MMPXPlaybackUtilitySetL err from SetL: err = %d."), err);
+    MPX_DEBUG2(("MMPXPlaybackUtilitySetL err from SetL: err = %d."), err);
+    
+    if ( !err )
+    {
+        iLog->Log(_L("MMPXPlaybackUtilitySetL no error from SetL"));
+        MPX_DEBUG1(("MMPXPlaybackUtilitySetL no err from SetL")); 
+        
+        TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPropertyChanged;
+        AddExpectedEventL(event, property, value);
+    }
+    
+    return err;                
+}
+
 
 // -----------------------------------------------------------------------------
 // Cmpxplaybackutilitytest::EndTest
 // -----------------------------------------------------------------------------
 //
 TInt Cmpxplaybackutilitytest::EndTest( CStifItemParser& /*aItem*/ )
-    {
+{
     iLog->Log(_L("Cmpxplaybackutilitytest::EndTest"));
     TInt err = iCallbackError;
     
     // check if event queue is empty
     if ( !err && (iExpectedEventArray->Count() > 0 ) ) 
-        {
+    {
         iLog->Log(_L("Cmpxplaybackutilitytest::EndTest error = KErrTimedOut"));
         err = KErrTimedOut;
-        }
+    }
+    
     return err;
-    }
+}
 
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/data/e0000201.rss	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Resource file
+*
+*/
+
+/*
+ *  The opaque_data syntax is made up of three parts:
+ *  a list of Uids for resolving the view plugin, feature flags, priority.
+ *
+ *  <p>uid1;uid2;uid3</p>
+ *    uid*: Supported plugin types.
+ *    E.g. if podcast plugin may support music plugin as well,
+ *         KMPXColPluginMusic
+ *
+ *  <t>uid</t>
+ *    uid: plugin type uid.
+ *    E.g. for music plugin will be: 0x101FFCDA
+ *
+ *  <f>flags</f> [optional]
+ *    flags: sum of the required feature flags, not used now
+ *
+ *  <i>priority</i> [optional]
+ *    priority: a value of type TMPXCollectionPluginPriorities. This value
+ *              determines the returning order when several plugins can
+ *              support the same set of Uids.
+ *    Default value of this field is EMPXCollectionPluginPriorityNormal.
+ */
+
+#include <Ecom/RegistryInfo.rh>
+#include <mpxplaybackplugin.hrh>
+#include "testcommonpluginuids.h"
+#include "testplaybackplugintype.h"
+
+RESOURCE REGISTRY_INFO theInfo
+{
+    dll_uid = KPlaybackTestVideoPlugin;
+
+    interfaces =
+    {
+        INTERFACE_INFO
+        {
+            interface_uid = KMPXPlaybackPluginInterfaceUid;
+            implementations =
+            {
+                IMPLEMENTATION_INFO
+                {
+                    implementation_uid = KPlaybackTestVideoPluginImpId;
+                    version_no = 1;
+                    display_name = "TestVideoPlaybackPlugin";
+                    default_data = "";                       
+                    opaque_data = 
+                        "<s><e>"
+                        "<t>"EPbUnknown"</t>"
+                        "<i>"EMPXPlaybackPluginPriorityHighest"</i>"
+                        "<z>"MPXPlaybackPluginVersion2"</z>";
+                }
+            };
+        }
+    };
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Build information file for Playback test plugin
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+testvideoplaybackplugin.mmp
+
+PRJ_MMPFILES
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/group/testvideoplaybackplugin.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Playback test plugin project specification
+*
+*/
+
+#include <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+#include "../../inc/testcommonpluginuids.h"
+
+TARGET          testvideoplaybackplugin.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D KPlaybackTestVideoPlugin
+
+VENDORID        VID_DEFAULT
+CAPABILITY      CAP_ECOM_PLUGIN
+
+SOURCEPATH      ../src
+SOURCE          testvideoplaybackplugin.cpp
+
+SOURCEPATH      ../data
+START RESOURCE  e0000201.RSS
+TARGET          testvideoplaybackplugin.rsc
+END
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDE 	../../mpxplaybackutilitytest/inc
+
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
+LIBRARY         ecom.lib
+LIBRARY         efsrv.lib
+LIBRARY         estor.lib
+LIBRARY         BAFL.lib
+LIBRARY         flogger.lib
+LIBRARY         mpxcommon.lib
+
+SOURCEPATH ../src
+SOURCE testvideoplaybackpluginproxy.cpp
+
+//end of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/inc/testvideoplaybackplugin.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Implementation of testvideoplaybackplugin interface
+*
+*/
+
+#ifndef _CTESTVIDEOPLAYBACKPLUGIN_H_
+#define _CTESTVIDEOPLAYBACKPLUGIN_H_
+
+//
+//  INCLUDES
+//
+#include <e32base.h>
+
+#include <mpxplaybackplugin.h>
+#include <mpxplaybackpluginversion2.h>
+#include <mpxplaybackengineobserver.h>
+#include <mpxvideoplaybackdefs.h>
+
+#include "mpxplaybackutilitytest.h"
+
+
+
+
+#include <e32svr.h>
+#include <stifparser.h>
+#include <stiftestinterface.h>
+
+#include <mpxmediageneraldefs.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mmf/common/mmferrors.h>
+#include <mpxplaybackpluginversion2.h>
+#include <mpxmessagegeneraldefs.h>
+
+#include <accpolnamevaluerecord.h>
+#include <accconfigfileparser.h>
+#include <acccongenericid.h>
+#include <accpolnamevaluerecord.h>
+
+#include <mpxvideoplaybackdefs.h>
+#include "mpxmediavideodefs.h"
+
+typedef struct
+{
+    TInt               iEvent;
+    TInt               iData;
+    TInt               iError;
+} TTestVideoPlaybackCallbackEvent;
+
+typedef CArrayPtrFlat<TTestVideoPlaybackCallbackEvent> CCallbackArray;
+
+//
+//  CLASS DECLARATION
+//
+
+/*
+ *  CTestVideoPlaybackPlugin class
+ *
+ */
+
+NONSHARABLE_CLASS( CTestVideoPlaybackPlugin ) : public CMPXPlaybackPluginVersion2
+                                                
+{
+    public:
+        //
+        //  Constructors and destructor
+        //
+
+        /*
+         *  Two-phased constructor.
+         *  @param aInitParams, initialization parameter
+         *  @return a pointer to the created instance
+         */
+        static CTestVideoPlaybackPlugin* NewL(TAny* aInitParams);
+
+        /*
+         *  Destructor
+         *  Destroy the object and release all memory objects
+         */
+        ~CTestVideoPlaybackPlugin();
+        
+        /*
+         *  Returns the current file handle iFile
+         */        
+        RFile GetFileHandle();
+
+        /**
+        * Initializes a file for playback.
+        *
+        * @since S60 9.2
+        * @param aUri URI of the item
+        * @param aType the mime type of the item
+        * @param aAccessPoint the access point
+        */
+        void InitStreamingL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint, TInt aPosition);
+
+        /**
+        * Initializes a file handle for playback.
+        *
+        * @since S60 9.2
+        * @param aFile file handle of a file
+        * @param aAccessPoint the access point
+        */
+        void InitStreamingL(RFile& aFile, TInt aAccessPoint, TInt aPosition);
+                  
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    /**
+    * Initializes a file handle for playback.
+    *
+    * @since S60 9.2
+    * @param aFile 64 bit file handle of a file
+    * @param aAccessPoint the access point
+    */
+    void InitStreaming64L(RFile64& aFile, TInt aAccessPoint, TInt aPosition);
+
+    /**
+    * Initializes a song for playback.
+    *
+    * @since S60 9.2
+    * @param aFile 64 bit file handle of a song
+    */
+    void Initialise64L(RFile64& aFile, TInt aPosition);
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+    /**
+    * Initializes a song for playback.
+    *
+    * @since S60 9.2
+    * @param aSong the song path
+    * @param aPosition the starting position
+    */
+    virtual void InitialiseWithPositionL(const TDesC& aSong, TInt aPosition = 0 );
+    
+    /**
+    * Initializes a song for playback.
+    *
+    * @since S60 9.2
+    * @param aFile file handle of a song
+    * @param aPosition the starting position
+    */
+    virtual void InitialiseWithPositionL(RFile& aSong, TInt aPosition = 0);
+    
+    //runl for active object
+    void RunL();
+    
+    void DoCancel();
+    
+    private:
+        //
+        //  CMPXPlaybackPlugin Implementation
+        //
+
+        /*
+         *  Set observer
+         *
+         *  @param aObs observer
+         */
+        void SetObserver( MMPXPlaybackPluginObserver& aObs );
+
+        /*
+         *  Initializes a clip for playback
+         *  @param aSong the song path
+         */
+        void InitialiseL( const TDesC& aSong );
+
+        /*
+         *  Initializes a song for playback
+         *  @param aFile file handle of a song
+         */
+        void InitialiseL( RFile& aFile );
+
+        /*
+         *  Executes a command on the selected song
+         * @param aCmd a command
+         * @param aData, data
+         */
+        void CommandL( CMPXCommand& aCmd );  
+        
+        // Supposedly being deprecated
+        // We're forced to implement this as its declared as a 
+        // pure virtual function by the MPX framework        
+        void CommandL(TMPXPlaybackCommand aCmd, TInt aData=0);
+        
+        /*
+         *  Sets a property of the plugin
+         *  @param aProperty a property
+         *  @param aValue the value of the setting
+         */
+        void SetL( TMPXPlaybackProperty aProperty , TInt aValue );
+
+        /*
+         *  Gets a property of the plugin (async)
+         *  @param aProperty a property
+         */
+        void PropertyL( TMPXPlaybackProperty aProperty ) const;
+
+        /*
+         *  Gets a list of sub players
+         *  @return a list of names of sub players
+         */
+        void SubPlayerNamesL();
+
+        /*
+         *  Select a sub player
+         *  @param aIndex index to the sub player
+         */
+        void SelectSubPlayerL( TInt aIndex );
+
+        /*
+         *  Returns current sub player name
+         *  @return friendly name of the current the sub player
+         */
+        const TDesC& SubPlayerName();
+
+        /*
+         *  Current sub player index
+         *  @return index to the sub player
+         */
+        TInt SubPlayerIndex() const;
+
+        /*
+         *  Media properties of the current file (async)
+         *  @param aAttrs attributes requested
+         */
+        void MediaL( const TArray<TMPXAttribute>& aAttrs );
+
+        /*
+         * Cancel async request
+         */
+        void CancelRequest();                          
+
+    private:
+        /*
+         *  C++ default constructor
+         */
+        CTestVideoPlaybackPlugin();
+
+        /*
+         *  the second phase constructor ConstructL to safely construct things
+         *  that can leave
+         */
+        void ConstructL();
+        
+        void AddCallbackEvent( TTestVideoPlaybackCallbackEvent* event );
+        static TInt SendEvent( TAny* aPtr );        
+        void DoSendEvent();
+
+    private:
+
+        HBufC*                        iClipName;
+        RFs                           iFs;
+        RFile                         iFile; 
+        CIdle*                        iCallback; //active object
+        CCallbackArray*               iEventArray;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackplugin.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,793 @@
+/*
+* Copyright (c) 2002 - 2007 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:  CTestVideoPlaybackPlugin implementation
+*
+*/
+
+//
+//  INCLUDE FILES
+//
+#include <apgcli.h>
+#include <e32cmn.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mpxmessagegeneraldefs.h>
+#include <mpxplaybackcommanddefs.h>
+#include <mpxvideoplaybackdefs.h>
+#include <mpxplaybackpluginobserver.h>
+#include <mpxplaybackplugin.h>
+#include <mpxlog.h>
+#include <mpxmedia.h>
+
+#include "testvideoplaybackplugin.h"
+#include "mpxplaybackutilitytestdefs.h"
+#include "mpxplaybackutilitytest.h"
+
+
+//
+//  CONSTANTS
+//
+const TUid KLocalPlaybackUid = { 0x10282556 };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+//  ----------------------------------------------------------------------------
+//    Two-phased constructor.
+//  ----------------------------------------------------------------------------
+//
+CTestVideoPlaybackPlugin* CTestVideoPlaybackPlugin::NewL( TAny* /*aInitParams*/ )
+{
+    
+    CTestVideoPlaybackPlugin* p = new (ELeave) CTestVideoPlaybackPlugin();
+    CleanupStack::PushL(p);
+    p->ConstructL();
+    CleanupStack::Pop(p);
+    return p;
+}
+
+//  ----------------------------------------------------------------------------
+//    Symbian 2nd phase constructor can leave.
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::ConstructL()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::ConstructL()");
+    User::LeaveIfError( iFs.Connect() );
+    iFs.ShareProtected();
+    
+    iEventArray = new (ELeave) CArrayPtrFlat<TTestVideoPlaybackCallbackEvent>( 1 );
+    iCallback   = CIdle::NewL( CActive::EPriorityLow );
+}
+
+//  ----------------------------------------------------------------------------
+//    C++ constructor
+//  ----------------------------------------------------------------------------
+//
+CTestVideoPlaybackPlugin::CTestVideoPlaybackPlugin() 
+
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::CTestVideoPlaybackPlugin()");
+}
+
+//  ----------------------------------------------------------------------------
+//    Destructor
+//  ----------------------------------------------------------------------------
+//
+CTestVideoPlaybackPlugin::~CTestVideoPlaybackPlugin()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::~CTestVideoPlaybackPlugin()");
+    iFile.Close();
+    iFs.Close();
+    
+    if ( iCallback->IsActive() )
+    {
+        iCallback->Cancel();
+    }
+
+    delete iCallback;
+
+    iEventArray->ResetAndDestroy();
+}
+
+//  ----------------------------------------------------------------------------
+//    Set observer
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::SetObserver( MMPXPlaybackPluginObserver& aObs )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::SetObserver( MMPXPlaybackPluginObserver& aObs )");
+    iObs = &aObs;
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file name
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::InitialiseL( const TDesC& aSong )
+{
+    
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseL( const TDesc& aSong)");
+    
+	delete iClipName;
+    iClipName = NULL;
+    iClipName = aSong.AllocL();
+
+    iFile.Close();
+
+    TInt err = iFile.Open( iFs, aSong, EFileRead | EFileShareReadersOrWriters );
+
+    //
+    //  Remap KErrNotReady to KErrNotFound, because it is referencing a drive
+    //  that is not existent
+    //
+    if ( KErrNotReady == err )
+    {
+        err = KErrNotFound;
+    }
+
+    // if aSong is an streaming link and contains one of the streaming schemas
+    // eg. rtsp:// , http:// etc. then a file handle can not be opened
+    // ignore KErrBadName
+    if (err != KErrBadName)
+    {
+        User::LeaveIfError( err );    
+    }    
+
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+    
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+
+//  ----------------------------------------------------------------------------
+//    Initializes a clip for playback from a file handle
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::InitialiseL( RFile& aSong )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseL( RFile& aSong )");
+    
+    delete iClipName;
+    iClipName = NULL;
+    iClipName = HBufC::NewL( KMaxFileName );
+    TPtr ptr = iClipName->Des();
+    aSong.FullName( ptr );
+
+    iFile.Close();
+    User::LeaveIfError( iFile.Duplicate( aSong ));
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );        
+}
+
+/**
+* Initializes a file for playback.
+*
+* @since S60 9.2
+* @param aUri URI of the item
+* @param aType the mime type of the item
+* @param aAccessPoint the access point
+*/
+void CTestVideoPlaybackPlugin::InitStreamingL(const TDesC& /*aUri*/, 
+        const TDesC8& /*aType*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreamingL(const TDesC& /*aUri*/, const TDesC8& /*aType*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)");
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+
+/**
+* Initializes a file handle for playback.
+*
+* @since S60 9.2
+* @param aFile file handle of a file
+* @param aAccessPoint the access point
+*/
+void CTestVideoPlaybackPlugin::InitStreamingL(RFile& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreamingL(RFile& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)");
+        
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );    
+    
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+/**
+* Initializes a file handle for playback.
+*
+* @since S60 9.2
+* @param aFile 64 bit file handle of a file
+* @param aAccessPoint the access point
+*/
+void CTestVideoPlaybackPlugin::InitStreaming64L(RFile64& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreaming64L(RFile64& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)");
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+
+/**
+* Initializes a song for playback.
+*
+* @since S60 9.2
+* @param aFile 64 bit file handle of a song
+*/
+void CTestVideoPlaybackPlugin::Initialise64L(RFile64& /*aSong*/, TInt /*aPosition*/)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::Initialise64L(RFile64& /*aSong*/, TInt /*aPosition*/)");
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+//  ----------------------------------------------------------------------------
+//    Executes a command on the selected song
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::CommandL( CMPXCommand& aCmd )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::CommandL( CMPXCommand& aCmd )");
+    
+    if ( aCmd.IsSupported( KMPXStifPlaybackCommand ) )
+    {
+       TMPXStifCommand cmd = static_cast<TMPXStifCommand>(aCmd.ValueTObjectL<TInt>(KMPXStifPlaybackCommand));
+       TMPXPlaybackState state = static_cast<TMPXPlaybackState>(aCmd.ValueTObjectL<TInt>(KMPXCommandPlaybackGeneralData));
+       
+       MPX_DEBUG3("CTestVideoPlaybackPlugin::CommandL cmd = %d, state = %d ", cmd, state);
+       
+       switch ( cmd )
+       {
+           case EPbStifPlayComplete:
+           {
+               MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifPlaybackComplete");
+
+               TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+               event->iEvent = MMPXPlaybackPluginObserver::EPPlayComplete;
+               event->iData = 0;
+               event->iError = KErrNone;
+                   
+               AddCallbackEvent( event );
+
+               break;
+           }
+           case EPbStifSeekForward:
+           {
+               MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifSeekForward");
+ 
+               TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+               event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking;
+               event->iData = 0;
+               event->iError = KErrNone;
+                   
+               AddCallbackEvent( event );
+               
+               event = new TTestVideoPlaybackCallbackEvent;
+               event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged;
+               event->iData = 0;
+               event->iError = KErrNone;
+                  
+               AddCallbackEvent( event );
+               
+               if ( state == EPbStatePlaying )
+               {
+
+                   event = new TTestVideoPlaybackCallbackEvent;
+                   event->iEvent = MMPXPlaybackPluginObserver::EPPlaying;
+                   event->iData = 0;
+                   event->iError = KErrNone;
+                      
+                   AddCallbackEvent( event );               
+               }
+               else if ( state == EPbStatePaused )
+               {
+
+                   event = new TTestVideoPlaybackCallbackEvent;
+                   event->iEvent = MMPXPlaybackPluginObserver::EPPaused;
+                   event->iData = 0;
+                   event->iError = KErrNone;
+                      
+                   AddCallbackEvent( event );
+                                          
+               }
+               break;
+           }
+                   
+           case EPbStifSeekBackward:
+           {
+              MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifSeekBackward");
+
+              TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+              
+              event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking;
+              event->iData = 0;
+              event->iError = KErrNone;
+                  
+              AddCallbackEvent( event );
+              
+              event = new TTestVideoPlaybackCallbackEvent;
+              event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged;
+              event->iData = 0;
+              event->iError = KErrNone;
+                 
+              AddCallbackEvent( event );
+              
+              if ( state == EPbStatePlaying )
+              {
+
+                  event = new TTestVideoPlaybackCallbackEvent;
+                  event->iEvent = MMPXPlaybackPluginObserver::EPPlaying;
+                  event->iData = 0;
+                  event->iError = KErrNone;
+                     
+                  AddCallbackEvent( event );            
+              }
+              else if ( state == EPbStatePaused )
+              {
+
+                  event = new TTestVideoPlaybackCallbackEvent;
+                  event->iEvent = MMPXPlaybackPluginObserver::EPPaused;
+                  event->iData = 0;
+                  event->iError = KErrNone;
+                     
+                  AddCallbackEvent( event );
+              }
+              break;
+           }
+           
+           default:
+           {
+               MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd default");
+               break;
+           }
+       }
+   }       
+}
+
+
+//  ----------------------------------------------------------------------------
+//    Executes a command on the selected song
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::CommandL(TMPXPlaybackCommand aCmd, TInt /*aData*/)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::CommandL(TMPXPlaybackCommand aCmd, TInt /*aData*/)");
+    
+    MPX_DEBUG2("CTestVideoPlaybackPlugin::CommandL aCmd = %d", aCmd);
+
+    switch (aCmd)
+    {            
+        case EPbCmdPlay:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdPlay");
+
+            TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+            event->iEvent = MMPXPlaybackPluginObserver::EPPlaying;
+            event->iData = 0;
+            event->iError = KErrNone;
+                
+            AddCallbackEvent( event );
+            
+            break;
+        }
+            
+        case EPbCmdClose:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdClose");
+
+            TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+            
+            event->iEvent = MMPXPlaybackPluginObserver::EPClosed;
+            event->iData = 0;
+            event->iError = KErrNone;
+                
+            AddCallbackEvent( event );
+
+            break;
+        }
+           
+        case EPbCmdStop:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdStop");
+
+            TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+            event->iEvent = MMPXPlaybackPluginObserver::EPStopped;
+            event->iData = 0;
+            event->iError = KErrNone;
+                
+            AddCallbackEvent( event );
+
+            break;
+        }
+            
+        case EPbCmdPause:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdPause");
+
+            TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+            event->iEvent = MMPXPlaybackPluginObserver::EPPaused;
+            event->iData = 0;
+            event->iError = KErrNone;
+                
+            AddCallbackEvent( event );
+            
+            break;
+        }
+            
+        case EPbCmdStartSeekForward:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdStartSeekForward");
+
+            TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+            
+            event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking;
+            event->iData = 0;
+            event->iError = KErrNone;
+                
+            AddCallbackEvent( event );
+
+            event = new TTestVideoPlaybackCallbackEvent;
+            event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged;
+            event->iData = 0;
+            event->iError = KErrNone;
+
+            AddCallbackEvent( event );
+            
+            event = new TTestVideoPlaybackCallbackEvent;
+            event->iEvent = MMPXPlaybackPluginObserver::EPPlaying;
+            event->iData = 0;
+            event->iError = KErrNone;
+
+            AddCallbackEvent( event );
+            
+            break;
+        }
+                
+        default:
+        {
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd default");
+            break;
+        }
+    }
+}
+
+
+//  ----------------------------------------------------------------------------
+//    Sets a property of the plugin
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::SetL( TMPXPlaybackProperty aProperty, TInt aValue )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::SetL( TMPXPlaybackProperty /*aProperty*/, TInt /*aValue*/ )");
+    MPX_DEBUG3("CTestVideoPlaybackPlugin::SetL aProperty = %d, aValue = %d", aProperty, aValue);
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+
+    event->iEvent = MMPXPlaybackPluginObserver::EPSetComplete;
+    event->iData = aProperty;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );    
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets a property of the plugin (async)
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::PropertyL( TMPXPlaybackProperty /*aProperty*/ ) const
+{
+
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets a list of sub players, UPnP only
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::SubPlayerNamesL()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::SubPlayerNamesL()");
+    
+    iObs->HandleSubPlayerNames( KLocalPlaybackUid, NULL, ETrue, KErrNone );
+}
+
+//  ----------------------------------------------------------------------------
+//    Select a sub player
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::SelectSubPlayerL( TInt /*aIndex*/ )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::SelectSubPlayerL( TInt aIndex )");
+    
+    User::Leave( KErrNotSupported );
+}
+
+//  ----------------------------------------------------------------------------
+//    Returns current sub player name
+//  ----------------------------------------------------------------------------
+//
+const TDesC& CTestVideoPlaybackPlugin::SubPlayerName()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::SubPlayerName()");
+    
+    return KNullDesC;
+}
+
+//  ----------------------------------------------------------------------------
+//    Current sub player index
+//  ----------------------------------------------------------------------------
+//
+TInt CTestVideoPlaybackPlugin::SubPlayerIndex() const
+{
+     
+    return KErrNotFound;
+}
+
+//  ----------------------------------------------------------------------------
+//    Gets media properties
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::MediaL( const TArray<TMPXAttribute>& /*aAttrs*/ )
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::MediaL( const TArray TMPXAttribute )");
+}
+
+//  ----------------------------------------------------------------------------
+//    Cancel request
+//  ----------------------------------------------------------------------------
+//
+void CTestVideoPlaybackPlugin::CancelRequest()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::CancelRequest()");
+}
+
+//  ----------------------------------------------------------------------------
+//  CTestVideoPlaybackPlugin::GetFileHandle()
+//  ----------------------------------------------------------------------------
+//
+RFile CTestVideoPlaybackPlugin::GetFileHandle()
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::GetFileHandle()");
+    
+    return iFile;
+}
+
+/**
+* Initializes a song for playback.
+*
+* @since S60 9.2
+* @param aSong the song path
+* @param aPosition the starting position
+*/
+void CTestVideoPlaybackPlugin::InitialiseWithPositionL(const TDesC& aSong, TInt aPosition)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseWithPositionL(const TDesC& /*aSong*/, TInt /*aPosition*/)");
+    
+    delete iClipName;
+    iClipName = NULL;
+    iClipName = aSong.AllocL();
+
+    iFile.Close();
+
+    TInt err = iFile.Open( iFs, aSong, EFileRead | EFileShareReadersOrWriters );
+
+    //
+    //  Remap KErrNotReady to KErrNotFound, because it is referencing a drive
+    //  that is not existent
+    //
+    if ( KErrNotReady == err )
+    {
+        err = KErrNotFound;
+    }
+
+    // if aSong is an streaming link and contains one of the streaming schemas
+    // eg. rtsp:// , http:// etc. then a file handle can not be opened
+    // ignore KErrBadName
+    if (err != KErrBadName)
+    {
+        User::LeaveIfError( err );    
+    }            
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );    
+    
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+        
+    AddCallbackEvent( event );
+}
+
+/**
+* Initializes a song for playback.
+*
+* @since S60 9.2
+* @param aFile file handle of a song
+* @param aPosition the starting position
+*/
+void CTestVideoPlaybackPlugin::InitialiseWithPositionL(RFile& aSong, TInt aPosition)
+{
+    MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseWithPositionL(RFile& aSong, TInt aPosition)");
+
+    delete iClipName;
+    iClipName = NULL;
+    iClipName = HBufC::NewL( KMaxFileName );
+    TPtr ptr = iClipName->Des();
+    aSong.FullName( ptr );
+
+    iFile.Close();
+    User::LeaveIfError( iFile.Duplicate( aSong ));
+    
+    
+    TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent;
+    
+    event->iEvent = MMPXPlaybackPluginObserver::EPInitialised;
+    event->iData = 0;
+    event->iError = KErrNone;
+    
+    AddCallbackEvent( event );
+
+    event = new TTestVideoPlaybackCallbackEvent;
+    event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted;
+    event->iData = 0;
+    event->iError = KErrNone;
+            
+    AddCallbackEvent( event );
+}
+
+
+void CTestVideoPlaybackPlugin::RunL()
+{
+    MPX_FUNC_EX("CTestVideoPaybackPlugin::RunL");   
+}
+
+void CTestVideoPlaybackPlugin::DoCancel()
+{
+    MPX_FUNC_EX("CTestVideoPaybackPlugin::DoCancel");
+}
+
+void CTestVideoPlaybackPlugin::AddCallbackEvent( TTestVideoPlaybackCallbackEvent* event )
+{      
+    MPX_DEBUG1("CTestVideoPlaybackPlugin::AddCallbackEvent");
+    
+    iEventArray->AppendL( event );
+
+    if ( ! iCallback->IsActive() )
+    {
+        iCallback->Start( TCallBack( CTestVideoPlaybackPlugin::SendEvent, this ) );
+    }
+}
+
+TInt CTestVideoPlaybackPlugin::SendEvent (TAny* aPtr )
+{
+    MPX_DEBUG1("CTestVideoPlaybackPlugin::SendEvent");
+    
+    static_cast<CTestVideoPlaybackPlugin*>(aPtr)->DoSendEvent();
+
+    return KErrNone;
+}
+
+void CTestVideoPlaybackPlugin::DoSendEvent()
+{
+    MPX_DEBUG1("-->CTestVideoPlaybackPlugin::DoSendEvent");
+
+    TInt count = iEventArray->Count();
+
+    if ( count > 0 )
+    {
+    TTestVideoPlaybackCallbackEvent* event = (*iEventArray)[0];
+        
+    MMPXPlaybackPluginObserver::TEvent myevent = static_cast<MMPXPlaybackPluginObserver::TEvent>(event->iEvent);
+    
+        iObs->HandlePluginEvent( myevent, event->iData, event->iError);
+
+        if ( count > 1 )
+        {
+            //
+            //  More events exist, start another callback
+            //
+            MPX_DEBUG1("CTestVideoPlaybackPlugin::DoSendEvent - there are more events, start another callback");
+            iCallback->Start( TCallBack( CTestVideoPlaybackPlugin::SendEvent, this ) );
+        }
+
+        iEventArray->Delete( 0 );
+    }
+    MPX_DEBUG1("<--CTestVideoPlaybackPlugin::DoSendEvent");
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackpluginproxy.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Standard proxy of the ECOM plugin
+*
+*/
+
+#include <ecom/implementationproxy.h>
+#include "testcommonpluginuids.h"
+#include "testvideoplaybackplugin.h"
+
+#if ( ! defined IMPLEMENTATION_PROXY_ENTRY )
+typedef TAny* TProxyNewLPtr;
+#define IMPLEMENTATION_PROXY_ENTRY(aUid,aFuncPtr) \
+            { {aUid}, (TProxyNewLPtr)(aFuncPtr) }
+#endif
+
+// ----------------------------------------------------------------------------
+// The list of implementations
+// ----------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] = 
+    { IMPLEMENTATION_PROXY_ENTRY( KPlaybackTestVideoPluginImpId, 
+            CTestVideoPlaybackPlugin::NewL ) };
+
+// ----------------------------------------------------------------------------
+// The proxy of implementations
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+{
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+}
+
+// End of File
--- a/mmappfw_plat/mpx_view_utility_api/group/bld.inf	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/mpx_view_utility_api/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -26,4 +26,7 @@
 ../inc/mpxviewactivationobserver.h               MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewactivationobserver.h)                   
 ../inc/mpxviewpluginmanager.h                    MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewpluginmanager.h)           
 ../inc/mpxviewutility.h                          MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutility.h)                    
-../inc/mpxviewutilitycommanddef.h                MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutilitycommanddef.h)                    
+../inc/mpxviewutilitycommanddef.h                MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutilitycommanddef.h)
+
+// new for 10.1 QT
+../inc/mpxviewframeworkqt.h                      MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewframeworkqt.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef MPXVIEWFRAMEWORK_H
+#define MPXVIEWFRAMEWORK_H
+
+#include <QObject>
+#include <QList>
+#include <qglobal.h>
+#include <hbmainwindow.h>
+
+class MpxViewPlugin;
+class HbView;
+
+#ifdef BUILD_VIEWFRAMEWORK
+#define VFDLL_EXPORT Q_DECL_EXPORT
+#else
+#define VFDLL_EXPORT Q_DECL_IMPORT
+#endif
+
+class VFDLL_EXPORT MpxViewFramework : public HbMainWindow
+    {
+    Q_OBJECT
+    
+public:
+    MpxViewFramework(QWidget *parent = 0, Hb::WindowFlags windowFlags = Hb::WindowFlagNone);
+    
+    virtual ~MpxViewFramework();
+
+    virtual MpxViewPlugin *resolvePlugin(const QList<int>& requestedPlugins);
+    
+private:
+    
+    Q_DISABLE_COPY(MpxViewFramework)    
+    
+    };
+
+#endif //VIEWFRAMEWORK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/qtms.h                    MW_LAYER_PLATFORM_EXPORT_PATH(qtms.h)
+../inc/qtmsamrformat.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsamrformat.h)
+../inc/qtmsbuffer.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsbuffer.h)
+../inc/qtmscall.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmscall.h)
+../inc/qtmsclientsink.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsink.h)
+../inc/qtmsclientsource.h        MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsource.h)
+../inc/qtmsdtmf.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmsdtmf.h)
+../inc/qtmseffect.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmseffect.h)
+../inc/qtmsfactory.h             MW_LAYER_PLATFORM_EXPORT_PATH(qtmsfactory.h)
+../inc/qtmsformat.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsformat.h)
+../inc/qtmsg711format.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg711format.h)
+../inc/qtmsg729format.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg729format.h)
+../inc/qtmsgaineffect.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsgaineffect.h)
+../inc/qtmsglobalgaineffect.h    MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalgaineffect.h)
+../inc/qtmsglobalrouting.h       MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalrouting.h)
+../inc/qtmsglobalvoleffect.h     MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalvoleffect.h)
+../inc/qtmsilbcformat.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsilbcformat.h)
+../inc/qtmspcmformat.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmspcmformat.h)
+../inc/qtmsringtone.h            MW_LAYER_PLATFORM_EXPORT_PATH(qtmsringtone.h)
+../inc/qtmssink.h                MW_LAYER_PLATFORM_EXPORT_PATH(qtmssink.h)
+../inc/qtmssource.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmssource.h)
+../inc/qtmsstream.h              MW_LAYER_PLATFORM_EXPORT_PATH(qtmsstream.h)
+../inc/qtmsvolumeeffect.h        MW_LAYER_PLATFORM_EXPORT_PATH(qtmsvolumeeffect.h)
+../inc/qtmsmicsource.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmicsource.h)
+../inc/qtmsmodemsink.h           MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsink.h)
+../inc/qtmsmodemsource.h         MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsource.h)
+../inc/qtmsspeakersink.h         MW_LAYER_PLATFORM_EXPORT_PATH(qtmsspeakersink.h)
+../inc/qtmsinbandtone.h          MW_LAYER_PLATFORM_EXPORT_PATH(qtmsinbandtone.h)
+../inc/qtmswrapperexport.h       MW_LAYER_PLATFORM_EXPORT_PATH(qtmswrapperexport.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_H
+#define QTMS_H
+
+// Include files
+#include <glib.h>
+#include <vector>
+
+namespace QTMS {
+
+// FORWARD DECLARATION
+class QTMSFormat;
+
+// Result codes
+#define QTMS_RESULT_SUCCESS                      ((gint)0x00000000)
+#define QTMS_RESULT_ALREADY_EXIST                ((gint)0x00000001)
+#define QTMS_RESULT_DOES_NOT_EXIST               ((gint)0x00000002)
+#define QTMS_RESULT_NULL_ARGUMENT                ((gint)0x00000003)
+#define QTMS_RESULT_INVALID_ARGUMENT             ((gint)0x00000004)
+#define QTMS_RESULT_INVALID_STATE                ((gint)0x00000005)
+#define QTMS_RESULT_UNINITIALIZED_OBJECT         ((gint)0x00000006)
+#define QTMS_RESULT_INSUFFICIENT_MEMORY          ((gint)0x00000007)
+#define QTMS_RESULT_GENERAL_ERROR                ((gint)0x00000008)
+#define QTMS_RESULT_FATAL_ERROR                  ((gint)0x00000009)
+#define QTMS_RESULT_OPERATION_CANCELLED          ((gint)0x0000000A)
+#define QTMS_RESULT_ILLEGAL_OPERATION            ((gint)0x0000000B)
+#define QTMS_RESULT_BUFFER_LATENCY_ERROR         ((gint)0x0000000C)
+#define QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED      ((gint)0x0000000D)
+#define QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED    ((gint)0x0000000E)
+#define QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED    ((gint)0x0000000F)
+#define QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED      ((gint)0x00000010)
+#define QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED    ((gint)0x00000011)
+#define QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED    ((gint)0x00000012)
+#define QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED    ((gint)0x00000013)
+#define QTMS_RESULT_VERSION_NOT_SUPPORTED        ((gint)0x00000014)
+#define QTMS_RESULT_FORMAT_TYPE_UNSPECIFIED      ((gint)0x00000015)
+#define QTMS_RESULT_FEATURE_NOT_SUPPORTED        ((gint)0x00000016)
+
+// Reasons codes
+#define QTMS_REASON_CLIENT_INITIATED             ((gint)0x00000000)
+#define QTMS_REASON_DEVICE_IN_USE                ((gint)0x00000001) // Device not available
+#define QTMS_REASON_DEVICE_TAKEN                 ((gint)0x00000002) // Preemption
+#define QTMS_REASON_INSUFFICIENT_MEMORY          ((gint)0x00000003) // Memory
+#define QTMS_REASON_PERMISSION_DENIED            ((gint)0x00000004) // Client app does not have perission
+#define QTMS_REASON_EMERGENCY_CALL_ONGOING       ((gint)0x00000005) // Already ongoing emergency call
+#define QTMS_REASON_EMERGENCY_CALL_STARTED       ((gint)0x00000006) // Preemption because of emergency call
+#define QTMS_REASON_SOURCE_NULL                  ((gint)0x00000007) // Could be checked on client side
+#define QTMS_REASON_SOURCE_NOT_SUPPORTED         ((gint)0x00000008)
+#define QTMS_REASON_FORMAT_NULL                  ((gint)0x00000009) // Could be checked on client side
+#define QTMS_REASON_EFFECT_NOT_SUPPORTED         ((gint)0x0000000A)
+#define QTMS_REASON_SINK_NULL                    ((gint)0x0000000B) // Could be checked on client side
+#define QTMS_REASON_SINK_NOT_SUPPORTED           ((gint)0x0000000C)
+#define QTMS_REASON_CALL_NOT_ACTIVE              ((gint)0x0000000D)
+
+// Event codes
+#define QTMS_EVENT_STREAM_STATE_CHANGED          ((gint)0x00000000)
+#define QTMS_EVENT_STREAM_STATE_CHANGE_ERROR     ((gint)0x00000001)
+#define QTMS_EVENT_SOURCE_FILL_BUFFER            ((gint)0x00000002)
+#define QTMS_EVENT_SOURCE_PROCESSED_BUFFER       ((gint)0x00000003)
+#define QTMS_EVENT_SINK_PROCESS_BUFFER           ((gint)0x00000004)
+#define QTMS_EVENT_EFFECT_VOL_CHANGED            ((gint)0x00000005)
+#define QTMS_EVENT_EFFECT_GAIN_CHANGED           ((gint)0x00000006)
+#define QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED ((gint)0x00000007)
+#define QTMS_EVENT_ROUTING_OUTPUT_CHANGED        ((gint)0x00000008)
+#define QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE   ((gint)0x00000009)
+#define QTMS_EVENT_RINGTONE_OPEN_COMPLETE        ((gint)0x0000000A)
+#define QTMS_EVENT_RINGTONE_PLAY_COMPLETE        ((gint)0x0000000B)
+#define QTMS_EVENT_RINGTONE_DEINIT_COMPLETE      ((gint)0x0000000C)
+#define QTMS_EVENT_DTMF_TONE_STARTED             ((gint)0x0000000D)
+#define QTMS_EVENT_DTMF_TONE_STOPPED             ((gint)0x0000000E)
+#define QTMS_EVENT_INBAND_TONE_STARTED           ((gint)0x0000000F)
+#define QTMS_EVENT_INBAND_TONE_STOPPED           ((gint)0x00000010)
+
+// Stream states
+typedef gint QTMSStreamState;
+#define QTMS_STREAM_UNINITIALIZED                ((gint)0x00000000)
+#define QTMS_STREAM_INITIALIZED                  ((gint)0x00000001)
+#define QTMS_STREAM_PAUSED                       ((gint)0x00000002)
+#define QTMS_STREAM_STARTED                      ((gint)0x00000003)
+
+#define DEFAULT_CALL_CONTEXT                    ((gint)1)
+
+// QTMS object types
+typedef gint QTMSStreamType;
+#define QTMS_STREAM_UPLINK                       ((gint)0)
+#define QTMS_STREAM_DOWNLINK                     ((gint)1)
+
+typedef gint QTMSBufferType;
+#define QTMS_BUFFER_MEMORY                       ((gint)2)
+
+typedef gint QTMSSourceType;
+#define QTMS_SOURCE_CLIENT                       ((gint)3)
+#define QTMS_SOURCE_MODEM                        ((gint)4)
+#define QTMS_SOURCE_MIC                          ((gint)5)
+
+typedef gint QTMSSinkType;
+#define QTMS_SINK_CLIENT                         ((gint)6)
+#define QTMS_SINK_MODEM                          ((gint)7)
+#define QTMS_SINK_SPEAKER                        ((gint)8)
+
+typedef gint QTMSEffectType;
+#define QTMS_EFFECT_GLOBAL_VOL                   ((gint)9)
+#define QTMS_EFFECT_GLOBAL_GAIN                  ((gint)10)
+#define QTMS_EFFECT_VOLUME                       ((gint)11)
+#define QTMS_EFFECT_GAIN                         ((gint)12)
+
+typedef gint QTMSFormatType;
+#define QTMS_FORMAT_PCM                          ((gint)13)
+#define QTMS_FORMAT_AMR                          ((gint)14)
+#define QTMS_FORMAT_G711                         ((gint)15)
+#define QTMS_FORMAT_G729                         ((gint)16)
+#define QTMS_FORMAT_ILBC                         ((gint)17)
+
+typedef gint QTMSRingToneType;
+#define QTMS_RINGTONE_DEFAULT                    ((gint)0)
+#define QTMS_RINGTONE_FILE                       ((gint)1)
+#define QTMS_RINGTONE_SEQUENCE                   ((gint)2)
+#define QTMS_RINGTONE_BEEP_ONCE                  ((gint)3)
+#define QTMS_RINGTONE_SILENT                     ((gint)4)
+#define QTMS_RINGTONE_UNSECURE_VOIP              ((gint)5)
+
+typedef gint QTMSRTPSessionType;
+#define QTMS_SESSION_RTP_PULL                    ((gint)0)
+#define QTMS_SESSION_RTP_PUSH                    ((gint)1)
+
+// QTMS vectors
+typedef std::vector<QTMSFormat*> FormatVector;
+typedef std::vector<guint> BitRateVector;
+typedef std::vector<guint> OutputVector;
+
+// Call types
+typedef gint QTMSCallType;
+#define QTMS_CALL_CS                             ((gint)0)
+#define QTMS_CALL_ECS                            ((gint)1)
+#define QTMS_CALL_IP                             ((gint)2)
+#define QTMS_CALL_RTP                            ((gint)3)
+
+// Codec modes
+typedef gint QTMSG711CodecMode;
+#define QTMS_G711_CODEC_MODE_ALAW                ((gint)0)
+#define QTMS_G711_CODEC_MODE_MULAW               ((gint)1)
+
+typedef gint QTMSILBCCodecMode;
+#define QTMS_ILBC_CODEC_MODE_20MS_FRAME          ((gint)0)
+#define QTMS_ILBC_CODEC_MODE_30MS_FRAME          ((gint)1)
+
+// Audio output types
+typedef gint QTMSAudioOutput;
+#define QTMS_AUDIO_OUTPUT_NONE                   ((gint)0)
+#define QTMS_AUDIO_OUTPUT_PUBLIC                 ((gint)1)
+#define QTMS_AUDIO_OUTPUT_PRIVATE                ((gint)2)
+#define QTMS_AUDIO_OUTPUT_HANDSET                ((gint)3)
+#define QTMS_AUDIO_OUTPUT_LOUDSPEAKER            ((gint)4)
+#define QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY        ((gint)5)
+#define QTMS_AUDIO_OUTPUT_ACCESSORY              ((gint)6)
+#define QTMS_AUDIO_OUTPUT_ETTY                   ((gint)7)
+#define QTMS_AUDIO_OUTPUT_NOT_ACTIVE             ((gint)8)
+
+typedef gint QTMSInbandToneType;
+#define QTMS_INBAND_USER_BUSY                    ((gint)0)
+#define QTMS_INBAND_RADIO_PATH_NOT_AVAIL         ((gint)1)
+#define QTMS_INBAND_CONGESTION                   ((gint)2)
+#define QTMS_INBAND_SPECIAL_INFO                 ((gint)3)
+#define QTMS_INBAND_REORDER                      ((gint)4)
+#define QTMS_INBAND_REMOTE_ALEARTING             ((gint)5)
+#define QTMS_INBAND_CALL_WAITING                 ((gint)6)
+#define QTMS_INBAND_DATA_CALL                    ((gint)7)
+#define QTMS_INBAND_NO_SEQUENCE                  ((gint)8)
+#define QTMS_INBAND_BEEP_SEQUENCE                ((gint)9)
+
+// Structure signalling callback notifications
+struct QTMSSignalEvent
+    {
+    guint type;
+    guint reason;
+    gpointer event_data;
+    gpointer user_data;
+    gint curr_state;
+    gint prev_state;
+    };
+
+// Structure for global volume effect change event
+struct QTMSVolumeEventChangeData
+    {
+    guint level;
+    QTMSAudioOutput output;
+    gboolean output_changed;
+    };
+
+} //namespace QTMS
+
+#endif // QTMS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_AMR_FORMAT_H
+#define QTMS_AMR_FORMAT_H
+
+#include <QObject>
+#include <qtmsformat.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSAMRFormat class
+ *
+ * This class provides access methods to configure and query AMR-NB codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSAMRFormat: public QObject, public QTMSFormat
+{
+Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSAMRFormat();
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSAMRFormat();
+};
+
+} //namespace QTMS
+
+#endif //QTMS_AMR_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_BUFFER_H
+#define QTMS_BUFFER_H
+
+#include <qtms.h>
+
+namespace QTMS
+{
+
+/**
+ * QTMSBuffer class
+ *
+ * This interface provides data buffers to QTMS clients. This class allows
+ * clients to allocate data by themselves or request a specific size of the
+ * buffer from the factory.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSBuffer
+{
+public:
+    /*
+     * Destructor
+     */
+    virtual ~QTMSBuffer()
+    {
+    }
+
+    /**
+     * Return buffer type.
+     *
+     * @param  buftype
+     *      Type of the buffer object (QTMS_BUFFER_MEMORY).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint GetType(QTMSBufferType& buftype) = 0;
+
+    /**
+     * Returns time stamp of the buffer so that the framework can determine
+     * the time at which this buffer has to be rendered by the output device
+     * sink.
+     *
+     * @param  ts
+     *      Time stamp in microseconds.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint GetTimeStamp(guint64& ts) = 0;
+
+    /**
+     * Sets the time stamp on the Buffer so that the framework can determine
+     * the time at which this buffer has to be rendered by the output device
+     * sink.
+     *
+     * @param  ts
+     *      Time stamp in microseconds.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint SetTimeStamp(const guint64 ts) = 0;
+
+    /**
+     * Returns size of data in the buffer.
+     *
+     * @param  size
+     *      Size of data in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint GetDataSize(guint& size) = 0;
+
+    /**
+     * Set size of data in the buffer after filling in by the client.
+     *
+     * @param  size
+     *      Size of data in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint SetDataSize(const guint size) = 0;
+
+    /**
+     * Return pointer to the memory location of the data associated with this
+     * buffer.
+     *
+     * @param  bufptr
+     *      Pointer to the data stored in the buffer.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful otherwise
+     *      system error.
+     *
+     */
+    virtual gint GetDataPtr(guint8*& bufptr) = 0;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_BUFFER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CALL_H
+#define QTMS_CALL_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSCall;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSStream;
+
+/**
+ * QTMSCall class
+ *
+ * This class instantiates QTMS call object of one of the following types:
+ *  QTMS_CALL_CS
+ *  QTMS_CALL_ECS
+ *  QTMS_CALL_IP
+ *
+ * Each QTMS call contains at least 1 stream (uplink or downlink).
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory *iFactory;
+ * QTMSCall *iCall;
+ * QTMSStream *iUplink;
+ * QTMSStream *iDownlink;
+ * gint err;
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink);
+ * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink);
+ * ...
+ * err = iCall->DeleteStream(iDownlink);
+ * err = iCall->DeleteStream(iUplink);
+ * err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ * ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSCall : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     *
+     */
+    virtual ~QTMSCall();
+
+    /**
+     * Return call type.
+     *
+     * This function can be called at any time.
+     *
+     * Possible call types are as follows:
+     *  QTMS_CALL_CS,
+     *  QTMS_CALL_ECS
+     *  QTMS_CALL_IP
+     *
+     * @return
+     *      Call type as indicated above.
+     *
+     */
+    QTMSCallType GetCallType();
+
+    /**
+     * Get call context ID.
+     *
+     * This ID is passed during the creation of the call object.
+     *
+     * @param  ctxid
+     *      Context ID.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *
+     */
+    gint GetCallContextId(guint& ctxid);
+
+    /**
+     * Create QTMS stream of the given type.
+     *
+     * @param  type
+     *      Stream type to be created.
+     *
+     * @param  strm
+     *      Created stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED if stream type is not
+     *      supported.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *      QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active.
+     *      QTMS_REASON_PERMISSION_DENIED if permission is denied.
+     *
+     */
+    gint CreateStream(const QTMSStreamType type, QTMSStream*& strm);
+
+    /**
+     * Delete stream object.
+     *
+     * @param  strm
+     *      Stream to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the stream is not valid.
+     */
+    gint DeleteStream(QTMSStream*& strm);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSCall();
+
+protected:
+    TMS::TMSCall* iTmsCall;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_CALL_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SINK_H
+#define QTMS_CLIENT_SINK_H
+
+#include <QObject>
+#include <qtms.h>
+#include <qtmsbuffer.h>
+#include <qtmssink.h>
+#include <qglobal.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSClientSink class
+ *
+ * This class provides QTMS client sink interface. It serves as a data sink
+ * to the QTMS, which supplies the client with buffers recorded by the a/v
+ * recording device. The constant flow of data between the a/v recorder
+ * device and the client is accomplished by sending BufferProcessed() events
+ * in response to TMSClientSinkObserver::ProcessBuffer sink observer callbacks.
+ * This indicates to the QTMS that the supplied buffer has been consumed by the
+ * client and it is ready to receive more recorded data.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSClientSink : public QObject,
+                                               public QTMSSink
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSClientSink();
+
+    /**
+     * Tell the sink that the buffer passed in has been processed by
+     * the client and is ready to be reused by the Sink.
+     *
+     * This function must be called in response to the callback from the
+     * sink observer QTMSClientSinkObserver::ProcessBuffer().
+     *
+     * @param  buffer
+     *      The buffer which has been processed by the client (filled in
+     *      with data).
+     *
+     * @return
+     *      Status of the operation.
+     *
+     */
+    gint BufferProcessed(QTMSBuffer* buffer);
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_CLIENT).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+    Q_SIGNALS:
+    void ProcessBuffer(const QTMSBuffer* buffer);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSClientSink();
+
+protected:
+    TMS::TMSSink* iSink;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_CLIENT_SINK_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SOURCE_H
+#define QTMS_CLIENT_SOURCE_H
+
+#include <QObject>
+#include <qtms.h>
+#include <qtmsbuffer.h>
+#include <qtmssource.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSClientSource class
+ *
+ * This class instantiates QTMS client source interface. It serves as a data
+ * source to the QTMS, through which the client submits data buffers to the
+ * QTMS call server for playback on the audio and/or video output device.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSClientSource : public QObject,
+                                                 public QTMSSource
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSClientSource();
+
+    /**
+     * PULL MODE ONLY
+     *
+     * Tell the source that the buffer passed in has been filled in with data
+     * by the client and it is ready to be sent do the QTMS for processing.
+     *
+     * This function must be called in response to the callback from the
+     * source observer QTMSClientSourceObserver::FillBuffer.
+     *
+     * @param  buffer
+     *      The buffer which has been processed by the client (filled in
+     *      with data).
+     *
+     * @return
+     *      Status of the operation.
+     *
+     */
+    gint BufferFilled(QTMSBuffer& buffer);
+
+    /**
+     * In the PUSH MODE, tell the source that the supplied buffer filled in
+     * with data should be queued before being sent for processing by the
+     * server. All ProcessBuffer requests will be queued until client calls
+     * Flush(). After all queued buffers are pushed to the server and
+     * processed, the QTMS will respond by issuing
+     * QTMSClientSourceObserver::BufferProcessed
+     * callback event.
+     *
+     * @param  buffer
+     *      The buffer with audio data supplied by the client for playback.
+     *
+     */
+    gint ProcessBuffer(QTMSBuffer* buffer);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Tell the QTMS framework to queue ProcessBuffer events. To request the
+     * QTMS push mode operation, the SetEnqueueMode must be called with the
+     * flag set TRUE. Buffer enqueuing continues until the client calls
+     * Flush(). At this point all queued data (buffers) are sent over to the
+     * QTMS for processing and the enqueuing mode is turned OFF. To turn it
+     * ON again, the client has to call SetEnqueueMode with TRUE parameter.
+     *
+     * Has no effect in the PULL mode.
+     *
+     * @param  enable
+     *      Toggles buffer enqueuing ON and OFF.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetEnqueueMode(const gboolean enable);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Return current buffer enqueuing mode setting.
+     * Has no effect in the PULL mode.
+     *
+     * @param  enable
+     *      Current enqueuing mode.
+     *
+     */
+    gint GetEnqueueMode(gboolean& enable);
+
+    /**
+     * PUSH MODE ONLY
+     *
+     * Push all queued buffers by ProcessBuffer to the server for processing.
+     * After calling this function, the enqueuing mode is turned OFF. To set
+     * it ON, the client has to call SetEnqueueMode again.
+     *
+     * Has no effect in the PULL mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Flush();
+
+    /**
+     * Return the source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  QTMSSourceType&
+     *      The type of the source object. The supported source types are
+     *      as follows:
+     *          QTMS_SOURCE_CLIENT
+     *          QTMS_SOURCE_MODEM
+     *          QTMS_SOURCE_MIC
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+    Q_SIGNALS:
+    void FillBuffer(QTMSBuffer& buffer);
+    void BufferProcessed(const QTMSBuffer* buffer, gint reason);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSClientSource();
+
+protected:
+    TMS::TMSSource* iSource;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_CLIENT_SOURCE_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_DTMF_H
+#define QTMS_DTMF_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSDTMF;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSDTMFclass
+ *
+ * This class provides DTMF playback capability to the QTMS clients. Each
+ * DTMF player session is associated either with an uplink or downlink stream.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSDTMF : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSDTMF();
+
+    /**
+     * Starts DTMF playback. In the case of downlink, the tone will be played
+     * locally. In case of uplink, the network will play tones.
+     *
+     * Common for CS and VOIP (uplink and downlink)
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Start();
+
+    /**
+     * Stops DTMF playback.
+     * Common for CS and VOIP (Uplink and Downlink).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Supply DTMF player with a string of tones to be played on local
+     * playback device or sent via the uplink.
+     *
+     * @param  string
+     *      String containing one or more DTMF digits.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetTone(GString* string);
+
+    /**
+     *  Allows a client to continue or cancel the sending of a DTMF string
+     *  when it was stopped by the use of ‘w’ char in the string.
+     *  The client will set sending param to true if it wishes to continue
+     *  the DTMF string sending and will set sending param to false if it
+     *  wishes to discard the rest of the DTMF string.
+     *  Reference: Multimode ETel API Design Document
+     *
+     *  For CS calltype
+     *
+     *  @param  sending
+     *      Boolean to continue sending DTMF string.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint ContinueDTMFStringSending(gboolean sending);
+
+    Q_SIGNALS:
+    void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event);
+
+protected:
+
+    /**
+     * Constructor
+     */
+    QTMSDTMF();
+
+protected:
+    TMS::TMSDTMF* iDtmf;
+};
+
+} //namespace QTMS
+
+#endif //__QTMS_DTMF_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_EFFECT_H
+#define QTMS_EFFECT_H
+
+#include <qtms.h>
+#include <QObject>
+
+namespace QTMS
+{
+
+/**
+ * QTMSEffect class
+ *
+ * Base class for all effect object classes.
+ * This is an abstract class.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSEffect
+{
+public:
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object.
+     *
+     * @return
+     *      The status of the operation.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype) = 0;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_EFFECT_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,459 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_FACTORY_H
+#define QTMS_FACTORY_H
+
+#include <qtms.h>
+#include <QObject>
+#include <QtCore/qglobal.h>
+#include "qtmswrapperexport.h"
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSCall;
+class QTMSFormat;
+class QTMSEffect;
+class QTMSBuffer;
+class QTMSSource;
+class QTMSSink;
+class QTMSFactoryImpl;
+class QTMSVer; // QTMS version definition
+class QTMSGlobalRouting;
+class QTMSDTMF;
+class QTMSRingTone;
+class QTMSInbandTone;
+
+/**
+ * QTMSFactory class
+ *
+ * This class serves as a factory crating all necessary QTMS components.
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory* iFactory;
+ * QTMSCall* iCall;
+ * gint err;
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * ...
+ * err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ * ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSFactory : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Returns pointer reference to created QTMS Factory object. The specified
+     * API version will allow using different QTMS API variants.
+     *
+     * @param  QTMSfactory
+     *      Created Factory object.
+     *
+     * @param  ver
+     *      API version which should be used to create QTMS components.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if factory is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if factory creation failed due to
+     *      insufficient of memory.
+     *      QTMS_RESULT_VERSION_NOT_SUPPORTED if requested API version is not
+     *      supported.
+     *
+     */
+    static gint CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& ver);
+
+    /**
+     * Destructor
+     *
+     * Deletes the QTMS Factory.
+     *
+     */
+    virtual ~QTMSFactory();
+
+    /**
+     * Creates QTMS Call of the given type with context ID.
+     *
+     * @param  ctype
+     *      Call type to be created.
+     *      Supported call types:
+     *          QTMS_CALL_CS
+     *          QTMS_CALL_ECS
+     *          QTMS_CALL_IP
+     *
+     * @param  QTMScall
+     *      Created Call object.
+     *
+     * @param  ctxid
+     *      The Context ID to be assigned to the call. The default is
+     *      DEFAULT_CALL_CONTEXT.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if call is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED if calltype is not supported.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the context id is not valid.
+     *      QTMS_RESULT_FATAL_ERROR if there is any other error.
+     *
+     */
+    gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall,
+        guint ctxid = DEFAULT_CALL_CONTEXT);
+
+    /**
+     * Deletes QTMS Call.
+     *
+     * @param  QTMSct
+     *      The call to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if call is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the call is not valid.
+     *
+     */
+    gint DeleteCall(QTMSCall*& qtmsct);
+
+    /**
+     * Is the given calltype supported by the QTMS API.
+     *
+     * @param  ctype
+     *      The call type to be validated.
+     *
+     * @param  flag
+     *      Indicates wheter the call type is supported or not.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if operation failed.
+     *
+     */
+    gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag);
+
+    /**
+     * Returns supported codec format types.
+     *
+     * @param  strmtype
+     *      Stream type: Uplink or Downlink
+     *
+     * @param  fmtlist
+     *      Format vector in which the supported formats are stored
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if operation was successful.
+     *      QTMS_RESULT_FATAL_ERROR if operation failed.
+     *
+     */
+    gint GetSupportedFormats(const QTMSStreamType strmtype,
+        FormatVector& fmtlist);
+
+    /**
+     * Creates Format object of the given format type.
+     *
+     * @param  fmttype
+     *      Format type to be created.
+     *
+     * @param  QTMSfmt
+     *      Crated Format object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if format creation failed due to
+     *      insufficient of memory.
+     *      QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED if format type is not
+     *      supported.
+     *
+     */
+    gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& qtmsfmt);
+
+    /**
+     * Deletes Format object.
+     *
+     * @param  QTMSfmt
+     *      Format to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the format is not valid.
+     *
+     */
+    gint DeleteFormat(QTMSFormat*& qtmsfmt);
+
+    /**
+     * Creates Effect object of the given type.
+     *
+     * @param  QTMSeffecttype
+     *      Effect type to be created.
+     *
+     * @param  QTMSeffect
+     *      Created Effect object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if effect creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED if the effect type is not
+     *      supported.
+     *
+     */
+    gint CreateEffect(QTMSEffectType QTMSeffecttype,
+        QTMSEffect*& qtmseffect);
+
+    /**
+     * Deletes Effect object.
+     *
+     * @param  QTMSeffect
+     *      Effect object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the effect is not valid.
+     */
+    gint DeleteEffect(QTMSEffect*& qtmseffect);
+
+    /**
+     * Creates Buffer object of the given type and size.
+     * The memory is allocated on the heap.
+     *
+     * @param  buffertype
+     *      Buffer type to be created.
+     *
+     * @param  size
+     *      Size of the buffer to be created.
+     *
+     * @param  QTMSbuffer
+     *      Created buffer object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if buffer is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if buffer creation failed due to
+     *      insufficient memory.
+     *      QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED if the buffer type is not
+     *      supported.
+     *
+     */
+    gint CreateBuffer(QTMSBufferType buffertype, guint size,
+        QTMSBuffer*& qtmsbuffer);
+
+    /**
+     * Deletes the Buffer object.
+     *
+     * @param  QTMSbuffer
+     *      Buffer to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if buffer is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the buffer is not valid.
+     */
+    gint DeleteBuffer(QTMSBuffer*& qtmsbuffer);
+
+    /**
+     * Creates the Source object of the given type.
+     *
+     * @param  srctype
+     *      Source type to be created.
+     *
+     * @param  QTMSsrc
+     *      Crated source object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if source creation failed due to
+     *      lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the source type is not
+     *      supported.
+     *
+     */
+    gint CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc);
+
+    /**
+     * Deletes the Source object.
+     *
+     * @param  QTMSsrc
+     *      Source to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the source is not valid.
+     *
+     */
+    gint DeleteSource(QTMSSource*& qtmssrc);
+
+    /**
+     * Creates the Sink object of the given QTMSSinkType.
+     *
+     * @param  sinktype
+     *      Sink type to be created.
+     *
+     * @param  QTMSsink
+     *      Created sink object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if sink creation failed due to
+     *      lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the sink type is not
+     *      supported.
+     *
+     */
+    gint CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink);
+
+    /**
+     * Deletes the Sink object.
+     *
+     * @param  QTMSsink
+     *      The sink to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the sink is not valid.
+     */
+    gint DeleteSink(QTMSSink*& qtmssink);
+
+    /**
+     * Creates QTMSGlobalRouting object.
+     *
+     * @param  globrouting
+     *      Created global routing object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if global routing object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if global routing creation failed
+     *      due to lack of memory.
+     *      QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if global routing is not
+     *      supported.
+     *
+     */
+    gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting);
+
+    /**
+     * Deletes QTMSGlobalRouting object.
+     *
+     * @param  globrouting
+     *      Global routing object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if global routing object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the global routing object is invalid.
+     */
+    gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting);
+
+    /**
+     * Create DTMF player object.
+     *
+     * @param  streamtype
+     *     Stream ID to be used to create the DTMF player.
+     *     QTMS_STREAM_UPLINK
+     *     QTMS_STREAM_DOWNLINK
+     *
+     * @param  dtmf
+     *      Created DTMF player.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY if DTMF player creation failed due
+     *      to insufficient memory.
+     *      QTMS_RESULT_FATAL_ERROR if an error occured.
+     *      QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active.
+     *      QTMS_REASON_PERMISSION_DENIED if permission is denied.
+     *
+     */
+    gint CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf);
+
+    /**
+     * Delete DTMF player object.
+     *
+     * @param  dtmf
+     *      DTMF player to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if the DTMF player is not valid.
+     *
+     */
+    gint DeleteDTMF(QTMSDTMF*& dtmf);
+
+    /**
+     * Creates QTMSRingTone player object  for audio ring tone.
+     *
+     * @param  rt
+     *      RingTone player object to be created.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to
+     *      insufficient memory.
+     */
+    gint CreateRingTonePlayer(QTMSRingTone*& rt);
+
+    /**
+     * Deletes QTMSRingTone object.
+     *
+     * @param  rt
+     *      RingTone player object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if RingTone player object is invalid.
+     */
+    gint DeleteRingTonePlayer(QTMSRingTone*& rt);
+
+    /**
+     * Creates QTMSInbandTone player object.
+     *
+     * @param  inbandtone
+     *      InbandTone player object to be created.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is created successfully.
+     *      QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to
+     *      insufficient memory.
+     */
+    gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+    /**
+     * Deletes QTMSInbandTone object.
+     *
+     * @param  inbandtone
+     *      InbandTone player object to be deleted.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS when object is deleted successfully.
+     *      QTMS_RESULT_INVALID_ARGUMENT if InbandTone player object is invalid.
+     */
+    gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+private:
+    /**
+     * Constructor
+     */
+    QTMSFactory();
+
+private:
+    QTMSFactoryImpl* impl;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_FACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_FORMAT_H
+#define QTMS_FORMAT_H
+
+#include <qtms.h>
+#include "qtmswrapperexport.h"
+
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSFormat class
+ *
+ * This is base class for codec format classes. Provides access methods to
+ * configure and query common codec format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * Usage:
+ * <code>
+ *  QTMSFactory* iFactory;
+ *  QTMSFormat* iFormat
+ *  gint err;
+ *  err = QTMSFactory::CreateFactory(iFactory);
+ *  err = iFactory->Create(QTMS_FORMAT_XXX,iFormat);
+ *  ...
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSFormat
+{
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSFormat();
+
+    /**
+     * Get supported bitrates. Returns list of supported bitrates for the
+     * selected encoder
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrates
+     *      The typedef std::vector<guint> BitRateVector; list of codecs.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint GetSupportedBitRates(BitRateVector& bitrates);
+
+    /**
+     * Set bitrate.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrate
+     *      Bitrate to be set for the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_ARGUMENT if requested bitrate is invalid.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetBitRate(const guint bitrate);
+
+    /**
+     * Get current encoder's bitrate.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  bitrate
+     *      Current bitrate.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint GetBitRate(guint& bitrate);
+
+    /**
+     * Return format type.
+     *
+     * @param  fmttype
+     *      Type of the format object.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSFormatType& fmttype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSFormat();
+
+protected:
+    TMS::TMSFormat* iFormat;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G711_FORMAT_H
+#define QTMS_G711_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSG711Format class
+ *
+ * This class provides access methods to configure and query G.711 codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSG711Format: public QObject, public QTMSFormat
+{
+Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSG711Format();
+
+    /**
+     * Set G.711 codec mode.
+     *
+     * This method is allowable when encoding is not active; i.e. anytime
+     * before encoding is started or after it is stopped.
+     *
+     * Supported G.711 codec modes are:
+     *  QTMS_G711_CODEC_MODE_ALAW
+     *  QTMS_G711_CODEC_MODE_MULAW
+     *
+     * @param  mode
+     *      Sets selected G.711 encoding or decoding mode.
+
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      encoding or decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetMode(const QTMSG711CodecMode mode);
+
+    /**
+     * Return current G.711 codec mode.
+     *
+     * This method is allowable at all times, while actively encoding/decoding
+     * or not.
+     *
+     * Supported G.711 codec modes are:
+     *  QTMS_G711_CODEC_MODE_ALAW
+     *  QTMS_G711_CODEC_MODE_MULAW
+     *
+     * @param  mode
+     *      Returns current G.711 encoding or decoding mode.
+
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMode(QTMSG711CodecMode& mode);
+
+    /**
+     * Toggles on and off Comfort Noise Generator (CNG) for G.711 decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Sets CNG feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetCNG(const gboolean cng);
+
+    /**
+     * Returns current CNG setting of the G.711 decoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Current CNG setting of the decoder.
+     *
+     * @return gint
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetCNG(gboolean& cng);
+
+    /**
+     * Toggles on and off Packet Loss Concealment (PLC) for G.711 decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  plc
+     *      Sets PLC feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetPlc(const gboolean plc);
+
+    /**
+     * Returns current PLC setting of the G.711 decoder.
+     *
+     * This method is allowable at all times, while actively decoding or not.
+     *
+     * @param  plc
+     *      Current CNG setting of the decoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetPlc(gboolean& plc);
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for G.711 encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the G.711 encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSG711Format();
+};
+
+} //namespace QTMS
+
+#endif //QTMS_G711_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G729_FORMAT_H
+#define QTMS_G729_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSG729Format class
+ *
+ * This class provides access methods to configure and query G.729 codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSG729Format: public QObject, public QTMSFormat
+{
+Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSG729Format();
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for G.729 encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the G.729 encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSG729Format();
+};
+
+} //namespace QTMS
+
+#endif //QTMS_G729_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GAIN_EFFECT_H
+#define QTMS_GAIN_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSGainEffect class
+ *
+ * This class provides microphone gain level control in the stream scope.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGainEffect : public QObject,
+public QTMSEffect
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGainEffect();
+
+    /**
+     * Set mic gain level. The gain level should not be higher than
+     * the value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Gain level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return mic gain level.
+     *
+     * @param  level
+     *      Current mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max microphone gain level supported by the device.
+     *
+     * @param  level
+     *      Max gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Returns type of the effect.
+     *
+     * This function can be called at any time.
+     *
+     * @param  effecttype
+     *      Variable that contains the effect type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGainEffect();
+
+protected:
+    TMS::TMSEffect *iEffect;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_GAIN_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_GAIN_EFFECT_H
+#define QTMS_GLOBAL_GAIN_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+#include <QObject>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSGlobalGainEffect class
+ *
+ * This class provides microphone gain level control in the global QTMS scope.
+ * Mic gain level changes done by any client are adjusted accross all calls
+ * serviced by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalGainEffect : public QObject,
+                                                     public QTMSEffect
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalGainEffect();
+
+    /**
+     * Set global microphone gain level. The global gain level should be
+     * between 0 and the max value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Gain level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current global microphone gain level.
+     *
+     * @param  level
+     *      Current mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max microphone gain level supported by the device.
+     *
+     * @param  level
+     *      Max mic gain level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object (QTMS_EFFECT_GLOBAL_GAIN).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalGainEffect();
+
+protected:
+    TMS::TMSEffect* iEffect;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_GAIN_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_ROUTING_H
+#define QTMS_GLOBAL_ROUTING_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSGlobalRouting;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSGlobalRouting class
+ *
+ * This class provides audio routing control in the global QTMS scope.
+ * Audio routing changes done by any client are adjusted accross all calls
+ * serviced by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalRouting : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalRouting();
+
+    /**
+     * Set global output device audio should be routed to.
+     *
+     * Settings are call-type dependent.
+     *
+     * Common:
+     *  QTMS_AUDIO_OUTPUT_NONE
+     * VoIP call type:
+     *  QTMS_AUDIO_OUTPUT_PUBLIC
+     *  QTMS_AUDIO_OUTPUT_PRIVATE
+     * CS call type:
+     *  QTMS_AUDIO_OUTPUT_HANDSET
+     *  QTMS_AUDIO_OUTPUT_LOUDSPEAKER
+     *  QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY
+     *  QTMS_AUDIO_OUTPUT_ACCESSORY
+     *  QTMS_AUDIO_OUTPUT_ETTY
+     *
+     * @param  output
+     *      Sets call-specific audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_INVALID_ARGUMENT if set to QTMS_AUDIO_OUTPUT_NONE.
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetOutput(const QTMSAudioOutput output);
+
+    /**
+     * Return current global audio output device settings.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  output
+     *      Current audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetOutput(QTMSAudioOutput& output);
+
+    /**
+     * Return previous audio output device.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  output
+     *      Previous audio output device.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetPreviousOutput(QTMSAudioOutput& output);
+
+    /**
+     * Return list of supported audio output devices.
+     *
+     * Settings are call-type dependent.
+     * See SetOutput() (above)
+     *
+     * @param  outputs
+     *      The typedef std::vector<guint> OutputVector; list of supported
+     *      audio output devices (QTMSAudioOutput-type).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetAvailableOutputs(OutputVector& outputs);
+
+    Q_SIGNALS:
+    void GlobalRoutingEvent(const QTMSGlobalRouting& routing,
+        QTMSSignalEvent event, QTMSAudioOutput output);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalRouting();
+
+protected:
+    TMS::TMSGlobalRouting* iRouting;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_ROUTING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_VOL_EFFECT_H
+#define QTMS_GLOBAL_VOL_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include <QObject>
+#include <qglobal.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSGlobalVolEffect class
+ *
+ * This class provides volume level control in the global QTMS scope. Volume
+ * level changes done by any client are adjusted accross all calls serviced
+ * by the QTMS server.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalVolEffect : public QObject,
+                                                    public QTMSEffect
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSGlobalVolEffect();
+
+    /**
+     * Set global audio volume level. The volume level should be between 0
+     * and the max value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      the volume level to be set.
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current global audio volume level.
+     *
+     * @param  level
+     *      Volume level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max volume level supported by the device.
+     *
+     * @param  level
+     *      Max volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Return effect type.
+     *
+     * @param  effecttype
+     *      Type of the effect object (QTMS_EFFECT_GLOBAL_VOL).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSGlobalVolEffect();
+
+protected:
+    TMS::TMSEffect* iEffect;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_GLOBAL_VOL_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_ILBC_FORMAT_H
+#define QTMS_ILBC_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSILBCFormat class
+ *
+ * This class provides access methods to configure and query iLBC codec
+ * format settings.
+ *
+ * This format class can be used for both the encoder and decoder.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSILBCFormat: public QObject, public QTMSFormat
+{
+Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSILBCFormat();
+
+    /**
+     * Set iLBC codec mode.
+     *
+     * This method is allowable when encoding is not active; i.e. anytime
+     * before encoding is started or after it is stopped.
+     *
+     * Supported iLBC codec modes are:
+     *  QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME
+     *  QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME
+     *
+     * @param  mode
+     *      Sets selected iLBC encoding or decoding mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      encoding or decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetMode(const QTMSILBCCodecMode mode);
+
+    /**
+     * Return current iLBC codec mode.
+     *
+     * This method is allowable at all times, while actively encoding/decoding
+     * or not.
+     *
+     * Supported iLBC codec modes are:
+     *  QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME
+     *  QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME
+     *
+     * @param  mode
+     *      Returns current iLBC encoding or decoding mode.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMode(QTMSILBCCodecMode& mode);
+
+    /**
+     * Toggles on and off Comfort Noise Generator (CNG) for iLBC decoder.
+     * Not supported by the encoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Sets CNG feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_INVALID_STATE if this method is used during active
+     *      decoding operation.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetCNG(const gboolean cng);
+
+    /**
+     * Returns current CNG setting of the iLBC decoder.
+     *
+     * This method is allowable when decoding is not active; i.e. anytime
+     * before decoding is started or after it is stopped.
+     *
+     * @param  cng
+     *      Current CNG setting of the decoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetCNG(gboolean& cng);
+
+    /**
+     * Toggles on and off Voice Activation Detection (VAD) for iLBC encoder.
+     * Not supported by the decoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Sets VAD feature on or off.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *      QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented
+     *      by the adaptation.
+     *      QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does
+     *      not exist.
+     *
+     */
+    gint SetVADMode(const gboolean vad);
+
+    /**
+     * Returns current VAD setting of the iLBC encoder.
+     *
+     * This method is allowable at all times, while actively encoding or not.
+     *
+     * @param  vad
+     *      Current VAD setting of the encoder.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetVADMode(gboolean& vad);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSILBCFormat();
+};
+
+} //namespace QTMS
+
+#endif //QTMS_ILBC_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_INBAND_TONE_H
+#define QTMS_INBAND_TONE_H
+
+#include <glib.h>
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSInbandTone;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSInbandTone class
+ *
+ * This class provides Inband tone playback capability to the QTMS clients.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSInbandTone : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSInbandTone();
+
+    /**
+     * Starts the inband tone playback. The inband volume will correspond to
+     * the current downlink volume level.
+     *
+     * For CS calltype.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Start(QTMSInbandToneType inbandtonetype);
+
+    /**
+     * Stops the inband tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    Q_SIGNALS:
+    void InbandToneEvent(const QTMSInbandTone& inbandtone,
+        QTMSSignalEvent event);
+
+protected:
+
+    /**
+     * Constructor
+     */
+    QTMSInbandTone();
+
+protected:
+    TMS::TMSInbandTone* iInbandTone;
+};
+
+} //namespace QTMS
+
+#endif //__QTMS_INBAND_TONE_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MIC_SOURCE_H
+#define QTMS_MIC_SOURCE_H
+
+#include <qtms.h>
+#include <qtmssource.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSMicSource class
+ *
+ * This class instantiates QTMS mic source object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSMicSource : public QObject,
+                                              public QTMSSource
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSMicSource();
+
+    /**
+     * Return source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      The type of sink object (QTMS_SOURCE_MIC).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSMicSource();
+
+protected:
+    TMS::TMSSource *iSource;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_MIC_SOURCE_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SINK_H
+#define QTMS_MODEM_SINK_H
+
+#include <qtms.h>
+#include <qtmssink.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSModemSink class
+ *
+ * This class instantiates QTMS modem sink object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSModemSink : public QObject,
+                                              public QTMSSink
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSModemSink();
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_MODEM).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSModemSink();
+
+protected:
+    TMS::TMSSink *iSink;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_MODEM_SINK_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SOURCE_H
+#define QTMS_MODEM_SOURCE_H
+
+#include <qtms.h>
+#include <qtmssource.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSModemSource class
+ *
+ * This class instantiates QTMS mode source object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSModemSource : public QObject,
+                                                public QTMSSource
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSModemSource();
+
+    /**
+     * Return source type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      The type of sink object (QTMS_SOURCE_MODEM).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSModemSource();
+
+protected:
+    TMS::TMSSource *iSource;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_MODEM_SOURCE_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_PCM_FORMAT_H
+#define QTMS_PCM_FORMAT_H
+
+#include <qtms.h>
+#include <qtmsformat.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSPCMFormat class
+ *
+ * This class provides access methods to configure and query PCM-16 codec
+ * format settings.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSPCMFormat: public QObject, public QTMSFormat
+{
+Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSPCMFormat();
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSPCMFormat();
+};
+
+} //namespace QTMS
+
+#endif //QTMS_PCM_FORMAT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_RINGTONE_H
+#define QTMS_RINGTONE_H
+
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSRingTone;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSRingTone class
+ *
+ * This class provides ring tone playback capability to the QTMS clients.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSRingTone : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSRingTone();
+
+    /**
+     * Init ring tone player to play supplied content based on its type.
+     *
+     * @param  type
+     *      Type of the content descriptor. Allowed types:
+     *          - QTMS_RINGTONE_DEFAULT - use RT from current Profile
+     *          - QTMS_RINGTONE_FILE  - A/V File
+     *          - QTMS_RINGTONE_SEQUENCE - RNG sequence in the descriptor format
+     *          - QTMS_RINGTONE_BEEP_ONCE - play a beep
+     *          - QTMS_RINGTONE_SILENT - play silent tone
+     *          - QTMS_RINGTONE_UNSECURE_VOIP - play tone for uncecure VoIP call
+     *
+     * @param  str
+     *      Content descriptor to play. String containing one of the following:
+     *          - File with folder name
+     *          - Nokia ring tone sequence in a descriptor format
+     *          - NULL - Will use current Profile.
+     *
+     * @param  tts
+     *      Text to be played. When added it will be played along with the
+     *      tone. TTS can only be played with QTMS_RINGTONE_DEFAULT and
+     *      TMS_RINGTONE_FILE. Parameter will be ignored for all other types.
+     *          - NULL - Will use current Profile TTS setting - caller's name
+     *            will be played from the phone book (if available).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Init(const QTMSRingToneType type = QTMS_RINGTONE_DEFAULT,
+        GString* str = NULL, GString* tts = NULL);
+
+    /**
+     * Deinit ring tone player.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Deinit();
+
+    /**
+     * Start ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Play();
+
+    /**
+     * Stop ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Pause video ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Pause();
+
+    /**
+     * Mute ring tone playback.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint Mute();
+
+    Q_SIGNALS:
+    void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSRingTone();
+
+protected:
+    TMS::TMSRingTone *iRingTone;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_RINGTONE_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SINK_H
+#define QTMS_SINK_H
+
+#include <qtms.h>
+
+namespace QTMS
+{
+
+/**
+ * QTMSSink class
+ *
+ * Base class for QTMS data sink type objects.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSSink
+{
+public:
+    /**
+     * Returns type of the concrete data sink object implementation.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype&
+     *      Contains data sink type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink type is returned successfully.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype) = 0;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_SINK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SOURCE_H
+#define QTMS_SOURCE_H
+
+#include <qtms.h>
+
+namespace QTMS
+{
+
+/**
+ * QTMSSource class
+ *
+ * Base class for QTMS data source type objects.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMSSource
+{
+public:
+    /**
+     * Returns type of the concrete data source object implementation.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sourcetype
+     *      Contains data source type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source type is returned successfully.
+     *
+     */
+    virtual gint GetType(QTMSSourceType& sourcetype) = 0;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_SOURCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SPEAKER_SINK_H
+#define QTMS_SPEAKER_SINK_H
+
+#include <qtms.h>
+#include <qtmssink.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSSpeakerSink class
+ *
+ * This class instantiates QTMS speaker sink object.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSSpeakerSink : public QObject,
+                                                public QTMSSink
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSSpeakerSink();
+
+    /**
+     * Return sink type.
+     *
+     * This function can be called at any time.
+     *
+     * @param  sinktype
+     *      The type of sink object (QTMS_SINK_SPEAKER).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSSinkType& sinktype);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSSpeakerSink();
+
+protected:
+    TMS::TMSSink *iSink;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_SPEAKER_SINK_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,527 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_STREAM_H
+#define QTMS_STREAM_H
+
+// Include files
+#include <qtms.h>
+#include <QObject>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSStream;
+}
+
+namespace QTMS
+{
+
+// Forward declarations
+class QTMSSource;
+class QTMSSink;
+class QTMSEffect;
+class QTMSFormat;
+class QTMSBuffer;
+
+/**
+ * QTMSStream class
+ *
+ * QTMSStream class represents either uplink or downlink stream associated with
+ * a QTMSCall.
+ *
+ * This class provides means for setting up and controlling telephony
+ * multimedia streams associated with a Circuit Switching (CS) call or Packet
+ * Switching (PS) such as IP call.
+ *
+ * QTMSStream instances are created by QTMSCall instance. Multiple QTMSStream
+ * instances (uplink and/or downlink streams) can be created. The QTMS engine
+ * does not limit the number of streams created per QTMSCall object. However,
+ * the combination of device policy and device run-time resources (both
+ * software and hardware) may limit this use-case.
+ *
+ * QTMSCall is a container which owns all its QTMSStream instances. The client
+ * has an option of creating and deleting individual streams. However, when a
+ * QTMSCall instance is deleted, all the streams associated with it are
+ * automatically deleted as well.
+ *
+ * QTMS ver 1.0.0.0:
+ *  (1) An initialized stream will have one source, zero or one format,
+ *  zero or more effects, and one or more sinks.
+ *
+ *  (2) In the initial version of the QTMS implementation, the CS uplink and
+ *  downlink streams will not control or communicate with the cellular modem.
+ *  Also, the PS (IP) uplink and downlink streams will not handle network
+ *  protocol. It is assumed that the QTMS client will handle this functionality.
+ *
+ * States:
+ *  (1) QTMS_STREAM_UNINITIALIZED (initial state): The stream is alive but has
+ *  not allocated all the resources it needs to function.
+ *
+ *  (2) QTMS_STREAM_INITIALIZED: The stream has all the information required to
+ *  acquire the media resources. Stream in this state will have most of the
+ *  resources allocated, except the critical system resources, such as policy
+ *  and/or hardware resources.
+ *
+ *  (3) QTMS_STREAM_PAUSED: The stream has all the resources allocated, which may
+ *  include critical system resources such as policy and/or hardware resources.
+ *
+ *  (4) QTMS_STREAM_STARTED: The stream has all the resources allocated,
+ *  including critical system resources such as policy and/or hardware resources
+ *  and is active.
+ *
+ * Usage:
+ * <code>
+ * QTMSFactory *iFactory;
+ * QTMSCall *iCall;
+ * QTMSStream *iUplink;
+ * QTMSStream *iDownlink;
+ * gint err;
+ *
+ * err = QTMSFactory::CreateFactory(iFactory);
+ * err = iFactory->CreateCall(QTMS_CALL_IP, iCall);
+ * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink);
+ * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink);
+ * // Configure CS uplink stream
+ * iUplinkStream->AddObserver(*this);
+ * iUplinkStream->AddSource(iMicSource);
+ * iUplinkStream->AddSink(iModemSink);
+ * iUplinkStream->AddEffect(iGainEffect); // To control mic gain
+ * iUplinkStream->Init();
+ * // Wait for state change callback
+ * iUplinkStream->Play();
+ * // Wait for state change callback
+ * ...
+ * // call terminated on the cell modem side, now signal multimedia system
+ * iUplinkStream->Stop();
+ * ...
+ *  err = iCall->DeleteStream(iDownlink);
+ *  err = iCall->DeleteStream(iUplink);
+ *  err = iFactory->DeleteCall(iCall);
+ * delete iFactory;
+ *
+ * </code>
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+
+class QTMS_WRAPPER_DLL_EXPORT QTMSStream : public QObject
+{
+    Q_OBJECT
+public:
+
+    /**
+     * Destructor
+     */
+    virtual ~QTMSStream();
+
+    /**
+     * Add source for this stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After source is added to the stream successfully, ownership of the source
+     * is vested in this stream. If the client wants to reuse the source, it
+     * should call RemoveSource() to re-claim QTMSSource ownership.
+     *
+     * @param  source
+     *      Source object to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if source is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if source has already been added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddSource(QTMSSource* source);
+
+    /**
+     * Remove source from this stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After source is removed from the stream successfully, ownership of
+     * source is re-claimed by the client.
+     *
+     * @param  source
+     *      The source to remove.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if source is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if source is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove the source that has
+     *      not been added to stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveSource(QTMSSource* source);
+
+    /**
+     * Add sink to the stream.
+     *
+     * Multiple sinks of different types can be added to a stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After sink is added to the stream successfully, ownership of the sink is
+     * vested in the stream. If the client wants to reuse sink, it should call
+     * RemoveSink() to re-claim QTMSSink ownership.
+     *
+     * @param  sink
+     *      Data sink to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if sink is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if sink type is already added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddSink(QTMSSink* sink);
+
+    /**
+     * Remove sink from the stream.
+     *
+     * This function can be called only when stream is in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After sink is removed from the stream successfully, ownership of the
+     * sink is re-claimed by the client.
+     *
+     * @param  sink
+     *      Sink to removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if sink is removed successfully from the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if sink is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove sink that has not
+     *      been added to the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveSink(QTMSSink* sink);
+
+    /**
+     * Set data format for the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After format is added to the stream successfully, ownership of the
+     * format is vested in this stream. If the client wants to reuse format,
+     * it should call ResetFormat() to re-claim QTMSFormat ownership.
+     *
+     * Note: In QTMS Ver 1.0.0.0, setting data format for CS call is not
+     * required.
+     *
+     * @param  format
+     *      Data format to be set on the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is set successfully on the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if format is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if format is already set on the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not
+     *      in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint SetFormat(QTMSFormat* format);
+
+    /**
+     * Remove data format from the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After format is removed from the stream successfully, ownership of
+     * the format object is re-claimed by the client.
+     *
+     * @param  format
+     *      Data format to be removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if format is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if format is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if format is not currently set on the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint ResetFormat(QTMSFormat* format);
+
+    /**
+     * Add an effect to the stream.
+     *
+     * Multiple effect objects of different types can be added to the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After effect is added to the stream successfully, ownership of the
+     * effect is vested in the stream. If the client wants to reuse the effect,
+     * it shall call RemoveEffect() to re-claim QTMSEffect ownership.
+     *
+     * @param  effect
+     *      Stream effect to be added to the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is added successfully to the stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if effect is a NULL.
+     *      QTMS_RESULT_ALREADY_EXIST if effect type is already added to the
+     *      stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint AddEffect(QTMSEffect* effect);
+
+    /**
+     * Remove effect from the stream.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * After effect is removed from the stream successfully, ownership of the
+     * effect is re-claimed by the client.
+     *
+     * @param  effect
+     *      Stream effect to be removed from the stream.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if effect is removed successfully from the
+     *      stream.
+     *      QTMS_RESULT_NULL_ARGUMENT if effect is a NULL.
+     *      QTMS_RESULT_DOES_NOT_EXIST if trying to remove an effect that has
+     *      not been added to the stream.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    gint RemoveEffect(QTMSEffect* effect);
+
+    /**
+     * Get current state of the stream.
+     *
+     * This function can be called at any time.
+     *
+     * Possible states are:
+     *  QTMS_STREAM_UNINITIALIZED,
+     *  QTMS_STREAM_INITIALIZED,
+     *  QTMS_STREAM_PAUSED,
+     *  QTMS_STREAM_STARTED.
+
+     * @return
+     *      Stream's current state.
+     *
+     */
+    gint GetState();
+
+    /**
+     * Get stream ID.
+     *
+     * This function can be called at any time.
+     *
+     * @return
+     *      Unique ID of the stream.
+     *
+     */
+    gint GetStreamId();
+
+    /**
+     * Get stream type.
+     *
+     * This function can be called at any time.
+     *
+     * The possible types are:
+     *  TMS_STREAM_UPLINK
+     *  TMS_STREAM_DOWNLINK
+     *
+     * @return
+     *      Stream type indicating whether it is an uplink or downlink.
+     *
+     */
+    gint GetStreamType();
+
+    /**
+     * Trigger stream to transition to the initialized state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * If Init() is called when stream is already in initialized state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to initialized state, the stream will
+     * be in the QTMS_STREAM_INITIALIZED state.
+     *
+     * Before stream can transition to initialized state the following
+     * objects must be added to the stream:
+     *      CS call: UPL: mic source and modem sink
+     *      CS call: DNL: modem source and speaker sink
+     *      IP call: UPL: mic source, codec format and client sink
+     *      IP call: DNL: client source, codec format and speaker sink
+     *
+     * @param  retrytime
+     *      Indicates (in seconds) for how long TMS should retry stream
+     *      initialization in case of an error. When stream initialization
+     *      fails within specified retry time, TMS will return
+     *      TMS_EVENT_STREAM_STATE_CHANGE_ERROR. If set to 0, TMS will return
+     *      TMS_EVENT_STREAM_STATE_CHANGE_ERROR immediately without retrying.
+     *      If set to -1, TMS will keep retrying until user cancels by calling
+     *      either Stop() or Deinit().
+     *
+     * @return
+     *      Common return codes:
+     *      QTMS_RESULT_SUCCESS if stream transitioned to the initialized state.
+     *      QTMS_RESULT_INVALID_STATE if stream has not transitioned to the
+     *      QTMS_STREAM_INITIALIZED state.
+     *      QTMS_RESULT_FORMAT_TYPE_UNSPECIFIED (IP call only) when stream
+     *      has no format attached to it.
+     *      QTMS_RESULT_UNINITIALIZED_OBJECT when stream has no sink or source
+     *      element attached to it.
+     *
+     */
+    gint Init(gint retrytime = 0);
+
+    /**
+     * Trigger stream to transition to the paused state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_UNINITIALIZED or QTMS_STREAM_STARTED state.
+     *
+     * If Pause() is called when stream is already in paused state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to the paused state, the stream will
+     * be in the QTMS_STREAM_PAUSED state.
+     *
+     * Note: In QTMS Ver 1.0.0.0, pausing stream for CS call is not supported.
+     *
+     * @return
+     *      Common return codes:
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the
+     *      paused state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state.
+     *
+     */
+    gint Pause();
+
+    /**
+     * Trigger stream to transition to the started state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state.
+     *
+     * If Start() is called when stream is already in the started state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * If Start() is called when stream is already in the initialized state, the
+     * stream will implicitly pause, but the observer will only receive one
+     * state change callback.
+     *
+     * Upon stream's successful transition to the started state, the stream will
+     * be in the QTMS_STREAM_STARTED state.
+     *
+     * @param  retrytime
+     *      Indicates (in seconds) for how long TMS should attempt to start
+     *      a stream in case of an error. When stream starting fails within
+     *      specified retry time, TMS will return
+     *      QTMS_EVENT_STREAM_STATE_CHANGE_ERROR. If set to 0, TMS will return
+     *      QTMS_EVENT_STREAM_STATE_CHANGE_ERROR immediately without retrying.
+     *      If set to -1, TMS will keep retrying until user cancels by calling
+     *      either Stop() or Deinit().
+     *
+     * @return
+     *      Common return codes:
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the
+     *      started state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_INITIALIZED or QTMS_STREAM_STARTED state.
+     *
+     */
+    gint Start(gint retrytime = 0);
+
+    /**
+     * Trigger stream to transition to the initialized state.
+     *
+     * This function can be called only when stream is in the
+     * QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state.
+     *
+     * If Stop() is called when stream is already in the stopped state, the
+     * request will be ignored and the function will return QTMS_RESULT_SUCCESS.
+     *
+     * Upon stream's successful transition to the started state, the stream will
+     * be in the QTMS_STREAM_INITIALIZED state.
+     *
+     * @return
+     *      Common return codes:
+     *      QTMS_RESULT_SUCCESS if stream successfully transitioned to the
+     *      stopped state.
+     *      QTMS_RESULT_INVALID_STATE if stream is not in the
+     *      QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state.
+     *
+     */
+    gint Stop();
+
+    /**
+     * Trigger stream to transition to un-initialized state.
+     *
+     * This function can be called only when stream is NOT in
+     * QTMS_STREAM_UNINITIALIZED state.
+     *
+     * If Deinit() is called when stream is already in un-initialized state, the
+     * request will be ignored.
+     *
+     * Upon stream's successful transition to the un-initialized state, the
+     * stream will be in the QTMS_STREAM_UNINITIALIZED state.
+     *
+     */
+    void Deinit();
+
+    Q_SIGNALS:
+    void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSStream();
+
+protected:
+    TMS::TMSStream *iStream;
+};
+
+} //namespace QTMS
+
+#endif // QTMS_STREAM_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_VOLUME_EFFECT_H
+#define QTMS_VOLUME_EFFECT_H
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include "qtmswrapperexport.h"
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+/**
+ * QTMSVolumeEffect class
+ *
+ * This class provides volume level control in the stream scope.
+ *
+ * @lib QTMSapi.lib
+ *
+ */
+class QTMS_WRAPPER_DLL_EXPORT QTMSVolumeEffect : public QObject,
+                                                 public QTMSEffect
+{
+    Q_OBJECT
+public:
+    /**
+     * Destructor
+     */
+    virtual ~QTMSVolumeEffect();
+
+    /**
+     * Set audio volume level. The volume level should not be higher than
+     * the value returned by GetMaxLevel().
+     *
+     * @param  level
+     *      Volume level to be set.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint SetLevel(const guint level);
+
+    /**
+     * Return current audio volume level settings.
+     *
+     * @param  level
+     *      Volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetLevel(guint& level);
+
+    /**
+     * Return max volume level supported by the device.
+     *
+     * @param  level
+     *      Max volume level.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    gint GetMaxLevel(guint& level);
+
+    /**
+     * Returns type of the effect.
+     *
+     * This function can be called at any time.
+     *
+     * @param  effecttype
+     *      Variable that contains the effect type on return.
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSEffectType& effecttype);
+
+    Q_SIGNALS:
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+
+protected:
+    /**
+     * Constructor
+     */
+    QTMSVolumeEffect();
+
+protected:
+    TMS::TMSEffect *iEffect;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_VOLUME_EFFECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ */
+
+#ifndef QTMS_WRAPPER_EXPORT_H_
+#define QTMS_WRAPPER_EXPORT_H_
+
+// System includes
+#include <qglobal.h>
+
+#ifdef BUILD_TMS_WRAPPER_DLL
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // QTMS_WRAPPER_EXPORT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtestmains60.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* 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:
+*
+*/
+
+#ifndef QTESTMAINS60
+#define QTESTMAINS60
+
+#define QTEST_MAIN_S60(QTmsCsTest) \
+int main(int argc, char *argv[]) \
+{ \
+char *new_argv[3]; \
+QCoreApplication app(argc, argv); \
+\
+QString str = "C:\\data\\" + QFileInfo(QCoreApplication::applicationFilePath()).baseName() + ".log"; \
+QByteArray   bytes  = str.toAscii(); \
+\
+char arg1[] = "-o"; \
+\
+new_argv[0] = argv[0]; \
+new_argv[1] = arg1; \
+new_argv[2] = bytes.data(); \
+\
+QTmsCsTest tc; \
+return QTest::qExec(&tc, 3, new_argv); \
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,1109 @@
+/*
+ * 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: QTMS CS test
+ *
+ */
+#include <QObject>
+#include <QtTest/QtTest>
+#include "qtestmains60.h"
+
+#include <qtms.h>
+#include <qtmsfactory.h>
+#include <qtmscall.h>
+#include <qtmsstream.h>
+#include <tmsstreamobsrvr.h>
+#include <qtmsformat.h>
+
+#include <qtmspcmformat.h>
+#include <qtmsamrformat.h>
+#include <qtmsilbcformat.h>
+#include <qtmsg711format.h>
+#include <qtmsg729format.h>
+
+#include <qtmsclientsink.h>
+#include <qtmsclientsource.h>
+#include <qtmsvolumeeffect.h>
+#include <qtmsgaineffect.h>
+#include <qtmsglobalvoleffect.h>
+#include <qtmsglobalgaineffect.h>
+#include <qtmsglobalrouting.h>
+
+#include <qtmsbuffer.h>
+#include <qtmsdtmf.h>
+#include <qtmsringtone.h>
+#include <qtmsinbandtone.h>
+#include <tmsbuffer.h>
+
+using namespace QTMS;
+_LIT8(KRTBeepSequence, "\x00\x11\x0A\x0A\x08\x73\x0A\x40\x28\x0A\xF7\
+\x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B");
+_LIT16(KTestFile1, "c:\\data\\sounds\\digital\\test_8khz.wav");
+
+class QTmsCsTest: public QObject
+{
+Q_OBJECT
+private slots:
+    void initTestCase();
+    void CSCallSetup();
+
+    void CreateUplink();
+    void CreateDnlink();
+    void CreateMicSource();
+    void AddMicSourceToStream();
+    void CreateModemSink();
+    void AddModemSinkToStream();
+    void CreateModemSource();
+    void AddModemSourceToStream();
+    void CreateSpeakerSink();
+    void AddSpeakerSinkToStream();
+
+    void CreateStreamVol();
+    void CreateStreamGain();
+
+    void InitUplink();
+    void InitDnlink();
+
+    void StartUplink();
+    void StopUplink();
+    void StartDnlink();
+
+    void StreamVol();
+    void StreamGain();
+    // void StopDnlink();
+
+    void CreateGlobalVol();
+    void CreateGlobalGain();
+    void CreateRouting_data();
+    void CreateRouting();
+
+    void CreateInband_data();
+    void CreateInband();
+    void CreateDnlinkDtmf();
+    void CreateUplinkDtmf();
+
+    void CreateRingTone();
+
+    void InitRingTonePlayerFromProfiles();
+    void PlayRingTone();
+    void PauseRingTone();
+    void MuteRingTone();
+    void StopRingTone();
+    void CloseRingTonePlayer();
+
+    void CloseUplink();
+    void CloseDownlink();
+    void cleanupTestCase();
+public slots:
+    //From TMSStreamObserver
+    void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event);
+    //From TMSClientSinkObserver
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+    //From TMSGlobalRoutingObserver
+    void GlobalRoutingEvent(const QTMSGlobalRouting& routing, QTMSSignalEvent event,
+        QTMSAudioOutput output);
+    //From TMSRingToneObserver
+    void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event);
+    //From TMSDTMFObserver
+    void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event);
+    //From TMSInbandToneObserver
+    void InbandToneEvent(const QTMSInbandTone& inbandtone, QTMSSignalEvent event);
+
+private:
+    void InitRingToneSequencePlayer();
+    void InitRingTonePlayerFromFile();
+    void StopDnlink();
+    void GetAvailableOutput();
+    void DisplayDevice(QTMSAudioOutput device);
+
+private:
+    QTMSFactory *m_Factory;
+    QTMSCall *m_Call;
+    QTMSDTMF *m_Dnlnkdtmf;
+    QTMSDTMF *m_Uplnkdtmf;
+    QTMSStream *m_Dnlink;
+    QTMSStream *m_Uplink;
+    QTMSSource *m_MicSource;
+    QTMSSource *m_ModemSource;
+    QTMSSink *m_SpeakerSink;
+    QTMSSink *m_ModemSink;
+    QTMSEffect *m_Vol;
+    QTMSEffect *m_Gain;
+    QTMSEffect *m_GlobalVol;
+    QTMSEffect *m_GlobalGain;
+    QTMSGlobalRouting *m_Routing;
+    QTMSInbandTone *m_InbandTonePlayer;
+    QTMSRingTone *m_RingTonePlayer;
+    GString* m_RTStr;
+    GString* m_TTSStr;
+    QSignalSpy *m_UplinkSpy;
+    QSignalSpy *m_DnlinkSpy;
+    QSignalSpy *m_InbandSpy;
+    QSignalSpy *m_RoutingSpy;
+    OutputVector m_Availableoutputs;
+
+};
+
+void QTmsCsTest::initTestCase()
+{
+    qDebug("Start QTms CS tests");
+
+    g_setenv("G_SLICE", "always-malloc", 1);
+    m_Factory = NULL;
+    m_Call = NULL;
+    m_Dnlink = NULL;
+    m_Uplink = NULL;
+    m_MicSource = NULL;
+    m_ModemSource = NULL;
+    m_SpeakerSink = NULL;
+    m_ModemSink = NULL;
+    m_Vol = NULL;
+    m_Gain = NULL;
+    m_GlobalVol = NULL;
+    m_GlobalGain = NULL;
+    m_Routing = NULL;
+    m_Dnlnkdtmf = NULL;
+    m_Uplnkdtmf = NULL;
+    m_InbandTonePlayer = NULL;
+    m_RingTonePlayer = NULL;
+    m_UplinkSpy = NULL;
+    m_DnlinkSpy = NULL;
+
+    QTMSVer *ver(NULL);
+    gint status;
+    status = QTMSFactory::CreateFactory(m_Factory, *ver);
+
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+    qRegisterMetaType<QTMSSignalEvent> ("QTMSSignalEvent");
+    qRegisterMetaType<QTMSAudioOutput> ("QTMSAudioOutput");
+
+}
+
+void QTmsCsTest::cleanupTestCase()
+{
+    qDebug("End QTms tests");
+
+    StopDnlink();
+
+    m_Factory->DeleteSource(m_MicSource);
+    m_Factory->DeleteSource(m_ModemSource);
+    m_Factory->DeleteSink(m_ModemSink);
+    m_Factory->DeleteSink(m_SpeakerSink);
+
+    m_Factory->DeleteDTMF(m_Dnlnkdtmf);
+    m_Factory->DeleteInbandTonePlayer(m_InbandTonePlayer);
+    m_Factory->DeleteRingTonePlayer(m_RingTonePlayer);
+
+    m_Factory->DeleteEffect(m_Vol);
+    m_Factory->DeleteEffect(m_Gain);
+    m_Factory->DeleteEffect(m_GlobalVol);
+    m_Factory->DeleteEffect(m_GlobalGain);
+
+    m_Factory->DeleteGlobalRouting(m_Routing);
+
+    m_Call->DeleteStream(m_Uplink);
+    m_Call->DeleteStream(m_Dnlink);
+
+    m_Factory->DeleteCall(m_Call);
+
+    delete m_Factory;
+
+}
+
+void QTmsCsTest::CSCallSetup()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Factory && !m_Call) {
+        gboolean issupported(FALSE);
+        m_Factory->IsCallTypeSupported(QTMS_CALL_CS, issupported);
+        QVERIFY(issupported == TRUE);
+        status = m_Factory->CreateCall(QTMS_CALL_CS, m_Call, 0);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTMSCallType calltype = m_Call->GetCallType();
+        QVERIFY(calltype == QTMS_CALL_CS);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::CreateUplink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Call) {
+        status = m_Call->CreateStream(QTMS_STREAM_UPLINK, m_Uplink);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        m_UplinkSpy = new QSignalSpy(m_Uplink,
+            SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+
+        QVERIFY( m_UplinkSpy->isValid() );
+
+        //QCOMPARE(m_UplinkSpy->count(), 0 );
+
+
+        connect(m_Uplink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this,
+            SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+
+    }
+}
+
+void QTmsCsTest::CreateDnlink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Call) {
+        status = m_Call->CreateStream(QTMS_STREAM_DOWNLINK, m_Dnlink);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        m_DnlinkSpy = new QSignalSpy(m_Dnlink,
+            SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+
+        QVERIFY( m_DnlinkSpy->isValid() );
+
+        //QCOMPARE(m_DnlinkSpy->count(), 0 );
+
+        connect(m_Dnlink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this,
+            SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+    }
+}
+
+void QTmsCsTest::CreateModemSink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_ModemSink) {
+        status = m_Factory->CreateSink(QTMS_SINK_MODEM, m_ModemSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::CreateModemSource()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_ModemSource) {
+        status = m_Factory->CreateSource(QTMS_SOURCE_MODEM, m_ModemSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::AddModemSinkToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Uplink && m_ModemSink) {
+        status = m_Uplink->AddSink(m_ModemSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::AddModemSourceToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Dnlink && m_ModemSource) {
+        status = m_Dnlink->AddSource(m_ModemSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::CreateMicSource()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_MicSource) {
+        status = m_Factory->CreateSource(TMS_SOURCE_MIC, m_MicSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::AddMicSourceToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Uplink && m_MicSource) {
+        status = m_Uplink->AddSource(m_MicSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::CreateSpeakerSink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_SpeakerSink) {
+        status = m_Factory->CreateSink(QTMS_SINK_SPEAKER, m_SpeakerSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::AddSpeakerSinkToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Dnlink && m_SpeakerSink) {
+        status = m_Dnlink->AddSink(m_SpeakerSink);
+        qDebug("QTMS speaker sink added to stream");
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsCsTest::InitUplink()
+{
+    QVERIFY(m_Uplink->Init() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 1 );
+}
+
+void QTmsCsTest::InitDnlink()
+{
+    QVERIFY(m_Dnlink->Init() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 1 );
+}
+
+void QTmsCsTest::StartUplink()
+{
+    QVERIFY(m_Uplink->Start() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 2 );
+}
+
+void QTmsCsTest::StartDnlink()
+{
+    QVERIFY(m_Dnlink->Start() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 2 );
+}
+void QTmsCsTest::StopUplink()
+{
+    QVERIFY(m_Uplink->Stop() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 3 );
+}
+
+void QTmsCsTest::StopDnlink()
+{
+    QVERIFY(m_Dnlink->Stop() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 3 );
+}
+
+void QTmsCsTest::CloseUplink()
+{
+    m_Uplink->Deinit();
+    QTest::qWait(1000);
+    if (m_Uplink) {
+        if (m_Gain) {
+            QVERIFY(m_Uplink->RemoveEffect(m_Gain)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_MicSource) {
+            QVERIFY(m_Uplink->RemoveSource(m_MicSource)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_ModemSink) {
+            QVERIFY(m_Uplink->RemoveSink(m_ModemSink)== QTMS_RESULT_SUCCESS);
+        }
+    }
+}
+
+void QTmsCsTest::CloseDownlink()
+{
+    m_Dnlink->Deinit();
+    QTest::qWait(1000);
+    if (m_Dnlink) {
+        if (m_Vol) {
+            QVERIFY(m_Dnlink->RemoveEffect(m_Vol)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_ModemSource) {
+            QVERIFY(m_Dnlink->RemoveSource(m_ModemSource)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_SpeakerSink) {
+            QVERIFY(m_Dnlink->RemoveSink(m_SpeakerSink) == QTMS_RESULT_SUCCESS);
+        }
+    }
+
+}
+
+void QTmsCsTest::CreateStreamVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_Vol) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_VOLUME, m_Vol);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSVolumeEffect*> (m_Vol),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        if (m_Dnlink) {
+            status = m_Dnlink->AddEffect(m_Vol);
+        }
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+    }
+}
+
+void QTmsCsTest::StreamVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    guint maxvol(0);
+    if (m_Vol) {
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->GetMaxLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->SetLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint vol(0);
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->GetLevel(vol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(vol,maxvol);
+    }
+}
+
+void QTmsCsTest::CreateStreamGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_Gain) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GAIN, m_Gain);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGainEffect*> (m_Gain),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        if (m_Uplink) {
+            status = m_Uplink->AddEffect(m_Gain);
+        }
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+    }
+}
+
+void QTmsCsTest::StreamGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Gain) {
+        guint maxgain(0);
+        static_cast<QTMSGainEffect*> (m_Gain)->GetMaxLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        static_cast<QTMSGainEffect*> (m_Gain)->SetLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint gain(0);
+        static_cast<QTMSGainEffect*> (m_Gain)->GetLevel(gain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(gain,maxgain);
+    }
+
+}
+
+void QTmsCsTest::CreateGlobalVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_GlobalVol) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, m_GlobalVol);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGlobalVolEffect*> (m_GlobalVol),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        guint maxvol(0);
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->GetMaxLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->SetLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint vol(0);
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->GetLevel(vol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(vol,maxvol);
+
+    }
+}
+
+void QTmsCsTest::CreateGlobalGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_GlobalGain) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, m_GlobalGain);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGlobalGainEffect*> (m_GlobalGain),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        guint maxgain(0);
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->GetMaxLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->SetLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint gain(0);
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->GetLevel(gain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(gain,maxgain);
+
+    }
+}
+
+void QTmsCsTest::CreateRouting_data()
+{
+    gint status;
+    if (m_Factory && !m_Routing) {
+        status = m_Factory->CreateGlobalRouting(m_Routing);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        m_RoutingSpy = new QSignalSpy(m_Routing,
+            SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,
+                    QTMSSignalEvent,
+                    QTMSAudioOutput)));
+
+        QVERIFY( m_RoutingSpy->isValid() );
+
+        // QCOMPARE(m_RoutingSpy->count(), 0 );
+        connect(m_Routing, SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,
+                QTMSSignalEvent,QTMSAudioOutput)), this,
+            SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&,
+                    QTMSSignalEvent,QTMSAudioOutput)));
+    }
+
+    //Populate data and test based on available output
+    GetAvailableOutput();
+}
+
+void QTmsCsTest::CreateRouting()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    QFETCH(QTMSAudioOutput, routing);
+
+    if (m_Routing) {
+        status = m_Routing->SetOutput(routing);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+#ifndef __WINSCW__
+        QTest::qWait(1000);
+        //  QCOMPARE(m_RoutingSpy->count(), 1 );
+#endif
+        QTMSAudioOutput current;
+        status = m_Routing->GetOutput(current);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QCOMPARE(routing,current);
+
+        QTMSAudioOutput previous;
+        status = m_Routing->GetPreviousOutput(previous);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("Previous routing:");
+        DisplayDevice(previous);
+    }
+}
+
+void QTmsCsTest::GetAvailableOutput()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Routing) {
+        status = m_Routing->GetAvailableOutputs(m_Availableoutputs);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        qDebug("Available outputs: %d", m_Availableoutputs.size());
+        std::vector<guint>::iterator iteroutputs = m_Availableoutputs.begin();
+        for (; iteroutputs < m_Availableoutputs.end(); iteroutputs++) {
+            DisplayDevice(*iteroutputs);
+        }
+    }
+}
+
+void QTmsCsTest::DisplayDevice(QTMSAudioOutput device)
+{
+    QTest::addColumn<QTMSAudioOutput>("routing");
+
+    switch (device) {
+    case QTMS_AUDIO_OUTPUT_NONE:
+    {
+        qDebug("none");
+        QTest::newRow("None") << QTMS_AUDIO_OUTPUT_NONE;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_PUBLIC:
+    {
+        qDebug("Public");
+        QTest::newRow("Public") << QTMS_AUDIO_OUTPUT_PUBLIC;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_PRIVATE:
+    {
+        qDebug("Private");
+        QTest::newRow("Private") << QTMS_AUDIO_OUTPUT_PRIVATE;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_HANDSET:
+    {
+        qDebug("Handset");
+        QTest::newRow("Handset") << QTMS_AUDIO_OUTPUT_HANDSET;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_LOUDSPEAKER:
+    {
+        qDebug("Loudspeaker");
+        QTest::newRow("Loud speaker") << QTMS_AUDIO_OUTPUT_LOUDSPEAKER;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY:
+    {
+        qDebug("Wired accessory");
+        QTest::newRow("Wired accessory") << QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_ACCESSORY:
+    {
+        qDebug("Accessory");
+        QTest::newRow("Accessory") << QTMS_AUDIO_OUTPUT_ACCESSORY;
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_ETTY:
+    {
+        qDebug("TTY");
+        QTest::newRow("ETTY") << QTMS_AUDIO_OUTPUT_ETTY;
+    }
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsCsTest::CreateDnlinkDtmf()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    GString* dtmfstring(NULL);
+
+    status = m_Factory->CreateDTMF(QTMS_STREAM_DOWNLINK, m_Dnlnkdtmf);
+
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+    if (m_Dnlnkdtmf) {
+        QSignalSpy dtmfspy(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        QVERIFY( dtmfspy.isValid() );
+
+        //QCOMPARE(dtmfspy.count(), 0 );
+
+        connect(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this,
+            SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        dtmfstring = g_string_new("4723");
+        status = m_Dnlnkdtmf->SetTone(dtmfstring);
+
+        m_Dnlnkdtmf->Start();
+        QTest::qWait(1000);
+        g_string_free(dtmfstring, TRUE);
+        //QCOMPARE(dtmfspy.count(), 1 );
+
+        status = m_Dnlnkdtmf->Stop();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        //QCOMPARE(dtmfspy.count(), 2 );
+
+    }
+}
+
+void QTmsCsTest::CreateUplinkDtmf()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    GString* dtmfstring(NULL);
+
+    status = m_Factory->CreateDTMF(QTMS_STREAM_UPLINK, m_Uplnkdtmf);
+
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+    if (m_Uplnkdtmf) {
+        QSignalSpy uplinkdtmfspy(m_Uplnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        QVERIFY( uplinkdtmfspy.isValid() );
+
+        //QCOMPARE(dtmfspy.count(), 0 );
+
+        connect(m_Uplnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this,
+            SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        dtmfstring = g_string_new("4723");
+        status = m_Uplnkdtmf->SetTone(dtmfstring);
+
+        m_Uplnkdtmf->Start();
+        QTest::qWait(1000);
+        g_string_free(dtmfstring, TRUE);
+        //QCOMPARE(dtmfspy.count(), 1 );
+
+        m_Uplnkdtmf->ContinueDTMFStringSending(FALSE);
+
+        status = m_Uplnkdtmf->Stop();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        //QCOMPARE(dtmfspy.count(), 2 );
+
+    }
+}
+
+void QTmsCsTest::CreateInband_data()
+{
+
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Factory && !m_InbandTonePlayer) {
+        status = m_Factory->CreateInbandTonePlayer(m_InbandTonePlayer);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        m_InbandSpy = new QSignalSpy(m_InbandTonePlayer,
+            SIGNAL(InbandToneEvent(const QTMSInbandTone&,QTMSSignalEvent)));
+
+        QVERIFY( m_InbandSpy->isValid() );
+
+        //QCOMPARE(m_InbandSpy->count(), 0 );
+        connect(m_InbandTonePlayer,
+            SIGNAL(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent)), this,
+            SLOT(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent)));
+    }
+
+    QTest::addColumn<QTMSInbandToneType>("inbandTone");
+
+    QTest::newRow("Busy") << QTMS_INBAND_USER_BUSY;
+    QTest::newRow("Path not avail") << QTMS_INBAND_RADIO_PATH_NOT_AVAIL;
+    QTest::newRow("Congestion") << QTMS_INBAND_CONGESTION;
+    QTest::newRow("Special info") << QTMS_INBAND_SPECIAL_INFO;
+    QTest::newRow("Reorder") << QTMS_INBAND_REORDER;
+    QTest::newRow("Remote alerting") << QTMS_INBAND_REMOTE_ALEARTING;
+    QTest::newRow("call waiting") << QTMS_INBAND_CALL_WAITING;
+    QTest::newRow("data call") << QTMS_INBAND_DATA_CALL;
+    QTest::newRow("no sequence") << QTMS_INBAND_NO_SEQUENCE;
+    QTest::newRow("beep sequence") << QTMS_INBAND_BEEP_SEQUENCE;
+
+}
+
+void QTmsCsTest::CreateInband()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    QFETCH(QTMSInbandToneType, inbandTone);
+
+    if (m_InbandTonePlayer) {
+        status = m_InbandTonePlayer->Start(inbandTone);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        // QCOMPARE(m_InbandSpy->count(), 1 );
+
+        status = m_InbandTonePlayer->Stop();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        // QCOMPARE(m_InbandSpy->count(), 2 );
+    }
+}
+
+void QTmsCsTest::CreateRingTone()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory) {
+        status = m_Factory->CreateRingTonePlayer(m_RingTonePlayer);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(m_RingTonePlayer, SIGNAL(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)), this,
+            SLOT(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)));
+    }
+
+}
+
+void QTmsCsTest::InitRingTonePlayerFromProfiles()
+{
+    if (m_RingTonePlayer) {
+        gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_DEFAULT);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+    }
+
+}
+
+void QTmsCsTest::InitRingTonePlayerFromFile()
+{
+    if (m_RingTonePlayer) {
+        TBuf<sizeof(KTestFile1)> buf(KTestFile1);
+        m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length() * 2);
+        gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_FILE, m_RTStr);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        g_string_free(m_RTStr, TRUE);
+        m_RTStr = NULL;
+    }
+
+}
+
+void QTmsCsTest::InitRingToneSequencePlayer()
+{
+    if (m_RingTonePlayer) {
+        TBuf8<sizeof(KRTBeepSequence)> buf(KRTBeepSequence);
+        m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length());
+        gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_SEQUENCE, m_RTStr);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        g_string_free(m_RTStr, TRUE);
+    }
+}
+
+void QTmsCsTest::PlayRingTone()
+{
+    if (m_RingTonePlayer) {
+        gint status = m_RingTonePlayer->Play();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+    }
+}
+
+void QTmsCsTest::PauseRingTone()
+{
+    if (m_RingTonePlayer) {
+        gint status = m_RingTonePlayer->Pause(); //pause audio for video RT only
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+    }
+}
+
+void QTmsCsTest::StopRingTone()
+{
+    if (m_RingTonePlayer) {
+        gint status = m_RingTonePlayer->Stop();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+    }
+}
+
+void QTmsCsTest::MuteRingTone()
+{
+    if (m_RingTonePlayer) {
+        m_RingTonePlayer->Mute();
+    }
+}
+
+void QTmsCsTest::CloseRingTonePlayer()
+{
+    if (m_Factory && m_RingTonePlayer) {
+        m_RingTonePlayer->Deinit();
+        m_Factory->DeleteRingTonePlayer(m_RingTonePlayer);
+    }
+}
+
+void QTmsCsTest::EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event)
+{
+    QTMSEffectType effecttype;
+    const_cast<QTMSEffect&> (tmseffect).GetType(effecttype);
+
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+
+    switch (effecttype) {
+    case TMS_EFFECT_GLOBAL_VOL:
+    {
+        switch (event.type) {
+        case TMS_EVENT_EFFECT_VOL_CHANGED:
+            qDebug("Global vol effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case TMS_EFFECT_GLOBAL_GAIN:
+    {
+        switch (event.type) {
+        case TMS_EVENT_EFFECT_GAIN_CHANGED:
+            qDebug("Global gain effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case TMS_EFFECT_VOLUME:
+        qDebug("Stream vol effect change");
+        break;
+    case TMS_EFFECT_GAIN:
+        qDebug("Stream gain effect change");
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsCsTest::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/, QTMSSignalEvent event,
+    QTMSAudioOutput /*output*/)
+{
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case TMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED:
+        qDebug("Available outputs changed");
+        break;
+    case TMS_EVENT_ROUTING_OUTPUT_CHANGED:
+        qDebug("output changed");
+        break;
+    case TMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE:
+        qDebug("set output complete");
+        break;
+    default:
+        break;
+    }
+
+}
+
+void QTmsCsTest::TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event)
+{
+
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+
+    gint streamId;
+    streamId = const_cast<QTMSStream&> (stream).GetStreamId();
+    qDebug("StreamID %d", streamId);
+    gint state;
+    state = const_cast<QTMSStream&> (stream).GetState();
+    QVERIFY(state == event.curr_state);
+
+    switch (const_cast<QTMSStream&> (stream).GetStreamType()) {
+    case QTMS_STREAM_UPLINK:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_STREAM_STATE_CHANGED:
+        {
+            switch (event.curr_state) {
+            case QTMS_STREAM_INITIALIZED:
+            {
+                qDebug("Uplink initialized ");
+                break;
+            }
+            case QTMS_STREAM_UNINITIALIZED:
+                qDebug("Uplink uninitialized ");
+                break;
+            case QTMS_STREAM_PAUSED:
+                qDebug("Uplink paused ");
+                break;
+            case QTMS_STREAM_STARTED:
+                qDebug("Uplink started ");
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        default:
+            break;
+        }
+        break;
+    }
+    case QTMS_STREAM_DOWNLINK:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_STREAM_STATE_CHANGED:
+        {
+            switch (event.curr_state) {
+            case QTMS_STREAM_INITIALIZED:
+            {
+                qDebug("Downlink initialized ");
+                break;
+            }
+            case QTMS_STREAM_UNINITIALIZED:
+                qDebug("Downlink uninitialized ");
+                break;
+            case QTMS_STREAM_PAUSED:
+                qDebug("Downlink paused ");
+                break;
+            case QTMS_STREAM_STARTED:
+                qDebug("Downlink started ");
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        default:
+            break;
+        }
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+void QTmsCsTest::RingtoneEvent(const QTMSRingTone& /*rt*/, QTMSSignalEvent event)
+{
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case TMS_EVENT_RINGTONE_OPEN_COMPLETE:
+        qDebug("RT Open Complete");
+        break;
+    case TMS_EVENT_RINGTONE_PLAY_COMPLETE:
+        qDebug("RT Play Complete");
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsCsTest::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event)
+{
+    if (event.reason != QTMS_RESULT_SUCCESS) {
+        QEXPECT_FAIL("","Need to be in call, expect uplink dtmf to fail", Continue);
+    }
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+
+    switch (event.type) {
+    case QTMS_EVENT_DTMF_TONE_STARTED:
+        qDebug("DTMF Started");
+        break;
+    case QTMS_EVENT_DTMF_TONE_STOPPED:
+        qDebug("DTMF Stopped");
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsCsTest::InbandToneEvent(const QTMSInbandTone& /*inbandtone*/, QTMSSignalEvent event)
+{
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case QTMS_EVENT_INBAND_TONE_STARTED:
+        qDebug("Inband Tone Started");
+        break;
+    case QTMS_EVENT_INBAND_TONE_STOPPED:
+        qDebug("Inband Tone Stopped");
+        break;
+    default:
+        break;
+    }
+}
+
+QTEST_MAIN_S60(QTmsCsTest)
+
+#include "qtmscstest.moc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.pro	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,43 @@
+#
+# 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:
+# Project specification file for tsrc.
+#
+
+
+CONFIG += qtestlib
+TEMPLATE = app
+TARGET = 
+TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD
+TARGET.EPOCALLOWDLLDATA	= 1
+
+
+LIBS +=	-lqtmsapi \
+        -llibglib \
+        -llibgobject \
+        -llibgmodule \
+        -llibstdcpp
+
+DEPENDPATH += .
+INCLUDEPATH += .
+
+
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \
+               $$OS_LAYER_LIBC_SYSTEMINCLUDE \
+               $$OS_LAYER_GLIB_SYSTEMINCLUDE \
+               ..\..\..\qt_telephony_multimedia_service_api\inc
+
+# Input
+HEADERS += qtestmains60.h
+SOURCES += qtmscstest.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtestmains60.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* 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:
+*
+*/
+
+#ifndef QTESTMAINS60
+#define QTESTMAINS60
+
+#define QTEST_MAIN_S60(QTmsVoipTest) \
+int main(int argc, char *argv[]) \
+{ \
+char *new_argv[3]; \
+QCoreApplication app(argc, argv); \
+\
+QString str = "C:\\data\\" + QFileInfo(QCoreApplication::applicationFilePath()).baseName() + ".log"; \
+QByteArray   bytes  = str.toAscii(); \
+\
+char arg1[] = "-o"; \
+\
+new_argv[0] = argv[0]; \
+new_argv[1] = arg1; \
+new_argv[2] = bytes.data(); \
+\
+QTmsVoipTest tc; \
+return QTest::qExec(&tc, 3, new_argv); \
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,1770 @@
+/*
+ * 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: QTMS Voip test
+ *
+ */
+#include <QObject>
+#include <QtTest/QtTest>
+#include "qtestmains60.h"
+
+#include <qtms.h>
+#include <qtmsfactory.h>
+#include <qtmscall.h>
+#include <qtmsstream.h>
+#include <tmsstreamobsrvr.h>
+#include <qtmsformat.h>
+
+#include <qtmspcmformat.h>
+#include <qtmsamrformat.h>
+#include <qtmsilbcformat.h>
+#include <qtmsg711format.h>
+#include <qtmsg729format.h>
+
+#include <qtmsclientsink.h>
+#include <qtmsclientsource.h>
+#include <qtmsvolumeeffect.h>
+#include <qtmsgaineffect.h>
+#include <qtmsglobalvoleffect.h>
+#include <qtmsglobalgaineffect.h>
+#include <qtmsglobalrouting.h>
+
+#include <qtmsbuffer.h>
+#include <qtmsdtmf.h>
+#include <qtmsringtone.h>
+#include <qtmsinbandtone.h>
+#include <tmsbuffer.h>
+
+// CONSTANTS
+#define __TEST_CODE_COVERAGE__
+
+using namespace QTMS;
+
+
+class QTmsVoipTest: public QObject
+{
+Q_OBJECT
+private slots:
+    void initTestCase();
+    void init();
+    void cleanup();
+    void SupportedFormats();
+    void CreateRouting_data();
+    void CreateRouting();
+    void CreateGlobalVol();
+    void CreateGlobalGain();
+    void CreateFormat_data();
+    void CreateFormat();
+    void CreateStreamVol();
+    void CreateStreamGain();
+    void CreateDnlinkDtmf();
+    void CreateBuffer();
+
+    void cleanupTestCase();
+public slots:
+    //From TMSClientSourceObserver
+    void FillBuffer(QTMSBuffer& buffer);
+    void BufferProcessed(QTMSBuffer* buffer, gint reason);
+    //From TMSClientSinkObserver
+    void ProcessBuffer(const QTMSBuffer* buffer);
+    //From TMSStreamObserver
+    void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event);
+    //From TMSClientSinkObserver
+    void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event);
+    //From TMSGlobalRoutingObserver
+    void GlobalRoutingEvent(const QTMSGlobalRouting& routing, QTMSSignalEvent event,
+        QTMSAudioOutput output);
+    //From TMSRingToneObserver
+    void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event);
+    //From TMSDTMFObserver
+    void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event);
+
+private:
+
+    void VoipCallSetup();
+
+    void SupportedUplinkFormats();
+    void SupportedDnlinkFormats();
+
+    void CreateUplink();
+    void CreateDnlink();
+
+    void CreateMicSource();
+    void AddMicSourceToStream();
+
+    void CreateClientSink();
+    void AddClientSinkToStream();
+
+    void CreateClientSource();
+    void AddClientSourceToStream();
+
+    void CreateSpeakerSink();
+    void AddSpeakerSinkToStream();
+
+    void InitUplink();
+    void InitDnlink();
+
+    void DeinitUplink();
+    void DeinitDnlink();
+
+    void StartUplink();
+    void StopUplink();
+    void StartDnlink();
+
+    void ResetUplnkFormat();
+    void ResetDnlnkFormat();
+
+    void StreamVol();
+    void StreamGain();
+
+    void CloseUplink();
+    void CloseDownlink();
+
+    void DisplayFormat(QTMSFormatType format);
+    void StopDnlink();
+    void CreateRingTone();
+
+    void ToggleVad();
+    void GetVad();
+    void ToggleCng();
+    void GetCng();
+    void TogglePlc();
+    void GetPlc();
+
+    void SelectMinBitrate();
+    void SelectMaxBitrate();
+    void SetBitrate(guint bitrate);
+    void GetSupportedBitrates();
+    gint GetSupportedBitrates(BitRateVector& aBrArr);
+    void GetBitrate();
+
+    void SetDnLinkG711ALAW();
+    void SetDnLinkG711uLAW();
+    void SetDnLinkILBC20MS();
+    void SetDnLinkILBC30MS();
+    void SetUpLinkG711ALAW();
+    void SetUpLinkG711uLAW();
+    void SetUpLinkILBC20MS();
+    void SetUpLinkILBC30MS();
+    void GetDnLinkG711Mode();
+    void GetDnLinkILBCMode();
+    void GetUpLinkG711Mode();
+    void GetUpLinkILBCMode();
+
+    void DisplayDevice(QTMSAudioOutput device);
+
+private:
+    QTMSFactory *m_Factory;
+    QTMSCall *m_Call;
+    QTMSDTMF *m_Dnlnkdtmf;
+    QTMSStream *m_Dnlink;
+    QTMSStream *m_Uplink;
+
+    QTMSSource *m_MicSource;
+    QTMSSource *m_ClientSource;
+    QTMSSink *m_ClientSink;
+    QTMSSink *m_SpeakerSink;
+
+    QTMSFormat *m_G711EncFormatIntfc;
+    QTMSFormat *m_G711DecFormatIntfc;
+    QTMSFormat *m_G729EncFormatIntfc;
+    QTMSFormat *m_G729DecFormatIntfc;
+    QTMSFormat *m_ILBCEncFormatIntfc;
+    QTMSFormat *m_ILBCDecFormatIntfc;
+    QTMSFormat *m_AMRNBEncFormatIntfc;
+    QTMSFormat *m_AMRNBDecFormatIntfc;
+    QTMSFormat *m_PCM16EncFormatIntfc;
+    QTMSFormat *m_PCM16DecFormatIntfc;
+
+    QTMS::FormatVector m_UplCodecs;
+    QTMS::FormatVector m_DnlCodecs;
+
+    BitRateVector m_BitratesVector;
+    guint iBitrate;
+
+    QTMSEffect *m_Vol;
+    QTMSEffect *m_Gain;
+    QTMSEffect *m_GlobalVol;
+    QTMSEffect *m_GlobalGain;
+    QTMSGlobalRouting *m_Routing;
+
+    QTMSFormatType m_DnLinkCodec;
+    QTMSFormatType m_UpLinkCodec;
+
+    QSignalSpy *m_UplinkSpy;
+    QSignalSpy *m_DnlinkSpy;
+    QSignalSpy *m_RoutingSpy;
+
+    gboolean m_Vad;
+    gboolean m_Cng;
+    gboolean m_Plc;
+
+};
+
+void QTmsVoipTest::initTestCase()
+{
+    qDebug("Start QTms Voip tests");
+
+    g_setenv("G_SLICE", "always-malloc", 1);
+
+    qRegisterMetaType<QTMSSignalEvent> ("QTMSSignalEvent");
+    qRegisterMetaType<QTMSAudioOutput> ("QTMSAudioOutput");
+}
+
+void QTmsVoipTest::cleanupTestCase()
+{
+    qDebug("End QTms tests");
+}
+
+void QTmsVoipTest::init()
+{
+    qDebug("****NEW TEST****");
+    m_Factory = NULL;
+    m_Call = NULL;
+    m_Dnlink = NULL;
+    m_Uplink = NULL;
+    m_MicSource = NULL;
+    m_ClientSource = NULL;
+    m_SpeakerSink = NULL;
+    m_ClientSink = NULL;
+    m_Vol = NULL;
+    m_Gain = NULL;
+    m_GlobalVol = NULL;
+    m_GlobalGain = NULL;
+    m_Routing = NULL;
+    m_Dnlnkdtmf = NULL;
+
+    m_G711EncFormatIntfc = NULL;
+    m_G711DecFormatIntfc = NULL;
+    m_G729EncFormatIntfc = NULL;
+    m_G729DecFormatIntfc = NULL;
+    m_ILBCEncFormatIntfc = NULL;
+    m_ILBCDecFormatIntfc = NULL;
+    m_AMRNBEncFormatIntfc = NULL;
+    m_AMRNBDecFormatIntfc = NULL;
+    m_PCM16EncFormatIntfc = NULL;
+    m_PCM16DecFormatIntfc = NULL;
+
+    m_UplinkSpy = NULL;
+    m_DnlinkSpy = NULL;
+
+    QTMSVer *ver(NULL);
+    gint status;
+    status = QTMSFactory::CreateFactory(m_Factory, *ver);
+
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+    VoipCallSetup();
+
+    CreateUplink();
+    CreateDnlink();
+
+    CreateMicSource();
+    AddMicSourceToStream();
+
+    CreateClientSink();
+    AddClientSinkToStream();
+
+    CreateClientSource();
+    AddClientSourceToStream();
+
+    CreateSpeakerSink();
+    AddSpeakerSinkToStream();
+
+}
+void QTmsVoipTest::cleanup()
+{
+    qDebug("****END TEST******");
+
+    ResetUplnkFormat();
+    ResetDnlnkFormat();
+
+    CloseUplink();
+    CloseDownlink();
+
+    if (m_MicSource) {
+        m_Factory->DeleteSource(m_MicSource);
+    }
+    if (m_ClientSource) {
+        m_Factory->DeleteSource(m_ClientSource);
+    }
+    if (m_ClientSink) {
+        m_Factory->DeleteSink(m_ClientSink);
+    }
+    if (m_SpeakerSink) {
+        m_Factory->DeleteSink(m_SpeakerSink);
+    }
+
+    if (m_Dnlnkdtmf) {
+        m_Factory->DeleteDTMF(m_Dnlnkdtmf);
+    }
+
+    if (m_Vol) {
+        m_Factory->DeleteEffect(m_Vol);
+    }
+    if (m_Gain) {
+        m_Factory->DeleteEffect(m_Gain);
+    }
+    if (m_GlobalVol) {
+        m_Factory->DeleteEffect(m_GlobalVol);
+    }
+    if (m_GlobalGain) {
+        m_Factory->DeleteEffect(m_GlobalGain);
+    }
+
+    if (m_Routing) {
+        m_Factory->DeleteGlobalRouting(m_Routing);
+    }
+
+    if (m_PCM16EncFormatIntfc) {
+        m_Factory->DeleteFormat(m_PCM16EncFormatIntfc);
+    }
+    if (m_ILBCEncFormatIntfc) {
+        m_Factory->DeleteFormat(m_ILBCEncFormatIntfc);
+    }
+    if (m_AMRNBEncFormatIntfc) {
+        m_Factory->DeleteFormat(m_AMRNBEncFormatIntfc);
+    }
+    if (m_G711EncFormatIntfc) {
+        m_Factory->DeleteFormat(m_G711EncFormatIntfc);
+    }
+    if (m_G729EncFormatIntfc) {
+        m_Factory->DeleteFormat(m_G729EncFormatIntfc);
+    }
+    if (m_PCM16DecFormatIntfc) {
+        m_Factory->DeleteFormat(m_PCM16DecFormatIntfc);
+    }
+    if (m_ILBCDecFormatIntfc) {
+        m_Factory->DeleteFormat(m_ILBCDecFormatIntfc);
+    }
+    if (m_AMRNBDecFormatIntfc) {
+        m_Factory->DeleteFormat(m_AMRNBDecFormatIntfc);
+    }
+    if (m_G711DecFormatIntfc) {
+
+        m_Factory->DeleteFormat(m_G711DecFormatIntfc);
+    }
+    if (m_G729DecFormatIntfc) {
+        m_Factory->DeleteFormat(m_G729DecFormatIntfc);
+    }
+
+    if (m_Uplink) {
+        m_Call->DeleteStream(m_Uplink);
+    }
+    if (m_Dnlink) {
+        m_Call->DeleteStream(m_Dnlink);
+    }
+
+    if (m_Call) {
+        m_Factory->DeleteCall(m_Call);
+    }
+
+    if (m_Factory) {
+        delete m_Factory;
+    }
+
+}
+
+void QTmsVoipTest::VoipCallSetup()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Factory && !m_Call) {
+        gboolean issupported(FALSE);
+        m_Factory->IsCallTypeSupported(QTMS_CALL_IP, issupported);
+        QVERIFY(issupported == TRUE);
+        status = m_Factory->CreateCall(QTMS_CALL_IP, m_Call, 0);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        guint ctxid;
+        m_Call->GetCallContextId(ctxid);
+    }
+
+}
+
+void QTmsVoipTest::SupportedFormats()
+{
+    SupportedUplinkFormats();
+    SupportedDnlinkFormats();
+}
+
+void QTmsVoipTest::SupportedUplinkFormats()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    status = m_Factory->GetSupportedFormats(QTMS_STREAM_UPLINK, m_UplCodecs);
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+    qDebug("Supported UPL codecs");
+    std::vector<QTMSFormat*>::iterator codecs = m_UplCodecs.begin();
+    QTMSFormatType fmttype;
+    for (; codecs < m_UplCodecs.end(); codecs++) {
+        (*codecs)->GetType(fmttype);
+        DisplayFormat(fmttype);
+    }
+    gint size = m_UplCodecs.size();
+    for (gint i = 0; i < size; i++) {
+        codecs = m_UplCodecs.begin();
+        m_Factory->DeleteFormat(*codecs);
+        m_UplCodecs.erase(codecs);
+    }
+
+}
+
+void QTmsVoipTest::SupportedDnlinkFormats()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    status = m_Factory->GetSupportedFormats(QTMS_STREAM_DOWNLINK, m_DnlCodecs);
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+    qDebug("Supported DNL codecs");
+    std::vector<QTMSFormat*>::iterator codecs = m_DnlCodecs.begin();
+    QTMSFormatType fmttype;
+    for (; codecs < m_DnlCodecs.end(); codecs++) {
+        (*codecs)->GetType(fmttype);
+        DisplayFormat(fmttype);
+    }
+    gint size = m_DnlCodecs.size();
+    for (gint i = 0; i < size; i++) {
+        codecs = m_DnlCodecs.begin();
+        m_Factory->DeleteFormat(*codecs);
+        m_DnlCodecs.erase(codecs);
+    }
+}
+
+void QTmsVoipTest::DisplayFormat(QTMSFormatType format)
+{
+    switch (format) {
+    case QTMS_FORMAT_AMR:
+        qDebug("AMR-NB");
+        break;
+    case QTMS_FORMAT_G711:
+        qDebug("G.711");
+        break;
+    case QTMS_FORMAT_G729:
+        qDebug("G.729");
+        break;
+    case QTMS_FORMAT_ILBC:
+        qDebug("iLBC");
+        break;
+    case QTMS_FORMAT_PCM:
+        qDebug("PCM-16");
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::CreateUplink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Call) {
+        status = m_Call->CreateStream(QTMS_STREAM_UPLINK, m_Uplink);
+
+        m_UplinkSpy = new QSignalSpy(m_Uplink,
+            SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+
+        QVERIFY( m_UplinkSpy->isValid() );
+
+        // QCOMPARE(m_UplinkSpy->count(), 0 );
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        connect(m_Uplink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this,
+            SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+    }
+}
+
+void QTmsVoipTest::CreateDnlink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Call) {
+        status = m_Call->CreateStream(QTMS_STREAM_DOWNLINK, m_Dnlink);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        m_DnlinkSpy = new QSignalSpy(m_Dnlink,
+            SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+
+        QVERIFY( m_DnlinkSpy->isValid() );
+
+        // QCOMPARE(m_DnlinkSpy->count(), 0 );
+
+        connect(m_Dnlink, SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), this,
+            SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)));
+    }
+}
+
+void QTmsVoipTest::CreateClientSource()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Factory && !m_ClientSource) {
+        status = m_Factory->CreateSource(QTMS_SOURCE_CLIENT, m_ClientSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::AddClientSourceToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Dnlink && m_ClientSource) {
+        connect(static_cast<QTMSClientSource*> (m_ClientSource),
+            SIGNAL(FillBuffer(QTMSBuffer&)), this, SLOT(FillBuffer(QTMSBuffer&)));
+        status = m_Dnlink->AddSource(m_ClientSource);
+
+#ifdef __TEST_CODE_COVERAGE__
+        QTMSSourceType st;
+        static_cast<QTMSClientSource*> (m_ClientSource)->GetType(st);
+        gboolean enqueue(FALSE);
+        static_cast<QTMSClientSource*> (m_ClientSource)->GetEnqueueMode(enqueue);
+        static_cast<QTMSClientSource*> (m_ClientSource)->SetEnqueueMode(FALSE);
+        static_cast<QTMSClientSource*> (m_ClientSource)->Flush();
+#endif //__TEST_CODE_COVERAGE__
+    }
+
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::CreateClientSink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_ClientSink) {
+        status = m_Factory->CreateSink(QTMS_SINK_CLIENT, m_ClientSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::AddClientSinkToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Uplink && m_ClientSink) {
+        connect(static_cast<QTMSClientSink*> (m_ClientSink),
+            SIGNAL(ProcessBuffer(const QTMSBuffer*)), this,
+            SLOT(ProcessBuffer(const QTMSBuffer*)));
+        status = m_Uplink->AddSink(m_ClientSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::CreateMicSource()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_MicSource) {
+        status = m_Factory->CreateSource(TMS_SOURCE_MIC, m_MicSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::AddMicSourceToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Uplink && m_MicSource) {
+        status = m_Uplink->AddSource(m_MicSource);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::CreateSpeakerSink()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_SpeakerSink) {
+        status = m_Factory->CreateSink(QTMS_SINK_SPEAKER, m_SpeakerSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::AddSpeakerSinkToStream()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Dnlink && m_SpeakerSink) {
+        status = m_Dnlink->AddSink(m_SpeakerSink);
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+}
+
+void QTmsVoipTest::InitUplink()
+{
+    QVERIFY(m_Uplink->Init() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 1 );
+
+    GetSupportedBitrates();
+    SelectMinBitrate();
+    SelectMaxBitrate();
+    GetBitrate();
+
+    ToggleVad();
+    GetVad();
+
+    SetUpLinkG711ALAW();
+    SetUpLinkG711uLAW();
+    GetUpLinkG711Mode();
+
+    SetUpLinkILBC20MS();
+    SetUpLinkILBC30MS();
+    GetUpLinkILBCMode();
+
+}
+
+void QTmsVoipTest::InitDnlink()
+{
+    QVERIFY(m_Dnlink->Init() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 1 );
+    ToggleCng();
+    GetCng();
+    TogglePlc();
+    GetPlc();
+
+    SetDnLinkG711ALAW();
+    SetDnLinkG711uLAW();
+    GetDnLinkG711Mode();
+
+    SetDnLinkILBC20MS();
+    SetDnLinkILBC30MS();
+    GetDnLinkILBCMode();
+
+}
+void QTmsVoipTest::DeinitUplink()
+{
+    m_Uplink->Deinit();
+    QTest::qWait(1000);
+}
+
+void QTmsVoipTest::DeinitDnlink()
+{
+    m_Dnlink->Deinit();
+    QTest::qWait(1000);
+}
+
+void QTmsVoipTest::StartUplink()
+{
+    QVERIFY(m_Uplink->Start() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 2 );
+}
+
+void QTmsVoipTest::StartDnlink()
+{
+    QVERIFY(m_Dnlink->Start() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 2 );
+}
+void QTmsVoipTest::StopUplink()
+{
+#ifdef __TEST_CODE_COVERAGE__
+    QVERIFY(m_Uplink->Pause()== QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+#endif //__TEST_CODE_COVERAGE__
+    QVERIFY(m_Uplink->Stop() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_UplinkSpy->count(), 3 );
+}
+
+void QTmsVoipTest::StopDnlink()
+{
+#ifdef __TEST_CODE_COVERAGE__
+    QVERIFY(m_Dnlink->Pause() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+#endif //__TEST_CODE_COVERAGE__
+    QVERIFY(m_Dnlink->Stop() == QTMS_RESULT_SUCCESS);
+    QTest::qWait(1000);
+    //QCOMPARE(m_DnlinkSpy->count(), 3 );
+}
+
+void QTmsVoipTest::CloseUplink()
+{
+    m_Uplink->Deinit();
+    QTest::qWait(1000);
+    if (m_Uplink) {
+        if (m_Gain) {
+            QVERIFY(m_Uplink->RemoveEffect(m_Gain)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_MicSource) {
+            QVERIFY(m_Uplink->RemoveSource(m_MicSource)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_ClientSink) {
+            QVERIFY(m_Uplink->RemoveSink(m_ClientSink)== QTMS_RESULT_SUCCESS);
+        }
+    }
+}
+
+void QTmsVoipTest::CloseDownlink()
+{
+    m_Dnlink->Deinit();
+    QTest::qWait(1000);
+    if (m_Dnlink) {
+        if (m_Vol) {
+            QVERIFY(m_Dnlink->RemoveEffect(m_Vol)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_ClientSource) {
+            QVERIFY(m_Dnlink->RemoveSource(m_ClientSource)== QTMS_RESULT_SUCCESS);
+        }
+        if (m_SpeakerSink) {
+            QVERIFY(m_Dnlink->RemoveSink(m_SpeakerSink) == QTMS_RESULT_SUCCESS);
+        }
+    }
+
+}
+
+void QTmsVoipTest::ResetUplnkFormat()
+{
+    if (m_Uplink) {
+        switch (m_UpLinkCodec) {
+        case QTMS_FORMAT_PCM:
+            m_Uplink->ResetFormat(m_PCM16EncFormatIntfc);
+            break;
+        case QTMS_FORMAT_AMR:
+            m_Uplink->ResetFormat(m_AMRNBEncFormatIntfc);
+            break;
+        case QTMS_FORMAT_G711:
+            m_Uplink->ResetFormat(m_G711EncFormatIntfc);
+            break;
+        case QTMS_FORMAT_G729:
+            m_Uplink->ResetFormat(m_G729EncFormatIntfc);
+            break;
+        case QTMS_FORMAT_ILBC:
+            m_Uplink->ResetFormat(m_ILBCEncFormatIntfc);
+            break;
+        default:
+            break;
+        }
+    }
+
+}
+
+void QTmsVoipTest::ResetDnlnkFormat()
+{
+    if (m_Dnlink) {
+        switch (m_DnLinkCodec) {
+        case QTMS_FORMAT_PCM:
+            m_Dnlink->ResetFormat(m_PCM16DecFormatIntfc);
+            break;
+        case QTMS_FORMAT_AMR:
+            m_Dnlink->ResetFormat(m_AMRNBDecFormatIntfc);
+            break;
+        case QTMS_FORMAT_G711:
+            m_Dnlink->ResetFormat(m_G711DecFormatIntfc);
+            break;
+        case QTMS_FORMAT_G729:
+            m_Dnlink->ResetFormat(m_G729DecFormatIntfc);
+            break;
+        case QTMS_FORMAT_ILBC:
+            m_Dnlink->ResetFormat(m_ILBCDecFormatIntfc);
+            break;
+        default:
+            break;
+        }
+    }
+}
+
+void QTmsVoipTest::CreateFormat_data()
+{
+    QTest::addColumn<QTMSFormatType>("format");
+
+#ifndef __WINSCW__
+    QTest::newRow("G711")<<QTMS_FORMAT_G711;
+    QTest::newRow("G729")<<QTMS_FORMAT_G729;
+    QTest::newRow("iLBC")<<QTMS_FORMAT_ILBC;
+    QTest::newRow("AMR")<<QTMS_FORMAT_AMR;
+#endif    
+    QTest::newRow("PCM") << QTMS_FORMAT_PCM;
+}
+
+void QTmsVoipTest::CreateFormat()
+{
+    gint decstatus(QTMS_RESULT_SUCCESS);
+    gint encstatus(QTMS_RESULT_SUCCESS);
+    gint setencstatus(QTMS_RESULT_SUCCESS);
+    gint setdecstatus(QTMS_RESULT_SUCCESS);
+    QFETCH(QTMSFormatType, format);
+
+    m_DnLinkCodec = format;
+    m_UpLinkCodec = format;
+
+    switch (format) {
+    case QTMS_FORMAT_G711:
+    {
+        decstatus = m_Factory->CreateFormat(QTMS_FORMAT_G711, m_G711DecFormatIntfc);
+        encstatus = m_Factory->CreateFormat(QTMS_FORMAT_G711, m_G711EncFormatIntfc);
+        setdecstatus = m_Dnlink->SetFormat(m_G711DecFormatIntfc);
+        setencstatus = m_Uplink->SetFormat(m_G711EncFormatIntfc);
+        qDebug("G.711 Set");
+
+    }
+        break;
+    case QTMS_FORMAT_G729:
+    {
+        decstatus = m_Factory->CreateFormat(QTMS_FORMAT_G729, m_G729DecFormatIntfc);
+        encstatus = m_Factory->CreateFormat(QTMS_FORMAT_G729, m_G729EncFormatIntfc);
+        setdecstatus = m_Dnlink->SetFormat(m_G729DecFormatIntfc);
+        setdecstatus = m_Uplink->SetFormat(m_G729EncFormatIntfc);
+        qDebug("G.729 Set");
+    }
+        break;
+    case QTMS_FORMAT_ILBC:
+    {
+        decstatus = m_Factory->CreateFormat(QTMS_FORMAT_ILBC, m_ILBCDecFormatIntfc);
+        encstatus = m_Factory->CreateFormat(QTMS_FORMAT_ILBC, m_ILBCEncFormatIntfc);
+        setdecstatus = m_Dnlink->SetFormat(m_ILBCDecFormatIntfc);
+        setencstatus = m_Uplink->SetFormat(m_ILBCEncFormatIntfc);
+        qDebug("iLBC Set");
+    }
+        break;
+    case QTMS_FORMAT_AMR:
+    {
+        decstatus = m_Factory->CreateFormat(QTMS_FORMAT_AMR, m_AMRNBDecFormatIntfc);
+        encstatus = m_Factory->CreateFormat(QTMS_FORMAT_AMR, m_AMRNBEncFormatIntfc);
+        setdecstatus = m_Dnlink->SetFormat(m_AMRNBDecFormatIntfc);
+        setencstatus = m_Uplink->SetFormat(m_AMRNBEncFormatIntfc);
+        qDebug("AMR-NB Set");
+    }
+        break;
+    case QTMS_FORMAT_PCM:
+    {
+        decstatus = m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc);
+        encstatus = m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16EncFormatIntfc);
+        setdecstatus = m_Dnlink->SetFormat(m_PCM16DecFormatIntfc);
+        setencstatus = m_Uplink->SetFormat(m_PCM16EncFormatIntfc);
+        qDebug("PCM-16 Set");
+    }
+        break;
+    default:
+        break;
+    }
+
+    QVERIFY(decstatus == QTMS_RESULT_SUCCESS);
+    QVERIFY(encstatus == QTMS_RESULT_SUCCESS);
+    QVERIFY(setdecstatus == QTMS_RESULT_SUCCESS);
+    QVERIFY(setencstatus == QTMS_RESULT_SUCCESS);
+
+    InitUplink();
+    InitDnlink();
+}
+
+void QTmsVoipTest::ToggleVad()
+{
+    //m_Vad = (m_Vad) ? EFalse : ETrue;
+
+    m_Vad = ETrue;
+    switch (m_UpLinkCodec) {
+    case QTMS_FORMAT_G711:
+        static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->SetVADMode(m_Vad);
+        qDebug("G711 VAD set %d", m_Vad);
+        break;
+    case QTMS_FORMAT_G729:
+        static_cast<QTMSG729Format*> (m_G729EncFormatIntfc)->SetVADMode(m_Vad);
+        qDebug("G729 VAD set %d", m_Vad);
+        break;
+    case QTMS_FORMAT_ILBC:
+        static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->SetVADMode(m_Vad);
+        qDebug("iLBC VAD set %d", m_Vad);
+        break;
+    case QTMS_FORMAT_AMR:
+        //static_cast<TMSAMRFormat*>(iAMRNBEncFormatIntfc)->SetVADMode(m_Vad);
+        break;
+    case QTMS_FORMAT_PCM:
+        // Not supported; just for testing failing condition
+        //static_cast<QTMSPCMFormat*>(iPCM16EncFormatIntfc)->SetVADMode(m_Vad);
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::GetVad()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    gboolean vad = EFalse;
+
+    switch (m_UpLinkCodec) {
+    case QTMS_FORMAT_G711:
+        status = static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->GetVADMode(vad);
+        qDebug("get G711 VAD: %d", vad);
+        break;
+    case QTMS_FORMAT_G729:
+        status = static_cast<QTMSG729Format*> (m_G729EncFormatIntfc)->GetVADMode(vad);
+        qDebug("get G729 VAD: %d", vad);
+        break;
+    case QTMS_FORMAT_ILBC:
+        status = static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->GetVADMode(vad);
+        qDebug("get iLBC VAD: %d", vad);
+        break;
+    default:
+        return;
+    }
+    QVERIFY(status == QTMS_RESULT_SUCCESS);
+    // QVERIFY(vad == m_Vad);
+
+
+}
+
+void QTmsVoipTest::ToggleCng()
+{
+    //    m_Cng = (m_Cng) ? EFalse : ETrue;
+
+    m_Cng = ETrue;
+    switch (m_DnLinkCodec) {
+    case QTMS_FORMAT_G711:
+        //case EG711_10MS:
+        static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->SetCNG(m_Cng);
+        qDebug("G711 CNG set %d", m_Cng);
+        break;
+    case QTMS_FORMAT_ILBC:
+        static_cast<QTMSILBCFormat*> (m_ILBCDecFormatIntfc)->SetCNG(m_Cng);
+        qDebug("iLBC CNG set %d", m_Cng);
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::GetCng()
+{
+    gint status;
+    gboolean cng = EFalse;
+    switch (m_DnLinkCodec) {
+    case QTMS_FORMAT_G711:
+        status = static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->GetCNG(cng);
+        qDebug("G711 CNG: %d", cng);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        break;
+    case QTMS_FORMAT_ILBC:
+        status = static_cast<QTMSILBCFormat*> (m_ILBCDecFormatIntfc)->GetCNG(cng);
+        qDebug("iLBC CNG: %d", cng);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        break;
+    default:
+        break;
+    }
+
+    // QVERIFY(cng == m_Cng);
+
+}
+
+void QTmsVoipTest::TogglePlc()
+{
+    //    m_Plc = (m_Plc) ? EFalse : ETrue;
+    m_Plc = ETrue;
+    if (m_DnLinkCodec == QTMS_FORMAT_G711) {
+        static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->SetPlc(m_Plc);
+        qDebug("G711 PLC set %d", m_Plc);
+    }
+}
+
+void QTmsVoipTest::GetPlc()
+{
+    gboolean plc = EFalse;
+    if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->GetPlc(plc);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("G711 PLC: %d", plc);
+        // QVERIFY(plc == m_Plc);
+    }
+}
+
+void QTmsVoipTest::SelectMinBitrate()
+{
+    if (m_BitratesVector.size() > 0) {
+        std::vector<guint>::iterator bitrate = m_BitratesVector.begin();
+        iBitrate = *bitrate;
+        SetBitrate(iBitrate);
+        qDebug("BR set %d", iBitrate);
+    }
+}
+
+void QTmsVoipTest::SelectMaxBitrate()
+{
+    if (m_BitratesVector.size() > 0) {
+        iBitrate = m_BitratesVector.back();
+        SetBitrate(iBitrate);
+        qDebug("BR set %d", iBitrate);
+    }
+}
+
+void QTmsVoipTest::SetBitrate(guint bitrate)
+{
+    switch (m_UpLinkCodec) {
+    case QTMS_FORMAT_G711:
+        static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->SetBitRate(bitrate);
+        qDebug("Set BR %d", bitrate);
+        break;
+    case QTMS_FORMAT_G729:
+        static_cast<QTMSG729Format*> (m_G729EncFormatIntfc)->SetBitRate(bitrate);
+        qDebug("Set BR %d", bitrate);
+        break;
+    case QTMS_FORMAT_ILBC:
+        static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->SetBitRate(bitrate);
+        qDebug("Set BR %d", bitrate);
+        break;
+    case QTMS_FORMAT_AMR:
+        static_cast<QTMSAMRFormat*> (m_AMRNBEncFormatIntfc)->SetBitRate(bitrate);
+        qDebug("Set BR %d", bitrate);
+        break;
+    case QTMS_FORMAT_PCM:
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::GetSupportedBitrates()
+{
+    gint numOfItems(0);
+    m_BitratesVector.clear();
+    gint status = GetSupportedBitrates(m_BitratesVector);
+
+    numOfItems = m_BitratesVector.size();
+    qDebug("BR Count %d", numOfItems);
+    std::vector<guint>::iterator itBitrates = m_BitratesVector.begin();
+    for (; itBitrates < m_BitratesVector.end(); itBitrates++) {
+        qDebug("BR %d", *itBitrates);
+    }
+}
+
+gint QTmsVoipTest::GetSupportedBitrates(BitRateVector& aBrArr)
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    switch (m_UpLinkCodec) {
+    case QTMS_FORMAT_G711:
+        status = m_G711EncFormatIntfc->GetSupportedBitRates(aBrArr);
+        break;
+    case QTMS_FORMAT_G729:
+        status = m_G729EncFormatIntfc->GetSupportedBitRates(aBrArr);
+        break;
+    case QTMS_FORMAT_ILBC:
+        status = m_ILBCEncFormatIntfc->GetSupportedBitRates(aBrArr);
+        break;
+    case QTMS_FORMAT_AMR:
+        status = m_AMRNBEncFormatIntfc->GetSupportedBitRates(aBrArr);
+        break;
+    case QTMS_FORMAT_PCM:
+        // not supported, but test for correct error handling
+        //status = m_PCM16EncFormatIntfc->GetSupportedBitRates(aBrArr);
+        break;
+    default:
+        status = KErrNotSupported;
+        break;
+    }
+
+    return status;
+}
+
+void QTmsVoipTest::GetBitrate()
+{
+    guint bitrate;
+    switch (m_UpLinkCodec) {
+    case QTMS_FORMAT_G711:
+        static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->GetBitRate(bitrate);
+        qDebug("G711 bitrate: %d", bitrate);
+        break;
+    case QTMS_FORMAT_G729:
+        static_cast<QTMSG729Format*> (m_G729EncFormatIntfc)->GetBitRate(bitrate);
+        qDebug("G729 bitrate: %d", bitrate);
+        break;
+    case QTMS_FORMAT_ILBC:
+        static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->GetBitRate(bitrate);
+        qDebug("iLBC bitrate: %d", bitrate);
+        break;
+    case QTMS_FORMAT_AMR:
+        static_cast<QTMSAMRFormat*> (m_AMRNBEncFormatIntfc)->GetBitRate(bitrate);
+        qDebug("AMR bitrate: %d", bitrate);
+        break;
+    case TMS_FORMAT_PCM:
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::SetDnLinkG711ALAW()
+{
+    if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->SetMode(
+            QTMS_G711_CODEC_MODE_ALAW);
+        qDebug("SetDnLinkG711ALAW status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("DNL G.711 Mode Set: [aLaw]");
+    }
+}
+
+void QTmsVoipTest::SetDnLinkG711uLAW()
+{
+    if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->SetMode(
+            QTMS_G711_CODEC_MODE_MULAW);
+        qDebug("SetDnLinkG711uLAW status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("DNL G.711 Mode Set: [uLaw]");
+    }
+}
+
+void QTmsVoipTest::GetDnLinkG711Mode()
+{
+    QTMSG711CodecMode mode;
+    if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711DecFormatIntfc)->GetMode(mode);
+        qDebug("GetDnLinkG711Mode status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        if (mode == TMS_G711_CODEC_MODE_MULAW) {
+            qDebug("DNL G711 Mode: [uLaw]");
+        }
+        else {
+            qDebug("DNL G711 Mode: [aLaw]");
+        }
+    }
+}
+
+void QTmsVoipTest::SetDnLinkILBC20MS()
+{
+    if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCDecFormatIntfc)->SetMode(
+            TMS_ILBC_CODEC_MODE_20MS_FRAME);
+        qDebug("SetDnLinkILBC20MS status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("DNL iLBC Mode Set: [20ms]");
+    }
+}
+
+void QTmsVoipTest::SetDnLinkILBC30MS()
+{
+    if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCDecFormatIntfc)->SetMode(
+            TMS_ILBC_CODEC_MODE_30MS_FRAME);
+        qDebug("SetDnLinkILBC30MS status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("DNL iLBC Mode Set: [30ms]");
+    }
+}
+
+void QTmsVoipTest::GetDnLinkILBCMode()
+{
+    QTMSILBCCodecMode mode;
+    if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCDecFormatIntfc)->GetMode(mode);
+        qDebug("GetDnLinkILBCMode status %d", status);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME) {
+            qDebug("DNL iLBC Mode: [30ms]");
+        }
+        else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME) {
+            qDebug("DNL iLBC Mode: [20ms]");
+        }
+    }
+}
+
+void QTmsVoipTest::SetUpLinkG711ALAW()
+{
+    if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->SetMode(
+            QTMS_G711_CODEC_MODE_ALAW);
+
+        qDebug("SetUpLinkG711ALAW status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("UPL G.711 Mode Set: [aLaw]");
+    }
+}
+
+void QTmsVoipTest::SetUpLinkG711uLAW()
+{
+    if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->SetMode(
+            QTMS_G711_CODEC_MODE_MULAW);
+        qDebug("SetUpLinkG711uLAW status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("UPL G.711 Mode Set: [uLaw]");
+    }
+}
+
+void QTmsVoipTest::GetUpLinkG711Mode()
+{
+    QTMSG711CodecMode mode;
+    if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) {
+        gint status = static_cast<QTMSG711Format*> (m_G711EncFormatIntfc)->GetMode(mode);
+        qDebug("GetUpLinkG711Mode status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        if (mode == QTMS_G711_CODEC_MODE_MULAW) {
+            qDebug("UPL G.711 Mode: [uLaw]");
+        }
+        else if (mode == QTMS_G711_CODEC_MODE_ALAW) {
+            qDebug("UPL G.711 Mode: [aLaw]");
+        }
+    }
+
+}
+
+void QTmsVoipTest::SetUpLinkILBC20MS()
+{
+    if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->SetMode(
+            QTMS_ILBC_CODEC_MODE_20MS_FRAME);
+        qDebug("SetUpLinkILBC20MS status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("UPL iLBC Mode Set: [20ms]");
+    }
+}
+
+void QTmsVoipTest::SetUpLinkILBC30MS()
+{
+    if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->SetMode(
+            QTMS_ILBC_CODEC_MODE_30MS_FRAME);
+        qDebug("SetUpLinkILBC30MS status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("UPL iLBC Mode Set: [30ms]");
+    }
+}
+
+void QTmsVoipTest::GetUpLinkILBCMode()
+{
+    QTMSILBCCodecMode mode;
+    if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) {
+        gint status = static_cast<QTMSILBCFormat*> (m_ILBCEncFormatIntfc)->GetMode(mode);
+        qDebug("GetUpLinkILBCMode status %d", status);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME) {
+            qDebug("UPL iLBC Mode: [30ms]");
+        }
+        else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME) {
+            qDebug("UPL iLBC Mode: [20ms]");
+        }
+    }
+
+}
+
+void QTmsVoipTest::CreateStreamVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && m_Dnlink && !m_Vol) {
+        m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc);
+        m_Dnlink->SetFormat(m_PCM16DecFormatIntfc);
+
+        status = m_Factory->CreateEffect(QTMS_EFFECT_VOLUME, m_Vol);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSVolumeEffect*> (m_Vol),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        if (m_Dnlink) {
+            status = m_Dnlink->AddEffect(m_Vol);
+        }
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        InitDnlink();
+
+        StreamVol();
+
+    }
+}
+
+void QTmsVoipTest::StreamVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    guint maxvol(0);
+    if (m_Vol) {
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->GetMaxLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->SetLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint vol(0);
+        status = static_cast<QTMSVolumeEffect*> (m_Vol)->GetLevel(vol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(vol,maxvol);
+    }
+}
+
+void QTmsVoipTest::CreateStreamGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && m_Uplink && !m_Gain) {
+
+        m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16EncFormatIntfc);
+        m_Uplink->SetFormat(m_PCM16EncFormatIntfc);
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GAIN, m_Gain);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGainEffect*> (m_Gain),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        status = m_Uplink->AddEffect(m_Gain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        InitUplink();
+
+        StreamGain();
+    }
+}
+
+void QTmsVoipTest::StreamGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Gain) {
+        guint maxgain(0);
+        static_cast<QTMSGainEffect*> (m_Gain)->GetMaxLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        static_cast<QTMSGainEffect*> (m_Gain)->SetLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint gain(0);
+        static_cast<QTMSGainEffect*> (m_Gain)->GetLevel(gain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QCOMPARE(gain,maxgain);
+    }
+
+}
+
+void QTmsVoipTest::CreateGlobalVol()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_GlobalVol) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, m_GlobalVol);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGlobalVolEffect*> (m_GlobalVol),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        guint maxvol(0);
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->GetMaxLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("global max vol %d", maxvol);
+
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->SetLevel(maxvol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint vol(0);
+        status = static_cast<QTMSGlobalVolEffect*> (m_GlobalVol)->GetLevel(vol);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("global vol %d", vol);
+
+        QCOMPARE(vol,maxvol);
+
+    }
+}
+
+void QTmsVoipTest::CreateGlobalGain()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+
+    if (m_Factory && !m_GlobalGain) {
+        status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, m_GlobalGain);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        connect(static_cast<QTMSGlobalGainEffect*> (m_GlobalGain),
+            SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), this,
+            SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)));
+
+        guint maxgain(0);
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->GetMaxLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("global max gain %d", maxgain);
+
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->SetLevel(maxgain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+
+        guint gain(0);
+        static_cast<QTMSGlobalGainEffect*> (m_GlobalGain)->GetLevel(gain);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        qDebug("global gain %d", gain);
+
+        QCOMPARE(gain,maxgain);
+
+    }
+}
+
+void QTmsVoipTest::CreateRouting_data()
+{
+
+    QTest::addColumn<QTMSAudioOutput>("routing");
+
+    QTest::newRow("Public") << QTMS_AUDIO_OUTPUT_PUBLIC;
+    QTest::newRow("Private") << QTMS_AUDIO_OUTPUT_PRIVATE;
+
+}
+
+void QTmsVoipTest::CreateRouting()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    QFETCH(QTMSAudioOutput, routing);
+
+    if (m_Factory && !m_Routing) {
+        m_UpLinkCodec = QTMS_FORMAT_PCM;
+        m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc);
+        m_Dnlink->SetFormat(m_PCM16DecFormatIntfc);
+
+        InitDnlink();
+        StartDnlink();
+
+        status = m_Factory->CreateGlobalRouting(m_Routing);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        m_RoutingSpy = new QSignalSpy(m_Routing,
+            SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,
+                    QTMSSignalEvent,
+                    QTMSAudioOutput)));
+
+        QVERIFY( m_RoutingSpy->isValid() );
+
+        //QCOMPARE(m_RoutingSpy->count(), 0 );
+        connect(m_Routing,
+            SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput)),
+            this,
+            SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput)));
+    }
+
+    if (m_Routing) {
+        status = m_Routing->SetOutput(routing);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+#ifndef __WINSCW__
+        QTest::qWait(1000);
+        //QCOMPARE(m_RoutingSpy->count(), 1 );
+#endif
+        QTMSAudioOutput current;
+        status = m_Routing->GetOutput(current);
+        DisplayDevice(current);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+#ifndef __WINSCW__      
+        QCOMPARE(routing,current);
+#endif
+        StopDnlink();
+    }
+}
+
+void QTmsVoipTest::DisplayDevice(QTMSAudioOutput device)
+{
+    qDebug("Current Output:");
+
+    switch (device) {
+    case QTMS_AUDIO_OUTPUT_NONE:
+    {
+        qDebug("none");
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_PUBLIC:
+    {
+        qDebug("Public");
+    }
+        break;
+    case QTMS_AUDIO_OUTPUT_PRIVATE:
+    {
+        qDebug("Private");
+    }
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::CreateDnlinkDtmf()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    GString* dtmfstring(NULL);
+
+    if (m_Factory && m_Dnlink && !m_Dnlnkdtmf) {
+        m_UpLinkCodec = QTMS_FORMAT_PCM;
+        m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc);
+        m_Dnlink->SetFormat(m_PCM16DecFormatIntfc);
+
+        InitDnlink();
+
+        status = m_Factory->CreateDTMF(QTMS_STREAM_DOWNLINK, m_Dnlnkdtmf);
+
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+
+        QSignalSpy dtmfspy(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        QVERIFY( dtmfspy.isValid() );
+
+        //QCOMPARE(dtmfspy.count(), 0 );
+
+        connect(m_Dnlnkdtmf, SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this,
+            SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)));
+
+        dtmfstring = g_string_new("4723");
+        status = m_Dnlnkdtmf->SetTone(dtmfstring);
+
+        m_Dnlnkdtmf->Start();
+        QTest::qWait(1000);
+        g_string_free(dtmfstring, TRUE);
+        //QCOMPARE(dtmfspy.count(), 1 );
+
+        status = m_Dnlnkdtmf->Stop();
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        QTest::qWait(1000);
+        //QCOMPARE(dtmfspy.count(), 2 );
+    }
+}
+
+void QTmsVoipTest::CreateRingTone()
+{
+
+}
+
+void QTmsVoipTest::CreateBuffer()
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    if (m_Factory) {
+        QTMSBuffer* qtmsbuffer(NULL);
+        QTMSBufferType buftype(QTMS_BUFFER_MEMORY);
+        guint size(100);
+        status = m_Factory->CreateBuffer(QTMS_BUFFER_MEMORY, size, qtmsbuffer);
+        QVERIFY(status == QTMS_RESULT_SUCCESS);
+        if (qtmsbuffer) {
+            qtmsbuffer->GetType(buftype);
+            qtmsbuffer->GetDataSize(size);
+            qtmsbuffer->SetDataSize(size);
+            guint8* pbuf(NULL);
+            qtmsbuffer->GetDataPtr(pbuf);
+            guint64 ts(0);
+            qtmsbuffer->GetTimeStamp(ts);
+            qtmsbuffer->SetTimeStamp(ts);
+            m_Factory->DeleteBuffer(qtmsbuffer);
+        }
+    }
+}
+
+void QTmsVoipTest::FillBuffer(QTMSBuffer& buffer)
+{
+    //TODO: add loopback test and file playback
+#ifdef  __TEST_CODE_COVERAGE__
+    if (m_ClientSource) {
+        static_cast<QTMSClientSource*> (m_ClientSource)->BufferFilled(buffer);
+    }
+#endif
+
+}
+
+void QTmsVoipTest::BufferProcessed(QTMSBuffer* /*buffer*/, gint /*reason*/)
+{
+}
+
+void QTmsVoipTest::ProcessBuffer(const QTMSBuffer* buffer)
+{
+    //TODO: add loopback test
+#ifdef  __TEST_CODE_COVERAGE__    
+    QTMSBuffer* recBuf(NULL);
+    recBuf = const_cast<QTMS::QTMSBuffer*> (buffer);
+    if (m_ClientSink) {
+        static_cast<QTMSClientSink*> (m_ClientSink)->BufferProcessed(recBuf);
+    }
+#endif
+}
+
+void QTmsVoipTest::EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event)
+{
+    QTMSEffectType effecttype;
+    const_cast<QTMSEffect&> (tmseffect).GetType(effecttype);
+
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+
+    switch (effecttype) {
+    case QTMS_EFFECT_GLOBAL_VOL:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_EFFECT_VOL_CHANGED:
+            qDebug("Global vol effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case QTMS_EFFECT_GLOBAL_GAIN:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_EFFECT_GAIN_CHANGED:
+            qDebug("Global gain effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case QTMS_EFFECT_VOLUME:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_EFFECT_GAIN_CHANGED:
+            qDebug("Stream vol effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case QTMS_EFFECT_GAIN:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_EFFECT_GAIN_CHANGED:
+            qDebug("Stream gain effect change");
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/, QTMSSignalEvent event,
+    QTMSAudioOutput /*output*/)
+{
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED:
+        qDebug("Available outputs changed");
+        break;
+    case QTMS_EVENT_ROUTING_OUTPUT_CHANGED:
+        qDebug("output changed");
+        break;
+    case QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE:
+        qDebug("set output complete");
+        break;
+    default:
+        break;
+    }
+
+}
+
+void QTmsVoipTest::TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event)
+{
+
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+
+    gint streamId;
+    streamId = const_cast<QTMSStream&> (stream).GetStreamId();
+    qDebug("StreamID %d", streamId);
+    gint state;
+    state = const_cast<QTMSStream&> (stream).GetState();
+    QVERIFY(state == event.curr_state);
+
+    switch (const_cast<QTMSStream&> (stream).GetStreamType()) {
+    case QTMS_STREAM_UPLINK:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_STREAM_STATE_CHANGED:
+        {
+            switch (event.curr_state) {
+            case QTMS_STREAM_INITIALIZED:
+            {
+                qDebug("Uplink initialized ");
+                break;
+            }
+            case QTMS_STREAM_UNINITIALIZED:
+                qDebug("Uplink uninitialized ");
+                break;
+            case QTMS_STREAM_PAUSED:
+                qDebug("Uplink paused ");
+                break;
+            case QTMS_STREAM_STARTED:
+                qDebug("Uplink started ");
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        default:
+            break;
+        }
+        break;
+    }
+    case QTMS_STREAM_DOWNLINK:
+    {
+        switch (event.type) {
+        case QTMS_EVENT_STREAM_STATE_CHANGED:
+        {
+            switch (event.curr_state) {
+            case QTMS_STREAM_INITIALIZED:
+                qDebug("Downlink initialized ");
+                break;
+            case QTMS_STREAM_UNINITIALIZED:
+                qDebug("Downlink uninitialized ");
+                break;
+            case QTMS_STREAM_PAUSED:
+                qDebug("Downlink paused ");
+                break;
+            case QTMS_STREAM_STARTED:
+                qDebug("Downlink started ");
+                break;
+            default:
+                break;
+            }
+            break;
+        }
+        default:
+            break;
+        }
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::RingtoneEvent(const QTMSRingTone& /*rt*/, QTMSSignalEvent event)
+{
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case QTMS_EVENT_RINGTONE_OPEN_COMPLETE:
+        qDebug("RT Open Complete");
+        break;
+    case QTMS_EVENT_RINGTONE_PLAY_COMPLETE:
+        qDebug("RT Play Complete");
+        break;
+    default:
+        break;
+    }
+}
+
+void QTmsVoipTest::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event)
+{
+
+    QVERIFY(event.reason == QTMS_RESULT_SUCCESS);
+    switch (event.type) {
+    case QTMS_EVENT_DTMF_TONE_STARTED:
+        qDebug("DTMF Started");
+        break;
+    case QTMS_EVENT_DTMF_TONE_STOPPED:
+        qDebug("DTMF Stopped");
+        break;
+    default:
+        break;
+    }
+}
+
+QTEST_MAIN_S60(QTmsVoipTest)
+
+#include "qtmsvoiptest.moc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.pro	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +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:
+# Project specification file for tsrc.
+#
+
+TEMPLATE = app
+TARGET = 
+QT += testlib
+
+
+TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD
+TARGET.EPOCALLOWDLLDATA	= 1
+
+
+LIBS +=	-lqtmsapi \
+				-llibglib \
+				-llibgobject \
+				-llibgmodule \
+				-llibstdcpp
+
+DEPENDPATH += .
+INCLUDEPATH += .
+
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \
+							 $$OS_LAYER_LIBC_SYSTEMINCLUDE \
+							 $$OS_LAYER_GLIB_SYSTEMINCLUDE \
+							 ..\..\..\qt_telephony_multimedia_service_api\inc
+# Input
+HEADERS += qtestmains60.h 
+SOURCES += qtmsvoiptest.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/tsrc.pro	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,26 @@
+# 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:
+
+#include <platform_paths.hrh>
+
+TEMPLATE = subdirs
+                    
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"       
+                 
+
+SUBDIRS = qtmscstest \
+          qtmsvoiptest 
+         
+          
+SYMBIAN_PLATFORMS = DEFAULT
--- a/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 3 %
+// Version : %version: 5 %
 
 
 #include <platform_paths.hrh>
--- a/mpx/collectionframework/collectionengine/group/mpxcollectionengine.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionengine/group/mpxcollectionengine.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -48,3 +48,5 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
--- a/mpx/collectionframework/collectionengine/src/mpxcollectioncache.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectioncache.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -28,6 +28,7 @@
 #include <mpxcollectionopenlresultdef.h>
 #include <mpxlog.h>
 #include "mpxcollectioncache.h"
+#include <mmf/common/mmfcontrollerpluginresolver.h>
 
 // CONSTANTS
 const TInt KMPXRootNodeId = 0;
@@ -589,6 +590,7 @@
 void CMPXCollectionCacheNode::HandleChangeL( TMPXItemId aChangeItemId, 
                                 RPointerArray<CMPXCollectionCacheNode>& aArray )
     {
+    CleanupResetAndDestroyPushL(aArray); 
     // This node is affected
     // All child nodes are invalid!
     //
@@ -647,6 +649,7 @@
                 } // for
             } // if iResults
         } // if no children
+    CleanupStack::Pop(&aArray); 
     }
     
 // ----------------------------------------------------------------------------
@@ -827,6 +830,7 @@
     // O(n^2) complexity here is OK, Merging keeps the number of items 
     // very small. Less than 3 items are alive at a time
     //
+    CleanupClosePushL( aArray );
     RArray<TMPXOpenDataBlock> newArray;
     CleanupClosePushL( newArray );
     
@@ -869,6 +873,7 @@
         MPX_DEBUG3("Order: %i %i", newArray[i].iOffset, newArray[i].iSize );
         }
     CleanupStack::PopAndDestroy( &newArray );
+    CleanupStack::Pop(); 
     }
                                  
 #ifdef _DEBUG
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -2483,7 +2483,10 @@
             {
             iCacheMedia = AttributesCacheableL( iBrowsePath->OpenAttributes(), *iBrowsePath );
             }
-        plugin->OpenL(*iBrowsePath, iBrowsePath->OpenAttributes(), iFilter);
+        if( iBrowsePath )
+            {
+            plugin->OpenL(*iBrowsePath, iBrowsePath->OpenAttributes(), iFilter);
+            }
         }
     }
 
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -36,6 +36,7 @@
 #include <mpxmessagegeneraldefs.h>
 #include <mpxmessagecontainerdefs.h>
 #include <mpxmessagepluginupdatedefs.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
 
 #include "mpxcollectionpluginhandler.h"
 #include "mpxcollectioncache.h"
@@ -211,12 +212,21 @@
             break;
             }
         case EMcMsgDiskInserted:        	
+            {
+            // inverting the notification order, this to get the message to 
+            // the UI faster.
             for( TInt i=0; i<count; ++i )
                 {
                 context = iContexts[i];
                 context->NotifyL( aMsg, aData );
                 }
             notify = EFalse;
+            command = EMcReOpenCollection;
+            data = aData;
+            // Clear the cache
+        	  clearCache = ETrue;
+            break;
+            }
         case EMcMsgFormatEnd:
         case EMcMsgUSBMassStorageEnd:
             {
@@ -224,7 +234,7 @@
             data = aData;
             
             // Clear the cache
-        	clearCache = ETrue;
+        	  clearCache = ETrue;
             break;
             }
         case EMcMsgUSBMTPStart:
@@ -316,6 +326,7 @@
 EXPORT_C void CMPXCollectionEngine::GetSupportedTypesL(
                                     RPointerArray<CMPXCollectionType>& aArray )
     {
+    CleanupResetAndDestroyPushL(aArray); 
     RArray<TUid> uids;
     CleanupClosePushL(uids);
     iPluginHandler->GetPluginUids(uids);
@@ -340,6 +351,7 @@
         CleanupStack::Pop(type);
         }
     CleanupStack::PopAndDestroy(&uids);
+    CleanupStack::Pop(&aArray); 
     }
 
 // ----------------------------------------------------------------------------
--- a/mpx/collectionframework/collectionserver/group/mpxcollectionserver.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionserver/group/mpxcollectionserver.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -49,3 +49,5 @@
 LIBRARY          mpxcollectionengine.lib 
 LIBRARY          mpxcommon.lib
 
+SMPSAFE
+
--- a/mpx/collectionframework/collectionutility/group/mpxcollectionutility.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionutility/group/mpxcollectionutility.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -47,3 +47,5 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
--- a/mpx/collectionframework/collectionutility/src/mpxcollectionopenutility.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionutility/src/mpxcollectionopenutility.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -221,8 +221,8 @@
 EXPORT_C void CMPXCollectionOpenUtility::SetDirection( TDirection aDirection )
     {
     iFetchDirection = aDirection;
-    
-    if( iFetchStep == EFetchItems || iFetchStep == EFetchCommand )
+
+    if( iFetchStep == EFetchItems || iFetchStep == EFetchCommand || iFetchStep == EFetchCount )
         {
         TBool skipFirst = iFetchStep == EFetchCommand ? ETrue : EFalse;
         
@@ -602,10 +602,8 @@
     MPX_DEBUG1("CMPXCollectionOpenUtility::DoHandleFetchItemsL <---" ); 
     // Task is done, and compact the list
     //
-    TInt curOffset(0);
     if( iIncrementalChunks.Count() )
         {
-        curOffset = iIncrementalChunks[0].iOffset;
         iIncrementalChunks.Remove(0);
         DoCompactTaskListL( aEntries );
         }
@@ -651,12 +649,9 @@
         iFetchStep = EFetchNone;
         }
 
-    // Callback to observer with some treshold to avoid over redrawing
-    // Playlists need every handle open to update the path
+    // Callback to observer
     //
-    if( iObs && 
-        (Abs<TInt>(aIndex-curOffset) < iFetchInfo.iSize ||
-        iFirstOpen || iMode == KMcModePlaylist || complete ) )
+    if( iObs )
         {
         iFirstOpen = EFalse;
         MPX_DEBUG1("CMPXCollectionOpenUtility::DoHandleFetchItemsL callback" ); 
--- a/mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -37,9 +37,9 @@
 #include "mpxcollectionplaylist.h"
 
 // CONSTANTS
-const TInt KIncrementalFetchSize = 400;
-
-const TInt KIncrementalDelay = 250000;
+const TInt KIncrementalFetchSize = 1000;
+const TInt KIncrementalDelayNone = 0;
+const TInt KIncrementalDelay = 100000;  // 100 ms
 
 // -----------------------------------------------------------------------------
 // Two-phased constructor.
@@ -1412,13 +1412,11 @@
     RArray<TMPXAttribute> attrs;
     CleanupClosePushL( attrs );
     TArray<TMPXAttribute> ary = attrs.Array();
-    
-    // Start the utility, 2 second delays so we don't flood the collection
-    // Have some delay as playlists are often destroyed! 
-    //
-    iIncOpenUtil->SetDelay( KIncrementalDelay ); 
-    iIncOpenUtil->StartL( *copy, ary, KIncrementalFetchSize, iPath->Index() , 
-                          CMPXCollectionOpenUtility::EFetchNormal );
+
+    iIncOpenUtil->SetDelay( KIncrementalDelayNone );
+    iIncOpenUtil->StartL( *copy, ary, KIncrementalFetchSize, iPath->Index() ,
+                          CMPXCollectionOpenUtility::EFetchDown );
+    iIncOpenUtil->SetDelay( KIncrementalDelay );
     CleanupStack::PopAndDestroy( &attrs );
     CleanupStack::PopAndDestroy( copy );
     }
--- a/mpx/commonframework/common/group/mpxcommon.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/group/mpxcommon.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -92,4 +92,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of file
--- a/mpx/commonframework/common/src/mpxcollectionpath.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxcollectionpath.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -606,6 +606,7 @@
 //
 EXPORT_C void CMPXCollectionPath::SelectionL(RArray<TMPXItemId>& aIds) const
     {
+    CleanupClosePushL(aIds);
     aIds.Reset();
     TInt idCount(iIds.Count());
     TInt selCount(iSelection.Count());
@@ -617,6 +618,7 @@
             aIds.AppendL(iIds[idIndex]);
             }
         }
+    CleanupStack::Pop();
     }
 
 // -----------------------------------------------------------------------------
--- a/mpx/commonframework/common/src/mpxdataarray.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxdataarray.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -43,7 +43,7 @@
             d->Release(aClientHandle);
             }
         // Now free the actual buffer
-        RMPXHeapManager& m=RMPXHeapManager::HeapManager(aClientHandle);
+        RMPXHeapManager::HeapManager(aClientHandle);
         iUid=0;
         iBufLen=0;
         }
--- a/mpx/commonframework/common/src/mpxdrmmediawmaagent.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxdrmmediawmaagent.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -705,6 +705,8 @@
                     User::LeaveIfError( lex.Val( dateInt ) );
                     --dateInt;
                     // convert back to buffer
+                    // coverity[size_error]
+                    // coverity[buffer_alloc]
                     HBufC* datebuf = HBufC::NewLC( KMPXWmaDrmMaxTimeBufSize );
                     TPtr datebufPtr = datebuf->Des();
 
--- a/mpx/commonframework/common/src/mpxheapmanager.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxheapmanager.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -80,7 +80,7 @@
     //
     // Create first free heap cell
     //
-    RMPXHeapCell* cell=new(aChunk.Base()+hmSize)RMPXHeapCell(0,iEndOffset-hmSize);
+    new(aChunk.Base()+hmSize)RMPXHeapCell(0,iEndOffset-hmSize);
     // set up free cell list header
     iFree.iNextOffset = hmSize;
     iFree.iLen = 0;
--- a/mpx/commonframework/common/src/mpxpluginhandlerbase.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxpluginhandlerbase.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -539,7 +539,7 @@
 //
 EXPORT_C const TDesC& CMPXPluginHandlerBase::PluginName(const TUid& aUid) const
     {
-    const TDesC* name=&KNullDesC;
+    const TDesC* name;
     TInt index(IndexOf(aUid));
     MPX_ASSERT(KErrNotFound!=index && index<iPluginInfoArray.Count());
     name = &iPluginInfoArray[index]->DisplayName();
--- a/mpx/commonframework/common/src/mpxplugininfo.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxplugininfo.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -427,6 +427,7 @@
 EXPORT_C void CMPXPluginInfo::ExtractUidsFromTextL( const TDesC8& aData,
                                                     RArray<TUid>& aArray )
     {
+    CleanupClosePushL(aArray);
     aArray.Reset();
     const TUint8* p = aData.Ptr();
     TInt startPos(0);
@@ -461,6 +462,7 @@
         TaggedDataParser::ConvertText8ToTIntL(element, val);
         aArray.AppendL(TUid::Uid(val));
         }
+    CleanupStack::Pop();
     }
 
 // ---------------------------------------------------------------------------
--- a/mpx/commonframework/common/src/mpxuser.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/commonframework/common/src/mpxuser.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -256,6 +256,7 @@
     const TArray<TMPXAttribute>& aSrc,
     RArray<TMPXAttribute>& aDest)
     {
+    CleanupClosePushL(aDest);
     aDest.Reset();
     for (TInt i = 0; i < aSrc.Count(); i++)
         {
@@ -271,6 +272,7 @@
             d = TMPXAttribute(d.ContentId(), d.AttributeId() | s.AttributeId());
             }
         }
+    CleanupStack::Pop();
     }
 
 // ----------------------------------------------------------------------------
@@ -384,6 +386,7 @@
 //
 EXPORT_C void MPXUser::InternalizeL(RArray<TMPXItemId>& aArray, RReadStream& aStream)
     {
+    CleanupClosePushL(aArray);
     TInt n=aStream.ReadInt32L();
     for (TInt i=0;i<n;++i)
         {
@@ -391,6 +394,7 @@
         TUint32 id2(aStream.ReadUint32L());
         aArray.AppendL(TMPXItemId(id1,id2));
         }
+    CleanupStack::Pop();
     }
 
 // ----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/bwins/mpxviewframeworkqt.def	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,30 @@
+EXPORTS
+	?trUtf8@MpxViewPlugin@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString MpxViewPlugin::trUtf8(char const *, char const *)
+	?tr@MpxViewFramework@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString MpxViewFramework::tr(char const *, char const *, int)
+	??0MpxViewFramework@@QAE@PAVQWidget@@V?$QFlags@W4WindowFlag@Hb@@@@@Z @ 3 NONAME ; MpxViewFramework::MpxViewFramework(class QWidget *, class QFlags<enum Hb::WindowFlag>)
+	??1MpxViewPluginResolver@@UAE@XZ @ 4 NONAME ; MpxViewPluginResolver::~MpxViewPluginResolver(void)
+	?tr@MpxViewPlugin@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString MpxViewPlugin::tr(char const *, char const *, int)
+	??0MpxViewPluginResolver@@QAE@ABV?$QList@H@@@Z @ 6 NONAME ; MpxViewPluginResolver::MpxViewPluginResolver(class QList<int> const &)
+	?tr@MpxViewFramework@@SA?AVQString@@PBD0@Z @ 7 NONAME ; class QString MpxViewFramework::tr(char const *, char const *)
+	?qt_metacast@MpxViewFramework@@UAEPAXPBD@Z @ 8 NONAME ; void * MpxViewFramework::qt_metacast(char const *)
+	?trUtf8@MpxViewFramework@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString MpxViewFramework::trUtf8(char const *, char const *, int)
+	?getStaticMetaObject@MpxViewFramework@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & MpxViewFramework::getStaticMetaObject(void)
+	?staticMetaObject@MpxViewFramework@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const MpxViewFramework::staticMetaObject
+	?qt_metacall@MpxViewFramework@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int MpxViewFramework::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@MpxViewFramework@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString MpxViewFramework::trUtf8(char const *, char const *)
+	?staticMetaObject@MpxViewPlugin@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const MpxViewPlugin::staticMetaObject
+	?metaObject@MpxViewPlugin@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * MpxViewPlugin::metaObject(void) const
+	?metaObject@MpxViewFramework@@UBEPBUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const * MpxViewFramework::metaObject(void) const
+	?resolvePlugin@MpxViewPluginResolver@@QAEPAVMpxViewPlugin@@XZ @ 17 NONAME ; class MpxViewPlugin * MpxViewPluginResolver::resolvePlugin(void)
+	?tr@MpxViewPlugin@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString MpxViewPlugin::tr(char const *, char const *)
+	?getStaticMetaObject@MpxViewPlugin@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & MpxViewPlugin::getStaticMetaObject(void)
+	??1MpxViewFramework@@UAE@XZ @ 20 NONAME ; MpxViewFramework::~MpxViewFramework(void)
+	??_EMpxViewFramework@@UAE@I@Z @ 21 NONAME ; MpxViewFramework::~MpxViewFramework(unsigned int)
+	?resolvePlugin@MpxViewFramework@@UAEPAVMpxViewPlugin@@ABV?$QList@H@@@Z @ 22 NONAME ; class MpxViewPlugin * MpxViewFramework::resolvePlugin(class QList<int> const &)
+	?qt_metacast@MpxViewPlugin@@UAEPAXPBD@Z @ 23 NONAME ; void * MpxViewPlugin::qt_metacast(char const *)
+	?viewPlugin@MpxViewPlugin@@UAEPAV1@XZ @ 24 NONAME ; class MpxViewPlugin * MpxViewPlugin::viewPlugin(void)
+	??_EMpxViewPluginResolver@@UAE@I@Z @ 25 NONAME ; MpxViewPluginResolver::~MpxViewPluginResolver(unsigned int)
+	?qt_metacall@MpxViewPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 26 NONAME ; int MpxViewPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?command@MpxViewPlugin@@IAEXH@Z @ 27 NONAME ; void MpxViewPlugin::command(int)
+	?trUtf8@MpxViewPlugin@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString MpxViewPlugin::trUtf8(char const *, char const *, int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/eabi/mpxviewframeworkqt.def	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,34 @@
+EXPORTS
+	_ZN13MpxViewPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN13MpxViewPlugin11qt_metacastEPKc @ 2 NONAME
+	_ZN13MpxViewPlugin16staticMetaObjectE @ 3 NONAME DATA 16
+	_ZN13MpxViewPlugin19getStaticMetaObjectEv @ 4 NONAME
+	_ZN13MpxViewPlugin7commandEi @ 5 NONAME
+	_ZN16MpxViewFramework11qt_metacallEN11QMetaObject4CallEiPPv @ 6 NONAME
+	_ZN16MpxViewFramework11qt_metacastEPKc @ 7 NONAME
+	_ZN16MpxViewFramework13resolvePluginERK5QListIiE @ 8 NONAME
+	_ZN16MpxViewFramework16staticMetaObjectE @ 9 NONAME DATA 16
+	_ZN16MpxViewFramework19getStaticMetaObjectEv @ 10 NONAME
+	_ZN16MpxViewFrameworkC1EP7QWidget6QFlagsIN2Hb10WindowFlagEE @ 11 NONAME
+	_ZN16MpxViewFrameworkC2EP7QWidget6QFlagsIN2Hb10WindowFlagEE @ 12 NONAME
+	_ZN16MpxViewFrameworkD0Ev @ 13 NONAME
+	_ZN16MpxViewFrameworkD1Ev @ 14 NONAME
+	_ZN16MpxViewFrameworkD2Ev @ 15 NONAME
+	_ZN21MpxViewPluginResolver13resolvePluginEv @ 16 NONAME
+	_ZN21MpxViewPluginResolverC1ERK5QListIiE @ 17 NONAME
+	_ZN21MpxViewPluginResolverC2ERK5QListIiE @ 18 NONAME
+	_ZN21MpxViewPluginResolverD0Ev @ 19 NONAME
+	_ZN21MpxViewPluginResolverD1Ev @ 20 NONAME
+	_ZN21MpxViewPluginResolverD2Ev @ 21 NONAME
+	_ZNK13MpxViewPlugin10metaObjectEv @ 22 NONAME
+	_ZNK16MpxViewFramework10metaObjectEv @ 23 NONAME
+	_ZTI13MpxViewPlugin @ 24 NONAME
+	_ZTI16MpxViewFramework @ 25 NONAME
+	_ZTI21MpxViewPluginResolver @ 26 NONAME
+	_ZTI22MpxPluginViewInterface @ 27 NONAME
+	_ZTV13MpxViewPlugin @ 28 NONAME
+	_ZTV16MpxViewFramework @ 29 NONAME
+	_ZTV21MpxViewPluginResolver @ 30 NONAME
+	_ZThn8_N16MpxViewFrameworkD0Ev @ 31 NONAME
+	_ZThn8_N16MpxViewFrameworkD1Ev @ 32 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/inc/mpxplugindata.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,105 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef MPXPLUGINDATA_H
+#define MPXPLUGINDATA_H
+
+// INCLUDES
+#include <QList>
+// CLASS DECLARATION
+
+/**
+ *  QMpxPluginData
+ * 
+ */
+class MpxPluginData
+    {
+public:
+    enum TMPXViewPluginPriorities{
+        EMPXViewPluginPriorityLowest = -20000,
+        EMPXViewPluginPriorityLow = -10000,
+        EMPXViewPluginPriorityNormal = 0,
+        EMPXViewPluginPriorityHigh = 10000,
+        EMPXViewPluginPriorityHighest = 20000
+    };
+
+    /**
+     * Constructor
+     */
+    MpxPluginData( );
+
+    /**
+     * Destructor.
+     */
+    ~MpxPluginData();
+
+    /**
+     * Plugin id geter
+     * @return plugin id 
+     */
+    int id()  const;
+    
+    /**
+     * Plugin interface id geter
+     * @return interface id implemented by plugin 
+     */
+    int type() const;
+    
+    /**
+     * Plugin priority geter
+     * @return priority of plugin 
+     */
+    TMPXViewPluginPriorities priority() const;
+    
+    /**
+     * Plugin supported functionality geter
+     * @return list of functionality delivered by plugin
+     */
+    const QList< int >& supportedId() const;
+    
+    /**
+     * Plugin id seter
+     * @param value - new value of plugin id
+     */
+    void setId( int value );
+    
+    /**
+     * Plugin interface id seter
+     * @param value - new value of plugin interface id
+     */
+    void setType( int value );
+    
+    /**
+     * Plugin priority seter
+     * @param value - new plugin priority
+     */
+    void setPriority( TMPXViewPluginPriorities value );
+    
+    /**
+     * Plugin supporterd functionality seter
+     * @param value - new functionality supported by plugin
+     */
+    void addSupportedId( int value );
+
+private:
+    int pluginId;
+    int pluginType;
+    TMPXViewPluginPriorities pluginPriority;
+    QList< int > pluginSupportedId;
+    };
+
+#endif // MPXPLUGINDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/inc/mpxplugindataparser.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef QMPXPLUDINDATAPARSER_H
+#define QMPXPLUDINDATAPARSER_H
+
+class MpxPluginData;
+class QString;
+class QStringRef;
+
+/**
+ *  QMpxPluginDataParser
+ * 
+ */
+class MpxPluginDataParser
+    {
+public:
+
+    /**
+     * Constructor
+     */
+    MpxPluginDataParser();
+        
+    /**
+     * Destructor.
+     */
+    ~MpxPluginDataParser();
+    
+    const MpxPluginData* data() const;
+    
+    MpxPluginData* takeData();
+    
+    void parse( const QString& aData );
+private:
+    bool findNextNode( const QString& aSrc, int& aOffset, QStringRef& aTagName, QStringRef& aTagContent ) const;
+    bool parseInt( int& aDst, const QString& aSrc ) const ;
+    void parseSupportedId( const QString& aValue );
+private:
+    MpxPluginData* dataPtr;
+    };
+
+#endif // QMPXPLUDINDATAPARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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: 
+*
+*/
+
+// This file defines the API for MpxViewPluginResolver.dll
+
+#ifndef __MPXVIEWPLUGINRESOLVER_H__
+#define __MPXVIEWPLUGINRESOLVER_H__
+
+#include <QList>
+
+#include <mpxviewpluginqt.h>
+
+#ifdef BUILD_VIEWFRAMEWORK
+#define VFDLL_EXPORT Q_DECL_EXPORT
+#else
+#define VFDLL_EXPORT Q_DECL_IMPORT
+#endif
+
+class MpxViewPluginResolverPrivate;
+
+class VFDLL_EXPORT MpxViewPluginResolver
+    {
+public:
+    // new functions
+    MpxViewPluginResolver( const QList<int>& );
+    virtual ~MpxViewPluginResolver();
+    MpxViewPlugin* resolvePlugin();
+private:
+    MpxViewPluginResolverPrivate* impl;
+    };
+
+#endif  // __MPXVIEWPLUGINRESOLVER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver_p.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* 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: 
+*
+*/
+
+// This file defines the API for MpxViewPluginResolver.dll
+
+#ifndef __MPXVIEWPLUGINRESOLVERPRIVATE_H__
+#define __MPXVIEWPLUGINRESOLVERPRIVATE_H__
+
+#include <QList>
+#include <xqpluginloader.h>
+#include <xqplugininfo.h>
+
+class MpxViewPlugin;
+class MpxPluginViewInterface;
+
+class MpxViewPluginResolverPrivate
+{
+public:
+    // new functions
+    MpxViewPluginResolverPrivate( const QList<int>& );
+    ~MpxViewPluginResolverPrivate();
+    MpxViewPlugin* resolvePlugin();
+private:
+    MpxPluginViewInterface* resolveAndLoadPlugins( const QList< XQPluginInfo >& impls );
+private:
+    const QList<int> requestedPlugins;
+};
+#endif  // __MPXVIEWPLUGINRESOLVERPRIVATE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/mpxviewframeworkqt.pro	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,79 @@
+#
+# 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: 
+#
+#
+
+TEMPLATE = lib
+
+TARGET = mpxviewframeworkqt
+CONFIG += qt hb
+
+TARGET.UID3 = 0x2002B33F
+
+# QT -= gui
+
+DEPENDPATH += inc \
+              include \
+              src
+
+INCLUDEPATH +=  . \
+			    ./inc \
+			    ./include \
+			    ../viewframework/include \
+			    /epoc32/include/mw/hb/hbcore \
+			    /epoc32/include/mw/hb/hbinput \
+			    /epoc32/include/mw/hb/hbwidgets \
+			    /epoc32/include/mw/hb/hbfeedback \
+			    /epoc32/include/mw/hb/tools 
+
+LIBS+= -lhbcore -lhbwidgets -lxqplugins
+    
+DEFINES += BUILD_VIEWFRAMEWORK
+
+    
+HEADERS += inc/mpxplugindata.h \
+		   inc/mpxplugindataparser.h \
+		   inc/mpxviewpluginresolver_p.h \
+		   inc/mpxviewpluginresolver.h \
+                   ../../mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h \
+	           ../../mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h    
+	
+SOURCES += \
+	   src/mpxplugindata.cpp \
+	   src/mpxplugindataparser.cpp \
+	   src/mpxviewpluginresolver.cpp \
+	   src/mpxviewpluginresolver_p.cpp \
+	   src/mpxviewframework.cpp
+
+symbian { 
+
+TARGET.CAPABILITY = All -TCB
+TARGET.EPOCALLOWDATA = 1
+MMP_RULES += EPOCALLOWDLLDATA
+
+include(rom/rom.pri)
+
+myDefInclude = "NOSTRICTDEF" \
+"$${LITERAL_HASH}if defined(WINS)"\
+"DEFFILE  bwins/mpxviewframeworkqt.def "\
+"$${LITERAL_HASH}else "\
+"DEFFILE  eabi/mpxviewframeworkqt.def "\
+"$${LITERAL_HASH}endif"
+
+MMP_RULES += myDefInclude
+
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/rom/mpxviewframeworkqt.iby	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,27 @@
+/*
+* 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: 
+*
+*/
+
+#ifndef MPXVIEWFRAMEWORKQT_IBY
+#define MPXVIEWFRAMEWORKQT_IBY
+
+#include <bldvariant.hrh>
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\mpxviewframeworkqt.dll	SHARED_LIB_DIR\mpxviewframeworkqt.dll
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/rom/rom.pri	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,21 @@
+#
+# 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: 
+#
+
+symbian {
+MP_IBY_DIR = $$section(PWD,":",1)
+
+BLD_INF_RULES.prj_exports += "$$MP_IBY_DIR/mpxviewframeworkqt.iby       CORE_MW_LAYER_IBY_EXPORT_PATH(mpxviewframeworkqt.iby)"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/src/mpxplugindata.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,113 @@
+/*
+* 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: 
+*
+*/
+
+#include "mpxplugindata.h"
+
+// -----------------------------------------------------------------------------
+// MpxPluginData
+// -----------------------------------------------------------------------------
+//
+MpxPluginData::MpxPluginData()
+:
+pluginId( 0 ),
+pluginType( 0 ),
+pluginPriority( EMPXViewPluginPriorityLowest ),
+pluginSupportedId()
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+// ~MpxPluginData
+// -----------------------------------------------------------------------------
+//
+MpxPluginData::~MpxPluginData()
+{
+    pluginSupportedId.clear();
+}
+
+// -----------------------------------------------------------------------------
+// id
+// -----------------------------------------------------------------------------
+//
+int MpxPluginData::id()const
+{
+    return pluginId;
+}
+
+// -----------------------------------------------------------------------------
+// type
+// -----------------------------------------------------------------------------
+//
+int MpxPluginData::type()const
+{
+    return pluginType;
+}
+
+// -----------------------------------------------------------------------------
+// priority
+// -----------------------------------------------------------------------------
+//
+MpxPluginData::TMPXViewPluginPriorities MpxPluginData::priority() const
+{
+    return pluginPriority;
+}
+
+// -----------------------------------------------------------------------------
+// supportedId
+// -----------------------------------------------------------------------------
+//
+const QList<int>& MpxPluginData::supportedId() const
+{
+    return pluginSupportedId;
+}
+
+// -----------------------------------------------------------------------------
+// setId
+// -----------------------------------------------------------------------------
+//
+void MpxPluginData::setId( int value )
+{
+    pluginId = value;
+}
+
+// -----------------------------------------------------------------------------
+// setId
+// -----------------------------------------------------------------------------
+//
+void MpxPluginData::setType( int value )
+{
+    pluginType = value;
+}
+
+// -----------------------------------------------------------------------------
+// setType
+// -----------------------------------------------------------------------------
+//
+void MpxPluginData::setPriority( TMPXViewPluginPriorities value )
+{
+    pluginPriority = value;
+}
+
+// -----------------------------------------------------------------------------
+// addSupportedId
+// -----------------------------------------------------------------------------
+//
+void MpxPluginData::addSupportedId( int value )
+{
+    pluginSupportedId.append( value );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/src/mpxplugindataparser.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,214 @@
+/*
+* 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: 
+*
+*/
+
+#include "mpxplugindataparser.h"
+#include "mpxplugindata.h"
+#include <QString>
+
+
+
+const int gParserHexBase( 16 );
+const int gParserDecBase( 10 );
+
+static MpxPluginData::TMPXViewPluginPriorities parsePriority( const QStringRef& src );
+
+
+// ----------------------------------------------------------------------------
+// MpxPluginDataParser()
+// ----------------------------------------------------------------------------
+//
+MpxPluginDataParser::MpxPluginDataParser()
+:
+dataPtr( NULL )
+{
+    // No implementation required
+}
+
+// ----------------------------------------------------------------------------
+// ~MpxPluginDataParser()
+// ----------------------------------------------------------------------------
+//
+MpxPluginDataParser::~MpxPluginDataParser()
+{
+    if( NULL != dataPtr ){
+        delete dataPtr;
+    }
+}
+
+// ----------------------------------------------------------------------------
+// data()
+// ----------------------------------------------------------------------------
+//
+const MpxPluginData* MpxPluginDataParser::data() const
+{
+    return dataPtr;
+}
+
+// ----------------------------------------------------------------------------
+// takeData()
+// ----------------------------------------------------------------------------
+//
+MpxPluginData* MpxPluginDataParser::takeData()
+{
+    MpxPluginData* retVal( dataPtr );
+    if( NULL != dataPtr ){
+        dataPtr  = NULL;
+    }
+    return retVal;
+}
+
+// ----------------------------------------------------------------------------
+// parse( const QString& data )
+// ----------------------------------------------------------------------------
+//
+void MpxPluginDataParser::parse( const QString& data )
+{
+    const QString PluginIdTag( "p" );
+    const QString PluginTypeTag( "t" );
+    const QString PluginPriorityTag( "i" );
+    const QString PluginSupportedTag( "f" );
+
+    QStringRef tagName,
+               tagContent;
+    int parserOffset( 0 );
+    if( NULL != dataPtr ){
+        delete dataPtr;
+        dataPtr = NULL;
+    }
+    int integerNodeRepresentation( 0 );
+    while( findNextNode( data, parserOffset, tagName, tagContent ) ){
+        
+        if( NULL == dataPtr ){
+            dataPtr = new MpxPluginData();
+        }
+        if( PluginIdTag == tagName ){
+            if( parseInt( integerNodeRepresentation, tagContent.toString() ) )
+                dataPtr->setId( integerNodeRepresentation );
+        }else if( PluginTypeTag == tagName ){
+            if( parseInt( integerNodeRepresentation, tagContent.toString() ) ) {
+                dataPtr->setType( integerNodeRepresentation );
+            }
+        }else if( PluginPriorityTag == tagName ){
+            dataPtr->setPriority( parsePriority( tagContent ) );
+        }else if( PluginSupportedTag == tagName ){
+            parseSupportedId( tagContent.toString() );
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// findNextNode( const QString& src, int& offset, QStringRef& tagName, QStringRef& tagContent )
+// ----------------------------------------------------------------------------
+//
+bool MpxPluginDataParser::findNextNode( const QString& src, int& offset, QStringRef& tagName, QStringRef& tagContent ) const
+{
+    const QChar endOfTag( '>' );
+    const QString beginOfStopTag( "</" );
+    
+    
+    int nodeBeginOffset = src.indexOf( endOfTag, offset, Qt::CaseSensitive );
+    if( nodeBeginOffset <= offset ){
+        //next "start tag" wasn't found. skip parsing
+        return false;
+    }
+    ++nodeBeginOffset;
+    int nodeEndOffset = src.indexOf( endOfTag, nodeBeginOffset, Qt::CaseSensitive );
+    if( nodeEndOffset <= nodeBeginOffset ){
+        //next "stop tag" wasn't found. skip parsing
+        return false;
+    }
+    int nodeStopBegin = src.indexOf( beginOfStopTag, nodeBeginOffset, Qt::CaseSensitive );
+    offset = nodeEndOffset + 1;
+    if( nodeStopBegin <= nodeBeginOffset ){
+        //error invalid document format
+        return false;
+    }
+    const int nameBegin( nodeStopBegin + beginOfStopTag.length() );
+    tagName = src.midRef( nameBegin, nodeEndOffset - nameBegin );
+    tagContent = src.midRef( nodeBeginOffset, nodeStopBegin - nodeBeginOffset );
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// parseInt( int& aDst, const QString& src ) const
+// ----------------------------------------------------------------------------
+//
+bool MpxPluginDataParser::parseInt( int& aDst, const QString& src ) const 
+{
+    const int parserBasesByPriority[] = { gParserHexBase, gParserDecBase },
+              parserSupportedBases( 2 );
+    bool retVal( false );
+    for( int iter( 0 ); !retVal && iter < parserSupportedBases; ++iter ){
+        aDst = src.toInt( &retVal, parserBasesByPriority[ iter ] );
+    }
+    return retVal;
+}
+
+// ----------------------------------------------------------------------------
+// parseSupportedId( const QString& value )
+// ----------------------------------------------------------------------------
+//
+void MpxPluginDataParser::parseSupportedId( const QString& value )
+{
+    if( NULL == dataPtr ) {
+        return;
+    }
+    int from( 0 ), to( 0 ), tagValue;
+    const QChar coma( ',' );
+    do{
+        if( from >= value.length() ){
+            break;
+        }
+        to = value.indexOf( coma, from );
+        if( to < from ){
+            to = value.length();
+        }
+        if( parseInt( tagValue, value.mid( from, to - from ) ) ){
+            dataPtr->addSupportedId( tagValue );
+        }
+        from = ( to + 1 );
+    }while( true );
+}
+
+// ----------------------------------------------------------------------------
+// parseSupportedId( const QString& value )
+// ----------------------------------------------------------------------------
+//
+MpxPluginData::TMPXViewPluginPriorities parsePriority( const QStringRef& src ) 
+{
+
+    const QString MPXViewPluginPriorityLowestTag( "EMPXViewPluginPriorityLowest" );
+    const QString MPXViewPluginPriorityLowTag( "EMPXViewPluginPriorityLow" );
+    const QString MPXViewPluginPriorityNormalTag( "EMPXViewPluginPriorityNormal" );
+    const QString MPXViewPluginPriorityHighTag( "EMPXViewPluginPriorityHigh" );
+    const QString MPXViewPluginPriorityHighestTag( "EMPXViewPluginPriorityHighest" );
+
+    MpxPluginData::TMPXViewPluginPriorities 
+        retVal( MpxPluginData::EMPXViewPluginPriorityLowest );
+    if(  MPXViewPluginPriorityLowTag == src ){
+        retVal =  MpxPluginData::EMPXViewPluginPriorityLow;
+    }else if( MPXViewPluginPriorityNormalTag == src ){
+        retVal =  MpxPluginData::EMPXViewPluginPriorityNormal;
+    }else if( MPXViewPluginPriorityHighTag == src ){
+        retVal =  MpxPluginData::EMPXViewPluginPriorityHigh;
+    }else if( MPXViewPluginPriorityHighestTag == src ){
+        retVal =  MpxPluginData::EMPXViewPluginPriorityHighest;
+    }
+    return retVal;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/src/mpxviewframework.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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: 
+*
+*/
+
+#include <hbmainwindow.h>
+#include <hbview.h>
+
+#include <mpxviewframeworkqt.h>
+#include <mpxviewpluginresolver.h>
+#include <mpxviewpluginqt.h>
+
+MpxViewFramework::MpxViewFramework(QWidget *parent, Hb::WindowFlags windowFlags)
+:
+HbMainWindow(parent, windowFlags)
+{
+}
+
+MpxViewFramework::~MpxViewFramework()
+{
+}
+
+MpxViewPlugin *MpxViewFramework::resolvePlugin(const QList<int>& requestedPlugins)
+{
+    MpxViewPlugin *viewPlugin = 0;
+    MpxViewPluginResolver *viewResolver = new MpxViewPluginResolver(requestedPlugins);
+    if (viewResolver!=0) {
+        viewPlugin = viewResolver->resolvePlugin();
+        delete viewResolver;
+    }
+    return viewPlugin;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/src/mpxviewpluginresolver.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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: 
+*
+*/
+
+#include "mpxviewpluginresolver.h"	// MpxViewPluginResolver
+#include "mpxviewpluginresolver_p.h"  // MpxViewPluginResolverPrivate
+
+// -----------------------------------------------------------------------------
+// MpxViewPluginResolver()
+// -----------------------------------------------------------------------------
+//
+MpxViewPluginResolver::MpxViewPluginResolver( const QList<int>& requestedPlugins )
+:
+impl ( new MpxViewPluginResolverPrivate( requestedPlugins ) )
+{}
+
+// -----------------------------------------------------------------------------
+// ~MpxViewPluginResolver()
+// -----------------------------------------------------------------------------
+//
+MpxViewPluginResolver::~MpxViewPluginResolver()
+{
+    if( impl ) {
+        delete impl;
+    }
+}
+// -----------------------------------------------------------------------------
+// resolvePlugin()
+// -----------------------------------------------------------------------------
+//
+MpxViewPlugin* MpxViewPluginResolver::resolvePlugin()
+{
+    return impl ? impl->resolvePlugin() : 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/mpxviewframeworkqt/src/mpxviewpluginresolver_p.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* 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: 
+*
+*/
+
+#include "mpxviewpluginresolver_p.h"    // MpxViewPluginResolverPrivate
+#include "mpxplugindata.h"
+#include "mpxplugindataparser.h"
+
+#include <mpxviewpluginqt.h>
+#include <QHash>
+
+const char gRequestedPluginInterfaceName [] = "org.nokia.mmdt.MpxViewPlugin/1.0";
+
+const int gNoneScore( 0 );
+const int gSupportedScore( 5 );
+const int gImplementationScore( 100 ); 
+const int gTypeScore( 1 );
+
+// ----------------------------------------------------------------------------
+// score
+// ----------------------------------------------------------------------------
+//
+static int score( int , const MpxPluginData& );
+
+// -----------------------------------------------------------------------------
+//MpxViewPluginResolverPrivate
+// -----------------------------------------------------------------------------
+//
+MpxViewPluginResolverPrivate::MpxViewPluginResolverPrivate( 
+        const QList<int>& request )
+:
+requestedPlugins( request )
+{
+    //No implementation needed
+}
+
+// -----------------------------------------------------------------------------
+// ~MpxViewPluginResolverPrivate
+// -----------------------------------------------------------------------------
+//
+MpxViewPluginResolverPrivate::~MpxViewPluginResolverPrivate()
+{
+    //No implementation needed
+}
+
+// -----------------------------------------------------------------------------
+// resolvePlugin()
+// -----------------------------------------------------------------------------
+//
+MpxViewPlugin* MpxViewPluginResolverPrivate::resolvePlugin()
+{
+    MpxPluginViewInterface* retVal = 0;
+    if( 0 < requestedPlugins.count() ){
+        XQPluginLoader  loader;
+        QList< XQPluginInfo > impls;
+        if (loader.listImplementations(gRequestedPluginInterfaceName, impls)) {
+            retVal = resolveAndLoadPlugins( impls );
+        }
+    }
+    return (retVal!=0) ? retVal->viewPlugin() : 0;
+}
+
+// ----------------------------------------------------------------------------
+// resolveAndLoadPlugins( const QList< XQPluginInfo >& impls );
+// ----------------------------------------------------------------------------
+//
+MpxPluginViewInterface* MpxViewPluginResolverPrivate::resolveAndLoadPlugins( 
+        const QList< XQPluginInfo >& impls )
+{
+    MpxPluginViewInterface* retVal = 0;
+    
+    //parse plugin info data 
+    QHash<const XQPluginInfo*, MpxPluginData* > parsedInfo;
+    QList< XQPluginInfo >::const_iterator iter( impls.begin() );
+    MpxPluginDataParser parser;
+    for( ; iter != impls.end(); ++iter ){
+        if( 0 < ( *iter ).opaqueData().length() ){
+            parser.parse( ( *iter ).opaqueData() );
+            if( parser.data() ){
+                parsedInfo.insert( &( *iter ), parser.takeData() );
+            }
+        }
+    }
+    
+    //look for optimal plugin
+    QList<int> uids( requestedPlugins );
+    QList<int>::iterator currentUidIter,
+                         optimalUidIter;
+    QHash<const XQPluginInfo*, MpxPluginData* >::iterator 
+        currentInfoIter,
+        optimalInfoIter;
+    int currentPluginScore( 0 ),
+        optimalPluginScore( 0 );
+    
+    do{
+        //initialize iterators with invalid objects
+        optimalInfoIter = parsedInfo.end();
+        
+        for( currentUidIter = uids.begin();
+             uids.end() != currentUidIter;
+             ++currentUidIter )
+        {
+            for( currentInfoIter = parsedInfo.begin();
+                 parsedInfo.end() != currentInfoIter;
+                 ++currentInfoIter )
+            {
+                currentPluginScore = score( (*currentUidIter ), 
+                                            (*(*currentInfoIter) ) );
+                if( gNoneScore < currentPluginScore ){
+                    if( parsedInfo.end() == optimalInfoIter ){
+                        //first plugin with no zero score. set as optimal
+                        optimalPluginScore = currentPluginScore;
+                        optimalInfoIter = currentInfoIter;
+                        optimalUidIter = currentUidIter;
+                    }
+                    if( optimalPluginScore < currentPluginScore ||
+                        ( ( currentPluginScore == optimalPluginScore ) &&
+                          ( ( *currentInfoIter )->priority() > ( *optimalInfoIter )->priority() ) ) )
+                    {
+                        //current plugin fits better then "optimal" one
+                        optimalPluginScore = currentPluginScore;
+                        optimalInfoIter = currentInfoIter;
+                        optimalUidIter = currentUidIter;
+                    }
+                }
+            }
+        }
+        if( parsedInfo.end() == optimalInfoIter ){
+             //plugin was not found
+             break;
+         }
+         XQPluginLoader loader( optimalInfoIter.key()->uid() );
+         if( loader.load() ) {
+             retVal = qobject_cast<MpxPluginViewInterface*>(loader.instance());
+         }
+         //remove already loaded plugin description
+         delete ( *optimalInfoIter );
+         parsedInfo.erase( optimalInfoIter );
+         uids.erase( optimalUidIter );
+    
+    }while( NULL == retVal );
+    uids.clear();
+    
+    //clear parsed data structures
+    for( currentInfoIter = parsedInfo.begin();
+         parsedInfo.end() != currentInfoIter;
+         currentInfoIter = parsedInfo.erase( currentInfoIter ) ){
+         delete ( *currentInfoIter );
+    }
+    return retVal;
+}
+// ----------------------------------------------------------------------------
+// score
+// ----------------------------------------------------------------------------
+//
+int score( int uid, const MpxPluginData& pluginData )
+{
+    int retVal( gNoneScore );
+    QList< int >::const_iterator iter( pluginData.supportedId().begin() );
+    for( ; iter != pluginData.supportedId().end(); ++iter ){
+        if( ( *iter ) == uid ){
+            retVal += gSupportedScore;
+        }
+    }
+    if( pluginData.id() == uid ){
+        retVal += gImplementationScore; 
+    }
+    if( pluginData.type() == uid ){
+        retVal += gTypeScore;
+    }
+    
+    qDebug(QString("Score 0x%1: %2").arg(uid, 0, 16).arg(retVal).toLatin1().data());
+    
+    return retVal;
+}
--- a/mpx/playbackframework/playbackengine/group/mpxplaybackengine.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/playbackframework/playbackengine/group/mpxplaybackengine.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -60,4 +60,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of file
--- a/mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -25,6 +25,7 @@
 
 // CONSTANTS
 const TInt KMPXErrDiedTimeout = 2000000;
+
 // Time to wait before resume after call has ended.
 const TInt KMPXResumeWaitTime = 3000000; // 3.0s
 
--- a/mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -243,73 +243,33 @@
     {
     MPX_FUNC_EX("CMPXPlaybackMediaHelper::HandleCollectionMediaL");
     MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL(): error %d", aError);
-
-    // First check if media attributes supported, if not, need to retrieve
-    // from playback plugin
-    TBool mediaOk( ETrue );
-    // Note: The following block is for uPnP remote playlist which does not contain
-    // metadata in the remote playlist. However, uPnP update to gurantee that titles
-    // are available in the collection plugin. If KMPXMediaColDetailMediaNotAvailable
-    // returned, UI can at least update title anyway anyway.
-    //
-    // We could not call MediaFromPluginL before the plugin initiliazed. uPnP made
-    // changes so that it will call back media after the new track is initialized.
-    // So we don't need call plugin API MediaL.
-    /*if ( KErrNone == aError )
-        { // media object is ok
-        if ( aMedia.IsSupported( KMPXMediaColDetailMediaNotAvailable ))
-            {
-            TBool mediaNotSupported(
-                    aMedia.ValueTObjectL<TBool>( KMPXMediaColDetailMediaNotAvailable ));
-            MPX_DEBUG2("HandleCollectionMediaL media not inCollection %d",
-                        mediaNotSupported);
-            if ( mediaNotSupported)
-                { // It must be uPnP remote playlist, media request can only be
-                  // sent to plugin at initialising, playing & pause state
-                mediaOk = EFalse;
-                // need to create a copy of buf since that will be delete when
-                // this task is completed
-                const TDesC8& data( iTaskQueue->BufData() );
-                CBufBase* buf( MPXUser::CreateBufferLC( data.Size() ));
-                buf->Write( 0, data );
-                iEngine.MediaFromPluginL(
-                         static_cast<MMPXPlaybackEngineObserver*>(
-                                                    iTaskQueue->Callback() ),
-                         buf );
-                CleanupStack::Pop( buf );
-                } //otherwise, just send uri to clients.
-            }
-        }*/
-
-    if ( mediaOk || aError )
+    MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
+               iTaskQueue->Task());
+               
+    if ( iTaskQueue->Param() )
         {
-        MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
-                   iTaskQueue->Task());
-
-        if ( iTaskQueue->Param() )
-            {
-            // Broadcast
-            CMPXMessage* msg( CMPXMessage::NewL() );
-            CleanupStack::PushL( msg );
-            msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
-                                                  KMPXMessagePbMediaChanged );
-            msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
-                                              const_cast<CMPXMedia*>( &aMedia ));
-            CMPXClientList* clientList(
-                static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
-            clientList->SendMsg(msg, KErrNone);
-            CleanupStack::PopAndDestroy( msg );
-            }
-        else
-            {
-            // Callback
-            MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
-                       iTaskQueue->Callback());
-            MMPXPlaybackEngineObserver* callback(
-                static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
-            callback->HandleMedia( aMedia, aError );
-            }
+        // Broadcast
+        CMPXMessage* msg( CMPXMessage::NewL() );
+        CleanupStack::PushL( msg );
+        msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
+                                              KMPXMessagePbMediaChanged );
+        msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
+                                          const_cast<CMPXMedia*>( &aMedia ));
+        CMPXClientList* clientList(
+            static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
+        clientList->SendMsg(msg, KErrNone);
+        CleanupStack::PopAndDestroy( msg );
         }
+    else
+        {
+        // Callback
+        MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
+                   iTaskQueue->Callback());
+        MMPXPlaybackEngineObserver* callback(
+            static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
+        callback->HandleMedia( aMedia, aError );
+        }
+        
     MPX_DEBUG1("CMPXPlaybackMediaHelper::HandleCollectionMediaL complete task");
     iTaskQueue->CompleteTask();
     }
--- a/mpx/playbackframework/playbackserver/group/mpxplaybackserver.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/playbackframework/playbackserver/group/mpxplaybackserver.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -49,5 +49,8 @@
 #ifdef RD_TSP_CLIENT_MAPPER
 LIBRARY          tspclientmapper.lib
 #endif
+
+SMPSAFE
+
 // End of file
 
--- a/mpx/playbackframework/playbackutility/group/mpxplaybackutility.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/playbackframework/playbackutility/group/mpxplaybackutility.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -49,3 +49,5 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
--- a/mpx/viewframework/baseviewplugins/group/mpxviewplugin.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/viewframework/baseviewplugins/group/mpxviewplugin.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -50,4 +50,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of File
--- a/mpx/viewframework/viewutility/group/mpxviewutility.mmp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/viewframework/viewutility/group/mpxviewutility.mmp	Tue Aug 31 15:41:40 2010 +0300
@@ -55,4 +55,6 @@
 deffile ../bwinscw/ 
 #endif
 
+SMPSAFE
+
 // End of File
--- a/mpx/viewframework/viewutility/src/mpxviewplugininfo.cpp	Thu Aug 19 10:24:28 2010 +0300
+++ b/mpx/viewframework/viewutility/src/mpxviewplugininfo.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -189,6 +189,7 @@
     const TDesC8& aData,
     RArray<TUid>& aArray )
     {
+    CleanupClosePushL(aArray);
     aArray.Reset();
 
     TInt nextPos( 0 );
@@ -205,6 +206,7 @@
             aArray.AppendL( TUid::Uid( pluginUid ) );
             }
         } while ( KErrNotFound != nextPos );
+    CleanupStack::Pop(); 
     }
 
 // ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/SIS/QTMS_udeb_STUB_SIS.bat	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,64 @@
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Create QTMS UDEB SIS package
+rem
+
+@echo off
+echo ----------------------------
+echo Configuring for RnD SIS
+echo ----------------------------
+echo Start of configure time:
+time /t
+
+:CREATE_DIR
+echo.
+echo - create Sis folder (created only if needed)
+mkdir .\SIS
+
+:COPY_DLL
+echo.
+echo - Copy dlls [udeb]:
+copy %EPOCROOT%epoc32\release\armv5\udeb\qtmsapi.dll .
+
+if errorlevel == 1 goto END_ERROR
+
+:CALL_ELFTRAIN
+echo - Updating Version No [10.1] (calling elftran)
+call elftran.exe -version 10.1 qtmsapi.dll
+
+:MAKESIS
+makesis ..\SIS\qtms.pkg ..\SIS\qtms.sis
+signsis ..\SIS\qtms.sis ..\SIS\qtms.sisx rd.crt rd.key
+if errorlevel == 1 goto END_ERROR
+
+:DELETE_DLL
+echo.
+echo - remove the copied dlls from current folder
+del qtmsapi.dll
+
+goto END
+
+:END_ERROR
+echo.
+echo Sis creation failed.
+goto FINAL_END
+
+:END
+echo.
+echo Sis file created succesfully
+echo ============================
+
+:FINAL_END
+echo End of configure time is:
+time /t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/SIS/qtms.pkg	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2010 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: Telephony Multimedia Services (TMS) - UDEB build
+;
+;File: tms.pkg
+
+;Languages
+&EN
+
+;Header
+#{"QTMS"},(0x10207CB2),1,0,0, TYPE=SA, RU
+
+;Series 60 v5.0
+[0x101F7961], 0,0,0, {"Series60ProductID"}
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Files To Copy...<src> <destination>
+"/epoc32/release/armv5/udeb/qtmsapi.dll"-"!:/sys/bin/qtmsapi.dll"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/bwins/qtmsu.def	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,388 @@
+EXPORTS
+	?qt_metacast@QTMSSpeakerSink@QTMS@@UAEPAXPBD@Z @ 1 NONAME ; void * QTMS::QTMSSpeakerSink::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 2 NONAME ; struct QMetaObject const & QTMS::QTMSGainEffect::getStaticMetaObject(void)
+	??0QTMSStream@QTMS@@IAE@XZ @ 3 NONAME ; QTMS::QTMSStream::QTMSStream(void)
+	??0QTMSAMRFormat@QTMS@@IAE@XZ @ 4 NONAME ; QTMS::QTMSAMRFormat::QTMSAMRFormat(void)
+	?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *, int)
+	?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *)
+	?CreateRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 7 NONAME ; int QTMS::QTMSFactory::CreateRingTonePlayer(class QTMS::QTMSRingTone * &)
+	?qt_metacall@QTMSClientSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int QTMS::QTMSClientSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *, int)
+	??_EQTMSGlobalRouting@QTMS@@UAE@I@Z @ 11 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(unsigned int)
+	?metaObject@QTMSGlobalRouting@QTMS@@UBEPBUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalRouting::metaObject(void) const
+	?SetPlc@QTMSG711Format@QTMS@@QAEHH@Z @ 13 NONAME ; int QTMS::QTMSG711Format::SetPlc(int)
+	?AddSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 14 NONAME ; int QTMS::QTMSStream::AddSink(class QTMS::QTMSSink *)
+	?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *, int)
+	??_EQTMSG729Format@QTMS@@UAE@I@Z @ 16 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(unsigned int)
+	?Deinit@QTMSRingTone@QTMS@@QAEHXZ @ 17 NONAME ; int QTMS::QTMSRingTone::Deinit(void)
+	?qt_metacast@QTMSClientSink@QTMS@@UAEPAXPBD@Z @ 18 NONAME ; void * QTMS::QTMSClientSink::qt_metacast(char const *)
+	?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *)
+	??_EQTMSSpeakerSink@QTMS@@UAE@I@Z @ 20 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(unsigned int)
+	?getStaticMetaObject@QTMSInbandTone@QTMS@@SAABUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const & QTMS::QTMSInbandTone::getStaticMetaObject(void)
+	??0QTMSGainEffect@QTMS@@IAE@XZ @ 22 NONAME ; QTMS::QTMSGainEffect::QTMSGainEffect(void)
+	?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *)
+	?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 24 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *, int)
+	?GetType@QTMSGlobalGainEffect@QTMS@@UAEHAAH@Z @ 25 NONAME ; int QTMS::QTMSGlobalGainEffect::GetType(int &)
+	??1QTMSInbandTone@QTMS@@UAE@XZ @ 26 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(void)
+	?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *, int)
+	?GetType@QTMSModemSink@QTMS@@UAEHAAH@Z @ 28 NONAME ; int QTMS::QTMSModemSink::GetType(int &)
+	?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 29 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *, int)
+	?Stop@QTMSDTMF@QTMS@@QAEHXZ @ 30 NONAME ; int QTMS::QTMSDTMF::Stop(void)
+	?DeleteRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 31 NONAME ; int QTMS::QTMSFactory::DeleteRingTonePlayer(class QTMS::QTMSRingTone * &)
+	?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *, int)
+	?AddSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 33 NONAME ; int QTMS::QTMSStream::AddSource(class QTMS::QTMSSource *)
+	??1QTMSGlobalVolEffect@QTMS@@UAE@XZ @ 34 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(void)
+	?GetType@QTMSSpeakerSink@QTMS@@UAEHAAH@Z @ 35 NONAME ; int QTMS::QTMSSpeakerSink::GetType(int &)
+	?getStaticMetaObject@QTMSGlobalVolEffect@QTMS@@SAABUQMetaObject@@XZ @ 36 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalVolEffect::getStaticMetaObject(void)
+	??0QTMSModemSource@QTMS@@IAE@XZ @ 37 NONAME ; QTMS::QTMSModemSource::QTMSModemSource(void)
+	?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *)
+	?Pause@QTMSRingTone@QTMS@@QAEHXZ @ 39 NONAME ; int QTMS::QTMSRingTone::Pause(void)
+	?GetVADMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 40 NONAME ; int QTMS::QTMSILBCFormat::GetVADMode(int &)
+	?qt_metacast@QTMSDTMF@QTMS@@UAEPAXPBD@Z @ 41 NONAME ; void * QTMS::QTMSDTMF::qt_metacast(char const *)
+	?RingtoneEvent@QTMSRingTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 42 NONAME ; void QTMS::QTMSRingTone::RingtoneEvent(class QTMS::QTMSRingTone const &, struct QTMS::QTMSSignalEvent)
+	??_EQTMSCall@QTMS@@UAE@I@Z @ 43 NONAME ; QTMS::QTMSCall::~QTMSCall(unsigned int)
+	?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *)
+	?staticMetaObject@QTMSRingTone@QTMS@@2UQMetaObject@@B @ 45 NONAME ; struct QMetaObject const QTMS::QTMSRingTone::staticMetaObject
+	?SetMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 46 NONAME ; int QTMS::QTMSILBCFormat::SetMode(int)
+	?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 47 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *, int)
+	?GetVADMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 48 NONAME ; int QTMS::QTMSG711Format::GetVADMode(int &)
+	?staticMetaObject@QTMSDTMF@QTMS@@2UQMetaObject@@B @ 49 NONAME ; struct QMetaObject const QTMS::QTMSDTMF::staticMetaObject
+	??0QTMSMicSource@QTMS@@IAE@XZ @ 50 NONAME ; QTMS::QTMSMicSource::QTMSMicSource(void)
+	?GetPreviousOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 51 NONAME ; int QTMS::QTMSGlobalRouting::GetPreviousOutput(int &)
+	??1QTMSGainEffect@QTMS@@UAE@XZ @ 52 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(void)
+	?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 53 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *)
+	?EffectsEvent@QTMSGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 54 NONAME ; void QTMS::QTMSGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?qt_metacast@QTMSILBCFormat@QTMS@@UAEPAXPBD@Z @ 55 NONAME ; void * QTMS::QTMSILBCFormat::qt_metacast(char const *)
+	?TMSStreamEvent@QTMSStream@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 56 NONAME ; void QTMS::QTMSStream::TMSStreamEvent(class QTMS::QTMSStream const &, struct QTMS::QTMSSignalEvent)
+	?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 57 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *)
+	??1QTMSModemSink@QTMS@@UAE@XZ @ 58 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(void)
+	?metaObject@QTMSVolumeEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 59 NONAME ; struct QMetaObject const * QTMS::QTMSVolumeEffect::metaObject(void) const
+	??_EQTMSClientSink@QTMS@@UAE@I@Z @ 60 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(unsigned int)
+	?qt_metacast@QTMSModemSink@QTMS@@UAEPAXPBD@Z @ 61 NONAME ; void * QTMS::QTMSModemSink::qt_metacast(char const *)
+	??1QTMSClientSource@QTMS@@UAE@XZ @ 62 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(void)
+	?qt_metacall@QTMSGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 63 NONAME ; int QTMS::QTMSGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateSource@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSource@2@@Z @ 64 NONAME ; int QTMS::QTMSFactory::CreateSource(int, class QTMS::QTMSSource * &)
+	?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 65 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *)
+	?FillBuffer@QTMSClientSource@QTMS@@IAEXAAVQTMSBuffer@2@@Z @ 66 NONAME ; void QTMS::QTMSClientSource::FillBuffer(class QTMS::QTMSBuffer &)
+	?qt_metacall@QTMSGlobalVolEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 67 NONAME ; int QTMS::QTMSGlobalVolEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 68 NONAME ; int QTMS::QTMSGlobalGainEffect::GetLevel(unsigned int &)
+	?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 69 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 70 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *)
+	?GetMaxLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 71 NONAME ; int QTMS::QTMSGlobalGainEffect::GetMaxLevel(unsigned int &)
+	?RemoveSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 72 NONAME ; int QTMS::QTMSStream::RemoveSource(class QTMS::QTMSSource *)
+	?DTMFEvent@QTMSDTMF@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 73 NONAME ; void QTMS::QTMSDTMF::DTMFEvent(class QTMS::QTMSDTMF const &, struct QTMS::QTMSSignalEvent)
+	?GetCNG@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 74 NONAME ; int QTMS::QTMSILBCFormat::GetCNG(int &)
+	?qt_metacast@QTMSG729Format@QTMS@@UAEPAXPBD@Z @ 75 NONAME ; void * QTMS::QTMSG729Format::qt_metacast(char const *)
+	?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 76 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *)
+	?GetType@QTMSClientSink@QTMS@@UAEHAAH@Z @ 77 NONAME ; int QTMS::QTMSClientSink::GetType(int &)
+	?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 78 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *, int)
+	?staticMetaObject@QTMSMicSource@QTMS@@2UQMetaObject@@B @ 79 NONAME ; struct QMetaObject const QTMS::QTMSMicSource::staticMetaObject
+	?metaObject@QTMSModemSource@QTMS@@UBEPBUQMetaObject@@XZ @ 80 NONAME ; struct QMetaObject const * QTMS::QTMSModemSource::metaObject(void) const
+	?ContinueDTMFStringSending@QTMSDTMF@QTMS@@QAEHH@Z @ 81 NONAME ; int QTMS::QTMSDTMF::ContinueDTMFStringSending(int)
+	?GetCNG@QTMSG711Format@QTMS@@QAEHAAH@Z @ 82 NONAME ; int QTMS::QTMSG711Format::GetCNG(int &)
+	?CreateGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 83 NONAME ; int QTMS::QTMSFactory::CreateGlobalRouting(class QTMS::QTMSGlobalRouting * &)
+	?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 84 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *, int)
+	?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 85 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *, int)
+	?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 86 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *)
+	?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 87 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *)
+	?qt_metacall@QTMSInbandTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int QTMS::QTMSInbandTone::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@QTMSSpeakerSink@QTMS@@2UQMetaObject@@B @ 89 NONAME ; struct QMetaObject const QTMS::QTMSSpeakerSink::staticMetaObject
+	?staticMetaObject@QTMSGainEffect@QTMS@@2UQMetaObject@@B @ 90 NONAME ; struct QMetaObject const QTMS::QTMSGainEffect::staticMetaObject
+	?staticMetaObject@QTMSModemSink@QTMS@@2UQMetaObject@@B @ 91 NONAME ; struct QMetaObject const QTMS::QTMSModemSink::staticMetaObject
+	?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 92 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *, int)
+	?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 93 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *)
+	?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 94 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *, int)
+	?GetType@QTMSGainEffect@QTMS@@UAEHAAH@Z @ 95 NONAME ; int QTMS::QTMSGainEffect::GetType(int &)
+	?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 96 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *)
+	??_EQTMSG711Format@QTMS@@UAE@I@Z @ 97 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(unsigned int)
+	?qt_metacast@QTMSAMRFormat@QTMS@@UAEPAXPBD@Z @ 98 NONAME ; void * QTMS::QTMSAMRFormat::qt_metacast(char const *)
+	?GlobalRoutingEvent@QTMSGlobalRouting@QTMS@@IAEXABV12@UQTMSSignalEvent@2@H@Z @ 99 NONAME ; void QTMS::QTMSGlobalRouting::GlobalRoutingEvent(class QTMS::QTMSGlobalRouting const &, struct QTMS::QTMSSignalEvent, int)
+	?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 100 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *, int)
+	?getStaticMetaObject@QTMSRingTone@QTMS@@SAABUQMetaObject@@XZ @ 101 NONAME ; struct QMetaObject const & QTMS::QTMSRingTone::getStaticMetaObject(void)
+	?metaObject@QTMSMicSource@QTMS@@UBEPBUQMetaObject@@XZ @ 102 NONAME ; struct QMetaObject const * QTMS::QTMSMicSource::metaObject(void) const
+	??1QTMSSpeakerSink@QTMS@@UAE@XZ @ 103 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(void)
+	??0QTMSVolumeEffect@QTMS@@IAE@XZ @ 104 NONAME ; QTMS::QTMSVolumeEffect::QTMSVolumeEffect(void)
+	?staticMetaObject@QTMSAMRFormat@QTMS@@2UQMetaObject@@B @ 105 NONAME ; struct QMetaObject const QTMS::QTMSAMRFormat::staticMetaObject
+	?GetVADMode@QTMSG729Format@QTMS@@QAEHAAH@Z @ 106 NONAME ; int QTMS::QTMSG729Format::GetVADMode(int &)
+	??1QTMSGlobalGainEffect@QTMS@@UAE@XZ @ 107 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(void)
+	??_EQTMSInbandTone@QTMS@@UAE@I@Z @ 108 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(unsigned int)
+	?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 109 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *)
+	?qt_metacast@QTMSRingTone@QTMS@@UAEPAXPBD@Z @ 110 NONAME ; void * QTMS::QTMSRingTone::qt_metacast(char const *)
+	?GetType@QTMSClientSource@QTMS@@UAEHAAH@Z @ 111 NONAME ; int QTMS::QTMSClientSource::GetType(int &)
+	?metaObject@QTMSPCMFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 112 NONAME ; struct QMetaObject const * QTMS::QTMSPCMFormat::metaObject(void) const
+	?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 113 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *)
+	??1QTMSGlobalRouting@QTMS@@UAE@XZ @ 114 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(void)
+	?getStaticMetaObject@QTMSStream@QTMS@@SAABUQMetaObject@@XZ @ 115 NONAME ; struct QMetaObject const & QTMS::QTMSStream::getStaticMetaObject(void)
+	?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 116 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *)
+	?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 117 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *, int)
+	?qt_metacast@QTMSModemSource@QTMS@@UAEPAXPBD@Z @ 118 NONAME ; void * QTMS::QTMSModemSource::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSG711Format@QTMS@@SAABUQMetaObject@@XZ @ 119 NONAME ; struct QMetaObject const & QTMS::QTMSG711Format::getStaticMetaObject(void)
+	??_EQTMSClientSource@QTMS@@UAE@I@Z @ 120 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(unsigned int)
+	?GetLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 121 NONAME ; int QTMS::QTMSGainEffect::GetLevel(unsigned int &)
+	?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 122 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *)
+	?qt_metacast@QTMSGlobalRouting@QTMS@@UAEPAXPBD@Z @ 123 NONAME ; void * QTMS::QTMSGlobalRouting::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSFactory@QTMS@@SAABUQMetaObject@@XZ @ 124 NONAME ; struct QMetaObject const & QTMS::QTMSFactory::getStaticMetaObject(void)
+	??_EQTMSAMRFormat@QTMS@@UAE@I@Z @ 125 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(unsigned int)
+	?getStaticMetaObject@QTMSPCMFormat@QTMS@@SAABUQMetaObject@@XZ @ 126 NONAME ; struct QMetaObject const & QTMS::QTMSPCMFormat::getStaticMetaObject(void)
+	?Flush@QTMSClientSource@QTMS@@QAEHXZ @ 127 NONAME ; int QTMS::QTMSClientSource::Flush(void)
+	?Stop@QTMSRingTone@QTMS@@QAEHXZ @ 128 NONAME ; int QTMS::QTMSRingTone::Stop(void)
+	?DeleteGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 129 NONAME ; int QTMS::QTMSFactory::DeleteGlobalRouting(class QTMS::QTMSGlobalRouting * &)
+	?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 130 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *, int)
+	?SetMode@QTMSG711Format@QTMS@@QAEHH@Z @ 131 NONAME ; int QTMS::QTMSG711Format::SetMode(int)
+	?GetMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 132 NONAME ; int QTMS::QTMSILBCFormat::GetMode(int &)
+	?GetMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 133 NONAME ; int QTMS::QTMSG711Format::GetMode(int &)
+	?GetAvailableOutputs@QTMSGlobalRouting@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 134 NONAME ; int QTMS::QTMSGlobalRouting::GetAvailableOutputs(class std::vector<unsigned int, class std::allocator<unsigned int> > &)
+	?staticMetaObject@QTMSFactory@QTMS@@2UQMetaObject@@B @ 135 NONAME ; struct QMetaObject const QTMS::QTMSFactory::staticMetaObject
+	?DeleteFormat@QTMSFactory@QTMS@@QAEHAAPAVQTMSFormat@2@@Z @ 136 NONAME ; int QTMS::QTMSFactory::DeleteFormat(class QTMS::QTMSFormat * &)
+	?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 137 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *, int)
+	??1QTMSPCMFormat@QTMS@@UAE@XZ @ 138 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(void)
+	?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 139 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *)
+	??0QTMSG711Format@QTMS@@IAE@XZ @ 140 NONAME ; QTMS::QTMSG711Format::QTMSG711Format(void)
+	?staticMetaObject@QTMSILBCFormat@QTMS@@2UQMetaObject@@B @ 141 NONAME ; struct QMetaObject const QTMS::QTMSILBCFormat::staticMetaObject
+	?metaObject@QTMSG729Format@QTMS@@UBEPBUQMetaObject@@XZ @ 142 NONAME ; struct QMetaObject const * QTMS::QTMSG729Format::metaObject(void) const
+	?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 143 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *, int)
+	?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 144 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *, int)
+	?staticMetaObject@QTMSClientSink@QTMS@@2UQMetaObject@@B @ 145 NONAME ; struct QMetaObject const QTMS::QTMSClientSink::staticMetaObject
+	?ProcessBuffer@QTMSClientSource@QTMS@@QAEHPAVQTMSBuffer@2@@Z @ 146 NONAME ; int QTMS::QTMSClientSource::ProcessBuffer(class QTMS::QTMSBuffer *)
+	?EffectsEvent@QTMSGlobalVolEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 147 NONAME ; void QTMS::QTMSGlobalVolEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?CreateFormat@QTMSFactory@QTMS@@QAEHHAAPAVQTMSFormat@2@@Z @ 148 NONAME ; int QTMS::QTMSFactory::CreateFormat(int, class QTMS::QTMSFormat * &)
+	?SetCNG@QTMSILBCFormat@QTMS@@QAEHH@Z @ 149 NONAME ; int QTMS::QTMSILBCFormat::SetCNG(int)
+	??1QTMSAMRFormat@QTMS@@UAE@XZ @ 150 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(void)
+	?metaObject@QTMSClientSink@QTMS@@UBEPBUQMetaObject@@XZ @ 151 NONAME ; struct QMetaObject const * QTMS::QTMSClientSink::metaObject(void) const
+	?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 152 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *)
+	?staticMetaObject@QTMSG711Format@QTMS@@2UQMetaObject@@B @ 153 NONAME ; struct QMetaObject const QTMS::QTMSG711Format::staticMetaObject
+	?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 154 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *, int)
+	?InbandToneEvent@QTMSInbandTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 155 NONAME ; void QTMS::QTMSInbandTone::InbandToneEvent(class QTMS::QTMSInbandTone const &, struct QTMS::QTMSSignalEvent)
+	?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 156 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *)
+	?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 157 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *, int)
+	?qt_metacast@QTMSG711Format@QTMS@@UAEPAXPBD@Z @ 158 NONAME ; void * QTMS::QTMSG711Format::qt_metacast(char const *)
+	?GetMaxLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 159 NONAME ; int QTMS::QTMSVolumeEffect::GetMaxLevel(unsigned int &)
+	??0QTMSSpeakerSink@QTMS@@IAE@XZ @ 160 NONAME ; QTMS::QTMSSpeakerSink::QTMSSpeakerSink(void)
+	??_EQTMSMicSource@QTMS@@UAE@I@Z @ 161 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(unsigned int)
+	?metaObject@QTMSModemSink@QTMS@@UBEPBUQMetaObject@@XZ @ 162 NONAME ; struct QMetaObject const * QTMS::QTMSModemSink::metaObject(void) const
+	?DeleteCall@QTMSFactory@QTMS@@QAEHAAPAVQTMSCall@2@@Z @ 163 NONAME ; int QTMS::QTMSFactory::DeleteCall(class QTMS::QTMSCall * &)
+	?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 164 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *, int)
+	?qt_metacall@QTMSMicSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 165 NONAME ; int QTMS::QTMSMicSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetType@QTMSFormat@QTMS@@UAEHAAH@Z @ 166 NONAME ; int QTMS::QTMSFormat::GetType(int &)
+	?DeleteStream@QTMSCall@QTMS@@QAEHAAPAVQTMSStream@2@@Z @ 167 NONAME ; int QTMS::QTMSCall::DeleteStream(class QTMS::QTMSStream * &)
+	?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 168 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *)
+	?CreateInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 169 NONAME ; int QTMS::QTMSFactory::CreateInbandTonePlayer(class QTMS::QTMSInbandTone * &)
+	?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 170 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *)
+	??1QTMSG711Format@QTMS@@UAE@XZ @ 171 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(void)
+	?BufferProcessed@QTMSClientSink@QTMS@@QAEHPAVQTMSBuffer@2@@Z @ 172 NONAME ; int QTMS::QTMSClientSink::BufferProcessed(class QTMS::QTMSBuffer *)
+	?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 173 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *)
+	??_EQTMSModemSource@QTMS@@UAE@I@Z @ 174 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(unsigned int)
+	?qt_metacall@QTMSPCMFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 175 NONAME ; int QTMS::QTMSPCMFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSILBCFormat@QTMS@@IAE@XZ @ 176 NONAME ; QTMS::QTMSILBCFormat::QTMSILBCFormat(void)
+	?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 177 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *, int)
+	?qt_metacast@QTMSPCMFormat@QTMS@@UAEPAXPBD@Z @ 178 NONAME ; void * QTMS::QTMSPCMFormat::qt_metacast(char const *)
+	?qt_metacall@QTMSSpeakerSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 179 NONAME ; int QTMS::QTMSSpeakerSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?GetLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 180 NONAME ; int QTMS::QTMSVolumeEffect::GetLevel(unsigned int &)
+	?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 181 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *, int)
+	??_EQTMSGainEffect@QTMS@@UAE@I@Z @ 182 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(unsigned int)
+	?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 183 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *)
+	?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 184 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *)
+	?getStaticMetaObject@QTMSSpeakerSink@QTMS@@SAABUQMetaObject@@XZ @ 185 NONAME ; struct QMetaObject const & QTMS::QTMSSpeakerSink::getStaticMetaObject(void)
+	?CreateDTMF@QTMSFactory@QTMS@@QAEHHAAPAVQTMSDTMF@2@@Z @ 186 NONAME ; int QTMS::QTMSFactory::CreateDTMF(int, class QTMS::QTMSDTMF * &)
+	?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 187 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *)
+	?Init@QTMSStream@QTMS@@QAEHH@Z @ 188 NONAME ; int QTMS::QTMSStream::Init(int)
+	?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 189 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *)
+	?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 190 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *)
+	??1QTMSMicSource@QTMS@@UAE@XZ @ 191 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(void)
+	?BufferFilled@QTMSClientSource@QTMS@@QAEHAAVQTMSBuffer@2@@Z @ 192 NONAME ; int QTMS::QTMSClientSource::BufferFilled(class QTMS::QTMSBuffer &)
+	??_EQTMSFactory@QTMS@@UAE@I@Z @ 193 NONAME ; QTMS::QTMSFactory::~QTMSFactory(unsigned int)
+	??1QTMSCall@QTMS@@UAE@XZ @ 194 NONAME ; QTMS::QTMSCall::~QTMSCall(void)
+	?staticMetaObject@QTMSG729Format@QTMS@@2UQMetaObject@@B @ 195 NONAME ; struct QMetaObject const QTMS::QTMSG729Format::staticMetaObject
+	??0QTMSClientSource@QTMS@@IAE@XZ @ 196 NONAME ; QTMS::QTMSClientSource::QTMSClientSource(void)
+	?Stop@QTMSInbandTone@QTMS@@QAEHXZ @ 197 NONAME ; int QTMS::QTMSInbandTone::Stop(void)
+	?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 198 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *)
+	?qt_metacall@QTMSCall@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 199 NONAME ; int QTMS::QTMSCall::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?metaObject@QTMSSpeakerSink@QTMS@@UBEPBUQMetaObject@@XZ @ 200 NONAME ; struct QMetaObject const * QTMS::QTMSSpeakerSink::metaObject(void) const
+	?SetTone@QTMSDTMF@QTMS@@QAEHPAU_GString@@@Z @ 201 NONAME ; int QTMS::QTMSDTMF::SetTone(struct _GString *)
+	?SetEnqueueMode@QTMSClientSource@QTMS@@QAEHH@Z @ 202 NONAME ; int QTMS::QTMSClientSource::SetEnqueueMode(int)
+	?staticMetaObject@QTMSClientSource@QTMS@@2UQMetaObject@@B @ 203 NONAME ; struct QMetaObject const QTMS::QTMSClientSource::staticMetaObject
+	?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 204 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *)
+	?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 205 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *, int)
+	?GetType@QTMSVolumeEffect@QTMS@@UAEHAAH@Z @ 206 NONAME ; int QTMS::QTMSVolumeEffect::GetType(int &)
+	?qt_metacall@QTMSVolumeEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 207 NONAME ; int QTMS::QTMSVolumeEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 208 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *, int)
+	??1QTMSILBCFormat@QTMS@@UAE@XZ @ 209 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(void)
+	?Play@QTMSRingTone@QTMS@@QAEHXZ @ 210 NONAME ; int QTMS::QTMSRingTone::Play(void)
+	?qt_metacall@QTMSILBCFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 211 NONAME ; int QTMS::QTMSILBCFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 212 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *, int)
+	?GetBitRate@QTMSFormat@QTMS@@QAEHAAI@Z @ 213 NONAME ; int QTMS::QTMSFormat::GetBitRate(unsigned int &)
+	?GetType@QTMSModemSource@QTMS@@UAEHAAH@Z @ 214 NONAME ; int QTMS::QTMSModemSource::GetType(int &)
+	?staticMetaObject@QTMSGlobalVolEffect@QTMS@@2UQMetaObject@@B @ 215 NONAME ; struct QMetaObject const QTMS::QTMSGlobalVolEffect::staticMetaObject
+	??1QTMSFormat@QTMS@@UAE@XZ @ 216 NONAME ; QTMS::QTMSFormat::~QTMSFormat(void)
+	?GetPlc@QTMSG711Format@QTMS@@QAEHAAH@Z @ 217 NONAME ; int QTMS::QTMSG711Format::GetPlc(int &)
+	?Start@QTMSInbandTone@QTMS@@QAEHH@Z @ 218 NONAME ; int QTMS::QTMSInbandTone::Start(int)
+	?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 219 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *, int)
+	?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 220 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *, int)
+	??_EQTMSPCMFormat@QTMS@@UAE@I@Z @ 221 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(unsigned int)
+	?metaObject@QTMSAMRFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 222 NONAME ; struct QMetaObject const * QTMS::QTMSAMRFormat::metaObject(void) const
+	?metaObject@QTMSStream@QTMS@@UBEPBUQMetaObject@@XZ @ 223 NONAME ; struct QMetaObject const * QTMS::QTMSStream::metaObject(void) const
+	?getStaticMetaObject@QTMSGlobalGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 224 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalGainEffect::getStaticMetaObject(void)
+	?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 225 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *)
+	?staticMetaObject@QTMSInbandTone@QTMS@@2UQMetaObject@@B @ 226 NONAME ; struct QMetaObject const QTMS::QTMSInbandTone::staticMetaObject
+	?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 227 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *, int)
+	?qt_metacast@QTMSClientSource@QTMS@@UAEPAXPBD@Z @ 228 NONAME ; void * QTMS::QTMSClientSource::qt_metacast(char const *)
+	?metaObject@QTMSCall@QTMS@@UBEPBUQMetaObject@@XZ @ 229 NONAME ; struct QMetaObject const * QTMS::QTMSCall::metaObject(void) const
+	?qt_metacall@QTMSClientSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 230 NONAME ; int QTMS::QTMSClientSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?BufferProcessed@QTMSClientSource@QTMS@@IAEXPBVQTMSBuffer@2@H@Z @ 231 NONAME ; void QTMS::QTMSClientSource::BufferProcessed(class QTMS::QTMSBuffer const *, int)
+	?CreateStream@QTMSCall@QTMS@@QAEHHAAPAVQTMSStream@2@@Z @ 232 NONAME ; int QTMS::QTMSCall::CreateStream(int, class QTMS::QTMSStream * &)
+	?DeleteInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 233 NONAME ; int QTMS::QTMSFactory::DeleteInbandTonePlayer(class QTMS::QTMSInbandTone * &)
+	?SetLevel@QTMSGlobalGainEffect@QTMS@@QAEHI@Z @ 234 NONAME ; int QTMS::QTMSGlobalGainEffect::SetLevel(unsigned int)
+	?GetStreamType@QTMSStream@QTMS@@QAEHXZ @ 235 NONAME ; int QTMS::QTMSStream::GetStreamType(void)
+	?getStaticMetaObject@QTMSGlobalRouting@QTMS@@SAABUQMetaObject@@XZ @ 236 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalRouting::getStaticMetaObject(void)
+	??0QTMSGlobalVolEffect@QTMS@@IAE@XZ @ 237 NONAME ; QTMS::QTMSGlobalVolEffect::QTMSGlobalVolEffect(void)
+	?CreateSink@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSink@2@@Z @ 238 NONAME ; int QTMS::QTMSFactory::CreateSink(int, class QTMS::QTMSSink * &)
+	?EffectsEvent@QTMSVolumeEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 239 NONAME ; void QTMS::QTMSVolumeEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?getStaticMetaObject@QTMSG729Format@QTMS@@SAABUQMetaObject@@XZ @ 240 NONAME ; struct QMetaObject const & QTMS::QTMSG729Format::getStaticMetaObject(void)
+	??1QTMSDTMF@QTMS@@UAE@XZ @ 241 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(void)
+	?DeleteDTMF@QTMSFactory@QTMS@@QAEHAAPAVQTMSDTMF@2@@Z @ 242 NONAME ; int QTMS::QTMSFactory::DeleteDTMF(class QTMS::QTMSDTMF * &)
+	??_EQTMSFormat@QTMS@@UAE@I@Z @ 243 NONAME ; QTMS::QTMSFormat::~QTMSFormat(unsigned int)
+	?staticMetaObject@QTMSGlobalGainEffect@QTMS@@2UQMetaObject@@B @ 244 NONAME ; struct QMetaObject const QTMS::QTMSGlobalGainEffect::staticMetaObject
+	?SetVADMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 245 NONAME ; int QTMS::QTMSILBCFormat::SetVADMode(int)
+	??0QTMSCall@QTMS@@IAE@XZ @ 246 NONAME ; QTMS::QTMSCall::QTMSCall(void)
+	?GetEnqueueMode@QTMSClientSource@QTMS@@QAEHAAH@Z @ 247 NONAME ; int QTMS::QTMSClientSource::GetEnqueueMode(int &)
+	?metaObject@QTMSGlobalVolEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 248 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalVolEffect::metaObject(void) const
+	?staticMetaObject@QTMSGlobalRouting@QTMS@@2UQMetaObject@@B @ 249 NONAME ; struct QMetaObject const QTMS::QTMSGlobalRouting::staticMetaObject
+	?qt_metacast@QTMSFactory@QTMS@@UAEPAXPBD@Z @ 250 NONAME ; void * QTMS::QTMSFactory::qt_metacast(char const *)
+	?SetCNG@QTMSG711Format@QTMS@@QAEHH@Z @ 251 NONAME ; int QTMS::QTMSG711Format::SetCNG(int)
+	?qt_metacall@QTMSG729Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 252 NONAME ; int QTMS::QTMSG729Format::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 253 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *, int)
+	?SetLevel@QTMSVolumeEffect@QTMS@@QAEHI@Z @ 254 NONAME ; int QTMS::QTMSVolumeEffect::SetLevel(unsigned int)
+	?DeleteEffect@QTMSFactory@QTMS@@QAEHAAPAVQTMSEffect@2@@Z @ 255 NONAME ; int QTMS::QTMSFactory::DeleteEffect(class QTMS::QTMSEffect * &)
+	?qt_metacast@QTMSCall@QTMS@@UAEPAXPBD@Z @ 256 NONAME ; void * QTMS::QTMSCall::qt_metacast(char const *)
+	?SetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 257 NONAME ; int QTMS::QTMSStream::SetFormat(class QTMS::QTMSFormat *)
+	?getStaticMetaObject@QTMSDTMF@QTMS@@SAABUQMetaObject@@XZ @ 258 NONAME ; struct QMetaObject const & QTMS::QTMSDTMF::getStaticMetaObject(void)
+	?getStaticMetaObject@QTMSMicSource@QTMS@@SAABUQMetaObject@@XZ @ 259 NONAME ; struct QMetaObject const & QTMS::QTMSMicSource::getStaticMetaObject(void)
+	?qt_metacall@QTMSRingTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 260 NONAME ; int QTMS::QTMSRingTone::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 261 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *, int)
+	?qt_metacall@QTMSGlobalGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 262 NONAME ; int QTMS::QTMSGlobalGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateCall@QTMSFactory@QTMS@@QAEHHAAPAVQTMSCall@2@I@Z @ 263 NONAME ; int QTMS::QTMSFactory::CreateCall(int, class QTMS::QTMSCall * &, unsigned int)
+	?SetVADMode@QTMSG729Format@QTMS@@QAEHH@Z @ 264 NONAME ; int QTMS::QTMSG729Format::SetVADMode(int)
+	?DeleteBuffer@QTMSFactory@QTMS@@QAEHAAPAVQTMSBuffer@2@@Z @ 265 NONAME ; int QTMS::QTMSFactory::DeleteBuffer(class QTMS::QTMSBuffer * &)
+	?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 266 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *)
+	?qt_metacall@QTMSDTMF@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 267 NONAME ; int QTMS::QTMSDTMF::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QTMSModemSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 268 NONAME ; int QTMS::QTMSModemSource::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?CreateFactory@QTMSFactory@QTMS@@SAHAAPAV12@AAVQTMSVer@2@@Z @ 269 NONAME ; int QTMS::QTMSFactory::CreateFactory(class QTMS::QTMSFactory * &, class QTMS::QTMSVer &)
+	?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 270 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *, int)
+	??1QTMSStream@QTMS@@UAE@XZ @ 271 NONAME ; QTMS::QTMSStream::~QTMSStream(void)
+	?Init@QTMSRingTone@QTMS@@QAEHHPAU_GString@@0@Z @ 272 NONAME ; int QTMS::QTMSRingTone::Init(int, struct _GString *, struct _GString *)
+	?qt_metacast@QTMSVolumeEffect@QTMS@@UAEPAXPBD@Z @ 273 NONAME ; void * QTMS::QTMSVolumeEffect::qt_metacast(char const *)
+	??1QTMSRingTone@QTMS@@UAE@XZ @ 274 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(void)
+	??_EQTMSStream@QTMS@@UAE@I@Z @ 275 NONAME ; QTMS::QTMSStream::~QTMSStream(unsigned int)
+	?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 276 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *)
+	?RemoveSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 277 NONAME ; int QTMS::QTMSStream::RemoveSink(class QTMS::QTMSSink *)
+	?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 278 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *, int)
+	?metaObject@QTMSILBCFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 279 NONAME ; struct QMetaObject const * QTMS::QTMSILBCFormat::metaObject(void) const
+	?staticMetaObject@QTMSPCMFormat@QTMS@@2UQMetaObject@@B @ 280 NONAME ; struct QMetaObject const QTMS::QTMSPCMFormat::staticMetaObject
+	?getStaticMetaObject@QTMSClientSource@QTMS@@SAABUQMetaObject@@XZ @ 281 NONAME ; struct QMetaObject const & QTMS::QTMSClientSource::getStaticMetaObject(void)
+	??1QTMSFactory@QTMS@@UAE@XZ @ 282 NONAME ; QTMS::QTMSFactory::~QTMSFactory(void)
+	?DeleteSource@QTMSFactory@QTMS@@QAEHAAPAVQTMSSource@2@@Z @ 283 NONAME ; int QTMS::QTMSFactory::DeleteSource(class QTMS::QTMSSource * &)
+	?qt_metacall@QTMSGlobalRouting@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 284 NONAME ; int QTMS::QTMSGlobalRouting::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSGlobalGainEffect@QTMS@@IAE@XZ @ 285 NONAME ; QTMS::QTMSGlobalGainEffect::QTMSGlobalGainEffect(void)
+	?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 286 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *)
+	??0QTMSDTMF@QTMS@@IAE@XZ @ 287 NONAME ; QTMS::QTMSDTMF::QTMSDTMF(void)
+	?GetLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 288 NONAME ; int QTMS::QTMSGlobalVolEffect::GetLevel(unsigned int &)
+	?GetType@QTMSGlobalVolEffect@QTMS@@UAEHAAH@Z @ 289 NONAME ; int QTMS::QTMSGlobalVolEffect::GetType(int &)
+	?getStaticMetaObject@QTMSILBCFormat@QTMS@@SAABUQMetaObject@@XZ @ 290 NONAME ; struct QMetaObject const & QTMS::QTMSILBCFormat::getStaticMetaObject(void)
+	??_EQTMSGlobalGainEffect@QTMS@@UAE@I@Z @ 291 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(unsigned int)
+	?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 292 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *)
+	?qt_metacast@QTMSGlobalGainEffect@QTMS@@UAEPAXPBD@Z @ 293 NONAME ; void * QTMS::QTMSGlobalGainEffect::qt_metacast(char const *)
+	??_EQTMSModemSink@QTMS@@UAE@I@Z @ 294 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(unsigned int)
+	??0QTMSModemSink@QTMS@@IAE@XZ @ 295 NONAME ; QTMS::QTMSModemSink::QTMSModemSink(void)
+	?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 296 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *)
+	?GetState@QTMSStream@QTMS@@QAEHXZ @ 297 NONAME ; int QTMS::QTMSStream::GetState(void)
+	?qt_metacall@QTMSG711Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 298 NONAME ; int QTMS::QTMSG711Format::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?getStaticMetaObject@QTMSClientSink@QTMS@@SAABUQMetaObject@@XZ @ 299 NONAME ; struct QMetaObject const & QTMS::QTMSClientSink::getStaticMetaObject(void)
+	?qt_metacast@QTMSInbandTone@QTMS@@UAEPAXPBD@Z @ 300 NONAME ; void * QTMS::QTMSInbandTone::qt_metacast(char const *)
+	?getStaticMetaObject@QTMSModemSource@QTMS@@SAABUQMetaObject@@XZ @ 301 NONAME ; struct QMetaObject const & QTMS::QTMSModemSource::getStaticMetaObject(void)
+	?metaObject@QTMSGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 302 NONAME ; struct QMetaObject const * QTMS::QTMSGainEffect::metaObject(void) const
+	??0QTMSGlobalRouting@QTMS@@IAE@XZ @ 303 NONAME ; QTMS::QTMSGlobalRouting::QTMSGlobalRouting(void)
+	?metaObject@QTMSClientSource@QTMS@@UBEPBUQMetaObject@@XZ @ 304 NONAME ; struct QMetaObject const * QTMS::QTMSClientSource::metaObject(void) const
+	?qt_metacast@QTMSStream@QTMS@@UAEPAXPBD@Z @ 305 NONAME ; void * QTMS::QTMSStream::qt_metacast(char const *)
+	?DeleteSink@QTMSFactory@QTMS@@QAEHAAPAVQTMSSink@2@@Z @ 306 NONAME ; int QTMS::QTMSFactory::DeleteSink(class QTMS::QTMSSink * &)
+	?getStaticMetaObject@QTMSModemSink@QTMS@@SAABUQMetaObject@@XZ @ 307 NONAME ; struct QMetaObject const & QTMS::QTMSModemSink::getStaticMetaObject(void)
+	?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 308 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *)
+	?Mute@QTMSRingTone@QTMS@@QAEHXZ @ 309 NONAME ; int QTMS::QTMSRingTone::Mute(void)
+	??_EQTMSDTMF@QTMS@@UAE@I@Z @ 310 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(unsigned int)
+	?Start@QTMSStream@QTMS@@QAEHH@Z @ 311 NONAME ; int QTMS::QTMSStream::Start(int)
+	?qt_metacall@QTMSStream@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 312 NONAME ; int QTMS::QTMSStream::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 313 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *, int)
+	?qt_metacast@QTMSGainEffect@QTMS@@UAEPAXPBD@Z @ 314 NONAME ; void * QTMS::QTMSGainEffect::qt_metacast(char const *)
+	?GetCallContextId@QTMSCall@QTMS@@QAEHAAI@Z @ 315 NONAME ; int QTMS::QTMSCall::GetCallContextId(unsigned int &)
+	?GetCallType@QTMSCall@QTMS@@QAEHXZ @ 316 NONAME ; int QTMS::QTMSCall::GetCallType(void)
+	?Start@QTMSDTMF@QTMS@@QAEHXZ @ 317 NONAME ; int QTMS::QTMSDTMF::Start(void)
+	?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 318 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *)
+	?SetOutput@QTMSGlobalRouting@QTMS@@QAEHH@Z @ 319 NONAME ; int QTMS::QTMSGlobalRouting::SetOutput(int)
+	??0QTMSClientSink@QTMS@@IAE@XZ @ 320 NONAME ; QTMS::QTMSClientSink::QTMSClientSink(void)
+	?SetLevel@QTMSGlobalVolEffect@QTMS@@QAEHI@Z @ 321 NONAME ; int QTMS::QTMSGlobalVolEffect::SetLevel(unsigned int)
+	?metaObject@QTMSRingTone@QTMS@@UBEPBUQMetaObject@@XZ @ 322 NONAME ; struct QMetaObject const * QTMS::QTMSRingTone::metaObject(void) const
+	?ProcessBuffer@QTMSClientSink@QTMS@@IAEXPBVQTMSBuffer@2@@Z @ 323 NONAME ; void QTMS::QTMSClientSink::ProcessBuffer(class QTMS::QTMSBuffer const *)
+	?IsCallTypeSupported@QTMSFactory@QTMS@@QAEHHAAH@Z @ 324 NONAME ; int QTMS::QTMSFactory::IsCallTypeSupported(int, int &)
+	?qt_metacast@QTMSGlobalVolEffect@QTMS@@UAEPAXPBD@Z @ 325 NONAME ; void * QTMS::QTMSGlobalVolEffect::qt_metacast(char const *)
+	?staticMetaObject@QTMSModemSource@QTMS@@2UQMetaObject@@B @ 326 NONAME ; struct QMetaObject const QTMS::QTMSModemSource::staticMetaObject
+	?GetStreamId@QTMSStream@QTMS@@QAEHXZ @ 327 NONAME ; int QTMS::QTMSStream::GetStreamId(void)
+	??0QTMSG729Format@QTMS@@IAE@XZ @ 328 NONAME ; QTMS::QTMSG729Format::QTMSG729Format(void)
+	??_EQTMSGlobalVolEffect@QTMS@@UAE@I@Z @ 329 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(unsigned int)
+	?getStaticMetaObject@QTMSAMRFormat@QTMS@@SAABUQMetaObject@@XZ @ 330 NONAME ; struct QMetaObject const & QTMS::QTMSAMRFormat::getStaticMetaObject(void)
+	?staticMetaObject@QTMSVolumeEffect@QTMS@@2UQMetaObject@@B @ 331 NONAME ; struct QMetaObject const QTMS::QTMSVolumeEffect::staticMetaObject
+	??_EQTMSRingTone@QTMS@@UAE@I@Z @ 332 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(unsigned int)
+	??0QTMSFormat@QTMS@@IAE@XZ @ 333 NONAME ; QTMS::QTMSFormat::QTMSFormat(void)
+	?GetSupportedFormats@QTMSFactory@QTMS@@QAEHHAAV?$vector@PAVQTMSFormat@QTMS@@V?$allocator@PAVQTMSFormat@QTMS@@@std@@@std@@@Z @ 334 NONAME ; int QTMS::QTMSFactory::GetSupportedFormats(int, class std::vector<class QTMS::QTMSFormat *, class std::allocator<class QTMS::QTMSFormat *> > &)
+	?SetVADMode@QTMSG711Format@QTMS@@QAEHH@Z @ 335 NONAME ; int QTMS::QTMSG711Format::SetVADMode(int)
+	?getStaticMetaObject@QTMSVolumeEffect@QTMS@@SAABUQMetaObject@@XZ @ 336 NONAME ; struct QMetaObject const & QTMS::QTMSVolumeEffect::getStaticMetaObject(void)
+	?qt_metacall@QTMSModemSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 337 NONAME ; int QTMS::QTMSModemSink::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 338 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 339 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *)
+	?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 340 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *)
+	?AddEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 341 NONAME ; int QTMS::QTMSStream::AddEffect(class QTMS::QTMSEffect *)
+	?ResetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 342 NONAME ; int QTMS::QTMSStream::ResetFormat(class QTMS::QTMSFormat *)
+	?metaObject@QTMSG711Format@QTMS@@UBEPBUQMetaObject@@XZ @ 343 NONAME ; struct QMetaObject const * QTMS::QTMSG711Format::metaObject(void) const
+	??1QTMSVolumeEffect@QTMS@@UAE@XZ @ 344 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(void)
+	?EffectsEvent@QTMSGlobalGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 345 NONAME ; void QTMS::QTMSGlobalGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent)
+	?GetSupportedBitRates@QTMSFormat@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 346 NONAME ; int QTMS::QTMSFormat::GetSupportedBitRates(class std::vector<unsigned int, class std::allocator<unsigned int> > &)
+	?staticMetaObject@QTMSCall@QTMS@@2UQMetaObject@@B @ 347 NONAME ; struct QMetaObject const QTMS::QTMSCall::staticMetaObject
+	??1QTMSModemSource@QTMS@@UAE@XZ @ 348 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(void)
+	??1QTMSClientSink@QTMS@@UAE@XZ @ 349 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(void)
+	?metaObject@QTMSFactory@QTMS@@UBEPBUQMetaObject@@XZ @ 350 NONAME ; struct QMetaObject const * QTMS::QTMSFactory::metaObject(void) const
+	?metaObject@QTMSInbandTone@QTMS@@UBEPBUQMetaObject@@XZ @ 351 NONAME ; struct QMetaObject const * QTMS::QTMSInbandTone::metaObject(void) const
+	?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 352 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 353 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *, int)
+	?GetMaxLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 354 NONAME ; int QTMS::QTMSGlobalVolEffect::GetMaxLevel(unsigned int &)
+	??_EQTMSVolumeEffect@QTMS@@UAE@I@Z @ 355 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(unsigned int)
+	??1QTMSG729Format@QTMS@@UAE@XZ @ 356 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(void)
+	?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 357 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *)
+	?GetType@QTMSMicSource@QTMS@@UAEHAAH@Z @ 358 NONAME ; int QTMS::QTMSMicSource::GetType(int &)
+	?CreateEffect@QTMSFactory@QTMS@@QAEHHAAPAVQTMSEffect@2@@Z @ 359 NONAME ; int QTMS::QTMSFactory::CreateEffect(int, class QTMS::QTMSEffect * &)
+	?getStaticMetaObject@QTMSCall@QTMS@@SAABUQMetaObject@@XZ @ 360 NONAME ; struct QMetaObject const & QTMS::QTMSCall::getStaticMetaObject(void)
+	?metaObject@QTMSGlobalGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 361 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalGainEffect::metaObject(void) const
+	??0QTMSFactory@QTMS@@AAE@XZ @ 362 NONAME ; QTMS::QTMSFactory::QTMSFactory(void)
+	?GetOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 363 NONAME ; int QTMS::QTMSGlobalRouting::GetOutput(int &)
+	?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 364 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *)
+	?CreateBuffer@QTMSFactory@QTMS@@QAEHHIAAPAVQTMSBuffer@2@@Z @ 365 NONAME ; int QTMS::QTMSFactory::CreateBuffer(int, unsigned int, class QTMS::QTMSBuffer * &)
+	?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 366 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *, int)
+	?qt_metacast@QTMSMicSource@QTMS@@UAEPAXPBD@Z @ 367 NONAME ; void * QTMS::QTMSMicSource::qt_metacast(char const *)
+	??0QTMSRingTone@QTMS@@IAE@XZ @ 368 NONAME ; QTMS::QTMSRingTone::QTMSRingTone(void)
+	?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 369 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *)
+	?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 370 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *, int)
+	?qt_metacall@QTMSAMRFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 371 NONAME ; int QTMS::QTMSAMRFormat::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0QTMSInbandTone@QTMS@@IAE@XZ @ 372 NONAME ; QTMS::QTMSInbandTone::QTMSInbandTone(void)
+	?RemoveEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 373 NONAME ; int QTMS::QTMSStream::RemoveEffect(class QTMS::QTMSEffect *)
+	?SetBitRate@QTMSFormat@QTMS@@QAEHI@Z @ 374 NONAME ; int QTMS::QTMSFormat::SetBitRate(unsigned int)
+	?Stop@QTMSStream@QTMS@@QAEHXZ @ 375 NONAME ; int QTMS::QTMSStream::Stop(void)
+	?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 376 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *, int)
+	??_EQTMSILBCFormat@QTMS@@UAE@I@Z @ 377 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(unsigned int)
+	?qt_metacall@QTMSFactory@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 378 NONAME ; int QTMS::QTMSFactory::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@QTMSStream@QTMS@@2UQMetaObject@@B @ 379 NONAME ; struct QMetaObject const QTMS::QTMSStream::staticMetaObject
+	??0QTMSPCMFormat@QTMS@@IAE@XZ @ 380 NONAME ; QTMS::QTMSPCMFormat::QTMSPCMFormat(void)
+	?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 381 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *, int)
+	?SetLevel@QTMSGainEffect@QTMS@@QAEHI@Z @ 382 NONAME ; int QTMS::QTMSGainEffect::SetLevel(unsigned int)
+	?Pause@QTMSStream@QTMS@@QAEHXZ @ 383 NONAME ; int QTMS::QTMSStream::Pause(void)
+	?Deinit@QTMSStream@QTMS@@QAEXXZ @ 384 NONAME ; void QTMS::QTMSStream::Deinit(void)
+	?metaObject@QTMSDTMF@QTMS@@UBEPBUQMetaObject@@XZ @ 385 NONAME ; struct QMetaObject const * QTMS::QTMSDTMF::metaObject(void) const
+	?GetMaxLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 386 NONAME ; int QTMS::QTMSGainEffect::GetMaxLevel(unsigned int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/data/create_qtms_stub_sis.bat	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,17 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: PKG for QT Telephony Media Services (QTMS)
+rem
+
+makesis -s qtmsapi_stub.pkg qtmsapi_stub.sis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/data/qtmsapi_stub.pkg	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,29 @@
+;
+; 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: QT Telephony Multimedia Services (QTMS)
+;
+;File: qtms_stub.pkg
+
+;Languages
+&EN
+
+;Header
+#{"QTMS"},(0x10207CB3),1,0,0, TYPE=SA
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
Binary file qtms/data/qtmsapi_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/eabi/qtmsu.def	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,412 @@
+EXPORTS
+	_ZN4QTMS10QTMSFormat10GetBitRateERj @ 1 NONAME
+	_ZN4QTMS10QTMSFormat10SetBitRateEj @ 2 NONAME
+	_ZN4QTMS10QTMSFormat20GetSupportedBitRatesERSt6vectorIjSaIjEE @ 3 NONAME
+	_ZN4QTMS10QTMSFormat7GetTypeERi @ 4 NONAME
+	_ZN4QTMS10QTMSFormatC1Ev @ 5 NONAME
+	_ZN4QTMS10QTMSFormatC2Ev @ 6 NONAME
+	_ZN4QTMS10QTMSFormatD0Ev @ 7 NONAME
+	_ZN4QTMS10QTMSFormatD1Ev @ 8 NONAME
+	_ZN4QTMS10QTMSFormatD2Ev @ 9 NONAME
+	_ZN4QTMS10QTMSStream10RemoveSinkEPNS_8QTMSSinkE @ 10 NONAME
+	_ZN4QTMS10QTMSStream11GetStreamIdEv @ 11 NONAME
+	_ZN4QTMS10QTMSStream11ResetFormatEPNS_10QTMSFormatE @ 12 NONAME
+	_ZN4QTMS10QTMSStream11qt_metacallEN11QMetaObject4CallEiPPv @ 13 NONAME
+	_ZN4QTMS10QTMSStream11qt_metacastEPKc @ 14 NONAME
+	_ZN4QTMS10QTMSStream12RemoveEffectEPNS_10QTMSEffectE @ 15 NONAME
+	_ZN4QTMS10QTMSStream12RemoveSourceEPNS_10QTMSSourceE @ 16 NONAME
+	_ZN4QTMS10QTMSStream13GetStreamTypeEv @ 17 NONAME
+	_ZN4QTMS10QTMSStream14TMSStreamEventERKS0_NS_15QTMSSignalEventE @ 18 NONAME
+	_ZN4QTMS10QTMSStream16staticMetaObjectE @ 19 NONAME DATA 16
+	_ZN4QTMS10QTMSStream19getStaticMetaObjectEv @ 20 NONAME
+	_ZN4QTMS10QTMSStream4InitEi @ 21 NONAME
+	_ZN4QTMS10QTMSStream4StopEv @ 22 NONAME
+	_ZN4QTMS10QTMSStream5PauseEv @ 23 NONAME
+	_ZN4QTMS10QTMSStream5StartEi @ 24 NONAME
+	_ZN4QTMS10QTMSStream6DeinitEv @ 25 NONAME
+	_ZN4QTMS10QTMSStream7AddSinkEPNS_8QTMSSinkE @ 26 NONAME
+	_ZN4QTMS10QTMSStream8GetStateEv @ 27 NONAME
+	_ZN4QTMS10QTMSStream9AddEffectEPNS_10QTMSEffectE @ 28 NONAME
+	_ZN4QTMS10QTMSStream9AddSourceEPNS_10QTMSSourceE @ 29 NONAME
+	_ZN4QTMS10QTMSStream9SetFormatEPNS_10QTMSFormatE @ 30 NONAME
+	_ZN4QTMS10QTMSStreamC1Ev @ 31 NONAME
+	_ZN4QTMS10QTMSStreamC2Ev @ 32 NONAME
+	_ZN4QTMS10QTMSStreamD0Ev @ 33 NONAME
+	_ZN4QTMS10QTMSStreamD1Ev @ 34 NONAME
+	_ZN4QTMS10QTMSStreamD2Ev @ 35 NONAME
+	_ZN4QTMS11QTMSFactory10CreateCallEiRPNS_8QTMSCallEj @ 36 NONAME
+	_ZN4QTMS11QTMSFactory10CreateDTMFEiRPNS_8QTMSDTMFE @ 37 NONAME
+	_ZN4QTMS11QTMSFactory10CreateSinkEiRPNS_8QTMSSinkE @ 38 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteCallERPNS_8QTMSCallE @ 39 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteDTMFERPNS_8QTMSDTMFE @ 40 NONAME
+	_ZN4QTMS11QTMSFactory10DeleteSinkERPNS_8QTMSSinkE @ 41 NONAME
+	_ZN4QTMS11QTMSFactory11qt_metacallEN11QMetaObject4CallEiPPv @ 42 NONAME
+	_ZN4QTMS11QTMSFactory11qt_metacastEPKc @ 43 NONAME
+	_ZN4QTMS11QTMSFactory12CreateBufferEijRPNS_10QTMSBufferE @ 44 NONAME
+	_ZN4QTMS11QTMSFactory12CreateEffectEiRPNS_10QTMSEffectE @ 45 NONAME
+	_ZN4QTMS11QTMSFactory12CreateFormatEiRPNS_10QTMSFormatE @ 46 NONAME
+	_ZN4QTMS11QTMSFactory12CreateSourceEiRPNS_10QTMSSourceE @ 47 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteBufferERPNS_10QTMSBufferE @ 48 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteEffectERPNS_10QTMSEffectE @ 49 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteFormatERPNS_10QTMSFormatE @ 50 NONAME
+	_ZN4QTMS11QTMSFactory12DeleteSourceERPNS_10QTMSSourceE @ 51 NONAME
+	_ZN4QTMS11QTMSFactory13CreateFactoryERPS0_RNS_7QTMSVerE @ 52 NONAME
+	_ZN4QTMS11QTMSFactory16staticMetaObjectE @ 53 NONAME DATA 16
+	_ZN4QTMS11QTMSFactory19CreateGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 54 NONAME
+	_ZN4QTMS11QTMSFactory19DeleteGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 55 NONAME
+	_ZN4QTMS11QTMSFactory19GetSupportedFormatsEiRSt6vectorIPNS_10QTMSFormatESaIS3_EE @ 56 NONAME
+	_ZN4QTMS11QTMSFactory19IsCallTypeSupportedEiRi @ 57 NONAME
+	_ZN4QTMS11QTMSFactory19getStaticMetaObjectEv @ 58 NONAME
+	_ZN4QTMS11QTMSFactory20CreateRingTonePlayerERPNS_12QTMSRingToneE @ 59 NONAME
+	_ZN4QTMS11QTMSFactory20DeleteRingTonePlayerERPNS_12QTMSRingToneE @ 60 NONAME
+	_ZN4QTMS11QTMSFactory22CreateInbandTonePlayerERPNS_14QTMSInbandToneE @ 61 NONAME
+	_ZN4QTMS11QTMSFactory22DeleteInbandTonePlayerERPNS_14QTMSInbandToneE @ 62 NONAME
+	_ZN4QTMS11QTMSFactoryC1Ev @ 63 NONAME
+	_ZN4QTMS11QTMSFactoryC2Ev @ 64 NONAME
+	_ZN4QTMS11QTMSFactoryD0Ev @ 65 NONAME
+	_ZN4QTMS11QTMSFactoryD1Ev @ 66 NONAME
+	_ZN4QTMS11QTMSFactoryD2Ev @ 67 NONAME
+	_ZN4QTMS12QTMSRingTone11qt_metacallEN11QMetaObject4CallEiPPv @ 68 NONAME
+	_ZN4QTMS12QTMSRingTone11qt_metacastEPKc @ 69 NONAME
+	_ZN4QTMS12QTMSRingTone13RingtoneEventERKS0_NS_15QTMSSignalEventE @ 70 NONAME
+	_ZN4QTMS12QTMSRingTone16staticMetaObjectE @ 71 NONAME DATA 16
+	_ZN4QTMS12QTMSRingTone19getStaticMetaObjectEv @ 72 NONAME
+	_ZN4QTMS12QTMSRingTone4InitEiP8_GStringS2_ @ 73 NONAME
+	_ZN4QTMS12QTMSRingTone4MuteEv @ 74 NONAME
+	_ZN4QTMS12QTMSRingTone4PlayEv @ 75 NONAME
+	_ZN4QTMS12QTMSRingTone4StopEv @ 76 NONAME
+	_ZN4QTMS12QTMSRingTone5PauseEv @ 77 NONAME
+	_ZN4QTMS12QTMSRingTone6DeinitEv @ 78 NONAME
+	_ZN4QTMS12QTMSRingToneC1Ev @ 79 NONAME
+	_ZN4QTMS12QTMSRingToneC2Ev @ 80 NONAME
+	_ZN4QTMS12QTMSRingToneD0Ev @ 81 NONAME
+	_ZN4QTMS12QTMSRingToneD1Ev @ 82 NONAME
+	_ZN4QTMS12QTMSRingToneD2Ev @ 83 NONAME
+	_ZN4QTMS13QTMSAMRFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 84 NONAME
+	_ZN4QTMS13QTMSAMRFormat11qt_metacastEPKc @ 85 NONAME
+	_ZN4QTMS13QTMSAMRFormat16staticMetaObjectE @ 86 NONAME DATA 16
+	_ZN4QTMS13QTMSAMRFormat19getStaticMetaObjectEv @ 87 NONAME
+	_ZN4QTMS13QTMSAMRFormatC1Ev @ 88 NONAME
+	_ZN4QTMS13QTMSAMRFormatC2Ev @ 89 NONAME
+	_ZN4QTMS13QTMSAMRFormatD0Ev @ 90 NONAME
+	_ZN4QTMS13QTMSAMRFormatD1Ev @ 91 NONAME
+	_ZN4QTMS13QTMSAMRFormatD2Ev @ 92 NONAME
+	_ZN4QTMS13QTMSMicSource11qt_metacallEN11QMetaObject4CallEiPPv @ 93 NONAME
+	_ZN4QTMS13QTMSMicSource11qt_metacastEPKc @ 94 NONAME
+	_ZN4QTMS13QTMSMicSource16staticMetaObjectE @ 95 NONAME DATA 16
+	_ZN4QTMS13QTMSMicSource19getStaticMetaObjectEv @ 96 NONAME
+	_ZN4QTMS13QTMSMicSource7GetTypeERi @ 97 NONAME
+	_ZN4QTMS13QTMSMicSourceC1Ev @ 98 NONAME
+	_ZN4QTMS13QTMSMicSourceC2Ev @ 99 NONAME
+	_ZN4QTMS13QTMSMicSourceD0Ev @ 100 NONAME
+	_ZN4QTMS13QTMSMicSourceD1Ev @ 101 NONAME
+	_ZN4QTMS13QTMSMicSourceD2Ev @ 102 NONAME
+	_ZN4QTMS13QTMSModemSink11qt_metacallEN11QMetaObject4CallEiPPv @ 103 NONAME
+	_ZN4QTMS13QTMSModemSink11qt_metacastEPKc @ 104 NONAME
+	_ZN4QTMS13QTMSModemSink16staticMetaObjectE @ 105 NONAME DATA 16
+	_ZN4QTMS13QTMSModemSink19getStaticMetaObjectEv @ 106 NONAME
+	_ZN4QTMS13QTMSModemSink7GetTypeERi @ 107 NONAME
+	_ZN4QTMS13QTMSModemSinkC1Ev @ 108 NONAME
+	_ZN4QTMS13QTMSModemSinkC2Ev @ 109 NONAME
+	_ZN4QTMS13QTMSModemSinkD0Ev @ 110 NONAME
+	_ZN4QTMS13QTMSModemSinkD1Ev @ 111 NONAME
+	_ZN4QTMS13QTMSModemSinkD2Ev @ 112 NONAME
+	_ZN4QTMS13QTMSPCMFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 113 NONAME
+	_ZN4QTMS13QTMSPCMFormat11qt_metacastEPKc @ 114 NONAME
+	_ZN4QTMS13QTMSPCMFormat16staticMetaObjectE @ 115 NONAME DATA 16
+	_ZN4QTMS13QTMSPCMFormat19getStaticMetaObjectEv @ 116 NONAME
+	_ZN4QTMS13QTMSPCMFormatC1Ev @ 117 NONAME
+	_ZN4QTMS13QTMSPCMFormatC2Ev @ 118 NONAME
+	_ZN4QTMS13QTMSPCMFormatD0Ev @ 119 NONAME
+	_ZN4QTMS13QTMSPCMFormatD1Ev @ 120 NONAME
+	_ZN4QTMS13QTMSPCMFormatD2Ev @ 121 NONAME
+	_ZN4QTMS14QTMSClientSink11qt_metacallEN11QMetaObject4CallEiPPv @ 122 NONAME
+	_ZN4QTMS14QTMSClientSink11qt_metacastEPKc @ 123 NONAME
+	_ZN4QTMS14QTMSClientSink13ProcessBufferEPKNS_10QTMSBufferE @ 124 NONAME
+	_ZN4QTMS14QTMSClientSink15BufferProcessedEPNS_10QTMSBufferE @ 125 NONAME
+	_ZN4QTMS14QTMSClientSink16staticMetaObjectE @ 126 NONAME DATA 16
+	_ZN4QTMS14QTMSClientSink19getStaticMetaObjectEv @ 127 NONAME
+	_ZN4QTMS14QTMSClientSink7GetTypeERi @ 128 NONAME
+	_ZN4QTMS14QTMSClientSinkC1Ev @ 129 NONAME
+	_ZN4QTMS14QTMSClientSinkC2Ev @ 130 NONAME
+	_ZN4QTMS14QTMSClientSinkD0Ev @ 131 NONAME
+	_ZN4QTMS14QTMSClientSinkD1Ev @ 132 NONAME
+	_ZN4QTMS14QTMSClientSinkD2Ev @ 133 NONAME
+	_ZN4QTMS14QTMSG711Format10GetVADModeERi @ 134 NONAME
+	_ZN4QTMS14QTMSG711Format10SetVADModeEi @ 135 NONAME
+	_ZN4QTMS14QTMSG711Format11qt_metacallEN11QMetaObject4CallEiPPv @ 136 NONAME
+	_ZN4QTMS14QTMSG711Format11qt_metacastEPKc @ 137 NONAME
+	_ZN4QTMS14QTMSG711Format16staticMetaObjectE @ 138 NONAME DATA 16
+	_ZN4QTMS14QTMSG711Format19getStaticMetaObjectEv @ 139 NONAME
+	_ZN4QTMS14QTMSG711Format6GetCNGERi @ 140 NONAME
+	_ZN4QTMS14QTMSG711Format6GetPlcERi @ 141 NONAME
+	_ZN4QTMS14QTMSG711Format6SetCNGEi @ 142 NONAME
+	_ZN4QTMS14QTMSG711Format6SetPlcEi @ 143 NONAME
+	_ZN4QTMS14QTMSG711Format7GetModeERi @ 144 NONAME
+	_ZN4QTMS14QTMSG711Format7SetModeEi @ 145 NONAME
+	_ZN4QTMS14QTMSG711FormatC1Ev @ 146 NONAME
+	_ZN4QTMS14QTMSG711FormatC2Ev @ 147 NONAME
+	_ZN4QTMS14QTMSG711FormatD0Ev @ 148 NONAME
+	_ZN4QTMS14QTMSG711FormatD1Ev @ 149 NONAME
+	_ZN4QTMS14QTMSG711FormatD2Ev @ 150 NONAME
+	_ZN4QTMS14QTMSG729Format10GetVADModeERi @ 151 NONAME
+	_ZN4QTMS14QTMSG729Format10SetVADModeEi @ 152 NONAME
+	_ZN4QTMS14QTMSG729Format11qt_metacallEN11QMetaObject4CallEiPPv @ 153 NONAME
+	_ZN4QTMS14QTMSG729Format11qt_metacastEPKc @ 154 NONAME
+	_ZN4QTMS14QTMSG729Format16staticMetaObjectE @ 155 NONAME DATA 16
+	_ZN4QTMS14QTMSG729Format19getStaticMetaObjectEv @ 156 NONAME
+	_ZN4QTMS14QTMSG729FormatC1Ev @ 157 NONAME
+	_ZN4QTMS14QTMSG729FormatC2Ev @ 158 NONAME
+	_ZN4QTMS14QTMSG729FormatD0Ev @ 159 NONAME
+	_ZN4QTMS14QTMSG729FormatD1Ev @ 160 NONAME
+	_ZN4QTMS14QTMSG729FormatD2Ev @ 161 NONAME
+	_ZN4QTMS14QTMSGainEffect11GetMaxLevelERj @ 162 NONAME
+	_ZN4QTMS14QTMSGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 163 NONAME
+	_ZN4QTMS14QTMSGainEffect11qt_metacastEPKc @ 164 NONAME
+	_ZN4QTMS14QTMSGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 165 NONAME
+	_ZN4QTMS14QTMSGainEffect16staticMetaObjectE @ 166 NONAME DATA 16
+	_ZN4QTMS14QTMSGainEffect19getStaticMetaObjectEv @ 167 NONAME
+	_ZN4QTMS14QTMSGainEffect7GetTypeERi @ 168 NONAME
+	_ZN4QTMS14QTMSGainEffect8GetLevelERj @ 169 NONAME
+	_ZN4QTMS14QTMSGainEffect8SetLevelEj @ 170 NONAME
+	_ZN4QTMS14QTMSGainEffectC1Ev @ 171 NONAME
+	_ZN4QTMS14QTMSGainEffectC2Ev @ 172 NONAME
+	_ZN4QTMS14QTMSGainEffectD0Ev @ 173 NONAME
+	_ZN4QTMS14QTMSGainEffectD1Ev @ 174 NONAME
+	_ZN4QTMS14QTMSGainEffectD2Ev @ 175 NONAME
+	_ZN4QTMS14QTMSILBCFormat10GetVADModeERi @ 176 NONAME
+	_ZN4QTMS14QTMSILBCFormat10SetVADModeEi @ 177 NONAME
+	_ZN4QTMS14QTMSILBCFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 178 NONAME
+	_ZN4QTMS14QTMSILBCFormat11qt_metacastEPKc @ 179 NONAME
+	_ZN4QTMS14QTMSILBCFormat16staticMetaObjectE @ 180 NONAME DATA 16
+	_ZN4QTMS14QTMSILBCFormat19getStaticMetaObjectEv @ 181 NONAME
+	_ZN4QTMS14QTMSILBCFormat6GetCNGERi @ 182 NONAME
+	_ZN4QTMS14QTMSILBCFormat6SetCNGEi @ 183 NONAME
+	_ZN4QTMS14QTMSILBCFormat7GetModeERi @ 184 NONAME
+	_ZN4QTMS14QTMSILBCFormat7SetModeEi @ 185 NONAME
+	_ZN4QTMS14QTMSILBCFormatC1Ev @ 186 NONAME
+	_ZN4QTMS14QTMSILBCFormatC2Ev @ 187 NONAME
+	_ZN4QTMS14QTMSILBCFormatD0Ev @ 188 NONAME
+	_ZN4QTMS14QTMSILBCFormatD1Ev @ 189 NONAME
+	_ZN4QTMS14QTMSILBCFormatD2Ev @ 190 NONAME
+	_ZN4QTMS14QTMSInbandTone11qt_metacallEN11QMetaObject4CallEiPPv @ 191 NONAME
+	_ZN4QTMS14QTMSInbandTone11qt_metacastEPKc @ 192 NONAME
+	_ZN4QTMS14QTMSInbandTone15InbandToneEventERKS0_NS_15QTMSSignalEventE @ 193 NONAME
+	_ZN4QTMS14QTMSInbandTone16staticMetaObjectE @ 194 NONAME DATA 16
+	_ZN4QTMS14QTMSInbandTone19getStaticMetaObjectEv @ 195 NONAME
+	_ZN4QTMS14QTMSInbandTone4StopEv @ 196 NONAME
+	_ZN4QTMS14QTMSInbandTone5StartEi @ 197 NONAME
+	_ZN4QTMS14QTMSInbandToneC1Ev @ 198 NONAME
+	_ZN4QTMS14QTMSInbandToneC2Ev @ 199 NONAME
+	_ZN4QTMS14QTMSInbandToneD0Ev @ 200 NONAME
+	_ZN4QTMS14QTMSInbandToneD1Ev @ 201 NONAME
+	_ZN4QTMS14QTMSInbandToneD2Ev @ 202 NONAME
+	_ZN4QTMS15QTMSModemSource11qt_metacallEN11QMetaObject4CallEiPPv @ 203 NONAME
+	_ZN4QTMS15QTMSModemSource11qt_metacastEPKc @ 204 NONAME
+	_ZN4QTMS15QTMSModemSource16staticMetaObjectE @ 205 NONAME DATA 16
+	_ZN4QTMS15QTMSModemSource19getStaticMetaObjectEv @ 206 NONAME
+	_ZN4QTMS15QTMSModemSource7GetTypeERi @ 207 NONAME
+	_ZN4QTMS15QTMSModemSourceC1Ev @ 208 NONAME
+	_ZN4QTMS15QTMSModemSourceC2Ev @ 209 NONAME
+	_ZN4QTMS15QTMSModemSourceD0Ev @ 210 NONAME
+	_ZN4QTMS15QTMSModemSourceD1Ev @ 211 NONAME
+	_ZN4QTMS15QTMSModemSourceD2Ev @ 212 NONAME
+	_ZN4QTMS15QTMSSpeakerSink11qt_metacallEN11QMetaObject4CallEiPPv @ 213 NONAME
+	_ZN4QTMS15QTMSSpeakerSink11qt_metacastEPKc @ 214 NONAME
+	_ZN4QTMS15QTMSSpeakerSink16staticMetaObjectE @ 215 NONAME DATA 16
+	_ZN4QTMS15QTMSSpeakerSink19getStaticMetaObjectEv @ 216 NONAME
+	_ZN4QTMS15QTMSSpeakerSink7GetTypeERi @ 217 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkC1Ev @ 218 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkC2Ev @ 219 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD0Ev @ 220 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD1Ev @ 221 NONAME
+	_ZN4QTMS15QTMSSpeakerSinkD2Ev @ 222 NONAME
+	_ZN4QTMS16QTMSClientSource10FillBufferERNS_10QTMSBufferE @ 223 NONAME
+	_ZN4QTMS16QTMSClientSource11qt_metacallEN11QMetaObject4CallEiPPv @ 224 NONAME
+	_ZN4QTMS16QTMSClientSource11qt_metacastEPKc @ 225 NONAME
+	_ZN4QTMS16QTMSClientSource12BufferFilledERNS_10QTMSBufferE @ 226 NONAME
+	_ZN4QTMS16QTMSClientSource13ProcessBufferEPNS_10QTMSBufferE @ 227 NONAME
+	_ZN4QTMS16QTMSClientSource14GetEnqueueModeERi @ 228 NONAME
+	_ZN4QTMS16QTMSClientSource14SetEnqueueModeEi @ 229 NONAME
+	_ZN4QTMS16QTMSClientSource15BufferProcessedEPKNS_10QTMSBufferEi @ 230 NONAME
+	_ZN4QTMS16QTMSClientSource16staticMetaObjectE @ 231 NONAME DATA 16
+	_ZN4QTMS16QTMSClientSource19getStaticMetaObjectEv @ 232 NONAME
+	_ZN4QTMS16QTMSClientSource5FlushEv @ 233 NONAME
+	_ZN4QTMS16QTMSClientSource7GetTypeERi @ 234 NONAME
+	_ZN4QTMS16QTMSClientSourceC1Ev @ 235 NONAME
+	_ZN4QTMS16QTMSClientSourceC2Ev @ 236 NONAME
+	_ZN4QTMS16QTMSClientSourceD0Ev @ 237 NONAME
+	_ZN4QTMS16QTMSClientSourceD1Ev @ 238 NONAME
+	_ZN4QTMS16QTMSClientSourceD2Ev @ 239 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11GetMaxLevelERj @ 240 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 241 NONAME
+	_ZN4QTMS16QTMSVolumeEffect11qt_metacastEPKc @ 242 NONAME
+	_ZN4QTMS16QTMSVolumeEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 243 NONAME
+	_ZN4QTMS16QTMSVolumeEffect16staticMetaObjectE @ 244 NONAME DATA 16
+	_ZN4QTMS16QTMSVolumeEffect19getStaticMetaObjectEv @ 245 NONAME
+	_ZN4QTMS16QTMSVolumeEffect7GetTypeERi @ 246 NONAME
+	_ZN4QTMS16QTMSVolumeEffect8GetLevelERj @ 247 NONAME
+	_ZN4QTMS16QTMSVolumeEffect8SetLevelEj @ 248 NONAME
+	_ZN4QTMS16QTMSVolumeEffectC1Ev @ 249 NONAME
+	_ZN4QTMS16QTMSVolumeEffectC2Ev @ 250 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD0Ev @ 251 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD1Ev @ 252 NONAME
+	_ZN4QTMS16QTMSVolumeEffectD2Ev @ 253 NONAME
+	_ZN4QTMS17QTMSGlobalRouting11qt_metacallEN11QMetaObject4CallEiPPv @ 254 NONAME
+	_ZN4QTMS17QTMSGlobalRouting11qt_metacastEPKc @ 255 NONAME
+	_ZN4QTMS17QTMSGlobalRouting16staticMetaObjectE @ 256 NONAME DATA 16
+	_ZN4QTMS17QTMSGlobalRouting17GetPreviousOutputERi @ 257 NONAME
+	_ZN4QTMS17QTMSGlobalRouting18GlobalRoutingEventERKS0_NS_15QTMSSignalEventEi @ 258 NONAME
+	_ZN4QTMS17QTMSGlobalRouting19GetAvailableOutputsERSt6vectorIjSaIjEE @ 259 NONAME
+	_ZN4QTMS17QTMSGlobalRouting19getStaticMetaObjectEv @ 260 NONAME
+	_ZN4QTMS17QTMSGlobalRouting9GetOutputERi @ 261 NONAME
+	_ZN4QTMS17QTMSGlobalRouting9SetOutputEi @ 262 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingC1Ev @ 263 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingC2Ev @ 264 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD0Ev @ 265 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD1Ev @ 266 NONAME
+	_ZN4QTMS17QTMSGlobalRoutingD2Ev @ 267 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11GetMaxLevelERj @ 268 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 269 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect11qt_metacastEPKc @ 270 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 271 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect16staticMetaObjectE @ 272 NONAME DATA 16
+	_ZN4QTMS19QTMSGlobalVolEffect19getStaticMetaObjectEv @ 273 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 274 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect8GetLevelERj @ 275 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffect8SetLevelEj @ 276 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectC1Ev @ 277 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectC2Ev @ 278 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD0Ev @ 279 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD1Ev @ 280 NONAME
+	_ZN4QTMS19QTMSGlobalVolEffectD2Ev @ 281 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11GetMaxLevelERj @ 282 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 283 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect11qt_metacastEPKc @ 284 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 285 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect16staticMetaObjectE @ 286 NONAME DATA 16
+	_ZN4QTMS20QTMSGlobalGainEffect19getStaticMetaObjectEv @ 287 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 288 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect8GetLevelERj @ 289 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffect8SetLevelEj @ 290 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectC1Ev @ 291 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectC2Ev @ 292 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD0Ev @ 293 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD1Ev @ 294 NONAME
+	_ZN4QTMS20QTMSGlobalGainEffectD2Ev @ 295 NONAME
+	_ZN4QTMS8QTMSCall11GetCallTypeEv @ 296 NONAME
+	_ZN4QTMS8QTMSCall11qt_metacallEN11QMetaObject4CallEiPPv @ 297 NONAME
+	_ZN4QTMS8QTMSCall11qt_metacastEPKc @ 298 NONAME
+	_ZN4QTMS8QTMSCall12CreateStreamEiRPNS_10QTMSStreamE @ 299 NONAME
+	_ZN4QTMS8QTMSCall12DeleteStreamERPNS_10QTMSStreamE @ 300 NONAME
+	_ZN4QTMS8QTMSCall16GetCallContextIdERj @ 301 NONAME
+	_ZN4QTMS8QTMSCall16staticMetaObjectE @ 302 NONAME DATA 16
+	_ZN4QTMS8QTMSCall19getStaticMetaObjectEv @ 303 NONAME
+	_ZN4QTMS8QTMSCallC1Ev @ 304 NONAME
+	_ZN4QTMS8QTMSCallC2Ev @ 305 NONAME
+	_ZN4QTMS8QTMSCallD0Ev @ 306 NONAME
+	_ZN4QTMS8QTMSCallD1Ev @ 307 NONAME
+	_ZN4QTMS8QTMSCallD2Ev @ 308 NONAME
+	_ZN4QTMS8QTMSDTMF11qt_metacallEN11QMetaObject4CallEiPPv @ 309 NONAME
+	_ZN4QTMS8QTMSDTMF11qt_metacastEPKc @ 310 NONAME
+	_ZN4QTMS8QTMSDTMF16staticMetaObjectE @ 311 NONAME DATA 16
+	_ZN4QTMS8QTMSDTMF19getStaticMetaObjectEv @ 312 NONAME
+	_ZN4QTMS8QTMSDTMF25ContinueDTMFStringSendingEi @ 313 NONAME
+	_ZN4QTMS8QTMSDTMF4StopEv @ 314 NONAME
+	_ZN4QTMS8QTMSDTMF5StartEv @ 315 NONAME
+	_ZN4QTMS8QTMSDTMF7SetToneEP8_GString @ 316 NONAME
+	_ZN4QTMS8QTMSDTMF9DTMFEventERKS0_NS_15QTMSSignalEventE @ 317 NONAME
+	_ZN4QTMS8QTMSDTMFC1Ev @ 318 NONAME
+	_ZN4QTMS8QTMSDTMFC2Ev @ 319 NONAME
+	_ZN4QTMS8QTMSDTMFD0Ev @ 320 NONAME
+	_ZN4QTMS8QTMSDTMFD1Ev @ 321 NONAME
+	_ZN4QTMS8QTMSDTMFD2Ev @ 322 NONAME
+	_ZNK4QTMS10QTMSStream10metaObjectEv @ 323 NONAME
+	_ZNK4QTMS11QTMSFactory10metaObjectEv @ 324 NONAME
+	_ZNK4QTMS12QTMSRingTone10metaObjectEv @ 325 NONAME
+	_ZNK4QTMS13QTMSAMRFormat10metaObjectEv @ 326 NONAME
+	_ZNK4QTMS13QTMSMicSource10metaObjectEv @ 327 NONAME
+	_ZNK4QTMS13QTMSModemSink10metaObjectEv @ 328 NONAME
+	_ZNK4QTMS13QTMSPCMFormat10metaObjectEv @ 329 NONAME
+	_ZNK4QTMS14QTMSClientSink10metaObjectEv @ 330 NONAME
+	_ZNK4QTMS14QTMSG711Format10metaObjectEv @ 331 NONAME
+	_ZNK4QTMS14QTMSG729Format10metaObjectEv @ 332 NONAME
+	_ZNK4QTMS14QTMSGainEffect10metaObjectEv @ 333 NONAME
+	_ZNK4QTMS14QTMSILBCFormat10metaObjectEv @ 334 NONAME
+	_ZNK4QTMS14QTMSInbandTone10metaObjectEv @ 335 NONAME
+	_ZNK4QTMS15QTMSModemSource10metaObjectEv @ 336 NONAME
+	_ZNK4QTMS15QTMSSpeakerSink10metaObjectEv @ 337 NONAME
+	_ZNK4QTMS16QTMSClientSource10metaObjectEv @ 338 NONAME
+	_ZNK4QTMS16QTMSVolumeEffect10metaObjectEv @ 339 NONAME
+	_ZNK4QTMS17QTMSGlobalRouting10metaObjectEv @ 340 NONAME
+	_ZNK4QTMS19QTMSGlobalVolEffect10metaObjectEv @ 341 NONAME
+	_ZNK4QTMS20QTMSGlobalGainEffect10metaObjectEv @ 342 NONAME
+	_ZNK4QTMS8QTMSCall10metaObjectEv @ 343 NONAME
+	_ZNK4QTMS8QTMSDTMF10metaObjectEv @ 344 NONAME
+	_ZTIN4QTMS10QTMSFormatE @ 345 NONAME
+	_ZTIN4QTMS10QTMSStreamE @ 346 NONAME
+	_ZTIN4QTMS11QTMSFactoryE @ 347 NONAME
+	_ZTIN4QTMS12QTMSRingToneE @ 348 NONAME
+	_ZTIN4QTMS13QTMSAMRFormatE @ 349 NONAME
+	_ZTIN4QTMS13QTMSMicSourceE @ 350 NONAME
+	_ZTIN4QTMS13QTMSModemSinkE @ 351 NONAME
+	_ZTIN4QTMS13QTMSPCMFormatE @ 352 NONAME
+	_ZTIN4QTMS14QTMSClientSinkE @ 353 NONAME
+	_ZTIN4QTMS14QTMSG711FormatE @ 354 NONAME
+	_ZTIN4QTMS14QTMSG729FormatE @ 355 NONAME
+	_ZTIN4QTMS14QTMSGainEffectE @ 356 NONAME
+	_ZTIN4QTMS14QTMSILBCFormatE @ 357 NONAME
+	_ZTIN4QTMS14QTMSInbandToneE @ 358 NONAME
+	_ZTIN4QTMS15QTMSModemSourceE @ 359 NONAME
+	_ZTIN4QTMS15QTMSSpeakerSinkE @ 360 NONAME
+	_ZTIN4QTMS16QTMSClientSourceE @ 361 NONAME
+	_ZTIN4QTMS16QTMSVolumeEffectE @ 362 NONAME
+	_ZTIN4QTMS17QTMSGlobalRoutingE @ 363 NONAME
+	_ZTIN4QTMS19QTMSGlobalVolEffectE @ 364 NONAME
+	_ZTIN4QTMS20QTMSGlobalGainEffectE @ 365 NONAME
+	_ZTIN4QTMS8QTMSCallE @ 366 NONAME
+	_ZTIN4QTMS8QTMSDTMFE @ 367 NONAME
+	_ZTVN4QTMS10QTMSFormatE @ 368 NONAME
+	_ZTVN4QTMS10QTMSStreamE @ 369 NONAME
+	_ZTVN4QTMS11QTMSFactoryE @ 370 NONAME
+	_ZTVN4QTMS12QTMSRingToneE @ 371 NONAME
+	_ZTVN4QTMS13QTMSAMRFormatE @ 372 NONAME
+	_ZTVN4QTMS13QTMSMicSourceE @ 373 NONAME
+	_ZTVN4QTMS13QTMSModemSinkE @ 374 NONAME
+	_ZTVN4QTMS13QTMSPCMFormatE @ 375 NONAME
+	_ZTVN4QTMS14QTMSClientSinkE @ 376 NONAME
+	_ZTVN4QTMS14QTMSG711FormatE @ 377 NONAME
+	_ZTVN4QTMS14QTMSG729FormatE @ 378 NONAME
+	_ZTVN4QTMS14QTMSGainEffectE @ 379 NONAME
+	_ZTVN4QTMS14QTMSILBCFormatE @ 380 NONAME
+	_ZTVN4QTMS14QTMSInbandToneE @ 381 NONAME
+	_ZTVN4QTMS15QTMSModemSourceE @ 382 NONAME
+	_ZTVN4QTMS15QTMSSpeakerSinkE @ 383 NONAME
+	_ZTVN4QTMS16QTMSClientSourceE @ 384 NONAME
+	_ZTVN4QTMS16QTMSVolumeEffectE @ 385 NONAME
+	_ZTVN4QTMS17QTMSGlobalRoutingE @ 386 NONAME
+	_ZTVN4QTMS19QTMSGlobalVolEffectE @ 387 NONAME
+	_ZTVN4QTMS20QTMSGlobalGainEffectE @ 388 NONAME
+	_ZTVN4QTMS8QTMSCallE @ 389 NONAME
+	_ZTVN4QTMS8QTMSDTMFE @ 390 NONAME
+	_ZThn8_N4QTMS13QTMSAMRFormatD0Ev @ 391 NONAME
+	_ZThn8_N4QTMS13QTMSAMRFormatD1Ev @ 392 NONAME
+	_ZThn8_N4QTMS13QTMSMicSource7GetTypeERi @ 393 NONAME
+	_ZThn8_N4QTMS13QTMSModemSink7GetTypeERi @ 394 NONAME
+	_ZThn8_N4QTMS13QTMSPCMFormatD0Ev @ 395 NONAME
+	_ZThn8_N4QTMS13QTMSPCMFormatD1Ev @ 396 NONAME
+	_ZThn8_N4QTMS14QTMSClientSink7GetTypeERi @ 397 NONAME
+	_ZThn8_N4QTMS14QTMSG711FormatD0Ev @ 398 NONAME
+	_ZThn8_N4QTMS14QTMSG711FormatD1Ev @ 399 NONAME
+	_ZThn8_N4QTMS14QTMSG729FormatD0Ev @ 400 NONAME
+	_ZThn8_N4QTMS14QTMSG729FormatD1Ev @ 401 NONAME
+	_ZThn8_N4QTMS14QTMSGainEffect7GetTypeERi @ 402 NONAME
+	_ZThn8_N4QTMS14QTMSILBCFormatD0Ev @ 403 NONAME
+	_ZThn8_N4QTMS14QTMSILBCFormatD1Ev @ 404 NONAME
+	_ZThn8_N4QTMS15QTMSModemSource7GetTypeERi @ 405 NONAME
+	_ZThn8_N4QTMS15QTMSSpeakerSink7GetTypeERi @ 406 NONAME
+	_ZThn8_N4QTMS16QTMSClientSource7GetTypeERi @ 407 NONAME
+	_ZThn8_N4QTMS16QTMSVolumeEffect7GetTypeERi @ 408 NONAME
+	_ZThn8_N4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 409 NONAME
+	_ZThn8_N4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 410 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsamrimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_AMR_FORMAT_IMPL_H
+#define QTMS_AMR_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsamrformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+// Class declaration
+class QTMSAMRFormatImpl: public QTMSAMRFormat
+{
+public:
+
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSAMRFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSAMRFormatImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_AMR_FORMAT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsbufferimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_BUFFER_IMPL_H
+#define QTMS_BUFFER_IMPL_H
+
+#include <qtms.h>
+
+// FORWARD DECLARATION
+namespace TMS
+{
+class TMSBuffer;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSBuffer;
+
+// TMSBufferImpl class
+class QTMSBufferImpl
+{
+public:
+    static gint Create(QTMSBufferType ctype, QTMSBuffer*& buffer, TMS::TMSBuffer*& tmsbuffer);
+    static gint Delete(QTMSBuffer*& buffer);
+};
+
+} //namespace QTMS
+
+#endif // QTMS_BUFFER_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmscallimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CALL_IMPL_H
+#define QTMS_CALL_IMPL_H
+
+#include <glib.h>
+#include <qtmscall.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSCall;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSStream;
+class QTMSDTMF;
+class QTMSRingTone;
+
+// QTMSCallImpl class
+class QTMSCallImpl: public QTMSCall
+{
+public:
+    static gint Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall);
+
+    virtual ~QTMSCallImpl();
+
+    // From QTMSCallBody
+    // QTMSCallType GetCallType();
+    // gint GetCallContextId(guint& ctxid);
+    // gint CreateStream(QTMSStreamType type, QTMSStream*& strm);
+    // gint DeleteStream(QTMSStream*& strm);
+
+private:
+    // TMS::TMSCall* iTmsCall;
+    QTMSCallImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_CALL_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsclientsinkimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SINK_IMPL_H
+#define QTMS_CLIENT_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsclientsink.h>
+#include <tmsclientsinkobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSBuffer;
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+// QTMSClientSinkImpl class
+class QTMSClientSinkImpl: public QTMSClientSink, public TMS::TMSClientSinkObserver
+{
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmsclientsink);
+    virtual ~QTMSClientSinkImpl();
+
+    gint AddObserver(TMS::TMSClientSinkObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSClientSinkObserver& obsrvr);
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+    // From TMSClientSinkObserver
+    void ProcessBuffer(const TMS::TMSBuffer* buffer);
+
+private:
+    QTMSClientSinkImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_CLIENT_SINK_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsclientsourceimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_CLIENT_SOURCE_IMPL_H
+#define QTMS_CLIENT_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsclientsource.h>
+#include <tmsclientsourceobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSBuffer;
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+// QTMSClientSourceImpl class
+class QTMSClientSourceImpl: public QTMSClientSource, public TMS::TMSClientSourceObserver
+{
+public:
+
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSClientSourceImpl();
+
+    gint AddObserver(TMS::TMSClientSourceObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSClientSourceObserver& obsrvr);
+
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+    //From TMSClientSourceObserver
+    void FillBuffer(TMS::TMSBuffer& buffer);
+    void BufferProcessed(const TMS::TMSBuffer* buffer, gint reason);
+
+private:
+    QTMSClientSourceImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_CLIENT_SOURCE_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsdtmfimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_DTMF_IMPL_H
+#define QTMS_DTMF_IMPL_H
+
+#include <tms.h>
+#include <tmsdtmfobsrvr.h>
+#include <qtms.h>
+#include <qtmsdtmf.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSDTMF;
+}
+
+namespace QTMS
+{
+
+// QTMSDTMFImpl class
+class QTMSDTMFImpl: public QTMSDTMF, public TMS::TMSDTMFObserver
+{
+public:
+    static gint Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf);
+    virtual ~QTMSDTMFImpl();
+
+    gint AddObserver(TMS::TMSDTMFObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSDTMFObserver& obsrvr);
+
+    //from TMS::TMSDTMFObserver
+    void DTMFEvent(const TMS::TMSDTMF& dtmf, TMS::TMSSignalEvent event);
+
+private:
+    QTMSDTMFImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_DTMF_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsfactoryimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMSFACTORYIMPL_H_
+#define QTMSFACTORYIMPL_H_
+
+#include <e32cmn.h>
+#include <qtms.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFactory;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSCall;
+class QTMSFormat;
+class QTMSEffect;
+class QTMSBuffer;
+class QTMSSource;
+class QTMSSink;
+class QTMSGlobalRouting;
+class QTMSRTPSession;
+class QTMSDTMF;
+class QTMSRingTone;
+class QTMSInbandTone;
+
+// CLASS DECLARATION
+class QTMSFactoryImpl
+{
+public:
+    QTMSFactoryImpl();
+    virtual ~QTMSFactoryImpl();
+
+    gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall, guint ctxid);
+    gint DeleteCall(QTMSCall*& QTMSct);
+    gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag);
+    gint GetSupportedFormats(const QTMSStreamType strmtype, FormatVector& fmtlist);
+    gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& QTMSfmt);
+    gint DeleteFormat(QTMSFormat*& QTMSfmt);
+    gint CreateEffect(QTMSEffectType QTMSeffecttype, QTMSEffect*& QTMSeffect);
+    gint DeleteEffect(QTMSEffect*& QTMSeffect);
+    gint CreateBuffer(QTMSBufferType buffertype, guint size, QTMSBuffer*& QTMSbuffer);
+    gint DeleteBuffer(QTMSBuffer*& QTMSbuffer);
+    gint CreateSource(QTMSSourceType srctype, QTMSSource*& QTMSsrc);
+    gint DeleteSource(QTMSSource*& QTMSsrc);
+    gint CreateSink(QTMSSinkType sinktype, QTMSSink*& QTMSsink);
+    gint DeleteSink(QTMSSink*& QTMSsink);
+    gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting);
+    gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting);
+    gint CreateDTMF(QTMSStreamType streamid, QTMSDTMF*& dtmf);
+    gint DeleteDTMF(QTMSDTMF*& dtmf);
+    gint CreateRingTonePlayer(QTMSRingTone*& rt);
+    gint DeleteRingTonePlayer(QTMSRingTone*& rt);
+    gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone);
+    gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone);
+
+private:
+    TMS::TMSFactory *iFactory;
+};
+
+} //namespace QTMS
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsg711impl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G711_FORMAT_IMPL_H
+#define QTMS_G711_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsg711format.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+// QTMSG711FormatImpl class
+class QTMSG711FormatImpl: public QTMSG711Format
+{
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSG711FormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSG711FormatImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_G711_FORMAT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsg729impl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_G729_FORMAT_IMPL_H
+#define QTMS_G729_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsg729format.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+// QTMSG729FormatImpl class
+class QTMSG729FormatImpl: public QTMSG729Format
+{
+public:
+
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSG729FormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSG729FormatImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_G729_FORMAT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsgaineffectimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GAIN_EFFECT_IMPL_H
+#define QTMS_GAIN_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <tms.h>
+#include <qtmsgaineffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+// QTMSGainEffectImpl class
+class QTMSGainEffectImpl: public QTMSGainEffect, public TMS::TMSEffectObserver
+{
+public:
+    static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol);
+    virtual ~QTMSGainEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    gint GetEffect(TMS::TMSEffect*& tmseffect);
+
+    //From TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect, TMS::TMSSignalEvent event);
+
+private:
+    QTMSGainEffectImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_GAIN_EFFECT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalgaineffectimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+#define QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsglobalgaineffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSEffect;
+
+// QTMSGlobalGainEffectImpl class
+class QTMSGlobalGainEffectImpl: public QTMSGlobalGainEffect, public TMS::TMSEffectObserver
+{
+public:
+    static gint Create(QTMSEffect*& qglobalgain, TMS::TMSEffect*& tmsglobalgain);
+    virtual ~QTMSGlobalGainEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    //from TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect, TMS::TMSSignalEvent event);
+
+private:
+    QTMSGlobalGainEffectImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_GAIN_EFFECT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalroutingimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_ROUTING_IMPL_H
+#define QTMS_GLOBAL_ROUTING_IMPL_H
+
+#include <tms.h>
+#include <qtms.h>
+#include <qtmsglobalrouting.h>
+#include <tmsglobalroutingobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSGlobalRouting;
+}
+
+namespace QTMS
+{
+
+// QTMSGlobalRoutingImpl class
+class QTMSGlobalRoutingImpl: public QTMSGlobalRouting, public TMS::TMSGlobalRoutingObserver
+{
+public:
+
+    static gint Create(QTMSGlobalRouting*& qrouting, TMS::TMSGlobalRouting*& tmsrouting);
+    virtual ~QTMSGlobalRoutingImpl();
+
+    gint AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSGlobalRoutingObserver& obsrvr);
+
+    //from TMSGlobalRoutingObserver
+    void GlobalRoutingEvent(const TMS::TMSGlobalRouting& routing, TMS::TMSSignalEvent event,
+        TMS::TMSAudioOutput output);
+
+private:
+    QTMSGlobalRoutingImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_ROUTING_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsglobalvoleffectimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+#define QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsglobalvoleffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+// FORWARD DECLARATIONS
+class QTMSEffect;
+
+// QTMSGlobalVolEffectImpl class
+class QTMSGlobalVolEffectImpl: public QTMSGlobalVolEffect, public TMS::TMSEffectObserver
+{
+public:
+
+    static gint Create(QTMSEffect*& qglobalvol, TMS::TMSEffect*& tmsglobalvol);
+    virtual ~QTMSGlobalVolEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    //from TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect, TMS::TMSSignalEvent event);
+
+private:
+    QTMSGlobalVolEffectImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsilbcimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_ILBC_FORMAT_IMPL_H
+#define QTMS_ILBC_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmsilbcformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+// QTMSILBCFormatImpl class
+class QTMSILBCFormatImpl: public QTMSILBCFormat
+{
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSILBCFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& fmttype);
+
+private:
+    QTMSILBCFormatImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_ILBC_FORMAT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsinbandtoneimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_INBAND_IMPL_H
+#define QTMS_INBAND_IMPL_H
+
+#include <tmsinbandtoneobsrvr.h>
+#include <qtms.h>
+#include <qtmsinbandtone.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSInbandTone;
+}
+
+namespace QTMS
+{
+
+// QTMSInbandImpl class
+class QTMSInbandToneImpl: public QTMSInbandTone, public TMS::TMSInbandToneObserver
+{
+public:
+    static gint Create(QTMSInbandTone*& qinband, TMS::TMSInbandTone*& tmsinband);
+    virtual ~QTMSInbandToneImpl();
+
+    gint AddObserver(TMS::TMSInbandToneObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSInbandToneObserver& obsrvr);
+
+    //from TMS::TMSInbandToneObserver
+    void InbandToneEvent(const TMS::TMSInbandTone& inbandtone, TMS::TMSSignalEvent event);
+
+private:
+    QTMSInbandToneImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_DTMF_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmembuffer.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MEM_BUFFER_H
+#define QTMS_MEM_BUFFER_H
+
+#include <qtmsbuffer.h>
+
+// FORWARD DECLARATION
+namespace TMS
+{
+class TMSBuffer;
+}
+
+namespace QTMS
+{
+
+// QTMSMemBuffer class
+class QTMSMemBuffer: public QTMSBuffer
+{
+public:
+    virtual ~QTMSMemBuffer();
+
+    /**
+     * Factory methods
+     */
+    static gint Create(QTMSBuffer*& buffer, TMS::TMSBuffer*& tmsbuffer);
+
+    /**
+     * Return buffer type.
+     *
+     * @param  buftype
+     *      Type of the buffer object (QTMS_BUFFER_MEMORY).
+     *
+     * @return
+     *      QTMS_RESULT_SUCCESS if the operation was successful.
+     *
+     */
+    virtual gint GetType(QTMSBufferType& buftype);
+
+    /**
+     Gets the timestamp on the Buffer so that the framework can
+     determine the time at which this buffer has to be rendered
+     by the output device sink.
+
+     @param ts
+     timestamp in microseconds
+     */
+    virtual gint GetTimeStamp(guint64& ts);
+
+    /**
+     Sets the timestamp on the Buffer so that the framework can
+     determine the time at which this buffer has to be rendered
+     by the output device sink.
+
+     @param ts
+     timestamp in milliseconds
+     */
+    virtual gint SetTimeStamp(const guint64 ts);
+
+    /**
+     Gets the size of data in the buffer specified by the client.
+
+     @param size
+     size of data in bytes
+     */
+    virtual gint GetDataSize(guint& size);
+
+    /**
+     Sets the size of data in the buffer after the client
+     fill it.
+
+     @param size
+     size of data in bytes
+     */
+    virtual gint SetDataSize(const guint size);
+
+    /**
+     Gets the pointer to the memory location associated with this
+     buffer where the data is stored.
+
+     @param bufptr
+     ptr to the data stored in the buffer.
+     */
+    virtual gint GetDataPtr(guint8*& bufptr);
+
+private:
+    QTMSMemBuffer();
+    gint PostConstruct(guint size, TMS::TMSBuffer*& tmsbuffer);
+
+protected:
+    TMS::TMSBuffer* iTmsBuffer;
+
+private:
+    guint iBufferSize;
+    guint64 iTimeStamp;
+    guint8* iDataPtr;
+    gboolean iOwnsBuffer;
+};
+
+} //namespace QTMS
+
+#endif //QTMS_MEM_BUFFER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmicsourceimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MIC_SOURCE_IMPL_H
+#define QTMS_MIC_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmicsource.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+// QTMSMicSourceImpl class
+class QTMSMicSourceImpl: public QTMSMicSource
+{
+public:
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSMicSourceImpl();
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+private:
+    QTMSMicSourceImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_MIC_SOURCE_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmodemsinkimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SINK_IMPL_H
+#define QTMS_MODEM_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmodemsink.h>
+#include <qtmssink.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+// QTMSModemSinkImpl class
+class QTMSModemSinkImpl: public QTMSModemSink
+{
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink);
+    virtual ~QTMSModemSinkImpl();
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+private:
+    QTMSModemSinkImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_MODEM_SINK_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsmodemsourceimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_MODEM_SOURCE_IMPL_H
+#define QTMS_MODEM_SOURCE_IMPL_H
+
+#include <qtms.h>
+#include <qtmsmodemsource.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSource;
+}
+
+namespace QTMS
+{
+
+// QTMSModemSourceImpl class
+class QTMSModemSourceImpl: public QTMSModemSource
+{
+public:
+    static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource);
+    virtual ~QTMSModemSourceImpl();
+
+    gint GetSource(TMS::TMSSource*& tmssource);
+
+private:
+    QTMSModemSourceImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_MODEM_SOURCE_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmspcmimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_PCM_FORMAT_IMPL_H
+#define QTMS_PCM_FORMAT_IMPL_H
+
+#include <qtms.h>
+#include <qtmspcmformat.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSFormat;
+}
+
+namespace QTMS
+{
+
+// QTMSPCMFormatImpl class
+class QTMSPCMFormatImpl: public QTMSPCMFormat
+{
+public:
+    static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat);
+    virtual ~QTMSPCMFormatImpl();
+
+    gint GetFormat(TMS::TMSFormat*& fmt);
+
+    // From QTMSFormat
+    gint GetType(QTMSFormatType& Formattype);
+
+private:
+    QTMSPCMFormatImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_PCM_FORMAT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsringtoneimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMSRINGTONEBODYIMPL_H
+#define QTMSRINGTONEBODYIMPL_H
+
+#include <tms.h>
+#include <tmsringtoneobsrvr.h>
+#include <qtms.h>
+#include <qtmsringtone.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSRingTone;
+}
+
+namespace QTMS
+{
+
+// QTMSRingToneImpl class
+class QTMSRingToneImpl: public QTMSRingTone, public TMS::TMSRingToneObserver
+{
+public:
+    static gint Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt);
+    virtual ~QTMSRingToneImpl();
+
+    gint AddObserver(TMS::TMSRingToneObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSRingToneObserver& obsrvr);
+
+    //from TMS::TMSRingToneObserver
+    void RingtoneEvent(const TMS::TMSRingTone& rt, TMS::TMSSignalEvent event);
+
+private:
+    QTMSRingToneImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif //QTMSRINGTONEBODYIMPL_H
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmssinkimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SINK_IMPL_H
+#define QTMS_SINK_IMPL_H
+
+#include <qtms.h>
+
+namespace QTMS 
+{
+
+// FORWARD DECLARATIONS
+class QTMSSink;
+
+// TMSSinkImpl class
+class QTMSSinkImpl
+{
+public:
+    static gint Create(QTMSSinkType sinktype, QTMSSink*& tmssink);
+    static gint Delete(QTMSSink*& tmssink);
+};
+
+} //namespace QTMS
+
+#endif // QTMS_SINK_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmssourceimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SOURCE_IMPL_H
+#define QTMS_SOURCE_IMPL_H
+
+#include <qtms.h>
+
+namespace QTMS {
+
+// FORWARD DECLARATIONS
+class QTMSSource;
+
+// TMSSourceImpl class
+class QTMSSourceImpl
+{
+public:
+    static gint Create(QTMSSourceType sourcetype, QTMSSource*& tmssource);
+    static gint Delete(QTMSSource*& tmssource);
+};
+
+} //namespace QTMS
+
+#endif // QTMS_SOURCE_IMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsspeakersinkimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_SPEAKER_SINK_IMPL_H
+#define QTMS_SPEAKER_SINK_IMPL_H
+
+#include <qtms.h>
+#include <qtmsspeakersink.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSSink;
+}
+
+namespace QTMS
+{
+
+// QTMSSpeakerSinkImpl class
+class QTMSSpeakerSinkImpl: public QTMSSpeakerSink
+{
+public:
+    static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink);
+    virtual ~QTMSSpeakerSinkImpl();
+
+    gint GetSink(TMS::TMSSink*& tmssink);
+
+private:
+    QTMSSpeakerSinkImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_SPEAKER_SINK_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsstreamimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_STREAM_IMPL_H
+#define QTMS_STREAM_IMPL_H
+
+#include <qtms.h>
+#include <qtmsstream.h>
+#include <tmsstreamobsrvr.h>
+#include <QObject>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSStream;
+}
+
+namespace QTMS
+{
+
+// QTMSStreamImpl class
+class QTMSStreamImpl: public QTMSStream, public TMS::TMSStreamObserver
+{
+public:
+    static gint Create(QTMSCallType callType, QTMSStreamType stype, QTMSStream*& qstrm,
+        TMS::TMSStream*& tmsstrm);
+
+    virtual ~QTMSStreamImpl();
+
+    // From QTMSStreamBody
+    gint AddObserver(TMS::TMSStreamObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSStreamObserver& obsrvr);
+
+    // From TMSStreamObserver
+    void TMSStreamEvent(const TMS::TMSStream& stream, TMS::TMSSignalEvent event);
+
+protected:
+    QTMSStreamImpl();
+
+    gint PostConstruct(QTMSCallType callType, QTMSStreamType stype, QTMSStream& parent);
+
+    gint CreateQueue(const gint aNumSlots);
+    void ReceiveMsgQHandlerEventsL();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_STREAM_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmsvolumeeffectimpl.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef QTMS_VOLUME_EFFECT_IMPL_H
+#define QTMS_VOLUME_EFFECT_IMPL_H
+
+#include <qtms.h>
+#include <tms.h>
+#include <qtmsvolumeeffect.h>
+#include <tmseffectobsrvr.h>
+
+// FORWARD DECLARATIONS
+namespace TMS
+{
+class TMSEffect;
+}
+
+namespace QTMS
+{
+
+// QTMSVolumeEffectImpl class
+class QTMSVolumeEffectImpl: public QTMSVolumeEffect, public TMS::TMSEffectObserver
+{
+public:
+    static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol);
+    virtual ~QTMSVolumeEffectImpl();
+
+    gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data);
+    gint RemoveObserver(TMS::TMSEffectObserver& obsrvr);
+
+    gint GetEffect(TMS::TMSEffect*& tmseffect);
+
+    //From TMSEffectObserver
+    void EffectsEvent(const TMS::TMSEffect& tmseffect, TMS::TMSSignalEvent event);
+
+private:
+    QTMSVolumeEffectImpl();
+    gint PostConstruct();
+};
+
+} //namespace QTMS
+
+#endif // QTMS_VOLUME_EFFECT_IMPL_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/qtmswrapperexport.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * 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 the License "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:
+ *
+ */
+
+#ifndef QTMS_WRAPPER_EXPORT_H_
+#define QTMS_WRAPPER_EXPORT_H_
+
+// System includes
+#include <qglobal.h>
+
+#ifdef BUILD_TMS_WRAPPER_DLL
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // QTMS_WRAPPER_EXPORT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/inc/tmsutility.h	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#ifndef __TMSUTILITY_H__
+#define __TMSUTILITY_H__
+
+#include <e32std.h>
+#include <tms.h>
+#include <TelephonyAudioRouting.h>
+#ifdef _DEBUG
+#include <e32debug.h>
+#endif
+
+namespace TMS {
+
+// DEBUG TRACE DEFINITIONS
+#ifdef _DEBUG
+#define TRACE_PRN_FN_ENT        RDebug::Printf("%s>ENTER", __PRETTY_FUNCTION__)
+#define TRACE_PRN_FN_EXT        RDebug::Printf("%s>EXIT", __PRETTY_FUNCTION__)
+#define TRACE_PRN_IF_ERR(err) if (err != KErrNone) RDebug::Printf( "%s>BREAK[%d]", __PRETTY_FUNCTION__, err )
+
+#define TRACE_PRN_0(str)              RDebug::Print(str, this)
+#define TRACE_PRN_1(str, val1)        RDebug::Print(str, this, val1)
+#define TRACE_PRN_2(str, val1, val2)  RDebug::Print(str, this, val1, val2)
+
+#define TRACE_PRN_N(str)              RDebug::Print(str)
+#define TRACE_PRN_N1(str, val1)       RDebug::Print(str, val1)
+#define TRACE_PRN_N2(str, val1, val2) RDebug::Print(str, val1, val2)
+#else
+#define TRACE_PRN_FN_ENT
+#define TRACE_PRN_FN_EXT
+#define TRACE_PRN_IF_ERR(err)
+#define TRACE_PRN_0(str)
+#define TRACE_PRN_1(str, val1)
+#define TRACE_PRN_2(str, val1, val2)
+#define TRACE_PRN_N(str)
+#define TRACE_PRN_N1(str, val1)
+#define TRACE_PRN_N2(str, val1, val2)
+#endif //_DEBUG
+
+
+// MACRO DEFINITIONS
+#define RET_ERR_IF_ERR(err) if ( err != 0) return err;
+#define RET_REASON_IF_ERR(s) if(s!=0) return s
+
+#define TMSRESULT(result) TMSUtility::TMSResult(result)
+#define TOTMSOUTPUT(output) TMSUtility::ToTMSOutput(output)
+#define TOTAROUTPUT(output) TMSUtility::ToTAROutput(output)
+#define TOFOURCC(format) TMSUtility::ToFourCC(format)
+#define TOTMSFORMAT(fourcc) TMSUtility::FourCCToTMSFormat(fourcc)
+
+_LIT(KQTMSPanic, "QTMS Panic!" );
+#define PANIC(reason) User::Panic(KQTMSPanic, reason)
+
+// TMSUtility class
+class TMSUtility
+    {
+public:
+    IMPORT_C static gint TMSResult(const gint error);
+    IMPORT_C static gint EtelToTMSResult(const gint error);
+    IMPORT_C static TMSAudioOutput ToTMSOutput(
+            CTelephonyAudioRouting::TAudioOutput taroutput);
+    IMPORT_C static CTelephonyAudioRouting::TAudioOutput ToTAROutput(
+            TMSAudioOutput output);
+    IMPORT_C static TUint32 ToFourCC(TMSFormatType frmtType);
+    IMPORT_C static TMSFormatType FourCCToTMSFormat(TUint32 fourcc);
+    };
+
+} //namespace TMS
+
+#endif //__TMSUTILITY_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/qtmsapi.pro	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,144 @@
+# Copyright (c) 2010 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:  QTMS API project description
+#
+
+TEMPLATE = lib
+TARGET   = qtmsapi
+CONFIG  += dll
+DEFINES += BUILD_TMS_WRAPPER_DLL
+
+QT = core
+CONFIG -= gui
+
+DEFINES += SYMBIAN
+TARGET.CAPABILITY = All -tcb
+TARGET.EPOCALLOWDLLDATA	= 1
+TARGET.UID2 = 0x10009D8D
+TARGET.UID3 = 0x10207CA5
+
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+                             "rom/qtms.iby CORE_MW_LAYER_IBY_EXPORT_PATH(qtms.iby)" \
+                             "data/qtmsapi_stub.sis /epoc32/data/z/system/install/qtmsapi_stub.sis"
+
+DEPENDPATH += . inc
+INCLUDEPATH += . \
+               ./inc
+
+defBlock = \
+           "$${LITERAL_HASH}if defined(EABI)" \
+           "DEFFILE  eabi/qtms.def" \
+           "$${LITERAL_HASH}else" \
+           "DEFFILE  bwins/qtms.def" \
+           "$${LITERAL_HASH}endif"
+MMP_RULES += defBlock
+
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \
+               $$OS_LAYER_LIBC_SYSTEMINCLUDE \
+               $$OS_LAYER_GLIB_SYSTEMINCLUDE
+
+LIBS +=	-ltmsfactory \
+        -ltmsapi \
+        -ltmsutility \
+        -llibglib \
+        -llibgobject \
+        -llibgmodule \
+        -llibstdcpp
+
+# $$_PRO_FILE_PWD_ points to the directory of the pro file
+MOC_DIR = ./tmp
+
+INCLUDEPATH += . \
+               . inc \
+               ../ \
+               ../mmappfw_plat/qt_telephony_multimedia_service_api/inc/
+
+DEPENDPATH  += $$INCLUDEPATH src
+
+# Headers
+HEADERS += qtmsfactory.h \
+           qtmscall.h \
+           qtmsstream.h \
+           qtmsbuffer.h \
+           qtmsclientsource.h \
+           qtmsclientsink.h \
+           qtmsvolumeeffect.h \
+           qtmsgaineffect.h \
+           qtmsglobalgaineffect.h \
+           qtmsglobalvoleffect.h \
+           qtmsglobalrouting.h \
+           qtmsamrformat.h \
+           qtmspcmformat.h \
+           qtmsilbcformat.h \
+           qtmsg711format.h \
+           qtmsg729format.h \
+           qtmsformat.h \
+           qtmsmodemsink.h \
+           qtmsspeakersink.h \
+           qtmsmodemsource.h \
+           qtmsmicsource.h \
+           qtmsringtone.h \
+           qtmsdtmf.h \
+           qtmsinbandtone.h
+
+# Source
+SOURCES += qtmsfactory.cpp \
+           qtmsfactoryimpl.cpp \
+           qtmsbufferimpl.cpp \
+           qtmsmembuffer.cpp \
+           qtmscall.cpp \
+           qtmscallimpl.cpp \
+           qtmsstream.cpp \
+           qtmsstreamimpl.cpp \
+           qtmsclientsource.cpp \
+           qtmsclientsourceimpl.cpp \
+           qtmsclientsink.cpp \
+           qtmsclientsinkimpl.cpp \
+           qtmsvolumeeffect.cpp \
+           qtmsvolumeeffectimpl.cpp \
+           qtmsgaineffect.cpp \
+           qtmsgaineffectimpl.cpp \
+           qtmsglobalgaineffect.cpp \
+           qtmsglobalgaineffectimpl.cpp \
+           qtmsglobalvoleffect.cpp \
+           qtmsglobalvoleffectimpl.cpp \
+           qtmsglobalrouting.cpp \
+           qtmsglobalroutingimpl.cpp \
+           qtmspcm.cpp \
+           qtmspcmimpl.cpp \
+           qtmsilbc.cpp \
+           qtmsilbcimpl.cpp \
+           qtmsamr.cpp \
+           qtmsamrimpl.cpp \
+           qtmsg711.cpp \
+           qtmsg711impl.cpp \
+           qtmsg729.cpp \
+           qtmsg729impl.cpp \
+           qtmsformat.cpp \
+           qtmsmodemsink.cpp \
+           qtmsmodemsinkimpl.cpp \
+           qtmsspeakersink.cpp \
+           qtmsspeakersinkimpl.cpp \
+           qtmsmodemsource.cpp \
+           qtmsmodemsourceimpl.cpp \
+           qtmsmicsource.cpp \
+           qtmsmicsourceimpl.cpp \
+           qtmsringtone.cpp \
+           qtmsringtoneimpl.cpp \
+           qtmsdtmf.cpp \
+           qtmsdtmfimpl.cpp \
+           qtmsinbandtone.cpp \
+           qtmsinbandtoneimpl.cpp
+
+SYMBIAN_PLATFORMS = DEFAULT
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/rom/qtms.iby	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: Iby file for QTMS
+*
+*/
+
+#ifndef QTMS_IBY
+#define QTMS_IBY
+
+// Use standard macros
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef FF_TMS
+file=ABI_DIR\BUILD_DIR\qtmsapi.dll     SHARED_LIB_DIR\qtmsapi.dll
+
+//QTMS_Stub
+data=ZSYSTEM/install/qtmsapi_stub.sis  System/Install/qtmsapi_stub.sis
+
+#endif //FF_TMS
+#endif //QTMS_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsamr.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsamrformat.h>
+
+using namespace QTMS;
+
+QTMSAMRFormat::QTMSAMRFormat()
+{
+}
+
+QTMSAMRFormat::~QTMSAMRFormat()
+{
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsamrimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsamrformat.h>
+#include "tmsutility.h"
+#include "qtmsamrimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSAMRFormatImpl::QTMSAMRFormatImpl()
+{
+}
+
+QTMSAMRFormatImpl::~QTMSAMRFormatImpl()
+{
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+}
+
+gint QTMSAMRFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+{
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSAMRFormatImpl* self = new QTMSAMRFormatImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != TMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iFormat = tmsformat;
+    }
+    qformat = self;
+    return ret;
+}
+
+gint QTMSAMRFormatImpl::PostConstruct()
+{
+    gint ret(TMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSAMRFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat) {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+gint QTMSAMRFormatImpl::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsbufferimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010 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: Telephony Multimedia Service
+ *
+ */
+
+#include <qtms.h>
+#include "tmsutility.h"
+#include "qtmsmembuffer.h"
+#include "qtmsbufferimpl.h"
+
+using namespace QTMS;
+
+gint QTMSBufferImpl::Create(QTMSBufferType buffertype, QTMSBuffer*& buffer,
+    TMS::TMSBuffer*& tmsbuffer)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+    switch (buffertype) {
+    case QTMS_BUFFER_MEMORY:
+        ret = QTMSMemBuffer::Create(buffer, tmsbuffer);
+        break;
+    default:
+        ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+        break;
+    }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSBufferImpl::Delete(QTMSBuffer*& buffer)
+{
+    gint ret(QTMS_RESULT_INVALID_ARGUMENT);
+    TRACE_PRN_FN_ENT;
+    QTMSBufferType buffertype;
+    ret = buffer->GetType(buffertype);
+    switch (buffertype) {
+    case QTMS_BUFFER_MEMORY:
+        delete (static_cast<QTMSMemBuffer*> (buffer));
+        buffer = NULL;
+        ret = QTMS_RESULT_SUCCESS;
+        break;
+    default:
+        ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+        break;
+    }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmscall.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmscall.h>
+#include <qtmscall.h>
+#include <tmsstream.h>
+#include "qtmscallimpl.h"
+#include "qtmsstreamimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSCall::QTMSCall() :
+    iTmsCall(NULL)
+{
+}
+
+QTMSCall::~QTMSCall()
+{
+}
+
+QTMSCallType QTMSCall::GetCallType()
+{
+    QTMSCallType calltype(-1);
+    if (iTmsCall) {
+        calltype = iTmsCall->GetCallType();
+    }
+    return calltype;
+}
+
+gint QTMSCall::GetCallContextId(guint& ctxid)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iTmsCall) {
+        status = iTmsCall->GetCallContextId(ctxid);
+    }
+    return status;
+}
+
+gint QTMSCall::CreateStream(const QTMSStreamType type, QTMSStream*& qstrm)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMSStream* tmsstrm(NULL);
+    if (iTmsCall) {
+        status = iTmsCall->CreateStream(type, tmsstrm);
+    }
+
+    if (status == TMS_RESULT_SUCCESS) {
+        QTMSCallType calltype = iTmsCall->GetCallType();
+        switch (type) {
+        case TMS_STREAM_UPLINK:
+        case TMS_STREAM_DOWNLINK:
+            status = QTMSStreamImpl::Create(calltype, type, qstrm, tmsstrm);
+            break;
+        default:
+            status = QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED;
+            break;
+        }
+    }
+    return status;
+}
+
+gint QTMSCall::DeleteStream(QTMSStream*& strm)
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    delete strm;
+    strm = NULL;
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmscallimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmscall.h>
+#include <qtms.h>
+#include "qtmscallimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSCallImpl::QTMSCallImpl()
+{
+}
+
+QTMSCallImpl::~QTMSCallImpl()
+{
+}
+
+gint QTMSCallImpl::Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSCallImpl* self = new QTMSCallImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iTmsCall = tmscall;
+    }
+    qtmscall = self;
+    return ret;
+}
+
+gint QTMSCallImpl::PostConstruct()
+    {
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsink.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsclientsink.h>
+#include <tmsbuffer.h>
+#include <qtmsclientsink.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSink::QTMSClientSink() :
+    iSink(NULL)
+{
+}
+
+QTMSClientSink::~QTMSClientSink()
+{
+    delete iSink;
+}
+
+gint QTMSClientSink::BufferProcessed(QTMSBuffer* buffer)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        TMSBuffer* buf(reinterpret_cast<TMSBuffer*> (buffer));
+        status = static_cast<TMSClientSink*> (iSink)->BufferProcessed(buf);
+    }
+    return status;
+}
+
+gint QTMSClientSink::GetType(QTMSSinkType& sinktype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        status = static_cast<TMSClientSink*> (iSink)->GetType(sinktype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsinkimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsbuffer.h>
+#include <tmsclientsink.h>
+#include <qtmsbuffer.h>
+#include "qtmsclientsinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSinkImpl::QTMSClientSinkImpl()
+{
+}
+
+QTMSClientSinkImpl::~QTMSClientSinkImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSClientSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSClientSinkImpl* self = new QTMSClientSinkImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSink = tmssink;
+        self->AddObserver(*self, NULL);
+    }
+    qsink = self;
+    return ret;
+}
+
+gint QTMSClientSinkImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSClientSinkImpl::AddObserver(TMS::TMSClientSinkObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    if (iSink) {
+        ret = static_cast<TMSClientSink*> (iSink)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSClientSinkImpl::RemoveObserver(TMS::TMSClientSinkObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        ret = static_cast<TMSClientSink*> (iSink)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+gint QTMSClientSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSink) {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+void QTMSClientSinkImpl::ProcessBuffer(const TMS::TMSBuffer* buffer)
+{
+    TMSBuffer* buf(const_cast<TMSBuffer*> (buffer));
+    QTMSBuffer* qtbuf(reinterpret_cast<QTMSBuffer*> (buf));
+    emit QTMSClientSink::ProcessBuffer(qtbuf);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsource.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsclientsource.h>
+#include <tmsbuffer.h>
+#include <qtmsclientsource.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSource::QTMSClientSource() :
+    iSource(NULL)
+{
+}
+
+QTMSClientSource::~QTMSClientSource()
+{
+    delete iSource;
+}
+
+gint QTMSClientSource::SetEnqueueMode(const gboolean enable)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        status = static_cast<TMSClientSource*> (iSource)->SetEnqueueMode(enable);
+    }
+    return status;
+}
+
+gint QTMSClientSource::GetEnqueueMode(gboolean& enable)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        status = static_cast<TMSClientSource*> (iSource)->GetEnqueueMode(enable);
+    }
+    return status;
+}
+
+gint QTMSClientSource::Flush()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        status = static_cast<TMSClientSource*> (iSource)->Flush();
+    }
+    return status;
+}
+
+gint QTMSClientSource::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        status = static_cast<TMSClientSource*> (iSource)->GetType(sourcetype);
+    }
+    return status;
+}
+
+gint QTMSClientSource::BufferFilled(QTMSBuffer& buffer)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        TMSBuffer& buf(reinterpret_cast<TMSBuffer&> (buffer));
+        status = static_cast<TMSClientSource*> (iSource)->BufferFilled(buf);
+    }
+    return status;
+}
+
+// Push mode
+gint QTMSClientSource::ProcessBuffer(QTMSBuffer* buffer)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        TMSBuffer* buf(reinterpret_cast<TMSBuffer*> (buffer));
+        status = static_cast<TMSClientSource*> (iSource)->ProcessBuffer(buf);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsclientsourceimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <qtmsbuffer.h>
+#include <tmsbuffer.h>
+#include <tmsclientsource.h>
+#include "qtmsclientsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSClientSourceImpl::QTMSClientSourceImpl()
+{
+}
+
+QTMSClientSourceImpl::~QTMSClientSourceImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSClientSourceImpl::Create(QTMSSource*& qsource, TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSClientSourceImpl* self = new QTMSClientSourceImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSource = tmssource;
+        self->AddObserver(*self, NULL);
+    }
+    qsource = self;
+    return ret;
+}
+
+gint QTMSClientSourceImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSClientSourceImpl::AddObserver(TMS::TMSClientSourceObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        ret = static_cast<TMSClientSource*> (iSource)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSClientSourceImpl::RemoveObserver(TMS::TMSClientSourceObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        ret = static_cast<TMSClientSource*> (iSource)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+gint QTMSClientSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSource) {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+void QTMSClientSourceImpl::FillBuffer(TMS::TMSBuffer& buffer)
+{
+    emit QTMSClientSource::FillBuffer(reinterpret_cast<QTMSBuffer&> (buffer));
+}
+
+void QTMSClientSourceImpl::BufferProcessed(const TMS::TMSBuffer* buffer, gint reason)
+{
+    TMSBuffer* buf(const_cast<TMSBuffer*> (buffer));
+    emit QTMSClientSource::BufferProcessed(reinterpret_cast<QTMSBuffer*> (buf), reason);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsdtmf.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsdtmf.h>
+#include <qtmsdtmf.h>
+#include "qtmsdtmfimpl.h"
+//#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+
+QTMSDTMF::QTMSDTMF(void) :
+    iDtmf(NULL)
+{
+}
+
+QTMSDTMF::~QTMSDTMF(void)
+{
+    delete iDtmf;
+}
+
+gint QTMSDTMF::Start()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf) {
+        status = iDtmf->Start();
+    }
+    return status;
+}
+
+gint QTMSDTMF::Stop()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf) {
+        status = iDtmf->Stop();
+    }
+    return status;
+}
+
+gint QTMSDTMF::SetTone(GString* string)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf) {
+        status = iDtmf->SetTone(string);
+    }
+    return status;
+}
+
+gint QTMSDTMF::ContinueDTMFStringSending(gboolean aContinue)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iDtmf) {
+        status = iDtmf->ContinueDTMFStringSending(aContinue);
+    }
+    return status;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsdtmfimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsdtmf.h>
+#include "tmsutility.h"
+#include "qtmsdtmfimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSDTMFImpl::QTMSDTMFImpl()
+{
+}
+
+QTMSDTMFImpl::~QTMSDTMFImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSDTMFImpl::Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf)
+{
+    gint ret(TMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSDTMFImpl* self = new QTMSDTMFImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iDtmf = tmsdtmf;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qdtmf = self;
+    return ret;
+}
+
+gint QTMSDTMFImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSDTMFImpl::AddObserver(TMS::TMSDTMFObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iDtmf) {
+        ret = iDtmf->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSDTMFImpl::RemoveObserver(TMS::TMSDTMFObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iDtmf) {
+        ret = iDtmf->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSDTMFImpl::DTMFEvent(const TMS::TMSDTMF& /*dtmf*/, TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSDTMF::DTMFEvent(static_cast<QTMSDTMF&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmseffect.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include "qtmseffectimpl.h"
+#include "qtmseffect.h"
+#include "qtmswrapperexport.h"
+
+
+void QTMSEffect::Construct(QTMSEffectImpl* impl)
+{
+    QTMSeffectimpl = impl;
+}
+
+QTMSEffect::QTMSEffect(void)
+{
+	
+}
+
+ QTMSEffect::~QTMSEffect(void)
+{
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsfactory.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,240 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tms.h>
+#include <QObject>
+#include <qtmsfactory.h>
+#include "qtmswrapperexport.h"
+#include "qtmsfactoryimpl.h"
+
+using namespace QTMS;
+
+QTMSFactory::QTMSFactory()
+{
+    impl = new QTMSFactoryImpl();
+}
+
+QTMSFactory::~QTMSFactory()
+{
+    delete impl;
+}
+
+gint QTMSFactory::CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& /*ver*/)
+{
+    QTMSFactory* self = new QTMSFactory();
+    tmsfactory = self;
+    return QTMS_RESULT_SUCCESS;
+}
+
+gint QTMSFactory::CreateCall(QTMSCallType ctype, QTMSCall*& tmscall, guint ctxid)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateCall(ctype, tmscall, ctxid);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteCall(QTMSCall*& tmscall)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteCall(tmscall);
+    }
+    return status;
+}
+
+gint QTMSFactory::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->IsCallTypeSupported(ctype, flag);
+    }
+    return status;
+}
+
+gint QTMSFactory::GetSupportedFormats(const QTMSStreamType strmtype, FormatVector& fmtlist)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->GetSupportedFormats(strmtype, fmtlist);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateFormat(QTMSFormatType qfmttype, QTMSFormat*& qfmt)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateFormat(qfmttype, qfmt);
+    }
+    return status;
+
+}
+
+gint QTMSFactory::DeleteFormat(QTMSFormat*& qfmt)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteFormat(qfmt);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateEffect(QTMSEffectType tmseffecttype, QTMSEffect*& tmseffect)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateEffect(tmseffecttype, tmseffect);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteEffect(QTMSEffect*& qtmseffect)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        impl->DeleteEffect(qtmseffect);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateBuffer(QTMSBufferType buffertype, guint size, QTMSBuffer*& qbuffer)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateBuffer(buffertype, size, qbuffer);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteBuffer(QTMSBuffer*& qbuffer)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteBuffer(qbuffer);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateSource(srctype, qtmssrc);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteSource(QTMSSource*& qtmssrc)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteSource(qtmssrc);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateSink(sinktype, qtmssink);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteSink(QTMSSink*& qtmssink)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteSink(qtmssink);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateGlobalRouting(QTMSGlobalRouting*& globalrouting)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateGlobalRouting(globalrouting);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteGlobalRouting(QTMSGlobalRouting*& globrouting)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteGlobalRouting(globrouting);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateDTMF(streamtype, dtmf);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteDTMF(QTMSDTMF*& dtmf)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteDTMF(dtmf);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateRingTonePlayer(QTMSRingTone*& rt)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateRingTonePlayer(rt);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteRingTonePlayer(QTMSRingTone*& rt)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteRingTonePlayer(rt);
+    }
+    return status;
+}
+
+gint QTMSFactory::CreateInbandTonePlayer(QTMSInbandTone*& inbandtone)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->CreateInbandTonePlayer(inbandtone);
+    }
+    return status;
+}
+
+gint QTMSFactory::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (impl) {
+        status = impl->DeleteInbandTonePlayer(inbandtone);
+    }
+    return status;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsfactoryimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,570 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tms.h>
+#include <tmsfactory.h>
+#include <tmsformat.h>
+#include <qtms.h>
+#include <qtmscall.h>
+#include <qtmsformat.h>
+#include <qtmseffect.h>
+#include <qtmsbuffer.h>
+#include <qtmssource.h>
+#include <qtmssink.h>
+#include <qtmsringtone.h>
+#include <qtmsdtmf.h>
+#include <qtmsinbandtone.h>
+#include "tmsutility.h"
+#include "qtmscallimpl.h"
+#include "qtmsglobalroutingimpl.h"
+#include "qtmsglobalvoleffectimpl.h"
+#include "qtmsglobalgaineffectimpl.h"
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmsgaineffectimpl.h"
+#include "qtmsclientsinkimpl.h"
+#include "qtmsmodemsinkimpl.h"
+#include "qtmsspeakersinkimpl.h"
+#include "qtmsclientsourceimpl.h"
+#include "qtmsmodemsourceimpl.h"
+#include "qtmsmicsourceimpl.h"
+#include "qtmsringtoneimpl.h"
+#include "qtmsdtmfimpl.h"
+#include "qtmsinbandtoneimpl.h"
+#include "qtmsfactoryimpl.h"
+#include "qtmspcmimpl.h"
+#include "qtmsamrimpl.h"
+#include "qtmsg711impl.h"
+#include "qtmsg729impl.h"
+#include "qtmsilbcimpl.h"
+#include "qtmsbufferimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSFactoryImpl::QTMSFactoryImpl()
+{
+    TRACE_PRN_FN_ENT;
+    TMSVer* ver = NULL;
+    TMSFactory::CreateFactory(iFactory, *ver);
+    TRACE_PRN_FN_EXT;
+}
+
+QTMSFactoryImpl::~QTMSFactoryImpl()
+{
+    TRACE_PRN_FN_ENT;
+    delete iFactory;
+    TRACE_PRN_FN_EXT;
+}
+
+gint QTMSFactoryImpl::CreateCall(QTMSCallType ctype, QTMSCall*& qtmscall, guint /*ctxid*/)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMSCall* tmscall(NULL);
+    if (iFactory) {
+        ret = iFactory->CreateCall((TMSCallType) ctype, tmscall);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            ret = QTMSCallImpl::Create(qtmscall, tmscall);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteCall(QTMSCall*& qtmscall)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete qtmscall;
+    qtmscall = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    switch (ctype) {
+    case QTMS_CALL_CS:
+    case QTMS_CALL_IP:
+        flag = ETrue;
+        break;
+    case QTMS_CALL_ECS: //from TB 10.1
+    default:
+        flag = EFalse;
+        break;
+    }
+    return ret;
+}
+
+gint QTMSFactoryImpl::GetSupportedFormats(const QTMSStreamType strmtype, FormatVector& fmtlist)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    TMS::FormatVector tmsfmtlist;
+    if (iFactory) {
+        ret = iFactory->GetSupportedFormats((TMSStreamType) strmtype, tmsfmtlist);
+    }
+
+    std::vector<TMSFormat*>::iterator itCodecs = tmsfmtlist.begin();
+    TMSFormatType fmttype;
+    for (; itCodecs < tmsfmtlist.end(); itCodecs++) {
+        (*itCodecs)->GetType(fmttype);
+        QTMSFormat* qtmsfmt(NULL);
+        switch (fmttype) {
+        case QTMS_FORMAT_PCM:
+            ret = QTMSPCMFormatImpl::Create(qtmsfmt, *itCodecs);
+            break;
+        case QTMS_FORMAT_AMR:
+            ret = QTMSAMRFormatImpl::Create(qtmsfmt, *itCodecs);
+            break;
+        case QTMS_FORMAT_G711:
+            ret = QTMSG711FormatImpl::Create(qtmsfmt, *itCodecs);
+            break;
+        case QTMS_FORMAT_G729:
+            ret = QTMSG729FormatImpl::Create(qtmsfmt, *itCodecs);
+            break;
+        case QTMS_FORMAT_ILBC:
+            ret = QTMSILBCFormatImpl::Create(qtmsfmt, *itCodecs);
+            break;
+        default:
+            break;
+        }
+
+        if (qtmsfmt) {
+            fmtlist.push_back(qtmsfmt);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateFormat(QTMSFormatType fmttype, QTMSFormat*& qtmsfmt)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    TMSFormat* tmsformat(NULL);
+
+    if (iFactory) {
+        ret = iFactory->CreateFormat((TMSFormatType) fmttype, tmsformat);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            switch (fmttype) {
+            case QTMS_FORMAT_PCM:
+                ret = QTMSPCMFormatImpl::Create(qtmsfmt, tmsformat);
+                break;
+            case QTMS_FORMAT_AMR:
+                ret = QTMSAMRFormatImpl::Create(qtmsfmt, tmsformat);
+                break;
+            case QTMS_FORMAT_G711:
+                ret = QTMSG711FormatImpl::Create(qtmsfmt, tmsformat);
+                break;
+            case QTMS_FORMAT_G729:
+                ret = QTMSG729FormatImpl::Create(qtmsfmt, tmsformat);
+                break;
+            case QTMS_FORMAT_ILBC:
+                ret = QTMSILBCFormatImpl::Create(qtmsfmt, tmsformat);
+                break;
+            default:
+                ret = QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteFormat(QTMSFormat*& qtmsfmt)
+{
+    TRACE_PRN_FN_ENT;
+    __ASSERT_ALWAYS(qtmsfmt, PANIC(QTMS_RESULT_NULL_ARGUMENT));
+
+    gint ret(QTMS_RESULT_SUCCESS);
+    QTMSFormatType fmttype;
+    ret = qtmsfmt->GetType(fmttype);
+    switch (fmttype) {
+    case QTMS_FORMAT_PCM:
+        delete (static_cast<QTMSPCMFormatImpl*> (qtmsfmt));
+        qtmsfmt = NULL;
+        break;
+    case QTMS_FORMAT_AMR:
+        delete (static_cast<QTMSAMRFormatImpl*> (qtmsfmt));
+        qtmsfmt = NULL;
+        break;
+    case QTMS_FORMAT_G711:
+        delete (static_cast<QTMSG711FormatImpl*> (qtmsfmt));
+        qtmsfmt = NULL;
+        break;
+    case QTMS_FORMAT_G729:
+        delete (static_cast<QTMSG729FormatImpl*> (qtmsfmt));
+        qtmsfmt = NULL;
+        break;
+    case QTMS_FORMAT_ILBC:
+        delete (static_cast<QTMSILBCFormatImpl*> (qtmsfmt));
+        qtmsfmt = NULL;
+        break;
+    default:
+        ret = QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED;
+        break;
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateEffect(QTMSEffectType tmseffecttype, QTMSEffect*& qtmseffect)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    TMSEffect* tmseffect(NULL);
+
+    if (iFactory) {
+        ret = iFactory->CreateEffect((TMSEffectType) tmseffecttype, tmseffect);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            switch (tmseffecttype) {
+            case TMS_EFFECT_VOLUME:
+                ret = QTMSVolumeEffectImpl::Create(qtmseffect, tmseffect);
+                break;
+            case TMS_EFFECT_GAIN:
+                ret = QTMSGainEffectImpl::Create(qtmseffect, tmseffect);
+                break;
+            case TMS_EFFECT_GLOBAL_VOL:
+                ret = QTMSGlobalVolEffectImpl::Create(qtmseffect, tmseffect);
+                break;
+            case TMS_EFFECT_GLOBAL_GAIN:
+                ret = QTMSGlobalGainEffectImpl::Create(qtmseffect, tmseffect);
+                break;
+            default:
+                ret = TMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteEffect(QTMSEffect*& qtmseffect)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    QTMSEffectType effecttype;
+    ret = qtmseffect->GetType(effecttype);
+    switch (effecttype) {
+    case QTMS_EFFECT_VOLUME:
+        delete (static_cast<QTMSVolumeEffectImpl*> (qtmseffect));
+        qtmseffect = NULL;
+        break;
+    case QTMS_EFFECT_GAIN:
+        delete (static_cast<QTMSGainEffectImpl*> (qtmseffect));
+        qtmseffect = NULL;
+        break;
+    case QTMS_EFFECT_GLOBAL_VOL:
+        delete (static_cast<QTMSGlobalVolEffectImpl*> (qtmseffect));
+        qtmseffect = NULL;
+        break;
+    case QTMS_EFFECT_GLOBAL_GAIN:
+        delete (static_cast<QTMSGlobalGainEffectImpl*> (qtmseffect));
+        qtmseffect = NULL;
+        break;
+    default:
+        ret = QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED;
+        break;
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateBuffer(QTMSBufferType buffertype, guint size, QTMSBuffer*& buffer)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    TMSBuffer* tmsbuffer(NULL);
+    if (iFactory) {
+        ret = iFactory->CreateBuffer((TMSBufferType) buffertype, size, tmsbuffer);
+        if (ret == TMS_RESULT_SUCCESS) {
+            switch (buffertype) {
+            case QTMS_BUFFER_MEMORY:
+                ret = QTMSBufferImpl::Create(buffertype, buffer, tmsbuffer);
+                break;
+            default:
+                ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteBuffer(QTMSBuffer*& qtmsbuffer)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete qtmsbuffer;
+    qtmsbuffer = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSSource* tmssource(NULL);
+    if (iFactory) {
+        ret = iFactory->CreateSource((TMSSourceType) srctype, tmssource);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            switch (srctype) {
+            case QTMS_SOURCE_CLIENT:
+                ret = QTMSClientSourceImpl::Create(qtmssrc, tmssource);
+                break;
+            case QTMS_SOURCE_MODEM:
+                ret = QTMSModemSourceImpl::Create(qtmssrc, tmssource);
+                break;
+            case QTMS_SOURCE_MIC:
+                ret = QTMSMicSourceImpl::Create(qtmssrc, tmssource);
+                break;
+            default:
+                ret = TMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteSource(QTMSSource*& qtmssrc)
+{
+    TRACE_PRN_FN_ENT;
+    __ASSERT_ALWAYS(qtmssrc, PANIC(QTMS_RESULT_NULL_ARGUMENT));
+
+    gint ret(QTMS_RESULT_SUCCESS);
+    QTMSSourceType sourcetype;
+    ret = qtmssrc->GetType(sourcetype);
+    switch (sourcetype) {
+    case QTMS_SOURCE_CLIENT:
+        delete (static_cast<QTMSClientSourceImpl*> (qtmssrc));
+        qtmssrc = NULL;
+        break;
+    case QTMS_SOURCE_MODEM:
+    {
+        delete (static_cast<QTMSModemSourceImpl*> (qtmssrc));
+        qtmssrc = NULL;
+    }
+        break;
+    case TMS_SOURCE_MIC:
+    {
+        delete (static_cast<QTMSMicSourceImpl*> (qtmssrc));
+        qtmssrc = NULL;
+    }
+        break;
+    default:
+        ret = TMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED;
+        break;
+    }
+
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSSink* tmssink(NULL);
+
+    if (iFactory) {
+        ret = iFactory->CreateSink((TMSSinkType) sinktype, tmssink);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            switch (sinktype) {
+            case QTMS_SINK_CLIENT:
+                ret = QTMSClientSinkImpl::Create(qtmssink, tmssink);
+                break;
+            case QTMS_SINK_MODEM:
+                ret = QTMSModemSinkImpl::Create(qtmssink, tmssink);
+                break;
+            case QTMS_SINK_SPEAKER:
+                ret = QTMSSpeakerSinkImpl::Create(qtmssink, tmssink);
+                break;
+            default:
+                ret = TMS_RESULT_SINK_TYPE_NOT_SUPPORTED;
+                break;
+            }
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteSink(QTMSSink*& qtmssink)
+{
+    TRACE_PRN_FN_ENT;
+    __ASSERT_ALWAYS(qtmssink, PANIC(QTMS_RESULT_NULL_ARGUMENT));
+
+    gint ret(QTMS_RESULT_SUCCESS);
+    QTMSSinkType sinktype;
+    ret = qtmssink->GetType(sinktype);
+    switch (sinktype) {
+    case QTMS_SINK_CLIENT:
+    {
+        delete (static_cast<QTMSClientSinkImpl*> (qtmssink));
+        qtmssink = NULL;
+    }
+        break;
+    case QTMS_SINK_MODEM:
+    {
+        delete (static_cast<QTMSModemSinkImpl*> (qtmssink));
+        qtmssink = NULL;
+    }
+        break;
+    case QTMS_SINK_SPEAKER:
+    {
+        delete (static_cast<QTMSSpeakerSinkImpl*> (qtmssink));
+        qtmssink = NULL;
+    }
+        break;
+    default:
+        ret = QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED;
+        break;
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateGlobalRouting(QTMSGlobalRouting*& qrouting)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSGlobalRouting* tmsrouting(NULL);
+    if (iFactory) {
+        ret = iFactory->CreateGlobalRouting(tmsrouting);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            ret = QTMSGlobalRoutingImpl::Create(qrouting, tmsrouting);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteGlobalRouting(QTMSGlobalRouting*& globalrouting)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSGlobalRoutingImpl*> (globalrouting));
+    globalrouting = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& qdtmf)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSDTMF* tmsdtmf = NULL;
+
+    if (iFactory) {
+        ret = iFactory->CreateDTMF((TMSStreamType) streamtype, tmsdtmf);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            ret = QTMSDTMFImpl::Create(qdtmf, tmsdtmf);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteDTMF(QTMSDTMF*& dtmf)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSDTMFImpl*> (dtmf));
+    dtmf = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateRingTonePlayer(QTMSRingTone*& rt)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSRingTone* tmsrt = NULL;
+
+    if (iFactory) {
+        ret = iFactory->CreateRingTonePlayer(tmsrt);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            ret = QTMSRingToneImpl::Create(rt, tmsrt);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteRingTonePlayer(QTMSRingTone*& rt)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSRingToneImpl*> (rt));
+    rt = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::CreateInbandTonePlayer(QTMSInbandTone*& qinbandtone)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    TMS::TMSInbandTone* tmsinband = NULL;
+    if (iFactory) {
+        ret = iFactory->CreateInbandTonePlayer(tmsinband);
+
+        if (ret == TMS_RESULT_SUCCESS) {
+            ret = QTMSInbandToneImpl::Create(qinbandtone, tmsinband);
+        }
+    }
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSFactoryImpl::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone)
+{
+    TRACE_PRN_FN_ENT;
+    gint ret(QTMS_RESULT_SUCCESS);
+    delete (static_cast<QTMSInbandToneImpl*> (inbandtone));
+    inbandtone = NULL;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsformat.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsformat.h>
+#include <qtmsformat.h>
+
+using namespace QTMS;
+
+QTMSFormat::QTMSFormat() :
+    iFormat(NULL)
+{
+}
+
+QTMSFormat::~QTMSFormat()
+{
+    delete iFormat;
+}
+
+gint QTMSFormat::GetSupportedBitRates(BitRateVector& aVector)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetSupportedBitRates(aVector);
+    }
+    return status;
+}
+
+gint QTMSFormat::SetBitRate(const guint aBitrate)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->SetBitRate(aBitrate);
+    }
+    return status;
+}
+
+gint QTMSFormat::GetBitRate(guint& aBitrate)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetBitRate(aBitrate);
+    }
+    return status;
+}
+
+gint QTMSFormat::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg711.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsg711format.h>
+#include <qtmsg711format.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG711Format::QTMSG711Format()
+{
+}
+
+QTMSG711Format::~QTMSG711Format()
+{
+}
+
+gint QTMSG711Format::SetMode(const QTMSG711CodecMode aMode)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->SetMode(aMode);
+    }
+    return status;
+}
+
+gint QTMSG711Format::GetMode(QTMSG711CodecMode& aMode)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->GetMode(aMode);
+    }
+    return status;
+}
+
+gint QTMSG711Format::SetCNG(const gboolean aCng)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->SetCNG(aCng);
+    }
+    return status;
+}
+
+gint QTMSG711Format::GetCNG(gboolean& aCng)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->GetCNG(aCng);
+    }
+    return status;
+}
+
+gint QTMSG711Format::SetPlc(const gboolean aPlc)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->SetPlc(aPlc);
+    }
+    return status;
+}
+
+gint QTMSG711Format::GetPlc(gboolean& aPlc)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->GetPlc(aPlc);
+    }
+    return status;
+}
+
+gint QTMSG711Format::SetVADMode(const gboolean aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->SetVADMode(aVad);
+    }
+    return status;
+}
+
+gint QTMSG711Format::GetVADMode(gboolean& aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG711Format*> (iFormat)->GetVADMode(aVad);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg711impl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsg711format.h>
+#include "qtmsg711impl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG711FormatImpl::QTMSG711FormatImpl()
+{
+}
+
+QTMSG711FormatImpl::~QTMSG711FormatImpl()
+{
+}
+
+gint QTMSG711FormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSG711FormatImpl* self = new QTMSG711FormatImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iFormat = tmsformat;
+    }
+    qformat = self;
+    return ret;
+}
+
+gint QTMSG711FormatImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSG711FormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat) {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+gint QTMSG711FormatImpl::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg729.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsg729format.h>
+#include <qtmsg729format.h>
+#include "tmsutility.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG729Format::QTMSG729Format()
+{
+}
+
+QTMSG729Format::~QTMSG729Format()
+{
+}
+
+gint QTMSG729Format::SetVADMode(const gboolean aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG729Format*> (iFormat)->SetVADMode(aVad);
+    }
+    return status;
+}
+
+gint QTMSG729Format::GetVADMode(gboolean& aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSG729Format*> (iFormat)->GetVADMode(aVad);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsg729impl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsilbcformat.h>
+#include "tmsutility.h"
+#include "qtmsg729impl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSG729FormatImpl::QTMSG729FormatImpl()
+{
+}
+
+QTMSG729FormatImpl::~QTMSG729FormatImpl()
+{
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+}
+
+gint QTMSG729FormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSG729FormatImpl* self = new QTMSG729FormatImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iFormat = tmsformat;
+    }
+    qformat = self;
+    return ret;
+}
+
+gint QTMSG729FormatImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSG729FormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat) {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+gint QTMSG729FormatImpl::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsgaineffect.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsgaineffect.h>
+#include <qtmsgaineffect.h>
+#include "qtmsgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGainEffect::QTMSGainEffect() :
+    iEffect(NULL)
+{
+}
+
+QTMSGainEffect::~QTMSGainEffect()
+{
+    delete iEffect;
+}
+
+gint QTMSGainEffect::GetLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGainEffect::SetLevel(const guint level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGainEffect*> (iEffect)->SetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGainEffect::GetMaxLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetMaxLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGainEffect::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGainEffect*> (iEffect)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsgaineffectimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsgaineffect.h>
+#include "qtmsgaineffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGainEffectImpl::QTMSGainEffectImpl()
+{
+}
+
+QTMSGainEffectImpl::~QTMSGainEffectImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSGainEffectImpl::Create(QTMSEffect*& qgain, TMS::TMSEffect*& tmsgain)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGainEffectImpl* self = new QTMSGainEffectImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iEffect = tmsgain;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qgain = self;
+    return ret;
+}
+
+gint QTMSGainEffectImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGainEffect*> (iEffect)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGainEffect*> (iEffect)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+gint QTMSGainEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iEffect) {
+        tmseffect = iEffect;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+void QTMSGainEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+    TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGainEffect::EffectsEvent(static_cast<QTMSEffect&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalgaineffect.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsglobalgaineffect.h>
+#include <qtmsglobalgaineffect.h>
+#include "qtmsglobalgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalGainEffect::QTMSGlobalGainEffect() :
+    iEffect(NULL)
+{
+}
+
+QTMSGlobalGainEffect::~QTMSGlobalGainEffect()
+{
+    delete (static_cast<TMSGlobalGainEffect*> (iEffect));
+}
+
+gint QTMSGlobalGainEffect::GetLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalGainEffect::SetLevel(const guint level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->SetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalGainEffect::GetMaxLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetMaxLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalGainEffect::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalGainEffect*> (iEffect)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalgaineffectimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalgaineffect.h>
+#include "tmsutility.h"
+#include "qtmsglobalgaineffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalGainEffectImpl::QTMSGlobalGainEffectImpl()
+{
+}
+
+QTMSGlobalGainEffectImpl::~QTMSGlobalGainEffectImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSGlobalGainEffectImpl::Create(QTMSEffect*& qglobalgain, TMS::TMSEffect*& tmsglobalgain)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalGainEffectImpl* self = new QTMSGlobalGainEffectImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iEffect = tmsglobalgain;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qglobalgain = self;
+    return ret;
+}
+
+gint QTMSGlobalGainEffectImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSGlobalGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGlobalGainEffect*> (iEffect)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSGlobalGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGlobalGainEffect*> (iEffect)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSGlobalGainEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+    TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGlobalGainEffect::EffectsEvent(static_cast<QTMSEffect&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalrouting.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsglobalrouting.h>
+#include <qtmsglobalrouting.h>
+#include "qtmsglobalroutingimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalRouting::QTMSGlobalRouting() :
+    iRouting(NULL)
+{
+}
+
+QTMSGlobalRouting::~QTMSGlobalRouting()
+{
+    delete iRouting;
+}
+
+gint QTMSGlobalRouting::SetOutput(const QTMSAudioOutput output)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting) {
+        status = iRouting->SetOutput(output);
+    }
+    return status;
+}
+
+gint QTMSGlobalRouting::GetOutput(QTMSAudioOutput& output)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting) {
+        status = iRouting->GetOutput(output);
+    }
+    return status;
+}
+
+gint QTMSGlobalRouting::GetPreviousOutput(QTMSAudioOutput& output)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting) {
+        status = iRouting->GetPreviousOutput(output);
+    }
+    return status;
+}
+
+gint QTMSGlobalRouting::GetAvailableOutputs(OutputVector& outputs)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRouting) {
+        status = iRouting->GetAvailableOutputs(outputs);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalroutingimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalrouting.h>
+#include "tmsutility.h"
+#include "qtmsglobalroutingimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalRoutingImpl::QTMSGlobalRoutingImpl()
+{
+}
+
+QTMSGlobalRoutingImpl::~QTMSGlobalRoutingImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSGlobalRoutingImpl::Create(QTMSGlobalRouting*& qrouting, TMS::TMSGlobalRouting*& tmsrouting)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalRoutingImpl* self = new QTMSGlobalRoutingImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iRouting = tmsrouting;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qrouting = self;
+    return ret;
+}
+
+gint QTMSGlobalRoutingImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSGlobalRoutingImpl::AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iRouting) {
+        ret = iRouting->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSGlobalRoutingImpl::RemoveObserver(TMS::TMSGlobalRoutingObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iRouting) {
+        ret = iRouting->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSGlobalRoutingImpl::GlobalRoutingEvent(const TMS::TMSGlobalRouting& /*routing*/,
+    TMS::TMSSignalEvent event, TMS::TMSAudioOutput output)
+{
+    QTMSSignalEvent qevent;
+    QTMSAudioOutput qoutput;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+    qoutput = output;
+
+    emit QTMS::QTMSGlobalRouting::GlobalRoutingEvent(static_cast<QTMSGlobalRouting&> (*this),
+        qevent, qoutput);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalvoleffect.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include<tmsglobalvoleffect.h>
+#include <qtmsglobalvoleffect.h>
+#include "qtmsglobalvoleffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalVolEffect::QTMSGlobalVolEffect() :
+    iEffect(NULL)
+{
+}
+
+QTMSGlobalVolEffect::~QTMSGlobalVolEffect()
+{
+    delete (static_cast<TMSGlobalVolEffect*> (iEffect));
+}
+
+gint QTMSGlobalVolEffect::GetLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalVolEffect::SetLevel(const guint level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->SetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalVolEffect::GetMaxLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetMaxLevel(level);
+    }
+    return status;
+}
+
+gint QTMSGlobalVolEffect::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSGlobalVolEffect*> (iEffect)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsglobalvoleffectimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsglobalvoleffect.h>
+#include "tmsutility.h"
+#include "qtmsglobalvoleffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSGlobalVolEffectImpl::QTMSGlobalVolEffectImpl()
+{
+}
+
+QTMSGlobalVolEffectImpl::~QTMSGlobalVolEffectImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSGlobalVolEffectImpl::Create(QTMSEffect*& qglobalvol, TMS::TMSEffect*& tmsglobalvol)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSGlobalVolEffectImpl* self = new QTMSGlobalVolEffectImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iEffect = tmsglobalvol;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qglobalvol = self;
+    return ret;
+}
+
+gint QTMSGlobalVolEffectImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSGlobalVolEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGlobalVolEffect*> (iEffect)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSGlobalVolEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSGlobalVolEffect*> (iEffect)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSGlobalVolEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+    TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSGlobalVolEffect::EffectsEvent(static_cast<QTMSEffect&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsilbc.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsilbcformat.h>
+#include <qtmsilbcformat.h>
+#include "tmsutility.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSILBCFormat::QTMSILBCFormat()
+{
+}
+
+QTMSILBCFormat::~QTMSILBCFormat()
+{
+}
+
+gint QTMSILBCFormat::SetMode(const QTMSG711CodecMode aMode)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetMode(aMode);
+    }
+    return status;
+}
+
+gint QTMSILBCFormat::GetMode(QTMSG711CodecMode& aMode)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetMode(aMode);
+    }
+    return status;
+}
+
+gint QTMSILBCFormat::SetCNG(const gboolean aCng)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetCNG(aCng);
+    }
+    return status;
+}
+
+gint QTMSILBCFormat::GetCNG(gboolean& aCng)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetCNG(aCng);
+    }
+    return status;
+}
+
+gint QTMSILBCFormat::SetVADMode(const gboolean aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->SetVADMode(aVad);
+    }
+    return status;
+}
+
+gint QTMSILBCFormat::GetVADMode(gboolean& aVad)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = static_cast<TMSILBCFormat*> (iFormat)->GetVADMode(aVad);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsilbcimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsilbcformat.h>
+#include "qtmsilbcimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSILBCFormatImpl::QTMSILBCFormatImpl()
+{
+}
+
+QTMSILBCFormatImpl::~QTMSILBCFormatImpl()
+{
+}
+
+gint QTMSILBCFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSILBCFormatImpl* self = new QTMSILBCFormatImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iFormat = tmsformat;
+    }
+    qformat = self;
+    return ret;
+}
+
+gint QTMSILBCFormatImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSILBCFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat) {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+gint QTMSILBCFormatImpl::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsinbandtone.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsinbandtone.h>
+#include <tmsinbandtone.h>
+#include "qtmswrapperexport.h"
+#include "qtmsinbandtoneimpl.h"
+
+using namespace QTMS;
+
+QTMSInbandTone::QTMSInbandTone(void) :
+    iInbandTone(NULL)
+{
+}
+
+QTMSInbandTone::~QTMSInbandTone(void)
+{
+    delete iInbandTone;
+}
+
+gint QTMSInbandTone::Start(QTMSInbandToneType inbandtonetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iInbandTone) {
+        status = iInbandTone->Start(inbandtonetype);
+    }
+    return status;
+}
+
+gint QTMSInbandTone::Stop()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iInbandTone) {
+        status = iInbandTone->Stop();
+    }
+    return status;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsinbandtoneimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsinbandtone.h>
+#include "tmsutility.h"
+#include "qtmsinbandtoneimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSInbandToneImpl::QTMSInbandToneImpl()
+{
+}
+
+QTMSInbandToneImpl::~QTMSInbandToneImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSInbandToneImpl::Create(QTMSInbandTone*& qinband, TMS::TMSInbandTone*& tmsinband)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSInbandToneImpl* self = new QTMSInbandToneImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iInbandTone = tmsinband;
+        self->AddObserver(*self, NULL);
+    }
+    qinband = self;
+    return ret;
+}
+
+gint QTMSInbandToneImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSInbandToneImpl::AddObserver(TMS::TMSInbandToneObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iInbandTone) {
+        ret = iInbandTone->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSInbandToneImpl::RemoveObserver(TMS::TMSInbandToneObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iInbandTone) {
+        ret = iInbandTone->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSInbandToneImpl::InbandToneEvent(const TMS::TMSInbandTone& /*inbandtone*/,
+    TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSInbandTone::InbandToneEvent(static_cast<QTMSInbandTone&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmembuffer.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsbuffer.h>
+#include "tmsutility.h"
+#include "qtmsmembuffer.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMemBuffer::QTMSMemBuffer()
+{
+    iTmsBuffer = NULL;
+    iOwnsBuffer = FALSE;
+}
+
+QTMSMemBuffer::~QTMSMemBuffer()
+{
+    if (iOwnsBuffer) {
+        free(iDataPtr);
+    }
+}
+
+gint QTMSMemBuffer::Create(QTMSBuffer*& buffer, TMS::TMSBuffer*& tmsbuffer)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    TRACE_PRN_FN_ENT;
+    QTMSMemBuffer* self = new QTMSMemBuffer();
+    if (self) {
+        self->iTmsBuffer = tmsbuffer;
+        tmsbuffer->GetDataPtr(self->iDataPtr);
+        tmsbuffer->GetDataSize(self->iBufferSize);
+        tmsbuffer->GetTimeStamp(self->iTimeStamp);
+        self->iOwnsBuffer = FALSE;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    buffer = self;
+    TRACE_PRN_FN_EXT;
+    return ret;
+}
+
+gint QTMSMemBuffer::GetType(QTMSBufferType& buffertype)
+{
+    gint ret(TMS_RESULT_SUCCESS);
+    buffertype = QTMS_BUFFER_MEMORY;
+    return ret;
+}
+
+/**
+ * Gets the timestamp on the Buffer so that the framework can
+ * determine the time at which this buffer has to be rendered
+ * by the output device sink.
+ *
+ * @param ts timestamp in microseconds
+ *
+ */
+gint QTMSMemBuffer::GetTimeStamp(guint64& ts)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    ts = iTimeStamp;
+    return ret;
+}
+
+/**
+ * Sets the timestamp on the Buffer so that the framework can
+ * determine the time at which this buffer has to be rendered
+ * by the output device sink.
+ *
+ * @param ts timestamp in milliseconds
+ *
+ */
+gint QTMSMemBuffer::SetTimeStamp(const guint64 ts)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    iTimeStamp = ts;
+    ret = iTmsBuffer->SetTimeStamp(ts);
+    return ret;
+}
+
+/**
+ * Gets the size of data in the buffer specified by the client.
+ *
+ * @param size size of data in bytes
+ *
+ */
+gint QTMSMemBuffer::GetDataSize(guint& size)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    size = iBufferSize;
+    return ret;
+}
+
+/**
+ * Sets the size of data in the buffer after the client fill it.
+ *
+ * @param size size of data in bytes
+ *
+ */
+gint QTMSMemBuffer::SetDataSize(const guint size)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    ret = iTmsBuffer->SetDataSize(size);
+    iBufferSize = size; //TODO: should realloc when new size > old size (?)
+    return ret;
+}
+
+/**
+ * Gets the pointer to the memory location associated with this
+ * buffer where the data is stored.
+ *
+ * @param bufptr ptr to the data stored in the buffer.
+ *
+ */
+gint QTMSMemBuffer::GetDataPtr(guint8*& bufptr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    bufptr = iDataPtr;
+    return ret;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmicsource.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsmicsource.h>
+#include <qtmsmicsource.h>
+#include "qtmsmicsourceimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMicSource::QTMSMicSource() :
+    iSource(NULL)
+{
+}
+
+QTMSMicSource::~QTMSMicSource()
+{
+    delete (static_cast<TMSMicSource*> (iSource));
+}
+
+gint QTMSMicSource::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        //status = iSource->GetType(sourcetype);
+        status = static_cast<TMSMicSource*> (iSource)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmicsourceimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmicsource.h>
+#include "qtmsmicsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSMicSourceImpl::QTMSMicSourceImpl()
+{
+}
+
+QTMSMicSourceImpl::~QTMSMicSourceImpl()
+{
+}
+
+gint QTMSMicSourceImpl::Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSMicSourceImpl* self = new QTMSMicSourceImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSource = tmssource;
+    }
+    qsource = self;
+    return ret;
+}
+
+gint QTMSMicSourceImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSMicSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsink.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsmodemsink.h>
+#include <tmsmodemsink.h>
+#include "qtmsmodemsinkimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSink::QTMSModemSink() :
+    iSink(NULL)
+{
+}
+
+QTMSModemSink::~QTMSModemSink()
+{
+    delete (static_cast<TMSModemSink*> (iSink));
+}
+
+gint QTMSModemSink::GetType(QTMSSinkType& sinktype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        //status = iSink->GetType(sinktype);
+        status = static_cast<TMSModemSink*> (iSink)->GetType(sinktype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsinkimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmodemsink.h>
+#include "qtmsmodemsinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSinkImpl::QTMSModemSinkImpl()
+{
+}
+
+QTMSModemSinkImpl::~QTMSModemSinkImpl()
+{
+}
+
+gint QTMSModemSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSModemSinkImpl* self = new QTMSModemSinkImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSink = tmssink;
+    }
+    qsink = self;
+    return ret;
+}
+
+gint QTMSModemSinkImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSModemSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsource.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsmodemsource.h>
+#include <tmsmodemsource.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSource::QTMSModemSource() :
+    iSource(NULL)
+{
+}
+
+QTMSModemSource::~QTMSModemSource()
+{
+    delete (static_cast<TMSModemSource*> (iSource));
+}
+
+gint QTMSModemSource::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        //status = iSource->GetType(sourcetype);
+        status = static_cast<TMSModemSource*> (iSource)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsmodemsourceimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsmodemsource.h>
+#include "qtmsmodemsourceimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSModemSourceImpl::QTMSModemSourceImpl()
+{
+}
+
+QTMSModemSourceImpl::~QTMSModemSourceImpl()
+{
+}
+
+gint QTMSModemSourceImpl::Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSModemSourceImpl* self = new QTMSModemSourceImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSource = tmssource;
+    }
+    qsource = self;
+    return ret;
+}
+
+gint QTMSModemSourceImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSModemSourceImpl::GetSource(TMS::TMSSource*& tmssource)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSource) {
+        tmssource = iSource;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmspcm.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmspcmformat.h>
+
+using namespace QTMS;
+
+QTMSPCMFormat::QTMSPCMFormat()
+{
+}
+
+QTMSPCMFormat::~QTMSPCMFormat()
+{
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmspcmimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmspcmformat.h>
+#include "tmsutility.h"
+#include "qtmspcmimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSPCMFormatImpl::QTMSPCMFormatImpl()
+{
+}
+
+QTMSPCMFormatImpl::~QTMSPCMFormatImpl()
+{
+    TRACE_PRN_FN_ENT;
+    TRACE_PRN_FN_EXT;
+}
+
+gint QTMSPCMFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSPCMFormatImpl* self = new QTMSPCMFormatImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iFormat = tmsformat;
+    }
+    qformat = self;
+    return ret;
+}
+
+gint QTMSPCMFormatImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSPCMFormatImpl::GetFormat(TMS::TMSFormat*& fmt)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iFormat) {
+        fmt = iFormat;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+gint QTMSPCMFormatImpl::GetType(QTMSFormatType& fmttype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iFormat) {
+        status = iFormat->GetType(fmttype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsringtone.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsringtone.h>
+#include <qtmsringtone.h>
+#include "qtmsringtoneimpl.h"
+
+using namespace QTMS;
+
+QTMSRingTone::QTMSRingTone() :
+    iRingTone(NULL)
+{
+}
+
+QTMSRingTone::~QTMSRingTone()
+{
+    delete iRingTone;
+}
+
+gint QTMSRingTone::Init(const QTMSRingToneType type, GString* str, GString* tts)
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Init(type, str, tts);
+    }
+    return status;
+}
+
+gint QTMSRingTone::Deinit()
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Deinit();
+    }
+    return status;
+}
+
+gint QTMSRingTone::Play()
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Play();
+    }
+    return status;
+}
+
+gint QTMSRingTone::Stop()
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Stop();
+    }
+    return status;
+}
+
+gint QTMSRingTone::Pause()
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Pause();
+    }
+    return status;
+}
+
+gint QTMSRingTone::Mute()
+{
+    gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        status = iRingTone->Mute();
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsringtoneimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsringtone.h>
+#include <qtmseffect.h>
+#include "tmsutility.h"
+#include "qtmsringtoneimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSRingToneImpl::QTMSRingToneImpl()
+{
+}
+
+QTMSRingToneImpl::~QTMSRingToneImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSRingToneImpl::Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSRingToneImpl* self = new QTMSRingToneImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iRingTone = tmsrt;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qrt = self;
+    return ret;
+}
+
+gint QTMSRingToneImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSRingToneImpl::AddObserver(TMS::TMSRingToneObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        ret = iRingTone->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSRingToneImpl::RemoveObserver(TMS::TMSRingToneObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iRingTone) {
+        ret = iRingTone->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+void QTMSRingToneImpl::RingtoneEvent(const TMS::TMSRingTone& /*rt*/, TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSRingTone::RingtoneEvent(static_cast<QTMSRingTone&> (*this), qevent);
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsspeakersink.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtmsspeakersink.h>
+#include <tmsspeakersink.h>
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSSpeakerSink::QTMSSpeakerSink() :
+    iSink(NULL)
+{
+}
+
+QTMSSpeakerSink::~QTMSSpeakerSink()
+{
+    delete (static_cast<TMSSpeakerSink*> (iSink));
+}
+
+gint QTMSSpeakerSink::GetType(QTMSSinkType& sinktype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iSink) {
+        //status = iSink->GetType(sinktype); //should be ok
+        status = static_cast<TMSSpeakerSink*> (iSink)->GetType(sinktype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsspeakersinkimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsspeakersink.h>
+#include "qtmsspeakersinkimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSSpeakerSinkImpl::QTMSSpeakerSinkImpl()
+{
+}
+
+QTMSSpeakerSinkImpl::~QTMSSpeakerSinkImpl()
+{
+}
+
+gint QTMSSpeakerSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSSpeakerSinkImpl* self = new QTMSSpeakerSinkImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iSink = tmssink;
+    }
+    qsink = self;
+    return ret;
+}
+
+gint QTMSSpeakerSinkImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSSpeakerSinkImpl::GetSink(TMS::TMSSink*& tmssink)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iSink) {
+        tmssink = iSink;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsstream.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmssource.h>
+#include <tmsformat.h>
+#include <tmsstream.h>
+#include <qtmseffect.h>
+#include <qtmsstream.h>
+#include "qtmsstreamimpl.h"
+#include "qtmssource.h"
+#include "qtmsclientsourceimpl.h"
+#include "qtmsmodemsourceimpl.h"
+#include "qtmsmicsourceimpl.h"
+#include "qtmsclientsinkimpl.h"
+#include "qtmsmodemsinkimpl.h"
+#include "qtmsspeakersinkimpl.h"
+#include "qtmspcmimpl.h"
+#include "qtmsamrimpl.h"
+#include "qtmsg711impl.h"
+#include "qtmsg729impl.h"
+#include "qtmsilbcimpl.h"
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmsgaineffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSStream::QTMSStream(void) :
+    iStream(NULL)
+{
+}
+
+QTMSStream::~QTMSStream()
+{
+    //delete iStream;
+    //delete (static_cast<QTMSStreamImpl*> (iStream));
+}
+
+gint QTMSStream::AddSource(QTMSSource* qsource)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsource) {
+        QTMSSourceType qsrctype;
+        TMSSource* tmssource(NULL);
+
+        qsource->GetType(qsrctype);
+
+        switch (qsrctype) {
+        case QTMS_SOURCE_CLIENT:
+            status = static_cast<QTMSClientSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        case QTMS_SOURCE_MODEM:
+            status = static_cast<QTMSModemSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        case QTMS_SOURCE_MIC:
+            status = static_cast<QTMSMicSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        default:
+            break;
+        }
+        if (status == QTMS_RESULT_SUCCESS && tmssource) {
+            status = iStream->AddSource(tmssource);
+        }
+    }
+    return status;
+}
+
+gint QTMSStream::RemoveSource(QTMSSource* qsource)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsource) {
+        QTMSSourceType qsrctype;
+        TMSSource* tmssource(NULL);
+
+        qsource->GetType(qsrctype);
+
+        switch (qsrctype) {
+        case QTMS_SOURCE_CLIENT:
+            status = static_cast<QTMSClientSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        case QTMS_SOURCE_MODEM:
+            status = static_cast<QTMSModemSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        case QTMS_SOURCE_MIC:
+            status = static_cast<QTMSMicSourceImpl*> (qsource)->GetSource(tmssource);
+            break;
+        default:
+            break;
+        }
+        if (status == QTMS_RESULT_SUCCESS && tmssource) {
+            status = iStream->RemoveSource(tmssource);
+        }
+    }
+
+    return status;
+}
+
+gint QTMSStream::AddSink(QTMSSink* qsink)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsink) {
+        QTMSSinkType qsinktype;
+        TMSSink* tmssink(NULL);
+
+        qsink->GetType(qsinktype);
+
+        switch (qsinktype) {
+        case QTMS_SINK_CLIENT:
+            status = static_cast<QTMSClientSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        case QTMS_SINK_MODEM:
+            status = static_cast<QTMSModemSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        case QTMS_SINK_SPEAKER:
+            status = static_cast<QTMSSpeakerSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        default:
+            break;
+        }
+        if (status == QTMS_RESULT_SUCCESS && tmssink) {
+            status = iStream->AddSink(tmssink);
+        }
+    }
+    return status;
+}
+
+gint QTMSStream::RemoveSink(QTMSSink* qsink)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qsink) {
+        QTMSSinkType qsinktype;
+        TMSSink* tmssink(NULL);
+
+        qsink->GetType(qsinktype);
+
+        switch (qsinktype) {
+        case QTMS_SINK_CLIENT:
+            status = static_cast<QTMSClientSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        case QTMS_SINK_MODEM:
+            status = static_cast<QTMSModemSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        case QTMS_SINK_SPEAKER:
+            status = static_cast<QTMSSpeakerSinkImpl*> (qsink)->GetSink(tmssink);
+            break;
+        default:
+            break;
+        }
+        if (status == QTMS_RESULT_SUCCESS && tmssink) {
+            status = iStream->RemoveSink(tmssink);
+        }
+    }
+
+    return status;
+}
+
+gint QTMSStream::SetFormat(QTMSFormat* qformat)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qformat) {
+        QTMSFormatType fmttype;
+        TMSFormat* tmsformat(NULL);
+        qformat->GetType(fmttype);
+        switch (fmttype) {
+        case QTMS_FORMAT_PCM:
+            status = static_cast<QTMSPCMFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_AMR:
+            status = static_cast<QTMSAMRFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_G711:
+            status = static_cast<QTMSG711FormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_G729:
+            status = static_cast<QTMSG729FormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_ILBC:
+            status = static_cast<QTMSILBCFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        default:
+            break;
+        }
+
+        status = iStream->SetFormat(tmsformat);
+    }
+    return status;
+}
+
+gint QTMSStream::ResetFormat(QTMSFormat* qformat)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iStream && qformat) {
+        QTMSFormatType fmttype;
+        TMSFormat* tmsformat(NULL);
+        qformat->GetType(fmttype);
+        switch (fmttype) {
+        case QTMS_FORMAT_PCM:
+            status = static_cast<QTMSPCMFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_AMR:
+            status = static_cast<QTMSAMRFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_G711:
+            status = static_cast<QTMSG711FormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_G729:
+            status = static_cast<QTMSG729FormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        case QTMS_FORMAT_ILBC:
+            status = static_cast<QTMSILBCFormatImpl*> (qformat)->GetFormat(tmsformat);
+            break;
+        default:
+            break;
+        }
+
+        status = iStream->ResetFormat(tmsformat);
+    }
+    return status;
+}
+
+gint QTMSStream::AddEffect(QTMSEffect* qeffect)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream && qeffect) {
+        QTMSEffectType effecttype;
+        TMSEffect* tmseffect(NULL);
+        qeffect->GetType(effecttype);
+
+        switch (effecttype) {
+        case QTMS_EFFECT_VOLUME:
+            status = static_cast<QTMSVolumeEffectImpl*> (qeffect)->GetEffect(tmseffect);
+            break;
+        case QTMS_EFFECT_GAIN:
+            status = static_cast<QTMSGainEffectImpl*> (qeffect)->GetEffect(tmseffect);
+            break;
+        default:
+            break;
+        }
+        status = iStream->AddEffect(tmseffect);
+    }
+    return status;
+}
+
+gint QTMSStream::RemoveEffect(QTMSEffect* qeffect)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream && qeffect) {
+        QTMSEffectType effecttype;
+        TMSEffect* tmseffect(NULL);
+        qeffect->GetType(effecttype);
+
+        switch (effecttype) {
+        case QTMS_EFFECT_VOLUME:
+            status = static_cast<QTMSVolumeEffectImpl*> (qeffect)->GetEffect(tmseffect);
+            break;
+        case QTMS_EFFECT_GAIN:
+            status = static_cast<QTMSGainEffectImpl*> (qeffect)->GetEffect(tmseffect);
+            break;
+        default:
+            break;
+        }
+        status = iStream->RemoveEffect(tmseffect);
+    }
+    return status;
+}
+
+gint QTMSStream::GetState()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->GetState();
+    }
+    return status;
+}
+
+gint QTMSStream::GetStreamType()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->GetStreamType();
+    }
+    return status;
+}
+
+gint QTMSStream::GetStreamId()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->GetStreamId();
+    }
+    return status;
+}
+
+gint QTMSStream::Init(gint retrytime)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->Init(retrytime);
+    }
+    return status;
+}
+
+gint QTMSStream::Pause()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->Pause();
+    }
+    return status;
+}
+
+gint QTMSStream::Start(gint retrytime)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->Start(retrytime);
+    }
+    return status;
+}
+
+gint QTMSStream::Stop()
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iStream) {
+        status = iStream->Stop();
+    }
+    return status;
+}
+
+void QTMSStream::Deinit()
+{
+    if (iStream) {
+        iStream->Deinit();
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsstreamimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <qtmseffect.h>
+#include <tmsstream.h>
+#include "tmsutility.h"
+#include "qtmsstreamimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSStreamImpl::QTMSStreamImpl()
+{
+}
+
+QTMSStreamImpl::~QTMSStreamImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSStreamImpl::Create(QTMSCallType callType, QTMSStreamType stype, QTMSStream*& qstrm,
+    TMS::TMSStream*& tmsstrm)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSStreamImpl* self = new QTMSStreamImpl();
+    if (self) {
+        ret = self->PostConstruct(callType, stype, *self);
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iStream = tmsstrm;
+        self->AddObserver(*self, NULL);
+    }
+    qstrm = self;
+    return ret;
+}
+
+gint QTMSStreamImpl::PostConstruct(QTMSCallType /*callType*/, QTMSStreamType /*stype*/, QTMSStream& /*parent*/)
+{
+    gint status(QTMS_RESULT_SUCCESS);
+    return status;
+}
+
+gint QTMSStreamImpl::AddObserver(TMS::TMSStreamObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iStream) {
+        iStream->AddObserver(obsrvr, user_data);
+    }
+
+    return ret;
+}
+
+gint QTMSStreamImpl::RemoveObserver(TMS::TMSStreamObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iStream) {
+        ret = iStream->RemoveObserver(obsrvr);
+    }
+
+    return ret;
+}
+
+void QTMSStreamImpl::TMSStreamEvent(const TMS::TMSStream& /*stream*/, TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSStream::TMSStreamEvent(static_cast<QTMSStream&> (*this), qevent);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsvolumeeffect.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <tmsvolumeeffect.h>
+#include <qtmsvolumeeffect.h>
+#include "qtmsvolumeeffectimpl.h"
+#include "qtmswrapperexport.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSVolumeEffect::QTMSVolumeEffect() :
+    iEffect(NULL)
+{
+}
+
+QTMSVolumeEffect::~QTMSVolumeEffect()
+{
+    delete (static_cast<TMSVolumeEffect*> (iEffect));
+}
+
+gint QTMSVolumeEffect::GetLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSVolumeEffect::SetLevel(const guint level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->SetLevel(level);
+    }
+    return status;
+}
+
+gint QTMSVolumeEffect::GetMaxLevel(guint& level)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetMaxLevel(level);
+    }
+    return status;
+}
+
+gint QTMSVolumeEffect::GetType(QTMSSourceType& sourcetype)
+{
+    gint status(QTMS_RESULT_UNINITIALIZED_OBJECT);
+    if (iEffect) {
+        status = static_cast<TMSVolumeEffect*> (iEffect)->GetType(sourcetype);
+    }
+    return status;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qtms/src/qtmsvolumeeffectimpl.cpp	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2010 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: QT Bindings for TMS
+ *
+ */
+
+#include <qtms.h>
+#include <tmsvolumeeffect.h>
+#include "qtmsvolumeeffectimpl.h"
+
+using namespace QTMS;
+using namespace TMS;
+
+QTMSVolumeEffectImpl::QTMSVolumeEffectImpl()
+{
+}
+
+QTMSVolumeEffectImpl::~QTMSVolumeEffectImpl()
+{
+    RemoveObserver(*this);
+}
+
+gint QTMSVolumeEffectImpl::Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol)
+{
+    gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY);
+    QTMSVolumeEffectImpl* self = new QTMSVolumeEffectImpl();
+    if (self) {
+        ret = self->PostConstruct();
+        if (ret != QTMS_RESULT_SUCCESS) {
+            delete self;
+            self = NULL;
+        }
+        self->iEffect = tmsvol;
+        ret = self->AddObserver(*self, NULL);
+    }
+    qvol = self;
+    return ret;
+}
+
+gint QTMSVolumeEffectImpl::PostConstruct()
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+    return ret;
+}
+
+gint QTMSVolumeEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSVolumeEffect*> (iEffect)->AddObserver(obsrvr, user_data);
+    }
+    return ret;
+}
+
+gint QTMSVolumeEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr)
+{
+    gint ret(QTMS_RESULT_SUCCESS);
+
+    if (iEffect) {
+        ret = static_cast<TMSVolumeEffect*> (iEffect)->RemoveObserver(obsrvr);
+    }
+    return ret;
+}
+
+gint QTMSVolumeEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect)
+{
+    gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT);
+
+    if (iEffect) {
+        tmseffect = iEffect;
+        ret = QTMS_RESULT_SUCCESS;
+    }
+    return ret;
+}
+
+void QTMSVolumeEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/,
+    TMS::TMSSignalEvent event)
+{
+    QTMSSignalEvent qevent;
+
+    qevent.type = event.type;
+    qevent.reason = event.reason;
+    qevent.curr_state = event.curr_state;
+    qevent.prev_state = event.prev_state;
+    qevent.event_data = event.event_data;
+    qevent.user_data = event.user_data;
+
+    emit QTMS::QTMSVolumeEffect::EffectsEvent(static_cast<QTMSEffect&> (*this), qevent);
+}
+
+// End of file
--- a/sysdef_1_4_0.dtd	Thu Aug 19 10:24:28 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
- <!ELEMENT SystemDefinition (systemModel?, build?)>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (logicalset* | module*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels CDATA #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalset name CDATA #REQUIRED>
- <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalsubset name CDATA #REQUIRED>
- <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
- <!ATTLIST module
-  name CDATA #REQUIRED
-  level CDATA #IMPLIED>
- <!ELEMENT component (unit* | package* | prebuilt*)*>
- <!ATTLIST component name CDATA #REQUIRED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  unitID ID #REQUIRED
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  bldFile CDATA #REQUIRED
-  priority CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT package EMPTY>
- <!ATTLIST package
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT prebuilt EMPTY>
- <!ATTLIST prebuilt
-  name CDATA #REQUIRED
-  version CDATA #REQUIRED
-  late (Y|N) #IMPLIED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
- <!ELEMENT unitList (unitRef+)>
- <!ATTLIST unitList
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT unitRef EMPTY>
- <!ATTLIST unitRef unit IDREF #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N | y | n) #REQUIRED>
- <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
- <!ELEMENT unitListRef EMPTY>
- <!ATTLIST unitListRef unitList IDREF #REQUIRED>
- <!ELEMENT layerRef EMPTY>
- <!ATTLIST layerRef layerName CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N | y | n) #REQUIRED
-  targetParallel (Y | N | y | n) #IMPLIED>
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Tue Aug 31 15:41:40 2010 +0300
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>