Revision: 201034 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 15 Sep 2010 12:45:22 +0300
branchRCL_3
changeset 63 91d5ad76f5c6
parent 59 666f9a5a90a9
child 67 16db3449d7ba
Revision: 201034 Kit: 201036
mmappcomponents/audiofetcher/inc/audiofetcher.h
mmappcomponents/audiofetcher/inc/audiofetcherdialog.h
mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h
mmappcomponents/audiofetcher/src/audiofetcher.cpp
mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp
mmappcomponents/audiofetcher/src/audiofetcherfilehandler.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp
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/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
--- a/mmappcomponents/audiofetcher/inc/audiofetcher.h	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/inc/audiofetcher.h	Wed Sep 15 12:45:22 2010 +0300
@@ -182,6 +182,11 @@
 		* Verifier
 		*/
 		MMGFetchVerifier* iVerifier;
+		
+		/**
+		* Mime Type array
+		*/
+		const MDesCArray* iMimeTypeArray;
 		};
 
 #endif // AUDIOFETCHER_H
--- a/mmappcomponents/audiofetcher/inc/audiofetcherdialog.h	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/inc/audiofetcherdialog.h	Wed Sep 15 12:45:22 2010 +0300
@@ -59,7 +59,8 @@
             MMGFetchVerifier* aVerifier,
             const TDesC& aTitle,
             TBool aMultiSelectionEnabled, 
-            TMediaFileType aMediaType );
+            TMediaFileType aMediaType,
+            const MDesCArray& aMimeTypeArray);
 
         /**
         * Destructor.
@@ -78,7 +79,8 @@
         */
         CAudioFetcherDialog(
             CDesCArray& aSelectedFiles, MMGFetchVerifier* aVerifier, const TDesC& aTitle, 
-            TBool aMultiSelectionEnabled, TMediaFileType aMediaType);
+            TBool aMultiSelectionEnabled, TMediaFileType aMediaType,
+            const MDesCArray& aMimeTypeArray);
 
 	private:
 	    
@@ -248,6 +250,9 @@
         CAknInputBlock* iInputBlock;
         
         TMediaFileType iMediaType;
+        
+        // Mine Type array
+        const MDesCArray& iMimeTypeArray;
 	};
 
 #endif // AUDIOFETCHERDIALOG_H
--- a/mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/inc/audiofetcherfilehandler.h	Wed Sep 15 12:45:22 2010 +0300
@@ -166,6 +166,7 @@
         void SetObserver( MAudioFetcherFileHandlerObserver* aObserver );
         void SetQueryId( TInt aId );
         void EnableObserverCall( TBool aEnable );
+        void SetMimeType( const MDesCArray& aMimeTypeArray );
         
     public:
         TInt RomFileAttribute( TInt aIndex, TInt aAttr );
@@ -185,6 +186,7 @@
     private:
 
         void ExcludeRomFilesL( CMdELogicCondition& aCondition );
+        void MimeFilterL( CMdELogicCondition& aCondition );
 
     private:
         void LeaveIfSessionClosedL();
@@ -227,6 +229,9 @@
 
         // search result list - ui shows items from this list
         CSearchList* iSearchList;
+        
+        // Mime Type array
+        const MDesCArray* iMimeTypeArray;
 
         // metadata search text
         TBuf<128> iSearchText;
--- a/mmappcomponents/audiofetcher/src/audiofetcher.cpp	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcher.cpp	Wed Sep 15 12:45:22 2010 +0300
@@ -101,10 +101,11 @@
 // SetMimeTypesL
 // ---------------------------------------------------------------------------
 //
-void CAudioFetcher::SetMimeTypesL( const MDesCArray& /*aMimeTypes*/ )
+void CAudioFetcher::SetMimeTypesL( const MDesCArray& aMimeTypes )
     {
-    WLOG("CAudioFetcher::SetMimeTypesL (not supported)");
-    // No implementation required (not supported)
+    WLOG("CAudioFetcher::SetMimeTypesL");
+    
+    iMimeTypeArray = &aMimeTypes;
     }
 
 // ---------------------------------------------------------------------------
@@ -197,7 +198,8 @@
 	
 	// create the dialog first
 	CAudioFetcherDialog* dialog =
