diff -r fcaf4606ba4e -r 9d4397b300d1 mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/src/testexternaldisplay.cpp --- /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 + +// 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(); + } +