--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/src/testexternaldisplay.cpp Mon Oct 18 12:47:26 2010 +0100
@@ -0,0 +1,314 @@
+// 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:
+//
+
+#include "testvideoplayer2.h"
+#include <bautils.h>
+
+// file names used to control plugin through their existence. If any are new files are added make sure
+// they are also added to TidyFiles().
+_LIT(KInitExtDisplayHDMI, "c:\\vclntavi\\InitExtDisplayHDMI.txt");
+_LIT(KInitExtDisplayAnalog, "c:\\vclntavi\\InitExtDisplayAnalog.txt");
+_LIT(KConnectExtDisplayOverHDMI, "c:\\vclntavi\\ConnectExtDisplayOverHDMI.txt");
+_LIT(KConnectExtDisplayOverAnalog, "c:\\vclntavi\\ConnectExtDisplayOverAnalog.txt");
+_LIT(KDisconnectExtDisplay, "c:\\vclntavi\\DisconnectExtDisplay.txt");
+void TidyFiles()
+ {
+ RFs fs;
+ TInt error= fs.Connect();
+ if(error == KErrNone)
+ {
+ if(BaflUtils::FileExists(fs, KInitExtDisplayHDMI))
+ {
+ fs.Delete(KInitExtDisplayHDMI);
+ }
+ if(BaflUtils::FileExists(fs, KInitExtDisplayAnalog))
+ {
+ fs.Delete(KInitExtDisplayAnalog);
+ }
+ if(BaflUtils::FileExists(fs, KConnectExtDisplayOverHDMI))
+ {
+ fs.Delete(KConnectExtDisplayOverHDMI);
+ }
+ if(BaflUtils::FileExists(fs, KConnectExtDisplayOverAnalog))
+ {
+ fs.Delete(KConnectExtDisplayOverAnalog);
+ }
+ if(BaflUtils::FileExists(fs, KDisconnectExtDisplay))
+ {
+ fs.Delete(KDisconnectExtDisplay);
+ }
+ }
+}
+
+_LIT(KFilename, "filename");
+
+//
+// RTestMediaClientExternalDisplay
+//
+
+/**
+ * RTestMediaClientExternalDisplay::Constructor
+ */
+RTestMediaClientExternalDisplay::RTestMediaClientExternalDisplay(const TDesC& aTestName)
+ : RTestVclnt2AviPlayerStep(aTestName, aTestName, KFilename, KErrNone)
+ {
+ }
+
+/**
+ * RTestMediaClientExternalDisplay::NewL
+ */
+RTestMediaClientExternalDisplay* RTestMediaClientExternalDisplay::NewL(const TDesC& aTestName)
+ {
+ RTestMediaClientExternalDisplay* self = new (ELeave) RTestMediaClientExternalDisplay(aTestName);
+ return self;
+ }
+
+/**
+ * RTestMediaClientExternalDisplay::DoTestStepPreambleL
+ */
+TVerdict RTestMediaClientExternalDisplay::DoTestStepPreambleL()
+ {
+ TidyFiles();
+
+ TVerdict verdict = SetInitialConnectionType();
+ if(verdict != EPass)
+ {
+ return verdict;
+ }
+
+ verdict = SetConnectionTypeNotification();
+ if(verdict != EPass)
+ {
+ return verdict;
+ }
+
+ verdict = SetExternalDisplayControl();
+ if(verdict != EPass)
+ {
+ return verdict;
+ }
+
+ return RTestVclnt2AviPlayerStep::DoTestStepPreambleL();
+ }
+
+TVerdict RTestMediaClientExternalDisplay::SetInitialConnectionType()
+ {
+ // Create a file as named in ini file. When external display test plugin is constructed it
+ // checks to see what filenames exist and sets inital connection type as appropriate.
+ // If string does not exist in ini file then plugin initialises with exetrnal display disconnected.
+ if(GetStringFromConfig(iSectName, _L("initialExternalDisplayType"), iInitialExternalDisplayTypeFilename))
+ {
+ if(iInitialExternalDisplayTypeFilename.Compare(KInitExtDisplayHDMI) == 0)
+ {
+ INFO_PRINTF2(_L("Creating %S"), &iInitialExternalDisplayTypeFilename);
+ INFO_PRINTF1(_L("External HDMI Display initially connected"));
+ }
+ else if(iInitialExternalDisplayTypeFilename.Compare(KInitExtDisplayAnalog) == 0)
+ {
+ INFO_PRINTF2(_L("Creating %S"), &iInitialExternalDisplayTypeFilename);
+ INFO_PRINTF1(_L("External Analog Display initially connected"));
+ }
+ else
+ {
+ INFO_PRINTF2(_L("External display setting unkown, %S"), &iInitialExternalDisplayTypeFilename);
+ return EInconclusive;
+ }
+
+ // connect to file system and open file
+ RFs fs;
+ if(fs.Connect() != KErrNone)
+ {
+ return EInconclusive;
+ }
+ RFile file;
+ if(file.Replace(fs, iInitialExternalDisplayTypeFilename, EFileWrite) != KErrNone)
+ {
+ fs.Close();
+ return EInconclusive;
+ }
+
+ file.Close();
+ fs.Close();
+ }
+ else
+ {
+ INFO_PRINTF1(_L("External Display initially disconnected!"));
+ }
+
+ return EPass;
+ }
+
+TVerdict RTestMediaClientExternalDisplay::SetConnectionTypeNotification()
+ {
+ // Now create file for the next connection type. This is used to emit a connect or disocnnect notification
+ // after a few seconds. Note that if the initial and next connection types are the same the external
+ // display test plugin will not emit a notification.
+ if(GetStringFromConfig(iSectName, _L("nextExternalDisplayType"), iNextExternalDisplayTypeFilename))
+ {
+ if(iNextExternalDisplayTypeFilename.Compare(KConnectExtDisplayOverHDMI) == 0)
+ {
+ INFO_PRINTF2(_L("Creating %S"), &iNextExternalDisplayTypeFilename);
+ INFO_PRINTF1(_L("External HDMI Display to be connected and notification emitted"));
+ }
+ else if(iNextExternalDisplayTypeFilename.Compare(KConnectExtDisplayOverAnalog) == 0)
+ {
+ INFO_PRINTF2(_L("Creating %S"), &iNextExternalDisplayTypeFilename);
+ INFO_PRINTF1(_L("External Analog Display to be connected and notification emitted"));
+ }
+ else if(iNextExternalDisplayTypeFilename.Compare(KDisconnectExtDisplay) == 0)
+ {
+ INFO_PRINTF2(_L("Creating %S"), &iNextExternalDisplayTypeFilename);
+ INFO_PRINTF1(_L("External Display to be disconnected and notification emitted"));
+ }
+ else
+ {
+ INFO_PRINTF2(_L("External display switch setting unkown, %S"), &iNextExternalDisplayTypeFilename);
+ return EInconclusive;
+ }
+
+ // connect to file system and open file
+ RFs fs;
+ if(fs.Connect() != KErrNone)
+ {
+ return EInconclusive;
+ }
+ RFile file;
+ if(file.Replace(fs, iNextExternalDisplayTypeFilename, EFileWrite) != KErrNone)
+ {
+ fs.Close();
+ return EInconclusive;
+ }
+
+ file.Close();
+ fs.Close();
+ }
+ else
+ {
+ INFO_PRINTF1(_L("No External Display switching requested!"));
+ }
+
+ return EPass;
+ }
+
+TVerdict RTestMediaClientExternalDisplay::SetExternalDisplayControl()
+ {
+ if(GetBoolFromConfig(iSectName, _L("externalDisplayControl"), iExternalDisplayControl))
+ {
+ INFO_PRINTF2(_L("External display switch control set to %d"), iExternalDisplayControl);
+ }
+ else
+ {
+ return EInconclusive;
+ }
+ return EPass;
+ }
+
+/**
+ * RTestMediaClientExternalDisplay::DoTestStepPostambleL
+ */
+TVerdict RTestMediaClientExternalDisplay::DoTestStepPostambleL()
+ {
+ RFs fs;
+ // connect to file system and open file
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ if((iInitialExternalDisplayTypeFilename.Length()!= 0) && BaflUtils::FileExists(fs, iInitialExternalDisplayTypeFilename))
+ {
+ User::LeaveIfError(fs.Delete(iInitialExternalDisplayTypeFilename));
+ }
+
+ if((iNextExternalDisplayTypeFilename.Length()!= 0) && BaflUtils::FileExists(fs, iNextExternalDisplayTypeFilename))
+ {
+ User::LeaveIfError(fs.Delete(iNextExternalDisplayTypeFilename));
+ }
+
+ CleanupStack::PopAndDestroy(1); //fs
+
+ return RTestVclnt2AviPlayerStep::DoTestStepPostambleL();
+ }
+
+/**
+ * RTestMediaClientExternalDisplay::FsmL
+ */
+void RTestMediaClientExternalDisplay::FsmL(TVclntTestPlayEvents aEventCode)
+ {
+ if (FsmCheck(aEventCode))
+ {
+ switch (aEventCode)
+ {
+ case EVPIdle:
+ HandleIdleL();
+ break;
+
+ case EVPOpenComplete:
+ HandleOpenCompleteL();
+ break;
+
+ case EVPPrepareComplete:
+ HandlePrepareCompleteL();
+ break;
+
+ case EVPPlayComplete:
+ HandlePlayCompleteL();
+ break;
+ }
+ }
+ }
+
+void RTestMediaClientExternalDisplay::HandleIdleL()
+ {
+ // Open iVideoPlayer
+ INFO_PRINTF2(_L("iVideoPlayer2->OpenFileL() %S"), &iFilename);
+ iVideoPlayer2->OpenFileL(iFilename, KMmfTestAviPlayControllerUid);
+ PrepareState(EVPOpenComplete, KErrNone);
+ }
+
+void RTestMediaClientExternalDisplay::HandleOpenCompleteL()
+ {
+ // Prepare iVideoPlayer2
+ INFO_PRINTF1(_L("iVideoPlayer2->Prepare()"));
+ iVideoPlayer2->Prepare();
+ PrepareState(EVPPrepareComplete, KErrNone);
+ }
+
+void RTestMediaClientExternalDisplay::HandlePrepareCompleteL()
+ {
+ // Add display window using default values - ie. video extent & window clipping
+ // defaulted to whole window
+ INFO_PRINTF1(_L("iVideoPlayer2->AddDisplayWindowL()"));
+ iVideoPlayer2->AddDisplayWindowL(iWs, *iScreen, *iWindow);
+
+ // set external display control
+ iVideoPlayer2->SetExternalDisplaySwitchingL((*iScreen).GetScreenNumber(), iExternalDisplayControl);
+
+ // trigger the video to start playing
+ StartPlayback();
+ }
+
+void RTestMediaClientExternalDisplay::HandlePlayCompleteL()
+ {
+ iTestStepResult = EPass;
+ CActiveScheduler::Stop();
+ }
+
+void RTestMediaClientExternalDisplay::StartPlayback()
+ {
+ iError = KErrTimedOut;
+ INFO_PRINTF1(_L("iVideoPlayer2->Play()"));
+ PrepareState(EVPPlayComplete, KErrNone);
+ iVideoPlayer2->Play();
+ }
+