-	    CAudioFetcherDialog::NewL( aSelectedFiles, iVerifier, *iTitle, iIsMultiSelection, aMediaType );
+        CAudioFetcherDialog::NewL( aSelectedFiles, iVerifier, *iTitle,
+                iIsMultiSelection, aMediaType, *iMimeTypeArray );
 	
 	// Returns zero when Fetcher is cancelled by User.
 	buttonId = dialog->ExecuteLD( R_MODAL_SINGLE_DIALOG );	
--- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Wed Sep 15 12:45:22 2010 +0300
@@ -63,12 +63,14 @@
             MMGFetchVerifier* aVerifier,
             const TDesC& aTitle,
             TBool aMultiSelectionEnabled,
-            TMediaFileType aMediaType)
+            TMediaFileType aMediaType,
+            const MDesCArray& aMimeTypeArray)
         : iSelectedFiles( aSelectedFiles ),
           iVerifier( aVerifier ),
           iTitle( aTitle ),
           iMultiSelectionEnabled(aMultiSelectionEnabled),
-          iMediaType(aMediaType)
+          iMediaType(aMediaType),
+          iMimeTypeArray( aMimeTypeArray )
 	{
 	WLOG("CAudioFetcherDialog::CAudioFetcherDialog");
 	// No implementation required
@@ -80,12 +82,12 @@
 //
 CAudioFetcherDialog* CAudioFetcherDialog::NewL(CDesCArray& aSelectedFiles, 
                MMGFetchVerifier* aVerifier,  const TDesC& aTitle, TBool aMultiSelectionEnabled,
-               TMediaFileType aMediaType)
+               TMediaFileType aMediaType, const MDesCArray& aMimeTypeArray)
 	{
 	WLOG("CAudioFetcherDialog::NewL");
 	CAudioFetcherDialog* self=
-	    new( ELeave ) CAudioFetcherDialog(
-	        aSelectedFiles, aVerifier, aTitle, aMultiSelectionEnabled, aMediaType );
+        new( ELeave ) CAudioFetcherDialog(aSelectedFiles, aVerifier, aTitle,
+                aMultiSelectionEnabled, aMediaType, aMimeTypeArray);
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -887,7 +889,7 @@
         WLOG("CAudioFetcherDialog::QueryL: query in progress");
         return;
         }
-
+    iFileHandler->SetMimeType( iMimeTypeArray );
     iFileHandler->EnableObserverCall( ETrue );
     iFileHandler->SetQueryId( 0 );
     iFileHandler->QueryAudioL();
--- a/mmappcomponents/audiofetcher/src/audiofetcherfilehandler.cpp	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcherfilehandler.cpp	Wed Sep 15 12:45:22 2010 +0300
@@ -376,6 +376,7 @@
     iQuery->AddPropertyFilterL( &fileTypePropertyDef );
    
     CMdELogicCondition& conditions = iQuery->Conditions();
+    MimeFilterL( conditions );
     ExcludeRomFilesL( conditions );
    
     iQuery->SetResultMode( EQueryResultModeItem );
@@ -414,6 +415,7 @@
     iQuery->AddPropertyFilterL( &fileTypePropertyDef );
    
     CMdELogicCondition& conditions = iQuery->Conditions();
+    MimeFilterL( conditions );
     ExcludeRomFilesL( conditions );
     
     // define sort order
@@ -455,6 +457,7 @@
     iQuery->AddPropertyFilterL( &fileTypePropertyDef );
    
     CMdELogicCondition& conditions = iQuery->Conditions();
+    MimeFilterL( conditions );
     ExcludeRomFilesL( conditions );
    
     iQuery->SetResultMode( EQueryResultModeItem );
@@ -700,6 +703,45 @@
     cond.SetNegate( ETrue );
     }
 
+// -----------------------------------------------------------------------------
+// CAudioFetcherFileHandler::MimeFilterL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAudioFetcherFileHandler::MimeFilterL( CMdELogicCondition& aCondition )
+    {
+    WLOG("CAudioFetcherFileHandler::MimeFilterL");
+
+    if( iMimeTypeArray )
+        {
+		if ( iMimeTypeArray->MdcaCount() > 0 )
+			{
+			CMdELogicCondition& cond =
+					aCondition.AddLogicConditionL( ELogicConditionOperatorOr );
+			for ( TInt i = 0; i < iMimeTypeArray->MdcaCount(); i++ )
+				{
+				TPtrC ptr = iMimeTypeArray->MdcaPoint(i);
+							
+				cond.AddPropertyConditionL( 
+                    iSession->GetDefaultNamespaceDefL().GetObjectDefL(
+                    MdeConstants::Image::KImageObject ).GetPropertyDefL( 
+                    MdeConstants::Object::KItemTypeProperty ),
+                    ETextPropertyConditionCompareEquals, ptr  );
+				}
+			}
+    	}
+    }
+
+// -----------------------------------------------------------------------------
+// CAudioFetcherFileHandler::SetMimeType
+// 
+// -----------------------------------------------------------------------------
+//
+void CAudioFetcherFileHandler::SetMimeType( const MDesCArray& aMimeTypeArray )
+    {
+    WLOG("CAudioFetcherFileHandler::SetMimeType");
+    iMimeTypeArray = &aMimeTypeArray;
+    }
 
 // -------------------------------------------------------------------------------
 // CAudioFetcherFileHandler::StrCopy
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp	Tue Sep 14 22:17:30 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp	Wed Sep 15 12:45:22 2010 +0300
@@ -40,7 +40,7 @@
 #include "mmmtpvideodbdefs.h"
 #include "tobjectdescription.h"
 
-const TInt KStorageRootMaxLength = 10;
+_LIT( KMTPNoBackupFolder, "nobackup\\" );
 
 #ifdef _DEBUG
 static const TInt KMtpMaxStringDescLength = KMtpMaxStringLength - 1;
@@ -109,12 +109,17 @@
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataVideoAccess::OpenDatabase" ) );
 
-    iRfs.CreatePrivatePath( iStoreNum );
-    TInt err = iRfs.SetSessionToPrivate( iStoreNum );
+    TFileName dbFileName;
+    TDriveUnit dbDrive( iStoreNum );
+    iRfs.PrivatePath( dbFileName );
+    dbFileName.Insert( 0, dbDrive.Name() );
+    dbFileName.Append( KMTPNoBackupFolder );
+    dbFileName.Append( KMtpVideoDb );
+    TInt err = iRfs.MkDirAll( dbFileName );
 
-    if ( err == KErrNone )
+    if ( err == KErrNone || err == KErrAlreadyExists )
         {
-        TRAP( err, iFileStore = CPermanentFileStore::OpenL( iRfs, KMtpVideoDb, EFileRead | EFileWrite ) );
+        TRAP( err, iFileStore = CPermanentFileStore::OpenL( iRfs, dbFileName, EFileRead | EFileWrite ) );
 
         if ( err == KErrNone )
             TRAP( err, iFileStore->SetTypeL( iFileStore->Layout() ) );
@@ -127,8 +132,8 @@
 
         if ( err != KErrNone )
             {
-            iRfs.Delete( KMtpVideoDb );   // delete first before creating a new one
-            TRAP( err, iFileStore = CPermanentFileStore::CreateL( iRfs, KMtpVideoDb, EFileRead | EFileWrite ) );
+            iRfs.Delete( dbFileName );   // delete first before creating a new one
+            TRAP( err, iFileStore = CPermanentFileStore::CreateL( iRfs, dbFileName, EFileRead | EFileWrite ) );
             PRINT1( _L( "MM MTP <> OpenDatabase RDbNamedDatabase::CreateL, err = %d" ), err );
 
             if ( err == KErrNone )
@@ -149,7 +154,7 @@
                 if ( KErrNone != err )
                     {
                     iDatabase.Close();
-                    iRfs.Delete( KMtpVideoDb );
+                    iRfs.Delete( dbFileName );
                     }
                 }
             }
@@ -160,13 +165,7 @@
         iDbOpened = ETrue;
         }
 
-    TBuf<KStorageRootMaxLength> storeRoot;
-    if( PathInfo::GetRootPath( storeRoot, iStoreNum ) == KErrNone )
-        {
-        iRfs.SetSessionPath( storeRoot );
-        }
-
-    PRINT( _L( "MM MTP <= CMmMtpDpMetadataVideoAccess::OpenDatabase" ) );
+    PRINT1( _L( "MM MTP <= CMmMtpDpMetadataVideoAccess::OpenDatabase err = %d" ), err );
     return err;
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/inc/testcollectionplugintype.h	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/data/e0000201.rss	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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	Wed Sep 15 12:45:22 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