# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1258980467 -7200 # Node ID ed9695c8bcbe372887f99325c77cd911f41c4d71 Revision: 200948 diff -r 000000000000 -r ed9695c8bcbe group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2006 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 / videotelephony +* +*/ + + + +#include "../vtprotocolplugins/group/bld.inf" +#include "../vtengines/group/bld.inf" +#include "../vtuis/group/bld.inf" +#include "../videotelephony_plat/group/bld.inf" + +// End of File \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/layers.sysdef.xml Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,22 @@ + + +]> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe package_definition.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_definition.xml Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r ed9695c8bcbe sysdef_1_4_0.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_4_0.dtd Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2006 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: Includes all the Domain API specific bld.inf files, which +* export files. +* +*/ + + + +#include "../video_telephony_control_mediator_api/group/bld.inf" +#include "../video_telephony_media_configuration_api/group/bld.inf" diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_control_mediator_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_control_mediator_api/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,27 @@ +/* +* 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" +* 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: File that exports the files belonging to +: Video Telephony Control Mediator API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/videotelcontrolmediatorapi.h APP_LAYER_PLATFORM_EXPORT_PATH( videotelcontrolmediatorapi.h) diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_control_mediator_api/inc/videotelcontrolmediatorapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_control_mediator_api/inc/videotelcontrolmediatorapi.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,67 @@ +/* +* 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" +* 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: Video Telephony specific message services sent from Phone +* Application to Video Telephony. +* +*/ + + +#ifndef VIDEOTELCONTROLMEDIATORAPI_H +#define VIDEOTELCONTROLMEDIATORAPI_H + +// INCLUDES +#include + +/** The category UID for the messages in this header file. */ +const TUid KCatPhoneToVideotelCommands = { 0x200159A1 }; + +/** Version number of this API */ +const TInt KPhoneToVideotelCmdVersionMajor( 1 ); +const TInt KPhoneToVideotelCmdVersionMinor( 0 ); +const TInt KPhoneToVideotelCmdVersionBuild( 0 ); + +/** package for passing dataport name to Video Telephony */ +typedef TPckgBuf TDataPortPackage; + +/** Video Telephony related commands. */ +enum TPhoneToVideotelCommands + { + /** + * Commands Video Telephony to enable microphone. + */ + EVtCmdUnmute = 0, + + /** + * Commands Video Telephony to disable microphone. + */ + EVtCmdMute, + + /** + * Commands Video Telephony to use dataport. Command paramemeter is + * TDataPortPackage. This should be called when dataport is loaned. + * When this is sent, dataport recovery is allowed only after + * 1) later issued EVtCmdShutdown response is received. + * 2) call is ended by network/peer (i.e. local phone doesn't do hangup) + * 3) EPhoneCmdEndActiveCall command is received (see Mediator Commands To + * Telephony API) + * Otherwise H.245 (VT) signalling may fail if call is released in two + * stage. + */ + EVtCmdUseDataport, + + EVtCmdReleaseDataport + }; + +#endif // VIDEOTELCONTROLMEDIATORAPI_H + diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_control_mediator_api/video_telephony_control_mediator_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_control_mediator_api/video_telephony_control_mediator_api.metaxml Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,17 @@ + + + Video Telephony Control Mediator API + An interface for exchanging video telephony related commands (e.g. call initiation and termination) and providing data synchronization (e.g. contact data and audio mute state) between Phone and Video Telephone applications. + c++ + vtengines + + + + + + + + no + no + + diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_media_configuration_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_media_configuration_api/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Video Telephony Media Configuration API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/VideoTelephonyDomainPSKeys.h APP_LAYER_PLATFORM_EXPORT_PATH(videotelephonydomainpskeys.h) diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_media_configuration_api/inc/VideoTelephonyDomainPSKeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_media_configuration_api/inc/VideoTelephonyDomainPSKeys.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 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: Video Telephony Domain Publish and Subscribe keys. +* +*/ + + +#ifndef VIDEOTELEPHONYDOMAINPSKEYS_H +#define VIDEOTELEPHONYDOMAINPSKEYS_H + +#include + + +// CONSTANTS + +/** +* Media Configuration API for video telephony. +*/ +const TUid KPSUidVTMediaConfiguration = {0x1020736A}; + +/** +* Preferred camera that the application should use as source. +* @type RProperty::EInt +*/ +const TUint32 KPSPreferredCamera = 0x00000000; +enum EPSPreferredCamera + { + EPSPreferredCameraUnknown, + EPSPreferredCameraInwards, + EPSPreferredCameraOutwards + }; + + +#endif // VIDEOTELEPHONYDOMAINPSKEYS_H + +// End of file \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe videotelephony_plat/video_telephony_media_configuration_api/video_telephony_media_configuration_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videotelephony_plat/video_telephony_media_configuration_api/video_telephony_media_configuration_api.metaxml Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,17 @@ + + + Video Telephony Media Configuration API + An interface to access transient (run-time) media configuration related to video telephony, e.g. preferred camera in VT. + c++ + vtengines + + + + + + + + no + no + + diff -r 000000000000 -r ed9695c8bcbe vtengines/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2004 - 2006 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 for Vtengines subsystem. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +// Include components' bld.inf files +#include "../videoteleng/Group/bld.inf" +#include "../vtmediatorplugin/group/bld.inf" + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Bmarm/VIDEOTELENGU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Bmarm/VIDEOTELENGU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,8 @@ +EXPORTS + Audio__C11CVtEngModel @ 1 NONAME R3UNUSED ; CVtEngModel::Audio(void) const + CommandHandler__C11CVtEngModel @ 2 NONAME R3UNUSED ; CVtEngModel::CommandHandler(void) const + Extension__FRC4TUid @ 3 NONAME R3UNUSED ; Extension(TUid const &) + Media__C11CVtEngModel @ 4 NONAME R3UNUSED ; CVtEngModel::Media(void) const + NewL__11CVtEngModelR19MVtEngEventObserverR21MVtEngCommandObserver @ 5 NONAME R3UNUSED ; CVtEngModel::NewL(MVtEngEventObserver &, MVtEngCommandObserver &) + Session__C11CVtEngModel @ 6 NONAME R3UNUSED ; CVtEngModel::Session(void) const + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Bmarm/CSCALLCTRLU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Bmarm/CSCALLCTRLU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,3 @@ +EXPORTS + CreateFactory__Fv @ 1 NONAME R3UNUSED ; CreateFactory(void) + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Bwins/CSCALLCTRLU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Bwins/CSCALLCTRLU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,3 @@ +EXPORTS + ?CreateFactory@@YAPAVCVtCtlFactory@@XZ @ 1 NONAME ; class CVtCtlFactory * __cdecl CreateFactory(void) + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/EABI/CSCallCtrlU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/EABI/CSCallCtrlU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,3 @@ +EXPORTS + _Z13CreateFactoryv @ 1 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2004 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: videocallctrl build information file. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES +../Group/videocallctrl.mmp + +//PRJ_TESTMMPFILES +// CsCallCtrl CVT case. +//../tsrc/group/CsCallCtrl_CVT_Test.mmp + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Group/videocallctrl.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Group/videocallctrl.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2004 - 2006 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 is project specification file for the Video Call Control. +* +*/ + + +#include + +#include "../Inc/VtCtlConfig.hrh" + +// default vendor id +VENDORID VID_DEFAULT + +// Capability assignment. +CAPABILITY CAP_GENERAL_DLL + +TARGET cscallctrl.dll +TARGETTYPE dll +UID 0x1000008d 0x101F867F + +SOURCEPATH ../Src +SOURCE CVtCtlFactory.cpp +#if defined VTCALLCONTROLSTUB +// call state connected, previous state alerting +SOURCE CVtCtlCallControlStub.cpp +DOCUMENT CVtCtlCallControl.cpp +#else +SOURCE CVtCtlCallControl.cpp +DOCUMENT CVtCtlCallControlStub.cpp +#endif +SOURCE CVtCtlSessionContainer.cpp +SOURCE CVtCtlCallStatusMonitor.cpp +SOURCE CVtCtlLineMonitor.cpp +SOURCE CVtCtlVideoCall.cpp +SOURCE VtCtlPanic.cpp + +DOCUMENT ../Group/bld.inf + +USERINCLUDE ../Inc +SYSTEMINCLUDE ../../../../inc +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY etel.lib +LIBRARY etelmm.lib +DEBUGLIBRARY vtlogger.lib + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlCallControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlCallControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,137 @@ +/* +* Copyright (c) 2004 - 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: Call control +* +*/ + + + +#ifndef CVTCTLCALLCONTROL_H +#define CVTCTLCALLCONTROL_H + +// INCLUDES +#include +#include "MVtCtlCallControl.h" +#include "MVtCtlCallStatusObserver.h" +#include + +// FORWARD DECLARATIONS +class MVtCtlEventObserver; +class CVtCtlSessionContainer; + +// CLASS DECLARATION + +/** +* Call control implementation. +* +* @lib CSCallCtrl.lib +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlCallControl ) : + public CBase, + public MVtCtlCallControl, + public MVtCtlCallStatusObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEventObserver reference to event observer + * @param aCommandObserver reference to command observer + * @return call control + */ + static CVtCtlCallControl* NewL( + MVtCtlEventObserver& aEventObserver ); + + /** + * Destructor. + */ + virtual ~CVtCtlCallControl(); + + public: // From MVtCtlCallControl + + /** + * @see MVtCtlCallControl::GetDuration + */ + virtual TInt GetDuration( + TVtCtlSessionId aId, + TVtCtlDuration& aDuration ); + + + /** + * @see MVtCtlCallControl::GetSessionInfoL + */ + virtual void GetSessionInfoL( + TVtCtlSessionId aId, + TDes8& aInfo ); + + /** + * @see MVtCtlCallControl::GetSessionState + */ + virtual TVtCtlState GetSessionState( + TVtCtlSessionId aId ) const; + + /** + * @see MVtCtlCallControl::GetPreviousPreviousState + */ + virtual TVtCtlState GetPreviousPreviousState( + TVtCtlSessionId aId ) const; + + public: // from MVtCtlCallStatusObserver + + /** + * @see MVtCtlCallStatusObserver::HandleCallStatusChangeL + */ + virtual void HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ); + + private: + + /** + * C++ constructor. + */ + CVtCtlCallControl( + MVtCtlEventObserver& aEventObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: + + /** + * Validates that data passed as descriptor is of + * correct type. If not leaves KErrNotSupported. + * @param aData TVtCtlType derived class represented as descriptor + * @param aExtension expected type + */ + static void ValidateDataExtensionL( + TDesC8& aData, + TInt aExtension ); + + private: // Data + + // Event observer + MVtCtlEventObserver& iEventObserver; + + // Container for ETel sessions + CVtCtlSessionContainer* iContainer; + }; + +#endif // CVTCTLCALLCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlCallStatusMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlCallStatusMonitor.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004 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: Monitors call status. +* +*/ + + + +#ifndef CVTCTLCALLSTATUSMONITOR_H +#define CVTCTLCALLSTATUSMONITOR_H + +// INCLUDES + +#include "MVtCtlCallControl.h" +#include +#include + +/** +* Array for resolving call status (TMobileCallStatus) transition validity. +* Transition to lower value is not possible with exception to 0 priority +* (always possible to go to idle state). Initial state is EStatusUnknown. +*/ +static const TInt KVtCtlStatusTransitionPriorities[] = + { + 1, // EStatusUnknown + 0, // EStatusIdle, possible from any + 2, // EStatusDialling + 2, // EStatusRinging + 3, // EStatusAnswering + 3, // EStatusConnecting + 4, // EStatusConnected + 5, // EStatusDisconnecting + // Status values below are not valid in video calls => should not happen. + 5, // EStatusDisconnectingWithInband + 0, // EStatusReconnectPending + 0, // EStatusHold + 0, // EStatusWaitingAlternatingCallSwitch + 0, // EStatusTransferring + 0 // EStatusTransferAlerting + }; + +// FORWARD DECLARATIONS +class MVtCtlCallStatusObserver; + +// CLASS DECLARATION + +/** +* Monitor for call status +* +* @lib CSCallCtrl +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlCallStatusMonitor ) : public CActive + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aCall call subsession + * @param aObserver call status observer + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + CVtCtlCallStatusMonitor( + RMobileCall& aCall, + MVtCtlCallStatusObserver& aObserver ); + + /** + * Destructor. + */ + virtual ~CVtCtlCallStatusMonitor(); + + public: // New functions + + /** + * Starts monitoring + */ + void Start(); + + private: // From CActive + + /** + * Cancel monitoring. + */ + virtual void DoCancel(); + + /** + * Handles call status change. + */ + virtual void RunL(); + + /** + * Handles leave in RunL. + * @param aError error code + * @return KErrNone + */ + virtual TInt RunError( TInt aError ); + + public: // New functions + + /** + * Maps Etel status to internal state + * @param aStatus mobile call status + * @return session state, see TVtCtlState + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + static MVtCtlCallControl::TVtCtlState MapState( + const RMobileCall::TMobileCallStatus aStatus ); + + /** + * Checks if call state transition specified by arguments is legal. + * @param aNewState proposed new call state + * @param aCurrentState current call state + * @return ETrue if transition is valid + */ + static TBool IsLegalNewState( + const RMobileCall::TMobileCallStatus aNewState, + const RMobileCall::TMobileCallStatus aCurrentState ); + + private: // Data + + // Data call + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileCall& iCall; + + // Observer for call status changes + MVtCtlCallStatusObserver& iObserver; + + // Call status and previous status + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileCall::TMobileCallStatus iCallStatus; + RMobileCall::TMobileCallStatus iPreviousStatus; + }; + +#endif // CVTCTLCALLSTATUSMONITOR_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlFactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlFactory.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2004 - 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: Factory for creating call control +* +*/ + + + +#ifndef CVTCTLFACTORY_H +#define CVTCTLFACTORY_H + +// INCLUDES +#include +#include "VtCtlDefs.h" + +// CONSTANTS +_LIT( KVtCtlLibraryName, "CSCallCtrl" ); + +// FORWARD DECLARATIONS +class MVtCtlEventObserver; +class MVtCtlCommandObserver; +class MVtCtlCallControl; + +/** +* Factory class for instantiating call control. +* +* @lib CSCallCtrl +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlFactory ) : public CBase + { + public: + + /** + * Instantiates call control + * @param aEventObserver + * @param aCommandObserver + * @return call control + */ + virtual MVtCtlCallControl* CreateCallControlL( + MVtCtlEventObserver& aEventObserver ); + + /** + * Destructs call control created with CreateCallControlL. + * @param aCallControl pointer to call control instance + */ + virtual void Delete( MVtCtlCallControl* aCallControl ); + }; + +/** +* Creates call control factory +* @return factory +*/ +IMPORT_C CVtCtlFactory* CreateVtCtlFactory(); + +#endif // CVTCTLFACTORY_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlLineMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlLineMonitor.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2004 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: Monitors new calls on data line. +* +*/ + + + +#ifndef CVTCTLLINEMONITOR_H +#define CVTCTLLINEMONITOR_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS + +class MVtCtlLineEventObserver; + +// CLASS DECLARATION + +/** +* Monitor for new calls +* +* @lib CSCallCtrl +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlLineMonitor ) : public CActive + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aLine line subsession + * @param aObserver line event observer + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + CVtCtlLineMonitor( + RMobileLine& aLine, + MVtCtlLineEventObserver& aObserver); + + /** + * Destructor. + */ + virtual ~CVtCtlLineMonitor(); + + public: // New functions + + /** + * Starts monitoring + */ + void Start(); + + private: // Functions from CActive + + /** + * Cancel monitoring. + */ + virtual void DoCancel(); + + /** + * Handles new call on line. + */ + virtual void RunL(); + + /** + * Error handler for leave in RunL + * @param aError error code + * @return KErrNone + */ + virtual TInt RunError( TInt aError ); + + private: // Data + + // Data line + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileLine& iLine; + + // Observer for new calls on line + MVtCtlLineEventObserver& iObserver; + + // Call name + TName iName; + + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileCall::TMobileCallStatus iLastLineStatus; + RMobileCall::TMobileCallStatus iLineStatus; + }; + +#endif // CVTCTLLINEMONITOR_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlSessionContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlSessionContainer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2004 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: Container for ETel session and subsessions +* +*/ + + + +#ifndef CVTCTLSESSIONCONTAINER_H +#define CVTCTLSESSIONCONTAINER_H + +// INCLUDES +#include +#include +#include "MVtCtlLineEventObserver.h" +#include "MVtCtlCallStatusObserver.h" +#include "MVtCtlCallControl.h" + +// FORWARD DECLARATIONS +class CVtCtlLineMonitor; +class CVtCtlCallMonitor; +class CVtCtlVideoCall; + +// CLASS DECLARATION + +/** +* Container for ETel (sub)session(s). +* +* @lib CSCallCtrl +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlSessionContainer ) : + public CBase, + public MVtCtlLineEventObserver, + public MVtCtlCallStatusObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aObserver call status observer + */ + static CVtCtlSessionContainer* NewL( + MVtCtlCallStatusObserver& aObserver ); + + /** + * Destructor. + */ + virtual ~CVtCtlSessionContainer(); + + public: // MVtCtlLineEventObserver + + /** + * @see MVtCtlLineEventObserver::HandleLineEventL + */ + virtual void HandleLineEventL( + const TLineEvent aEvent, + TDesC& aCallName ); + + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + virtual void HandleLineEventL( + const TLineEvent aEvent, + const RMobileCall::TMobileCallStatus aStatus ); + + public: // MVtCtlCallStatusObserver + + /** + * @see MVtCtlLineEventObserver::HandleCallStatusChangeL + */ + virtual void HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ); + + public: // New functions + + /** + * Finds call by name. + * @param aCallName search key + * @return call or NULL if not found + */ + CVtCtlVideoCall* FindCall( TDesC& aCallName ) const; + + /** + * Finds call by session id. + * @param aId search key + * @return call or NULL if not found + */ + CVtCtlVideoCall* FindCall( TVtCtlSessionId aId ) const; + + /** + * Gets sessions. + * @param aArray sessions are returned in this + * @return number of sessions in aArray + */ + TInt GetSessions( RVtCtlSessionIdArray& aArray ) const; + + private: + + /** + * Removes call from array and deletes it. + * @param aId session id + */ + void DestructCall( TVtCtlSessionId aId ); + + /** + * Checks that call is of correct type (multimedia) + * @param aName call object + * @param aName call name + * @return ETrue if call is multimedia call + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + TBool CheckCallTypeL( + RMobileCall& aCall, + const TName& aName ); + + /** + * Initializes video call object + * @param aCallName call name + * @return ETrue if call was initialized + */ + TBool InitCallL( const TName& aCallName ); + + private: + + /** + * C++ constructor. + * @param aObserver call status observer + */ + CVtCtlSessionContainer( MVtCtlCallStatusObserver& aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: + + /** + * Class for maintaining session identities + */ + class TVtCtlSessionIdentities + { + public: + // c++ default constructor + TVtCtlSessionIdentities(); + + /** + * Create new session id + * @return session id + */ + TVtCtlSessionId Create(); + + /** + * Returns current session id + * @return session id + */ + TVtCtlSessionId Current() const; + + private: + // Last session id + TVtCtlSessionId iCurrentId; + }; + + private: // Data + + // ETel session + RTelServer iServer; + + // Phone session + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobilePhone iPhone; + + // Data line + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileLine iLine; + + // Monitors new calls on line. + CVtCtlLineMonitor* iLineMonitor; + + // Array of ongoing video calls + RPointerArray iCalls; + + // Session id management + TVtCtlSessionIdentities iSessionIds; + + // Call status observer + MVtCtlCallStatusObserver& iObserver; + }; + +#endif // CVTCTLSESSIONCONTAINER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/CVtCtlVideoCall.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/CVtCtlVideoCall.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2004 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: Video call abstraction +* +*/ + + + +#ifndef CVTCTLVIDEOCALL_H +#define CVTCTLVIDEOCALL_H + +// INCLUDES +#include +#include "MVtCtlCallControl.h" +#include "MVtCtlCallStatusObserver.h" + + +// FORWARD DECLARATIONS +class CVtCtlCallStatusMonitor; + +// CLASS DECLARATION + +/** +* Video call abstraction +* +* @lib CSCallCtrl +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtCtlVideoCall ) : + public CBase, + public MVtCtlCallStatusObserver + { + public: + + /** + * Call information + */ + struct TVtCtlCallInfo + { + // Session state + MVtCtlCallControl::TVtCtlState iStatus; + // Previous session state + MVtCtlCallControl::TVtCtlState iPreviousStatus; + // Session id + TVtCtlSessionId iId; + // Session direction + MVtCtlCallControl::TVtCtlDirection iDirection; + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aDataLine line subsession + * @param aId session id + * @param aObserver call status observer + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + static CVtCtlVideoCall* NewL( + RMobileLine& aDataLine, + TVtCtlSessionId aId, + MVtCtlCallStatusObserver& aObserver + ); + + /** + * Destructor. + */ + virtual ~CVtCtlVideoCall(); + + public: // New functions + + /** + * Returns call info + * @return reference to call info + */ + const CVtCtlVideoCall::TVtCtlCallInfo& CallInfo() const; + + /** + * Returns Etel call info + * @return call info + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + const RMobileCall::TMobileCallInfoV1& MobileInfo() const; + + /** + * Opens call subsession and starts monitoring call status. + * @param aCallName call name + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + void InitializeCallL( RMobileCall& aCall ); + + /** + * Updates call information from ETel + * @return Symbian OS error code + */ + TInt UpdateCallInfo(); + + /** + * Returns call duration from Etel + * @param aDuration duration + * @return Symbian OS error code + */ + TInt GetDuration( TVtCtlDuration& aDuration ); + + /** + * Obtains video call state from the server and returns it. + * @param aState updated call state + * @return Symbian OS error code + * @since S60 3.1 + */ + TInt GetCallState( MVtCtlCallControl::TVtCtlState& aState ); + + protected: // From MVtCtlCallStatusObserver + + /** + * @see MVtCtlCallStatusObserver::HandleCallStatusChangeL + */ + virtual void HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ); + + private: + + /** + * C++ constructor. + * @param aDataLine data line + * @param aId session id + * @param aObserver observer + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + CVtCtlVideoCall( + RMobileLine& aDataLine, + TVtCtlSessionId aId, + MVtCtlCallStatusObserver& aObserver ); + + private: // Data + + // Call information + TVtCtlCallInfo iCallInfo; + + // Etel call + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileCall* iCall; + + // Data line + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileLine& iLine; + + // Etel call information + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RMobileCall::TMobileCallInfoV1 iMobileCallInfo; + + // Call status monitor + CVtCtlCallStatusMonitor* iStatusMonitor; + + // Call status observer + MVtCtlCallStatusObserver& iObserver; + }; + +#endif // CVTCTLVIDEOCALL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/MVtCtlCallControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/MVtCtlCallControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2004 - 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: Call control interface +* +*/ + + + +#ifndef MVTCTLCALLCONTROL_H +#define MVTCTLCALLCONTROL_H + +// INCLUDES +#include "VtCtlDefs.h" +#include "TVtCtlType.h" + +// CLASS DECLARATION + +/** +* Call control class +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class MVtCtlCallControl + { + public: // new functions + + /** + * Session state + * EIdle idle, no connection + * EInitializing initializing MO session + * EAlerting alerting at remote end + * ERinging incoming session ringing + * EConnected session is established + * EDisconnecting disconnecting session + */ + enum TVtCtlState { + EUnknown, // 0 + EIdle, // 1 + EInitializing, // 2 + EAlerting, // 3 + ERinging, // 4 + EConnected, // 5 + EDisconnecting // 6 + }; + + /** + * Session direction + * EDirectionUnknown unknown direction + * EDirectionMobileOriginated MO session + * DirectionMobileTerminated MT session + */ + enum TVtCtlDirection + { + EDirectionUnknown, + EDirectionMobileOriginated, + DirectionMobileTerminated + }; + + /** + * Gets session duration + * @param aId session id + * @param aDuration session duration + * @return Symbian OS error code + */ + virtual TInt GetDuration( + TVtCtlSessionId aId, + TVtCtlDuration& aDuration ) = 0; + + /** + * Gets information on a session. + * @param aId session id + * @param aInfo packetized object derived from TVtCtlType + */ + virtual void GetSessionInfoL( + TVtCtlSessionId aId, + TDes8& aInfo ) = 0; + + /** + * Returns session state + * @param aId session id + * @return session state + */ + virtual TVtCtlState GetSessionState( + TVtCtlSessionId aId ) const = 0; + + /** + * Returns previous session state + * @param aId session id + * @return session state + */ + virtual TVtCtlState GetPreviousPreviousState( + TVtCtlSessionId aId ) const = 0; + + }; + +#endif // MVTCTLCALLCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/MVtCtlCallStatusObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/MVtCtlCallStatusObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2004 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: Call status observer interface +* +*/ + + + +#ifndef MVTCTLCALLSTATUSOBSERVER_H +#define MVTCTLCALLSTATUSOBSERVER_H + +// INCLUDES +#include "MVtCtlCallControl.h" + +// CLASS DECLARATION + +/** +* Call status observer interface +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class MVtCtlCallStatusObserver + { + public: // new functions + + /** + * Handles call status change. + * @param aId session id + * @param aStatus new session status + * @param aPreviousStatus previous session status + */ + virtual void HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ) = 0; + }; + +#endif // MVTCTLCALLSTATUSOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/MVtCtlCommandObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/MVtCtlCommandObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2004 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: Session command observer interface +* +*/ + + + +#ifndef MVTCTLCOMMANDOBSERVER_H +#define MVTCTLCOMMANDOBSERVER_H + +// INCLUDES +#include "MVtCtlCallControl.h" + +// CLASS DECLARATION + +/** +* Session command observer interface +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class MVtCtlCommandObserver + { + public: // new functions + + /** + * Handles command completion in session control. + * @param aCmd command + * @param aResult completion result + */ + virtual void HandleVtSessionCommandL( + MVtCtlCallControl::TVtCtlCmd aCmd, + TInt aResult ) = 0; + }; + +#endif // MVTCTLCOMMANDOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/MVtCtlEventObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/MVtCtlEventObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2004 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: Session event observer interface. +* +*/ + + + +#ifndef MVTCTLEVENTOBSERVER_H +#define MVTCTLEVENTOBSERVER_H + +// INCLUDES +#include "VtCtlEvents.h" + +/** +* Session event observer interface +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class MVtCtlEventObserver + { + public: // new functions + + /** + * Handles event from session control. + * @param aEvent session event + * @param aParams parameters related to event. + * Actual type depends on event. + */ + virtual void HandleVtSessionEventL( + TInt aEvent, + TAny* aParams ) = 0; + }; + +#endif // MVTCTLEVENTOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/MVtCtlLineEventObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/MVtCtlLineEventObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2004 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: Observer interface for line events. +* +*/ + + + +#ifndef MVTCTLLINEEVENTOBSERVER_H +#define MVTCTLLINEEVENTOBSERVER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Observer interface for line events +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class MVtCtlLineEventObserver + { + public: // new functions + + /** + * ELineEventCallAdded call added to line + * ELineEventIncomingCall incoming call + * ELineEventStatusChange line status changed + */ + enum TLineEvent { + ELineEventCallAdded, + ELineEventIncomingCall, + ELineEventStatusChange + }; + + /** + * Event handler for line events. + * @param aEvent line event + * @param aCallName call name + */ + virtual void HandleLineEventL( + const TLineEvent aEvent, + TDesC& aCallName ) = 0; + + /** + * Event handler for line events. + * @param aEvent line event + * @param aCallName call name + * @param aStatus call status + */ + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + virtual void HandleLineEventL( + const TLineEvent aEvent, + const RMobileCall::TMobileCallStatus aStatus ) = 0; + }; + +#endif // MVTCTLLINEEVENTOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/TVtCtlType.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/TVtCtlType.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2004 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: Session type base class. +* +*/ + + + +#ifndef MVTCTLSESSIONINFO_H +#define MVTCTLSESSIONINFO_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Base class data types. +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class TVtCtlType + { + public: + + /** + * Returns extension id + * @return extension id + */ + inline TInt Extension() const; + + protected: + // Extension id to be used in defining actual data type. + TInt iExtension; + }; + +#include "TVtCtlType.inl" + +#endif // MVTCTLSESSIONINFO_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/TVtCtlType.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/TVtCtlType.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2004 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: Inline methods of class TVtCtlType. +* +*/ + + + +// ----------------------------------------------------------------------------- +// TVtCtlType::Extension +// Returns extension id. +// ----------------------------------------------------------------------------- +// +inline TInt TVtCtlType::Extension() const { return iExtension; } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlConfig.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlConfig.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2004 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 configuration file. +* +*/ + + +#ifndef VTCTLCONFIG_HRH +#define VTCTLCONFIG_HRH + +// INCLUDES + +/** +* Macro that chooses stub implementation for CsCallCtrl. +* In stub following attributes are effective +* - duration = 5 +* - session info returns : +* direction = MO +* state = connected +* previous state = alerting +* tel number = 0501234567 +* duration = 5 +*/ +//#define VTCALLCONTROLSTUB + +#endif // VTCTLCONFIG_HRH + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlDefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlDefs.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2004 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: General definitions for Video telephony call control +* +*/ + + + +#ifndef VTCTLDEFS_H +#define VTCTLDEFS_H + +// INCLUDES +#include + +// CONSTANTS + +// Null session id +const TInt KNullSessionId = -1; + +// Session id for active session +const TInt KActiveSessionId = -2; + +/** +* Active object priorities +*/ +const TInt KVtCtlCallAdditionMonitorPriority = CActive::EPriorityStandard; +const TInt KVtCtlCallStatusMonitorPriority = CActive::EPriorityStandard; + +/** +* Maximum length for telephone number +*/ +const TInt KVtCtlTelNumberLength = 100; + + +// DATA TYPES + +/** +* Remote end address +*/ +typedef TBuf TVtCtlTelNumber; + +/** +* Session duration +*/ +typedef TTimeIntervalSeconds TVtCtlDuration; + +/** +* Session array +*/ +typedef RArray RVtCtlSessionIdArray; + +/** +* Session id +*/ +typedef TInt TVtCtlSessionId; + +/** +* Session command +*/ +typedef TInt TVtCtlCmd; + +/** +* Extension ids +*/ +enum { + EVtCtlCSSessionInfoExtensionId = 1 + }; + +#endif // VTCTLDEFS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlEvents.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlEvents.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2004 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: Call control events +* +*/ + + + +#ifndef VTCLTDEFS_H +#define VTCLTDEFS_H + +// INCLUDES +#include + +// DATA TYPES +typedef TInt TVtCtlEvent; + +// CONSTANTS + +/** +* Session status is changed. aParams in +* MVtCtlEventObserver::HandleVtSessionEventL is of +* type MVtCtlCallControl::TVtCtlState +*/ +const TVtCtlEvent KVtCtlEventSessionStatusChanged = 1; + +/** +* Session duration is changed. aParams +* MVtCtlEventObserver::HandleVtSessionEventL is of +* type TVtCtlDuration +*/ +const TVtCtlEvent KVtCtlEventDurationChanged = 2; + +#endif // VTCLTDEFS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlPanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlPanic.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2004 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: Data types for call control +* +*/ + + + +#ifndef VTCTLPANIC_H +#define VTCTLPANIC_H + +// INCLUDES + +#include + +// CONSTANTS + +/** +* Panic text +*/ +_LIT( KVtCtlPanicCategory, "VtCSCall" ); + +// DATA TYPES + +/** +* Panic values +*/ +enum TVtCtlPanic { + //** Line subsession handle is null */ + EVtCtlPanicLineHandleNull, + /** Call subsession handle is null */ + EVtCtlPanicCallHandleNull + }; + +// FUNCTION PROTOTYPES + +/** +* Call control panic. +* @param aPanic panic value +*/ +void Panic( TVtCtlPanic aPanic ); + +#endif // VTCTLPANIC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlTypes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlTypes.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2004 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: Data types for call control +* +*/ + + +#ifndef VTCTLTYPES_H +#define VTCTLTYPES_H + +// INCLUDES +#include "VtCtlDefs.h" +#include "TVtCtlType.h" + +/** +* CS Session information. +* +* @lib CSCallCtrl +* @since 2.6 +*/ +class TVtCtlCSSessionInfoV1 : public TVtCtlType + { + public: // constructors + /** + * C++ default contructor. + */ + inline TVtCtlCSSessionInfoV1(); + + public: // data members + + // Session duration + TVtCtlDuration iDuration; + + // Address + TVtCtlTelNumber iTelNumber; + + // Session state + MVtCtlCallControl::TVtCtlState iState; + + // Previous session state + MVtCtlCallControl::TVtCtlState iPreviousState; + + // Session direction MO/MT + MVtCtlCallControl::TVtCtlDirection iDirection; + }; + +/** +* Data passed in MVtCtlEventObserver::HandleVtSessionEventL +* when event is KVtCtlEventSessionStatusChanged. +*/ +struct TVtCtlSessionStateEvent + { + /** + * Session state + */ + MVtCtlCallControl::TVtCtlState iState; + + /** + * Previous session state + */ + MVtCtlCallControl::TVtCtlState iPreviousState; + + /** + * Session id + */ + TVtCtlSessionId iSessionId; + }; + +#include "VtCtlTypes.inl" + +#endif // VTCTLTYPES_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Inc/VtCtlTypes.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Inc/VtCtlTypes.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2004 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: Data types for call control +* +*/ + + + +// ----------------------------------------------------------------------------- +// TVtCtlCSSessionInfoV1::TVtCtlSessionInfoV1 +// c++ default constructor +// ----------------------------------------------------------------------------- +// +inline TVtCtlCSSessionInfoV1::TVtCtlCSSessionInfoV1() + : iDuration( 0 ), + iState( MVtCtlCallControl::EUnknown ), + iPreviousState( MVtCtlCallControl::EUnknown ), + iDirection( MVtCtlCallControl::EDirectionUnknown ) + { + iExtension = EVtCtlCSSessionInfoExtensionId; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,252 @@ +/* +* Copyright (c) 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: CVtCtlCallControl class implementation. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include +#include "CVtCtlCallControl.h" +#include "MVtCtlEventObserver.h" +#include "CVtCtlSessionContainer.h" +#include "CVtCtlVideoCall.h" +#include "VtCtlTypes.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::NewL +// two-phase constructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl* CVtCtlCallControl::NewL( + MVtCtlEventObserver& aEventObserver ) + { + __VTPRINTENTER( "CVtCtlCallControl.NewL" ) + CVtCtlCallControl* self = new ( ELeave ) + CVtCtlCallControl( aEventObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtCtlCallControl.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::~CVtCtlCallControl +// Destructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl::~CVtCtlCallControl() + { + __VTPRINTENTER( "CVtCtlCallControl.~" ) + delete iContainer; + // uninitialize logging (if enabled) + VTLOGUNINIT + __VTPRINTEXIT( "CVtCtlCallControl.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::CVtCtlCallControl +// c++ constructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl::CVtCtlCallControl( + MVtCtlEventObserver& aEventObserver ) : + iEventObserver( aEventObserver ) + { + __VTPRINTENTER( "CVtCtlCallControl.CVtCtlCallControl" ) + __VTPRINTEXIT( "CVtCtlCallControl.CVtCtlCallControl" ) + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::ConstructL() + { + __VTPRINTENTER( "CVtCtlCallControl.ConstructL" ) + // initialize logging (if enabled) + VTLOGINIT + iContainer = CVtCtlSessionContainer::NewL( *this ); + __VTPRINTEXIT( "CVtCtlCallControl.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetDuration +// +// ----------------------------------------------------------------------------- +// +TInt CVtCtlCallControl::GetDuration( + TVtCtlSessionId aId, + TVtCtlDuration& aDuration ) + { + __VTPRINTENTER( "CVtCtlCallControl.GetDuration" ) + CVtCtlVideoCall* call = iContainer->FindCall( aId ); + TInt err( KErrNotFound ); + if ( call ) + { + err = call->GetDuration( aDuration ); + } + __VTPRINTEXIT( "CVtCtlCallControl.GetDuration" ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetSessionInfoL +// +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlCallControl::GetSessionInfoL( + TVtCtlSessionId aId, + TDes8& aInfo ) + { + __VTPRINTENTER( "CVtCtlCallControl.GetSessionInfoL" ) + ValidateDataExtensionL( aInfo, EVtCtlCSSessionInfoExtensionId ); + CVtCtlVideoCall* call = iContainer->FindCall( aId ); + if ( call ) + { + TPckg& pckg = + reinterpret_cast&>( aInfo ); + TVtCtlCSSessionInfoV1& info = pckg(); + TInt err( call->UpdateCallInfo() ); + if ( err == KErrNone ) + { + const RMobileCall::TMobileCallInfoV1& mobileInfo = call->MobileInfo(); + info.iDuration = mobileInfo.iDuration; + info.iTelNumber = mobileInfo.iRemoteParty.iRemoteNumber.iTelNumber; + __VTPRINT2( DEBUG_SESSION, "VtCtl: mobile dir=%d", + mobileInfo.iRemoteParty.iDirection ) + switch ( mobileInfo.iRemoteParty.iDirection ) + { + case RMobileCall::EMobileOriginated: + info.iDirection = EDirectionMobileOriginated; + break; + case RMobileCall::EMobileTerminated: + info.iDirection = DirectionMobileTerminated; + break; + case RMobileCall::EDirectionUnknown: + default: + info.iDirection = EDirectionUnknown; + break; + } + } + } + else + { + __VTPRINT( DEBUG_SESSION, "CallCtrl.GetSessionInfoL not found" ) + User::Leave( KErrNotFound ); + } + __VTPRINTEXIT( "CVtCtlCallControl.GetSessionInfoL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetState +// +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetSessionState( + TVtCtlSessionId aId ) const + { + __VTPRINTENTER( "CVtCtlCallControl.GetSessionState" ) + __VTPRINT2( DEBUG_SESSION, "CallCtrl.GetSessionState for id:%d",aId ) + MVtCtlCallControl::TVtCtlState state = EUnknown; + CVtCtlVideoCall* call = iContainer->FindCall( aId ); + if ( call ) + { + call->GetCallState( state ); + } + __VTPRINT3( DEBUG_SESSION, " callPtr=%d state=%d", (TInt) call, state ) + __VTPRINTEXIT( "CVtCtlCallControl.GetSessionState" ) + return state; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetPreviousState +// +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetPreviousPreviousState( + TVtCtlSessionId aId ) const + { + __VTPRINTENTER( "CVtCtlCallControl.GetPreviousPreviousState" ) + MVtCtlCallControl::TVtCtlState state = EUnknown; + const CVtCtlVideoCall* call = iContainer->FindCall( aId ); + if ( call ) + { + state = call->CallInfo().iPreviousStatus; + } + __VTPRINTEXIT( "CVtCtlCallControl.GetPreviousPreviousState" ) + return state; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::HandleCallStatusChangeL +// Notifies observer about call status change. +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ) + { + __VTPRINTENTER( "CVtCtlCallControl.HandleCallStatusChangeL" ) + __VTPRINT2( DEBUG_SESSION, " status=%d", (TInt) aStatus ) + + TVtCtlSessionStateEvent event; + event.iPreviousState = aPreviousStatus; + event.iState = aStatus; + event.iSessionId = aId; + + TAny* parameter = &event; + iEventObserver.HandleVtSessionEventL( + KVtCtlEventSessionStatusChanged, + parameter ); + __VTPRINTEXIT( "CVtCtlCallControl.HandleCallStatusChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::ValidateDataExtensionL +// Validates extension id of descriptor representation of data type. +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::ValidateDataExtensionL( + TDesC8& aData, + TInt aExtension ) + { + __VTPRINTENTER( "CVtCtlCallControl.ValidateDataExtensionL" ) + TVtCtlType type; + TPckg pckg(type); + TPtrC8 ptr( aData.Ptr(), sizeof( TVtCtlType ) ); + pckg.Copy( ptr ); + if ( type.Extension() != aExtension ) + { + __VTPRINT( DEBUG_SESSION, "CallCtrl.Validate not supported" ) + User::Leave( KErrNotSupported ); + } + __VTPRINTEXIT( "CVtCtlCallControl.ValidateDataExtensionL" ) + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControlStub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlCallControlStub.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 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: Stub version of call control. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlCallControl.h" +#include "MVtCtlEventObserver.h" +#include "CVtCtlSessionContainer.h" +#include "CVtCtlVideoCall.h" +#include "VtCtlTypes.h" +#include + +// CONSTANTS +_LIT( KVtCtlStubTelNumber, "0501234567" ); + +// Duration +const TInt KVtCtlStubDuration = 5; + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::NewL +// Two-phase constructor. +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl* CVtCtlCallControl::NewL( + MVtCtlEventObserver& aEventObserver ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.NewL" ) + CVtCtlCallControl* self = new ( ELeave ) + CVtCtlCallControl( aEventObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtCtlCallControlStub.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::~CVtCtlCallControl +// Destructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl::~CVtCtlCallControl() + { + __VTPRINTENTER( "CVtCtlCallControlStub.~" ) + delete iContainer; + // uninitialize logging + VTLOGUNINIT + __VTPRINTEXIT( "CVtCtlCallControlStub.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::CVtCtlCallControl +// c++ constructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallControl::CVtCtlCallControl( + MVtCtlEventObserver& aEventObserver) : + iEventObserver( aEventObserver ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.CVtCtlCallControl" ) + __VTPRINTEXIT( "CVtCtlCallControlStub.CVtCtlCallControl" ) + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::ConstructL() + { + __VTPRINTENTER( "CVtCtlCallControlStub.ConstructL" ) + // initialize logging + VTLOGINIT + iContainer = CVtCtlSessionContainer::NewL( *this ); + __VTPRINTEXIT( "CVtCtlCallControlStub.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetDuration +// +// ----------------------------------------------------------------------------- +// +TInt CVtCtlCallControl::GetDuration( + TVtCtlSessionId , + TVtCtlDuration& aDuration ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.GetDuration" ) + aDuration = 5; + __VTPRINTEXIT( "CVtCtlCallControlStub.GetDuration" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetSessionInfoL +// +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::GetSessionInfoL( + TVtCtlSessionId , + TDes8& aInfo ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.GetSessionInfoL" ) + + TPckg& pckg = + reinterpret_cast&>( aInfo ); + __VTPRINT( DEBUG_SESSION, "VtCtl:CallCtrl. 1" ) + TVtCtlCSSessionInfoV1& info = pckg(); + __VTPRINT( DEBUG_SESSION, "VtCtl:CallCtrl. 2" ) + info.iDirection = MVtCtlCallControl::EDirectionMobileOriginated; + info.iDuration = KVtCtlStubDuration; + info.iState = MVtCtlCallControl::EConnected; + info.iPreviousState = MVtCtlCallControl::EAlerting; + info.iTelNumber = KVtCtlStubTelNumber; + __VTPRINTEXIT( "CVtCtlCallControlStub.GetSessionInfoL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetState +// +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetSessionState( + TVtCtlSessionId ) const + { + __VTPRINTENTER( "CVtCtlCallControlStub.GetSessionState" ) + MVtCtlCallControl::TVtCtlState state = MVtCtlCallControl::EConnected; + __VTPRINTEXIT( "CVtCtlCallControlStub.GetSessionState" ) + return state; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::GetPreviousState +// +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl::TVtCtlState CVtCtlCallControl::GetPreviousPreviousState( + TVtCtlSessionId ) const + { + __VTPRINTENTER( "CVtCtlCallControlStub.GetPreviousPreviousState" ) + MVtCtlCallControl::TVtCtlState state = EAlerting; + __VTPRINTEXIT( "CVtCtlCallControlStub.GetPreviousPreviousState" ) + return state; + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::HandleCallStatusChangeL +// Notifies +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::HandleCallStatusChangeL( + TVtCtlSessionId , + MVtCtlCallControl::TVtCtlState , + MVtCtlCallControl::TVtCtlState ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.HandleCallStatusChangeL" ) + __VTPRINTEXIT( "CVtCtlCallControlStub.HandleCallStatusChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallControl::ValidateDataExtensionL +// Validates extension id of descriptor representation of data type. +// ----------------------------------------------------------------------------- +// +void CVtCtlCallControl::ValidateDataExtensionL( + TDesC8& , + TInt ) + { + __VTPRINTENTER( "CVtCtlCallControlStub.ValidateDataExtensionL" ) + __VTPRINTEXIT( "CVtCtlCallControlStub.ValidateDataExtensionL" ) + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlCallStatusMonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlCallStatusMonitor.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,227 @@ +/* +* Copyright (c) 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: Monitors call status. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlCallStatusMonitor.h" +#include "MVtCtlCallStatusObserver.h" +#include "VtCtlDefs.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::CVtCtlCallStatusMonitor +// C++ constructor +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +CVtCtlCallStatusMonitor::CVtCtlCallStatusMonitor( + RMobileCall& aCall, + MVtCtlCallStatusObserver& aObserver ) : + CActive( KVtCtlCallStatusMonitorPriority ), + iCall( aCall ), + iObserver( aObserver ), + iCallStatus( RMobileCall::EStatusUnknown ), + iPreviousStatus( RMobileCall::EStatusUnknown ) + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.CVtCtlCallStatusMonitor" ) + CActiveScheduler::Add( this ); + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.CVtCtlCallStatusMonitor" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::~CVtCtlCallStatusMonitor +// destructor +// ----------------------------------------------------------------------------- +// +CVtCtlCallStatusMonitor::~CVtCtlCallStatusMonitor() + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.~" ) + Cancel(); + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.~" ) + } + + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::Start +// Starts monitoring +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlCallStatusMonitor::Start() + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.Start" ) + if ( iPreviousStatus == RMobileCall::EStatusUnknown ) + { + RMobileCall::TMobileCallStatus status( RMobileCall::EStatusUnknown ); + if ( iCall.GetMobileCallStatus( status ) == KErrNone ) + { + iPreviousStatus = status; + } + } + if ( !IsActive() ) + { + iCall.NotifyMobileCallStatusChange( iStatus, iCallStatus ); + SetActive(); + } + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.Start" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::DoCancel +// Cancels monitoring +// ----------------------------------------------------------------------------- +// +void CVtCtlCallStatusMonitor::DoCancel() + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.DoCancel" ) + iCall.CancelAsyncRequest( EMobileCallNotifyMobileCallStatusChange ); + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::RunL +// Receives call status change and notifies observer +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlCallStatusMonitor::RunL() + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.RunL" ) + __VTPRINT2( DEBUG_SESSION , "CallStatMon.RunL err=%d",iStatus.Int() ) + __VTPRINT2( DEBUG_SESSION , "CallStatMon.RunL sta=%d", + (TInt)iCallStatus ) + if ( iStatus == KErrNone ) + { + const RMobileCall::TMobileCallStatus cache( iCallStatus ); + Start(); + MVtCtlCallControl::TVtCtlState state = MapState( cache ); + if ( CVtCtlCallStatusMonitor::IsLegalNewState( + cache, iPreviousStatus ) ) + { + iPreviousStatus = cache; + if ( state != MVtCtlCallControl::EUnknown ) + { + iObserver.HandleCallStatusChangeL( + KNullSessionId, // unknown by this + state, + MapState( iPreviousStatus ) ); + } + } + } + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::RunError +// +// ----------------------------------------------------------------------------- +// +TInt CVtCtlCallStatusMonitor::RunError( +#ifdef VTDEBUG + TInt aError ) +#else + TInt /*aError*/ ) +#endif + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.RunError" ) + __VTPRINTEXITR( "CVtCtlCallStatusMonitor.RunError err=%d", aError ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::MapState +// Maps Etel call status to internal type +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +MVtCtlCallControl::TVtCtlState CVtCtlCallStatusMonitor::MapState( + const RMobileCall::TMobileCallStatus aStatus ) + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.MapState" ) + MVtCtlCallControl::TVtCtlState state( MVtCtlCallControl::EUnknown ); + switch ( aStatus ) + { + case RMobileCall::EStatusIdle: + state = MVtCtlCallControl::EIdle; + break; + case RMobileCall::EStatusDialling: + state = MVtCtlCallControl::EInitializing; + break; + case RMobileCall::EStatusRinging: + state = MVtCtlCallControl::ERinging; + break; + case RMobileCall::EStatusAnswering: + state = MVtCtlCallControl::ERinging; + break; + case RMobileCall::EStatusConnecting: + state = MVtCtlCallControl::EInitializing; + break; + case RMobileCall::EStatusConnected: + state = MVtCtlCallControl::EConnected; + break; + case RMobileCall::EStatusDisconnecting: + case RMobileCall::EStatusDisconnectingWithInband: + state = MVtCtlCallControl::EDisconnecting; + break; + case RMobileCall::EStatusUnknown: + state = MVtCtlCallControl::EUnknown; + break; + default: + break; + } + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.MapState state" ) + return state; + } + +// ----------------------------------------------------------------------------- +// CVtCtlCallStatusMonitor::IsLegalNewState +// Checks if call state transition specified by arguments is legal. +// ----------------------------------------------------------------------------- +// +TBool CVtCtlCallStatusMonitor::IsLegalNewState( + const RMobileCall::TMobileCallStatus aNewState, + const RMobileCall::TMobileCallStatus aCurrentState ) + { + // check state transition priority + const TInt newPrio = KVtCtlStatusTransitionPriorities[ aNewState ]; + const TInt prevPrio = KVtCtlStatusTransitionPriorities[ aCurrentState ]; + + /** + * Legal transition if new state is logically consecutive compared to old + * state. Exception: transition to idle always possible ( !newPrio ) + */ + const TBool isLegal = ( newPrio > prevPrio || !newPrio ); + return isLegal; + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlFactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlFactory.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 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: CVtCtlFactory class implementation. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlFactory.h" +#include "CVtCtlCallControl.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// MVtCtlCallControl::CreateCallControlL +// Creates call control. +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl* CVtCtlFactory::CreateCallControlL( + MVtCtlEventObserver& aEventObserver ) + { + __VTPRINTENTER( "CVtCtlCallStatusMonitor.IsLegalNewState" ) + MVtCtlCallControl* control = CVtCtlCallControl::NewL( + aEventObserver ); + __VTPRINTEXIT( "CVtCtlCallStatusMonitor.IsLegalNewState" ) + return control; + } + +// ----------------------------------------------------------------------------- +// MVtCtlCallControl::Delete +// Destructs call control object. +// ----------------------------------------------------------------------------- +// +void CVtCtlFactory::Delete( MVtCtlCallControl* aCallControl ) + { + __VTPRINTENTER( "CVtCtlFactory.Delete" ) + CVtCtlCallControl* callControl = + static_cast( aCallControl ); + delete callControl; + __VTPRINTEXIT( "CVtCtlFactory.Delete" ) + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// CreateFactory +// Returns: Factory for creating and destructing call control. +// ----------------------------------------------------------------------------- +// +EXPORT_C CVtCtlFactory* CreateFactory() + { + CVtCtlFactory* factory = new CVtCtlFactory; + return factory; + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlLineMonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlLineMonitor.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,131 @@ +/* +* Copyright (c) 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: Monitors new calls on data line +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlLineMonitor.h" +#include "MVtCtlLineEventObserver.h" +#include "VtCtlDefs.h" +#include +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlLineMonitor::CVtCtlLineMonitor +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +CVtCtlLineMonitor::CVtCtlLineMonitor( + RMobileLine& aLine, + MVtCtlLineEventObserver& aObserver) : + CActive( KVtCtlCallAdditionMonitorPriority ), + iLine ( aLine ), + iObserver( aObserver ), + iLastLineStatus( RMobileCall::EStatusIdle ), + iLineStatus( RMobileCall::EStatusIdle ) + { + __VTPRINTENTER( "CVtCtlLineMonitor.CVtCtlLineMonitor" ) + CActiveScheduler::Add( this ); + __VTPRINTEXIT( "CVtCtlLineMonitor.CVtCtlLineMonitor" ) + } + +// Destructor +CVtCtlLineMonitor::~CVtCtlLineMonitor() + { + __VTPRINTENTER( "CVtCtlLineMonitor.~" ) + Cancel(); + __VTPRINTEXIT( "CVtCtlLineMonitor.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlLineMonitor::Start +// Start monitoring +// ----------------------------------------------------------------------------- +// +void CVtCtlLineMonitor::Start() + { + __VTPRINTENTER( "CVtCtlLineMonitor.Start" ) + if ( !IsActive() ) + { + iLine.NotifyMobileLineStatusChange( iStatus, iLineStatus ); + SetActive(); + } + __VTPRINTEXIT( "CVtCtlLineMonitor.Start" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlLineMonitor::DoCancel +// Stop monitoring +// ----------------------------------------------------------------------------- +// +void CVtCtlLineMonitor::DoCancel() + { + __VTPRINTENTER( "CVtCtlLineMonitor.DoCancel" ) + iLine.CancelAsyncRequest( EMobileLineNotifyMobileLineStatusChange ); + __VTPRINTEXIT( "CVtCtlLineMonitor.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlLineMonitor::RunL +// Notifies observer on the event. +// ----------------------------------------------------------------------------- +// +void CVtCtlLineMonitor::RunL() + { + __VTPRINTENTER( "CVtCtlLineMonitor.RunL" ) + __VTPRINT2( DEBUG_SESSION , "VtCtl:LineMon.RunL %d", iStatus.Int() ) + if ( iStatus == KErrNone ) + { + if ( iLineStatus != iLastLineStatus ) + { + iObserver.HandleLineEventL( + MVtCtlLineEventObserver::ELineEventStatusChange, iLineStatus ); + iLastLineStatus = iLineStatus; + } + Start(); + } + __VTPRINTEXIT( "CVtCtlLineMonitor.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlLineMonitor::RunError +// Starts monitoring after error +// ----------------------------------------------------------------------------- +// +TInt CVtCtlLineMonitor::RunError( +#ifdef VTDEBUG + TInt aError ) +#else + TInt ) +#endif + { + __VTPRINTENTER( "CVtCtlLineMonitor.RunError" ) + Start(); + __VTPRINTEXITR( "CVtCtlLineMonitor.RunError err=%d", aError ) + return KErrNone; + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlSessionContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlSessionContainer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,457 @@ +/* +* Copyright (c) 2004 - 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: Container for ETel session and subsessions. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlSessionContainer.h" +#include "CVtCtlLineMonitor.h" +#include "CVtCtlVideoCall.h" +#include +#include + +// CONSTANTS + +// Retrials for connecting to ETel server +const TInt KVtCtlETelConnectRetrials = 5; + +// Granularity +const TInt KVtCtlMaxCalls = 5; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::CVtCtlSessionContainer +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtCtlSessionContainer::CVtCtlSessionContainer( + MVtCtlCallStatusObserver& aObserver ) : + iCalls( KVtCtlMaxCalls ), + iObserver( aObserver ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.CVtCtlSessionContainer" ) + __VTPRINTEXIT( "CVtCtlSessionContainer.CVtCtlSessionContainer" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlSessionContainer::ConstructL() + { + __VTPRINTENTER( "CVtCtlSessionContainer.ConstructL" ) + TInt retries( KVtCtlETelConnectRetrials ); + TInt err( KErrNone ); + while ( retries-- && + iServer.Handle() == KNullHandle ) + { + err = iServer.Connect(); + } + User::LeaveIfError( err ); + User::LeaveIfError( iServer.LoadPhoneModule( KMmTsyModuleName() ) ); + User::LeaveIfError( iPhone.Open( iServer, KMmTsyPhoneName() ) ); + User::LeaveIfError( iLine.Open( iPhone, KMmTsyDataLineName() ) ); + + iLineMonitor = new ( ELeave ) CVtCtlLineMonitor( iLine, *this ); + iLineMonitor->Start(); + + RMobileCall::TMobileCallStatus lineStatus; + User::LeaveIfError( iLine.GetMobileLineStatus( lineStatus ) ); + if ( lineStatus != RMobileCall::EStatusIdle ) + { + __VTPRINT( DEBUG_SESSION | DEBUG_CONSTRUCT, + "VtCtl:SesConL line active" ) + TInt calls( 0 ); + User::LeaveIfError( iLine.EnumerateCall( calls ) ); + while ( calls-- ) + { + RLine::TCallInfo callInfo; + iLine.GetCallInfo( calls, callInfo ); + if ( InitCallL( callInfo.iCallName ) ) + { + __VTPRINT( DEBUG_SESSION | DEBUG_CONSTRUCT, + "VtCtl:SesConL call found and created" ) + calls = 0; + } + } + } + + __VTPRINTEXIT( "CVtCtlSessionContainer.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtCtlSessionContainer* CVtCtlSessionContainer::NewL( + MVtCtlCallStatusObserver& aObserver ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.NewL" ) + CVtCtlSessionContainer* self = + new ( ELeave ) CVtCtlSessionContainer( aObserver ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + __VTPRINTEXIT( "CVtCtlSessionContainer.NewL" ) + return self; + } + + +// Destructor +CVtCtlSessionContainer::~CVtCtlSessionContainer() + { + __VTPRINTENTER( "CVtCtlSessionContainer.~" ) + + TInt count( iCalls.Count() ); + CVtCtlVideoCall* call = NULL; + while ( count-- ) + { + call = iCalls[count]; + delete call; + } + iCalls.Close(); + delete iLineMonitor; + iLine.Close(); + iPhone.Close(); + iServer.UnloadPhoneModule( KMmTsyModuleName() ); + iServer.Close(); + __VTPRINTEXIT( "CVtCtlSessionContainer.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::HandleLineEventL +// Handle new call on data line +// ----------------------------------------------------------------------------- +// +void CVtCtlSessionContainer::HandleLineEventL( + const TLineEvent aEvent, + TDesC& aCallName ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.HandleLineEventL" ) + if ( aEvent == ELineEventCallAdded ) + { + CVtCtlVideoCall* call = FindCall( aCallName ); + if ( call == NULL ) + { + InitCallL( aCallName ); + } + } + __VTPRINTEXITR( "CVtCtlSessionContainer.HandleLineEventL event=%d", + aEvent ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::HandleLineEventL +// +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlSessionContainer::HandleLineEventL( + const TLineEvent aEvent, + const RMobileCall::TMobileCallStatus aStatus ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.HandleLineEventL" ) + __VTPRINT3( DEBUG_SESSION, "SesCont.LineEvent2 event=%d,status=%d", + (TInt) aEvent, + (TInt) aStatus ) + if ( aEvent == ELineEventStatusChange && + ( aStatus == RMobileCall::EStatusRinging || + aStatus == RMobileCall::EStatusDialling ) ) + { + TInt calls( 0 ); + iLine.EnumerateCall( calls ); + while ( calls-- ) + { + RLine::TCallInfo callInfo; + TInt err( iLine.GetCallInfo( calls, callInfo ) ); + // ensure we're opening correct call + if ( err == KErrNone && + ( callInfo.iStatus == RCall::EStatusDialling || + callInfo.iStatus == RCall::EStatusRinging ) ) + { + calls = 0; // break + CVtCtlVideoCall* call = FindCall( callInfo.iCallName ); + if ( call == NULL ) + { + InitCallL( callInfo.iCallName ); + } + } + } + } + __VTPRINTEXIT( "CVtCtlSessionContainer.HandleLineEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::HandleCallStatusChangeL +// passes call status change event to observer +// ----------------------------------------------------------------------------- +// +void CVtCtlSessionContainer::HandleCallStatusChangeL( + TVtCtlSessionId aId, + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.HandleCallStatusChangeL" ) + iObserver.HandleCallStatusChangeL( aId, aStatus, aPreviousStatus ); + if ( aStatus == MVtCtlCallControl::EIdle ) + { + DestructCall( aId ); + } + __VTPRINTEXIT( "CVtCtlSessionContainer.HandleCallStatusChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::FindCall +// Finds call by name +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +CVtCtlVideoCall* CVtCtlSessionContainer::FindCall( TDesC& aCallName ) const + { + __VTPRINTENTER( "CVtCtlSessionContainer.FindCall" ) + TInt count( iCalls.Count() ); + CVtCtlVideoCall* call = NULL; + while ( count-- ) + { + call = iCalls[count]; + const RMobileCall::TMobileCallInfoV1& mobileInfo = call->MobileInfo(); + if ( aCallName == mobileInfo.iCallName ) + { + count = 0; // break + } + else + { + call = NULL; + } + } + __VTPRINT2( DEBUG_SESSION | DEBUG_DETAIL, + "SesCont.FindCall by name --> %d",(TInt)call ) + __VTPRINTEXIT( "CVtCtlSessionContainer.FindCall" ) + return call; + } + + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::FindCall +// Finds call by id. +// ----------------------------------------------------------------------------- +// +CVtCtlVideoCall* CVtCtlSessionContainer::FindCall( TVtCtlSessionId aId ) const + { + __VTPRINTENTER( "CVtCtlSessionContainer.FindCall" ) + TInt count( iCalls.Count() ); + CVtCtlVideoCall* call = NULL; + if ( aId == KActiveSessionId && count == 1 ) + { + call = iCalls[0]; + count = 0; + } + while ( count-- ) + { + call = iCalls[count]; + const CVtCtlVideoCall::TVtCtlCallInfo& info = + call->CallInfo(); + if ( aId == info.iId ) + { + count = 0; // break + } + else + { + call = NULL; + } + } + __VTPRINT2( DEBUG_SESSION | DEBUG_DETAIL, + "SesCont.FindCall by id --> %d",(TInt)call ) + __VTPRINTEXIT( "CVtCtlSessionContainer.FindCall" ) + return call; + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::Sessions +// Returns sessions. +// ----------------------------------------------------------------------------- +// +TInt CVtCtlSessionContainer::GetSessions( RVtCtlSessionIdArray& aArray ) const + { + __VTPRINTENTER( "CVtCtlSessionContainer.GetSessions" ) + const TInt count( iCalls.Count() ); + for ( TInt ii = 0; ii < count; ii++ ) + { + TInt err( aArray.Append( iCalls[ii]->CallInfo().iId ) ); + if ( err != KErrNone ) + { + __VTPRINTEXIT( "CVtCtlSessionContainer.GetSessions" ) + return err; + } + } + __VTPRINTEXIT( "CVtCtlSessionContainer.GetSessions" ) + return count; + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::DestructCall +// Destructs call +// ----------------------------------------------------------------------------- +// +void CVtCtlSessionContainer::DestructCall( TVtCtlSessionId aId ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.DestructCall" ) + TInt count( iCalls.Count() ); + CVtCtlVideoCall* call = NULL; + while ( count-- ) + { + call = iCalls[count]; + const CVtCtlVideoCall::TVtCtlCallInfo& info = + call->CallInfo(); + if ( aId == info.iId ) + { + delete call; + iCalls.Remove( count ); + count = 0; // break + } + } + __VTPRINTEXIT( "CVtCtlSessionContainer.DestructCall" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::CheckCallTypeL +// Checks call type +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +TBool CVtCtlSessionContainer::CheckCallTypeL( + RMobileCall& aCall, + const TName& aName ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.CheckCallTypeL" ) + User::LeaveIfError( aCall.OpenExistingCall( iLine, aName ) ); + TBool typeOk( EFalse ); + RMobileCall::TMobileCallDataCapsV1 caps; + RMobileCall::TMobileCallDataCapsV1Pckg pckg( caps ); + User::LeaveIfError( aCall.GetMobileDataCallCaps( pckg ) ); + __VTPRINT3( DEBUG_SESSION | DEBUG_DETAIL, + "SesCont.ChkCall speedCaps=%d,protCaps=%d", + caps.iSpeedCaps, caps.iProtocolCaps ) + if ( caps.iProtocolCaps & RMobileCall::KCapsIsdnMultimedia ) + { + typeOk = ETrue; + } + else + { + aCall.Close(); + } + __VTPRINTEXIT( "CVtCtlSessionContainer.CheckCallTypeL" ) + return typeOk; + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::InitCallL +// Initializes call if it is video call. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +TBool CVtCtlSessionContainer::InitCallL( const TName& aCallName ) + { + __VTPRINTENTER( "CVtCtlSessionContainer.InitCallL" ) + RMobileCall* mobilecall = new ( ELeave ) RMobileCall; + CleanupStack::PushL( mobilecall ); + + // check that type is multimedia call + const TBool callTypeOk = CheckCallTypeL( *mobilecall, aCallName ); + if ( callTypeOk ) + { + __VTPRINT( DEBUG_SESSION | DEBUG_DETAIL, + "SesCont.InitCall ok" ) + TVtCtlSessionId id = iSessionIds.Create(); + CVtCtlVideoCall* call = CVtCtlVideoCall::NewL( + iLine, id, *this ); + CleanupStack::PushL( call ); + User::LeaveIfError( iCalls.Append( call ) ); + call->InitializeCallL( *mobilecall ); // takes ownership + const CVtCtlVideoCall::TVtCtlCallInfo& callInfo = call->CallInfo(); + iObserver.HandleCallStatusChangeL( + id, callInfo.iStatus, callInfo.iPreviousStatus ); + CleanupStack::Pop(2); // mobilecall, call + } + else + { + CleanupStack::PopAndDestroy(); // mobilecall + } + __VTPRINTEXIT( "CVtCtlSessionContainer.InitCallL" ) + return callTypeOk; + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::TVtCtlSessionIdentities::TVtCtlSessionIdentities +// C++ constructor +// ----------------------------------------------------------------------------- +// +CVtCtlSessionContainer::TVtCtlSessionIdentities::TVtCtlSessionIdentities() + : iCurrentId( 0 ) + { + __VTPRINTENTER( "TVtCtlSessionIdentities.TVtCtlSessionIdentities" ) + __VTPRINTEXIT( "TVtCtlSessionIdentities.TVtCtlSessionIdentities" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::TVtCtlSessionIdentities::Create +// Increment session id. +// ----------------------------------------------------------------------------- +// +TVtCtlSessionId CVtCtlSessionContainer::TVtCtlSessionIdentities::Create() + { + __VTPRINTENTER( "TVtCtlSessionIdentities.Create" ) + __VTPRINTEXIT( "TVtCtlSessionIdentities.Create" ) + return ++iCurrentId; + } + +// ----------------------------------------------------------------------------- +// CVtCtlSessionContainer::TVtCtlSessionIdentities::Current +// Return current session id. +// ----------------------------------------------------------------------------- +// +TVtCtlSessionId CVtCtlSessionContainer::TVtCtlSessionIdentities::Current() const + { + __VTPRINTENTER( "TVtCtlSessionIdentities.Current" ) + __VTPRINTEXIT( "TVtCtlSessionIdentities.Current" ) + return iCurrentId; + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/CVtCtlVideoCall.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/CVtCtlVideoCall.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,242 @@ +/* +* Copyright (c) 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: Video call abstraction implementation. +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "CVtCtlVideoCall.h" +#include "CVtCtlCallStatusMonitor.h" +#include "VtCtlPanic.h" +#include "cvtlogger.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::CVtCtlVideoCall +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +CVtCtlVideoCall::CVtCtlVideoCall( + RMobileLine& aDataLine, + TVtCtlSessionId aId, + MVtCtlCallStatusObserver& aObserver ) + : iLine( aDataLine ), iObserver( aObserver ) + { + __VTPRINTENTER( "CVtCtlVideoCall.CVtCtlVideoCall" ) + iCallInfo.iId = aId; + __VTPRINTEXIT( "CVtCtlVideoCall.CVtCtlVideoCall" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +CVtCtlVideoCall* CVtCtlVideoCall::NewL( + RMobileLine& aDataLine, + TVtCtlSessionId aId, + MVtCtlCallStatusObserver& aObserver ) + { + __VTPRINTENTER( "CVtCtlVideoCall.NewL" ) + CVtCtlVideoCall* self = new( ELeave ) + CVtCtlVideoCall( aDataLine, aId, aObserver ); + __VTPRINTEXIT( "CVtCtlVideoCall.NewL" ) + return self; + } + + +// Destructor +CVtCtlVideoCall::~CVtCtlVideoCall() + { + __VTPRINTENTER( "CVtCtlVideoCall.~" ) + __VTPRINT( DEBUG_SESSION | DEBUG_DESTRUCT, "VtCtl:Call~") + delete iStatusMonitor; + if ( iCall ) + { + iCall->Close(); + delete iCall; + } + __VTPRINTEXIT( "CVtCtlVideoCall.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::CallInfo +// Returns call information containing information not associated to ETel +// ----------------------------------------------------------------------------- +// +const CVtCtlVideoCall::TVtCtlCallInfo& CVtCtlVideoCall::CallInfo() const + { + return iCallInfo; + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::MobileInfo +// Returns ETel call information. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +const RMobileCall::TMobileCallInfoV1& CVtCtlVideoCall::MobileInfo() const + { + return iMobileCallInfo; + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::InitializeCallL +// Opens call subsession and starts status monitor. +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CVtCtlVideoCall::InitializeCallL( + RMobileCall& aCall ) + { + __VTPRINTENTER( "CVtCtlVideoCall.InitializeCallL" ) + __ASSERT_ALWAYS( iLine.SubSessionHandle(), + Panic( EVtCtlPanicLineHandleNull ) ); + iCall = &aCall; + iStatusMonitor = new ( ELeave ) CVtCtlCallStatusMonitor( *iCall, *this ); + iStatusMonitor->Start(); + UpdateCallInfo(); + iCallInfo.iPreviousStatus = MVtCtlCallControl::EIdle; + iCallInfo.iStatus = + CVtCtlCallStatusMonitor::MapState( iMobileCallInfo.iStatus ); + + __VTPRINTEXIT( "CVtCtlVideoCall.InitializeCallL" ) + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::UpdateCallInfo +// Updates call information from ETel +// ----------------------------------------------------------------------------- +// +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +TInt CVtCtlVideoCall::UpdateCallInfo() + { + __VTPRINTENTER( "CVtCtlVideoCall.UpdateCallInfo" ) + __ASSERT_ALWAYS( iCall->SubSessionHandle(), + Panic( EVtCtlPanicCallHandleNull ) ); + + RMobileCall::TMobileCallInfoV1Pckg pckg( iMobileCallInfo ); + const TInt err( iCall->GetMobileCallInfo( pckg ) ); + __VTPRINT2( DEBUG_SESSION, "VtCtl:Call. dir %d", + iMobileCallInfo.iRemoteParty.iDirection ) + __VTPRINT2( DEBUG_SESSION, "VtCtl:Call. status %d", + iMobileCallInfo.iStatus ) +#ifdef VTDEBUG + RDebug::Print(_L(" VtCtl.RemoteNumber=%S"), + &iMobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber ); +#endif + __VTPRINTEXITR( "CVtCtlVideoCall.UpdateCallInfo err=%d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::GetDuration +// Returns call duration +// ----------------------------------------------------------------------------- +// +TInt CVtCtlVideoCall::GetDuration( TVtCtlDuration& aDuration ) + { + __VTPRINTENTER( "CVtCtlVideoCall.GetDuration" ) + const TInt res( UpdateCallInfo() ); + if ( res == KErrNone ) + { + aDuration = iMobileCallInfo.iDuration; + } + __VTPRINTEXITR( "CVtCtlVideoCall.GetDuration err=%d", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::GetCallState +// Gets call state +// ----------------------------------------------------------------------------- +// +TInt CVtCtlVideoCall::GetCallState( + MVtCtlCallControl::TVtCtlState& aState ) + { + __VTPRINTENTER( "CVtCtlVideoCall.GetCallState" ) + RMobileCall::TMobileCallStatus status; + aState = iCallInfo.iStatus; + const TInt res( iCall->GetMobileCallStatus( status ) ); + + // update internal state only if differs from previous state + if ( res == KErrNone && + CVtCtlCallStatusMonitor::IsLegalNewState( + status, iMobileCallInfo.iStatus ) ) + { + // update 1) internal values, and + iMobileCallInfo.iStatus = status; + iCallInfo.iPreviousStatus = iCallInfo.iStatus; + iCallInfo.iStatus = CVtCtlCallStatusMonitor::MapState( status ); + + // 2) return value + aState = iCallInfo.iStatus; + } + __VTPRINTEXITR( "CVtCtlVideoCall.GetCallState err=%d", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// CVtCtlVideoCall::HandleCallStatusChangeL +// Handles status change +// ----------------------------------------------------------------------------- +// +void CVtCtlVideoCall::HandleCallStatusChangeL( + TVtCtlSessionId , + MVtCtlCallControl::TVtCtlState aStatus, + MVtCtlCallControl::TVtCtlState aPreviousStatus ) + { + __VTPRINTENTER( "CVtCtlVideoCall.HandleCallStatusChangeL" ) + // If monitor has received outdated notification ignore the event. + // This may happen if call status has asked from ETel and there + // are still old completed status notifications that are not handled. + // => contradition between internal status in this object and one + // received from ststus monitor. Ignore it. + if ( aStatus > iCallInfo.iStatus || aStatus == MVtCtlCallControl::EIdle ) + { + iCallInfo.iPreviousStatus = iCallInfo.iStatus; + iCallInfo.iStatus = aStatus; + + iObserver.HandleCallStatusChangeL( + iCallInfo.iId, + aStatus, + aPreviousStatus ); + } + __VTPRINTEXIT( "CVtCtlVideoCall.HandleCallStatusChangeL" ) + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/CallCtrl/Src/VtCtlPanic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/CallCtrl/Src/VtCtlPanic.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,36 @@ +/* +* Copyright (c) 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: Call control panic +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "VtCtlPanic.h" + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Panic +// +// ----------------------------------------------------------------------------- +// +void Panic( TVtCtlPanic aPanic ) + { + User::Panic( KVtCtlPanicCategory(), aPanic ); + } +#pragma CTC ENDSKIP +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/EABI/videotelengU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/EABI/videotelengU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,8 @@ +EXPORTS + _ZN11CVtEngModel4NewLER19MVtEngEventObserverR21MVtEngCommandObserver @ 1 NONAME + _ZN11CVtEngModel9ExtensionERK4TUid @ 2 NONAME + _ZNK11CVtEngModel14CommandHandlerEv @ 3 NONAME + _ZNK11CVtEngModel5AudioEv @ 4 NONAME + _ZNK11CVtEngModel5MediaEv @ 5 NONAME + _ZNK11CVtEngModel7SessionEv @ 6 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 2004 - 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: videoteleng build information file. +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_TESTEXPORTS + +PRJ_EXPORTS + + +../Inc/Base/VtEngEvents.h |../../../inc/vtengevents.h +../Inc/Base/CVtEngModel.h |../../../inc/cvtengmodel.h +../Inc/Base/MVtEngEventObserver.h |../../../inc/mvtengeventobserver.h +../Inc/Commands/vtengcommands.h |../../../inc/vtengcommands.h +../Inc/Commands/MVtEngCommandHandler.h |../../../inc/mvtengcommandhandler.h +../Inc/Commands/MVtEngCommandObserver.h |../../../inc/mvtengcommandobserver.h +../Inc/Session/MVtEngSessionInfo.h |../../../inc/mvtengsessioninfo.h +../Inc/Audio/MVtEngAudio.h |../../../inc/mvtengaudio.h +../Inc/Media/MVtEngMedia.h |../../../inc/mvtengmedia.h +../Inc/Media/MVtEngFrameObserver.h |../../../inc/mvtengframeobserver.h +../Inc/Media/TVtEngRendering.h |../../../inc/tvtengrendering.h +../Inc/Media/TVtEngRendering.inl |../../../inc/tvtengrendering.inl +../Inc/Media/TVtEngRenderingDSA.h |../../../inc/tvtengrenderingdsa.h +../Inc/Media/TVtEngRenderingDSA.inl |../../../inc/tvtengrenderingdsa.inl +../Inc/Media/TVtEngRenderingDP.h |../../../inc/tvtengrenderingdp.h +../Inc/Media/TVtEngRenderingDP.inl |../../../inc/tvtengrenderingdp.inl +../Inc/Media/TVtEngRenderingNGA.h |../../../inc/tvtengrenderingnga.h +../Inc/Media/TVtEngRenderingNGA.inl |../../../inc/tvtengrenderingnga.inl +../Inc/Extensions/MVtEngCameraPreferences.h |../../../inc/mvtengcamerapreferences.h +../Inc/Extensions/mvtengrecord2file.h |../../../inc/mvtengrecord2file.h + + +../data/videoteleng_stub.SIS /epoc32/data/z/system/install/videoteleng_stub.sis + +../Logger/Inc/cvtlogger.h |../../../inc/cvtlogger.h +../Logger/Inc/vtlogger.hrh |../../../inc/vtlogger.hrh + +// Export IBY file +../Rom/videoteleng.iby CORE_APP_LAYER_IBY_EXPORT_PATH(videoteleng.iby) + +PRJ_MMPFILES + +../Logger/Group/vtlogger.mmp +../CallCtrl/Group/videocallctrl.mmp +../Group/videoteleng.mmp + + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Group/videoteleng.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Group/videoteleng.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2004 - 2006 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 is project specification file for the Videoteleng. +* +*/ + +#include +#include "../Inc/Base/VtEngDefs.hrh" + +// Capability assignment. +CAPABILITY CAP_GENERAL_DLL + +// default vendor id +VENDORID VID_DEFAULT + +TARGET videoteleng.dll +TARGETTYPE dll +UID 0x1000008d 0x101F867F + +SOURCEPATH ../Src/Audio +SOURCE CVtEngAudioHandler.cpp + +SOURCEPATH ../Src/Base +SOURCE CVtEngModel.cpp +SOURCE CVtEngEventManager.cpp +SOURCE CVtEngHandlerContainer.cpp +SOURCE CVtEngSettings.cpp +SOURCE CVtEngPubSubsListener.cpp +SOURCE cvtengincomingcallmonitor.cpp + +SOURCE cvtengmdtrcommandsender.cpp +SOURCE cvtengmdtrmessagelistener.cpp +SOURCE cvtengmediatorservice.cpp +SOURCE CVtEngAccessoryHandler.cpp + +SOURCE CVtEngCRProxy.cpp +SOURCE CVtEngCRObserverItem.cpp +SOURCE CVtEngInitializer.cpp +SOURCE CVtEngSATClient.cpp +SOURCE CVtEngDeviceLockMonitor.cpp +SOURCE VtEngUtils.cpp + +SOURCEPATH ../Src/Commands +SOURCE CVtEngCommandHandler.cpp +SOURCE CVtEngOperation.cpp +SOURCE cvtenginternaloperation.cpp +SOURCE TVtEngOperationUtils.cpp + +SOURCEPATH ../Src/Extensions +SOURCE CVtEngExtensions.cpp +SOURCE CVtEngExtensionBase.cpp +SOURCE CVtEngCameraPreferences.cpp +#if defined (RD_VT_RTF) +SOURCE cvtengrecord2file.cpp +SOURCE cvtengr2ftoneplayer.cpp +#endif // RD_VT_RTF + + +SOURCEPATH ../Src/Media +SOURCE CVtEngMediaHandler.cpp +SOURCE CVtEngDrawDP.cpp +SOURCE CVtEngDrawDSA.cpp +SOURCE CVtEngDrawNGA.cpp +SOURCE CVtEngDtmfHandler.cpp +SOURCE CVtEngLocalVideo.cpp +SOURCE CVtEngRemoteVideo.cpp +SOURCE CVtEngImageScaler.cpp + +SOURCEPATH ../Src/Session +SOURCE CVtEngSessionHandler.cpp + +SOURCEPATH ../Src/State +SOURCE CVtEngStateManager.cpp +SOURCE CVtEngStateAlerting.cpp +SOURCE CVtEngStateBase.cpp +SOURCE CVtEngStateClearing.cpp +SOURCE CVtEngStateConnected.cpp +SOURCE CVtEngStateIdle.cpp +SOURCE CVtEngStateInitializing.cpp +SOURCE CVtEngStateNegotiating.cpp +SOURCE CVtEngStateOpen.cpp +SOURCE CVtEngStateRinging.cpp +SOURCE CVtEngDtmfState.cpp +SOURCE CVtEngDtmfIdle.cpp +SOURCE CVtEngDtmfSending.cpp +SOURCE CVtEngDtmfBuffered.cpp + +DOCUMENT ../../Group/bld.inf + +USERINCLUDE ../Inc/Base +USERINCLUDE ../Inc/Audio +USERINCLUDE ../Inc/Commands +USERINCLUDE ../Inc/Session +USERINCLUDE ../Inc/Media +USERINCLUDE ../Inc/State +USERINCLUDE ../Inc/Extensions +USERINCLUDE ../CallCtrl/Inc + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../../inc +SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/mmf/server + +LIBRARY euser.lib +LIBRARY fbscli.lib +LIBRARY ws32.lib +LIBRARY videosource.lib +LIBRARY bitgdi.lib +LIBRARY displaysink.lib +LIBRARY featmgr.lib +LIBRARY phoneclient.lib +LIBRARY dsclient.lib +LIBRARY efsrv.lib +LIBRARY bafl.lib +LIBRARY sysutil.lib +LIBRARY centralrepository.lib +LIBRARY cenrepnotifhandler.lib + +LIBRARY commonengine.lib +LIBRARY mediaclientaudio.lib + +LIBRARY accclient.lib +LIBRARY telephonyaudiorouting.lib + +LIBRARY vtimagetransforms.lib + +DEBUGLIBRARY vtlogger.lib + + +LIBRARY satclient.lib + +LIBRARY esock.lib // BigEndian + +LIBRARY mmfdevsound.lib + +LIBRARY gdi.lib + +LIBRARY mediatorclient.lib +LIBRARY videotelproto.lib +LIBRARY surfaceupdateclient.lib +LIBRARY surfacemanager.lib +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Audio/CVtEngAudioHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Audio/CVtEngAudioHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,304 @@ +/* +* Copyright (c) 2004-2006 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: Audio handler class. +* +*/ + + + +#ifndef CVTENGAUDIOHANDLER_H +#define CVTENGAUDIOHANDLER_H + +// INCLUDES +#include +#include "MVtEngAudio.h" +#include "CVtEngOperation.h" +#include "MVtEngSettingPSObserver.h" +#include "CVTEngPubSubsListener.h" +#include "CVtEngAccessoryHandler.h" +#include "MVtEngAccessoryObserver.h" +// new audio routing +#include "telephonyaudiorouting.h" +#include "mtelephonyaudioroutingobserver.h" +#include +#include + +// FORWARD DECLARATIONS +class CVtEngStateManager; +class CRoutingEnabler; + +/** +* Class for audio handling. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngAudioHandler ) + : public CBase, + public MVtEngAudio, + private MVtEngAccessoryObserver, + private MTelephonyAudioRoutingObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngAudioHandler* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngAudioHandler(); + + public: // New functions. + + /** + * Performs on operation in the handler. + * @param operation to be performed on the handler + */ + void HandleL( CVtEngOperation& aOperation ); + + /** + * Creates/releases temporary DevSound instance. + * @param aEnable + * ETrue creates devSound + * EFalse destructs devSound + */ + void SetRoutingEnablerL( const TBool aEnable ); + + /** + * Increases audio volume + */ + TBool IncreaseVolume(); + + /** + * Decreases audio volume + */ + TBool DecreaseVolume(); + + private: // Functions from base classes. + + // from MVtEngAccessoryObserver + + /** @see MVtEngAccessoryObserver */ + virtual void AccessoryModeChanged( const TAccMode& aMode, + const TBool aActivated ); + + // from MTelephonyAudioRoutingObserver + + /** @see MTelephonyAudioRoutingObserver::AvailableOutputsChanged */ + virtual void AvailableOutputsChanged( CTelephonyAudioRouting& aTelephonyAudioRouting ); + + /** @see MTelephonyAudioRoutingObserver::OutputChanged */ + virtual void OutputChanged( CTelephonyAudioRouting& aTelephonyAudioRouting ); + + /** @see MTelephonyAudioRoutingObserver::SetOutputComplete */ + virtual void SetOutputComplete( CTelephonyAudioRouting& aTelephonyAudioRouting, + TInt aError ); + + public: // Functions from base classes. + + /** @see MVtEngAudio::GetRoutingState. */ + virtual TInt GetRoutingState( TAudioRoutingState& aAudioRoutingState ); + + /** @see MVtEngAudio::GetRoutingAvailability. */ + virtual TInt GetRoutingAvailability( + const TAudioRoutingState aAudioRoutingState, + TBool& aAvailable ); + + /** @see MVtEngAudio::GetHeadsetType. */ + virtual TInt GetHeadsetType( TWiredHeadsetType& aHeadsetType ); + + /** @see MVtEngAudio::OutputVolume. */ + virtual TInt OutputVolume( const TBool aHandsetVolume ) const; + + private: + + /** + * C++ default constructor. + */ + CVtEngAudioHandler(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Completes operation. + * @param aResult error code + */ + void CompleteOperation( TInt aResult ); + + /** + * Sets loudspeaker on / off. + * @param aTurnOn ETrue if on, EFalse if off + * @param aShowNote ETrue if note is allowed to be shown, EFalse if not + */ + void SetLoudspeakerL( TBool aTurnOn, TBool aShowNote ); + + /** + * Sets Bluetooth on / off. + * @param aTurnOn ETrue if on, EFalse if off + */ + void SetBluetoothL( TBool aTurnOn ); + + /** + * Updates current volume that should be used. + */ + void UpdateCurrentVolume(); + + /** + * Checks if given audio output route is available. + * @return ETrue if given audio output route is available + */ + TBool IsOutputAvailable( const CTelephonyAudioRouting::TAudioOutput aOutput ); + + /** + * Modifies the volume by aDelta. + */ + TBool AdjustVolume( const TInt aDelta ); + + private: // Data + + // Enumeration flags used in the implementation. + enum + { + // Handset + EFlagHandset = 1, + // Loudspeaker + EFlagLoudspeaker = 2, + // Bluetooth handsfree + EFlagBT = 4, + // Wired headset + EFlagWiredHeadset = 8 + }; + + // Accessory mode listener class. + CVtEngAccessoryHandler* iAccHandler; + + // Contains the current accessory and it's audio mode. + TAccPolAccessoryMode iAccMode; + + // Pointer to telephony audio routing instance + CTelephonyAudioRouting* iTelephonyAudioRouting; + + // Current audio routing state + CTelephonyAudioRouting::TAudioOutput iCurrentAudioOutput; + + // Holds old routing state. + TAudioRoutingState iOldAudioRoutingState; + + // Pointer to an operation. + CVtEngOperation* iOperation; + + /** + * For enabling audio routing before actual + * DevSound for play is created. + */ + CRoutingEnabler* iRoutingEnabler; + }; + +/** +* Class for handling dummy DevSound. It enables audio routing +* before video call is connected. Proper devSound instance +* must exist in order to control audio routing. Actual instance +* is created in protocol in later phase of the stack +* initialization and one in here is deleted. +*/ +NONSHARABLE_CLASS( CRoutingEnabler ) : + public CBase, + private MDevSoundObserver + { + public: // constructor and destructor + + // Constructor + static CRoutingEnabler* NewL(); + + // Destructor + ~CRoutingEnabler(); + + private: // constructors + + // c++ constructor + CRoutingEnabler(); + + /** + * Creates and starts devSound. + */ + void StartL(); + + public: // new functions + + public: // from MDevSoundObserver + + /** + * @see MDevSoundObserver + */ + virtual void InitializeComplete( TInt aError ); + + /** + * @see MDevSoundObserver + */ + virtual void ToneFinished( TInt aError ); + + /** + * @see MDevSoundObserver + */ + virtual void BufferToBeFilled( CMMFBuffer* aBuffer ); + + /** + * @see MDevSoundObserver + */ + virtual void PlayError( TInt aError ); + + /** + * @see MDevSoundObserver + */ + virtual void BufferToBeEmptied( CMMFBuffer* aBuffer ); + + /** + * @see MDevSoundObserver + */ + virtual void RecordError( TInt aError ); + + /** + * @see MDevSoundObserver + */ + virtual void ConvertError( TInt aError ); + + /** + * @see MDevSoundObserver + */ + virtual void DeviceMessage( + TUid aMessageType, + const TDesC8& aMsg ); + + private: + // Temporary DevSound instance to enable audio routing + // before actual instance in protocol is ready. + // Routing can be changed already when MO call is alerting. + CMMFDevSound* iDevSound; + + // Variable to detect failure in Devsound initialization or PlayInitL(). + // If failure happens, Devsound instance is deleted outside callback + // in desctructor. ETrue; failure happened, EFalse; all OK + TBool iDevsoundInitializeFailure; + }; + + +#endif // CVTENGAUDIOHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Audio/MVtEngAudio.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Audio/MVtEngAudio.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2006 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: Audio volume and routing interface +* +*/ + + + +#ifndef MVTENGAUDIO_H +#define MVTENGAUDIO_H + +// INCLUDES +#include + +/** +* Interface for audio related information. +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngAudio + { + public: + + /** + * Current routing state + */ + enum TAudioRoutingState + { + EAudioHandset, + EAudioLoudspeaker, + EAudioBT, + EAudioWiredHeadset + }; + + /** + * Wired headset type + */ + enum TWiredHeadsetType + { + EWiredHeadset, + EWiredLoopset, + EWiredTty, + EWiredNone + }; + + /** + * Audio routing setting to be used when changing + * audio routing from client. + */ + enum TVtEngRoutingSetting + { + EActivateHandsfree, + EDeactivateHansfree, + EActivateBT, + EDeactivateBT + }; + + /** + * Speaker volume levels for Handset and Handsfree. + */ + struct TVtEngOutputVolume + { + TInt iHandsetVolume; + TInt iHandsfreeVolume; + }; + + /** + * Returns target where audio is currently routed to. + * @param aAudioRoutingState routing target + * @return Symbian OS error code + */ + virtual TInt GetRoutingState( + TAudioRoutingState& aAudioRoutingState ) = 0; + + /** + * Returns if routing to specified target can be + * done. + * @param aAudioRoutingState routing target + * @param aAvailable ETrue if possible to do + * @return Symbian OS error code + */ + virtual TInt GetRoutingAvailability( + const TAudioRoutingState aAudioRoutingState, + TBool& aAvailable ) = 0; + + /** + * Returns type of wired headset + * @return Symbian OS error code. + */ + virtual TInt GetHeadsetType( + TWiredHeadsetType& aHeadsetType ) = 0; + + /** + * Returns speaker volume + * @param aHandsetVolume if ETrue returns handset volume, + * otherwise loudspeaker volume. + * @return output volume ranging from 1 to 10 or Symbian OS error code. + */ + virtual TInt OutputVolume( + const TBool aHandsetVolume ) const = 0; + + + }; + +#endif // MVTENGAUDIO_H diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVTEngPubSubsListener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVTEngPubSubsListener.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,130 @@ +/* +* Copyright (c) 2004-2006 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: Listener for Publish and subscribe data. +* +*/ + + +#ifndef CVTENGPUBSUBSGSETTINGS_H +#define CVTENGPUBSUBSGSETTINGS_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class MVtEngSettingPSObserver; + +// CLASS DECLARATION + +/** +* RProperty poller. +* +* @lib videoteleng.lib +* @since Series 60 2.8 +*/ +NONSHARABLE_CLASS( CVtEngPubSubsListener ) : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aUid the Uid to use + * @param aKey item's key + * @param aObserver callback interface for notification + * @return instance of CVtEngPubSubsListener + */ + static CVtEngPubSubsListener* NewL( const TUid aUid, const TInt aKey, + MVtEngSettingPSObserver* aObserver ); + + /** + * Destructor. + */ + virtual ~CVtEngPubSubsListener(); + + public: // New functions. + + /** + * Gets integer value from P & S. + * @param aVal a value in return + * @return error code + */ + TInt Get( TInt& aVal ); + + /** + * Gets 8 bit string value from P&S. + * @param aVal a value in return + * @return error code + */ + TInt Get( TDes8& aVal ); + + /** + * Gets 16 bit descriptor value from P&S. + * @param aVal a value in return + * @return error code + */ + TInt Get( TDes16& aVal ); + + private: // New functions. + + /** + * Starts the listening (RunL). + */ + void StartListening(); + + private: // From CActive. + + /** @see CActive::RunL */ + virtual void RunL(); + + /** @see CActive::Cancel */ + virtual void DoCancel(); + + /** @see CActive::RunError */ + virtual TInt RunError( TInt aError ); + + private: + + /** + * C++ default constructor. + * @param aUid the Uid to use + * @param aKey item's key + * @param aObserver callback interface for notification + */ + CVtEngPubSubsListener( const TUid aUid, TInt aKey, + MVtEngSettingPSObserver* aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // UID of the monitored item. + TUid iUid; + + // ID of the monitored item. + TInt iId; + + // Property to subscribe to. + RProperty iProperty; + + // The notification interface. + MVtEngSettingPSObserver* iCallback; + }; + +#endif // CVTENGPUBSUBSGSETTINGS_H +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngAccessoryHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngAccessoryHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2004-2005 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: Accessory handler. +* +*/ + + + +#ifndef CVTENGACCHANDLER_H +#define CVTENGACCHANDLER_H + +// INCLUDES +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class MVtEngAccessoryObserver; + +// CLASS DECLARATION + +/** +* Accessory mode listener for video telephony. +* +* @lib videoteleng +* @since 3.0 +*/ +NONSHARABLE_CLASS( CVtEngAccessoryHandler ) : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + ¨* @return instance of CVtEngAccessoryHandler + */ + static CVtEngAccessoryHandler* NewL( ); + + /** + * Destructor. + */ + virtual ~CVtEngAccessoryHandler(); + + public: // From base classes. + + /** + * Handles accessory mode changes. + */ + void RunL(); + + /** + * Cancels accessory mode monitoring. + */ + void DoCancel(); + + /** + * Handles exceptions in RunL. + * @param aError error code. + * @return error code. + */ + TInt RunError( TInt aError ); + + public: // New functions + + /** + * Sets a new listener interested in accessory changes. + * @param aObserver call back interface for notifications. + */ + void RegisterObserverL( MVtEngAccessoryObserver* aObserver ); + + /** + * Unregisters a listener. + * NOTE, do not call this from NotifyObserversL! + * @param aObserver call back interface for notifications. + */ + void RemoveObserver( MVtEngAccessoryObserver* aObserver ); + + /** + * Returns current accessory mode. + * @param aAccessoryMode accessory mode in return + * @return Symbian error code + */ + TInt AccessoryMode( TAccPolAccessoryMode& aAccessoryMode ) const; + + private: // New functions. + + /** + * Removes all observers + */ + void RemoveAllObservers(); + + /** + * Sets object active and renews subscription. + */ + void StartListening(); + + /** + * Notifies all registered listeners. + */ + void NotifyObserversL(); + + private: // Constructors. + + /** + * C++ default constructor. + */ + CVtEngAccessoryHandler(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( ); + + private: // Data + // Current accessory mode. + TAccPolAccessoryMode iCurrentAccessoryMode; + + // Owned array of accessory mode observers. + RPointerArray< MVtEngAccessoryObserver > iAccessoryObservers; + + // Owned accessory server session. + RAccessoryServer iAccessoryServer; + + // Owned accessory mode subsession. + RAccessoryMode iAccessoryMode; + + // Accessory mode structure. + TAccPolAccessoryMode iMode; + + }; + +#endif // CVTENGACCHANDLER_H +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngCRObserverItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngCRObserverItem.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2004-2006 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: Central repository observer class. +* +*/ + + +#ifndef CVTENGCROBSITEM_H +#define CVTENGCROBSITEM_H + +// INCLUDES +#include +#include +#include "cenrepnotifyhandler.h" + +// FORWARD DECLARATIONS +class MVtEngCRSettingObserver; + +// CLASS DECLARATION + +/** +* Central repository listener for video telephony. +* +* @lib videoteleng.lib +* @since Series 60 3.0 +*/ +NONSHARABLE_CLASS( CVtEngCRObserverItem ) : public CBase, + public MCenRepNotifyHandlerCallback + { + public: // Constructors and destructor. + + /** + * Two-phased constructor. + * @param aObserver the real observer to notify + * @param aUid UID for this listener + * @param aKey ID for this listener + * @param aType type of information interested in + * @return this CR observer + */ + static CVtEngCRObserverItem* NewL( + MVtEngCRSettingObserver* aObserver, + TUid aUid, TUint32 aKey, + CCenRepNotifyHandler::TCenRepKeyType aType ); + + /** + * Destructor. + */ + virtual ~CVtEngCRObserverItem(); + + public: // From MCenRepNotifyHandlerCallback. + + /** + * Callback to notify changed integer setting. + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyInt( TUint32 aId, TInt aNewValue ); + + /** + * Callback to notify changed real setting. + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyReal( TUint32 aId, TReal aNewValue ); + + /** + * Callback to notify changed string setting. + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyString( TUint32 aId, const TDesC16& aNewValue ); + + /** + * Callback to notify changed binary setting. + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyBinary( TUint32 aId, const TDesC8& aNewValue ); + + /** + * Callback to notify changed setting. + * @param aId changed id + */ + void HandleNotifyGeneric( TUint32 aId); + + /** + * Callback to notify of an occurred error. + * @param aId changed id + * @param aError + * @param aHandler which handler + */ + void HandleNotifyError( TUint32 aId, TInt aError, + CCenRepNotifyHandler* aHandler ); + + public: // New functions. + + /** + * Checks if this one matches given UID and key. + * @param aUID UID to use in comparison + * @param aKey key to use in comparison + * @return ETrue if match + */ + TBool Offer( const TUid aUid, const TUint32 aKey ) const; + + /** + * Checks if this one matches given UID. + * @param aUID UID to use in comparison + * @return ETrue if match + */ + TBool Offer( const TUid aUid ) const; + + /** + * Checks if this one matches given key. + * @param aKey key to use in comparison + * @return ETrue if match + */ + TBool Offer( const TUint32 aKey ) const; + + /** + * Returns UID of this handler. + * @return UID + */ + TUid Uid() const; + + /** + * Returns key of this handler. + * @return key + */ + TUint32 Key() const; + + /** + * Returns notifier of this handler. + * @return notifier + */ + CCenRepNotifyHandler* Notifier() const; + + /** + * Returns type of this handler. + * @return type + */ + CCenRepNotifyHandler::TCenRepKeyType Type() const; + + /** + * Returns observer of this handler. + * @return observer + */ + MVtEngCRSettingObserver* Observer() const; + + /** + * Sets CenRep notifier + * @param notifier to set. + */ + void SetCenRepNotifier( CCenRepNotifyHandler* aNotifier ); + + + private: // Constructor. + + /** + * C++ default constructor. + * @param aObserver the real observer to notify + * @param aUid UID for this listener + * @param aKey ID for this listener + * @param aType type of information interested in + */ + CVtEngCRObserverItem( MVtEngCRSettingObserver* Observer, + TUid aUid, TUint32 aKey, + CCenRepNotifyHandler::TCenRepKeyType aType ); + + private: // Data + + // Callback for notifications. + MVtEngCRSettingObserver* iObserver; + + // UID for this item. + TUid iUid; + + // Key for this item. + TUint32 iKey; + + // Type of listener. + CCenRepNotifyHandler::TCenRepKeyType iType; + + // Central repository notifier. + CCenRepNotifyHandler* iNotifier; +}; +#endif // CVTENGCROBSITEM_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngCRProxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngCRProxy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,237 @@ +/* +* Copyright (c) 2004-2006 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: Central repository proxy, which is used by all CR dependent. +* +*/ + + + +#ifndef CVTENGCRPROXY_H +#define CVTENGCRPROXY_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class CVtEngCRObserverItem; +class CRepository; +class MVtEngCRSettingObserver; + +// CLASS DECLARATION + +/** +* Central repository interface for video telephony. +* +* @lib videoteleng.lib +* @since Series 60 3.0 +*/ +NONSHARABLE_CLASS( CVtEngCRProxy ) : public CBase + { + public: // Data structures. + + // Internal data structure for storing CR sessions. + NONSHARABLE_CLASS( CCRSession ) : public CBase + { + public: + /** + * Destructor needed. + */ + ~CCRSession(); + + // CenRep session. + CRepository* iSession; + // Uid attached to CenRep session. + TUid iUid; + }; + + public: // Constructors and destructor. + + /** + * Two-phased constructor. + * @return instance of CVtEngCRProxy + */ + static CVtEngCRProxy* NewL( ); + + /** + * Destructor. + */ + virtual ~CVtEngCRProxy(); + + public: // New functions + + /** + * Sets integer value to Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value to set + * @return error code + */ + TInt Set( const TUid aUid, const TUint32 aId, TInt aVal ); + + /** + * Sets real value to Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value to set + * @return error code + */ + TInt Set( const TUid aUid, const TUint32 aId, const TReal& aVal ); + + /** + * Sets binary value to Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value to set + * @return error code + */ + TInt Set( const TUid aUid, const TUint32 aId, const TDesC8& aVal ); + + /** + * Sets string value to Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value to set + * @return error code + */ + TInt Set( const TUid aUid, const TUint32 aId, const TDesC16& aVal ); + + /** + * Gets integer value from Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value in return + * @return error code + */ + TInt Get( const TUid aUid, const TUint32 aId, TInt& aVal ); + + /** + * Gets real value from Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value in return + * @return error code + */ + TInt Get( const TUid aUid, const TUint32 aId, TReal& aVal ); + + /** + * Gets binary value from Central Repository + * @param aUid used UID + * @param aId which key to use + * @param aVal a value in return + * @return error code + */ + TInt Get( const TUid aUid, const TUint32 aId, TDes8& aVal ); + + /** + * Gets string value from Central Repository. + * @param aUid used UID + * @param aId which key to use + * @param aVal a value in return + * @return error code + */ + TInt Get( const TUid aUid, const TUint32 aId, TDes16& aVal ); + + /** + * Add a new Cen Rep interested object. + * @param aObserver callback interface + */ + void RegisterInterestedL( CVtEngCRObserverItem* aObserver ); + + /** + * Removes an observer. + * @param aObserver to be removed + */ + void RemoveInterested( CVtEngCRObserverItem& aObserver ); + + private: // New functions + + /** + * Gets a Cen Rep session matching UID. + * @param aUid UID to use in search + * @param aCRSession found session or a new session + * @return error code + */ + TInt GetSessionL( const TUid aUid, CRepository*& aCRSession ); + + /** + * Creates an id-CenRep paired session. + * @param aUid the UID to use + * @return new session or NULL + */ + CCRSession* NewCRSessionL( TUid aUid ); + + /** + * Finds observer item. + * @param aKey + * @param aIndex + * @return observer item or NULL + */ + CVtEngCRObserverItem* FindItem( + const TUint32 aKey, TInt& aIndex ) const; + + /** + * Removes all observers + * + */ + void RemoveAllObservers(); + + /** + * Removes all Central repository instances + * + */ + void RemoveSessions(); + + /** + * Maps a given UID to a certain central repository instance + * @param aUid the UID to map + * @return found CRepository item or NULL + */ + CRepository* MapUidToCR( const TUid aUid ); + + /** + * Finds observer item. + * @param aUid + * @param aKey + * @param aIndex + * @return observer item or NULL + */ + CVtEngCRObserverItem* FindItem( const TUid& aUid, const TUint32 aKey, + TInt& aIndex ) const; + + private: + + /** + * C++ default constructor. + */ + CVtEngCRProxy(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( ); + + private: // Data + + // Storage for data observers. + RPointerArray iObserverItems; + + // Array for central repository sessions. + RPointerArray iCRSessions; + }; + +#endif // CVTENGCRPROXY_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngDeviceLockMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngDeviceLockMonitor.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2006 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: Monitor for device lock (autolock) +* +*/ + + + +#ifndef CVTENGDEVICELOCKMONITOR_H +#define CVTENGDEVICELOCKMONITOR_H + +// INCLUDES +#include +#include "MVtEngSettingPSObserver.h" + +// FORWARD DECLARATIONS +class CVtEngPubSubsListener; + +// CLASS DECLARATION + +/** +* Monitor for autolock state. +* +* @lib videoteleng +* @since 3.1 +*/ +NONSHARABLE_CLASS( CVtEngDeviceLockMonitor ) : public CBase, public MVtEngSettingPSObserver + { + public: // Constructors and destructor + + static CVtEngDeviceLockMonitor* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngDeviceLockMonitor(); + + public: // New functions + + /** + * Sends event to UI of current autolock state + */ + void NotifyState() const; + + public: // From MVtEngSettingPSObserver + + /** + * @see MVtEngSettingPSObserver::HandleNotifyPSL + */ + void HandleNotifyPSL( const TUid aUid, const TInt& aKey, + const TRequestStatus& aStatus ); + + private: + /** + * C++ constructor. + */ + CVtEngDeviceLockMonitor(); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: + + // Listener for autolock state + CVtEngPubSubsListener* iAutolockListener; + }; + +#endif // CVTENGDEVICELOCKMONITOR_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngEventManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngEventManager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2006 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: Event manager +* +*/ + + + +#ifndef CVTENGEVENTMANAGER_H +#define CVTENGEVENTMANAGER_H + +// INCLUDES +#include +#include "VtEngEvents.h" + +// FORWARD DECLARATIONS +class MVtEngEventObserver; + +// CLASS DECLARATION + +/** +* This class is responsible for notifying client +* on engine events. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngEventManager ) : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngEventManager* NewL( + MVtEngEventObserver& aEventObserver ); + + /** + * Destructor. + */ + virtual ~CVtEngEventManager(); + + public: // New functions + + /** + * Notifies client on session state change. + */ + void SessionStateChanged(); + + /** + * Notifies event to observer. + * @param aEvent event + */ + static void NotifyEvent( const TInt aEvent ); + + void AddObserverL( MVtEngEventObserver* aObserver ); + + void RemoveObserver( const MVtEngEventObserver* aObserver ); + + private: // from CActive + + void RunL(); + + void DoCancel(); + + private: + + /** + * Notifies event to observer + */ + void DoNotifyEvent( const TInt aEvent ); + + TBool QueueAsyncEvent( const TInt aEvent ); + + /** + * Queue event and signal AO. + * @param aEvent Asynchronous event to be signalled. + */ + void QueueAndSignal( const TInt aEvent ); + + /** + * Signals AO. + */ + void Signal(); + + private: + + /** + * C++ default constructor. + */ + CVtEngEventManager(); + + // 2nd phase constructor + void ConstructL( MVtEngEventObserver& aEventObserver ); + + private: // Data + + RPointerArray iObservers; + + // Asynchronous events are stored in this array and + // executed in order + CArrayFixFlat< TInt >* iEventQueue; + + }; + +#endif // CVTENGEVENTMANAGER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngHandlerContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngHandlerContainer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,131 @@ +/* +* Copyright (c) 2006 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: Handler container +* +*/ + + + +#ifndef CVTENGHANDLERCONTAINER_H +#define CVTENGHANDLERCONTAINER_H + +// INCLUDES +#include +#include "CVtEngMediaHandler.h" +#include "CVtEngSessionHandler.h" +#include "CVtEngAudioHandler.h" +#include "CVtEngDtmfHandler.h" + +// FORWARD DECLARATIONS +class MVtEngSessionInfo; +class MVtEngMedia; +class MVtEngAudio; + +// CLASS DECLARATION + +/** +* Container for media, audio and session handlers. +* +* @lib videoteleng +* @since Series60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngHandlerContainer ) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngHandlerContainer* NewL( ); + + /** + * Destructor. + */ + virtual ~CVtEngHandlerContainer(); + + public: // New functions + + + /** + * Returns session handler. + * @return session handler + */ + inline MVtEngSessionInfo& Session() const; + + /** + * Returns media handler. + * @return media handler + */ + inline MVtEngMedia& Media() const; + + /** + * Returns audio handler. + * @return audio handler + */ + inline MVtEngAudio& Audio() const; + + + /** + * Returns DTMF handler. + * @return DTMF handler + */ + inline CVtEngDtmfHandler& Dtmf() const; + + /* + * Uninitializes audio and session handlers. + * Media handler uninitialization is done + * asynchronously using directly the handler. + */ + void Uninitialize(); + + /** + * Creates DTMF handler + * @param aH324Config H324 configure interface + */ + void CreateDtmfHandlerL( MVtH324ConfigCommand* aH324Config ); + + private: + + /** + * C++ default constructor. + */ + CVtEngHandlerContainer(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // member data + + // media handler + CVtEngMediaHandler* iMedia; + + // session handler + CVtEngSessionHandler* iSession; + + // audio handler + CVtEngAudioHandler* iAudio; + + + // DTMF handler + CVtEngDtmfHandler* iDtmf; + + }; + +#include "CVtEngHandlerContainer.inl" + +#endif // CVTENGHANDLERCONTAINER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngHandlerContainer.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngHandlerContainer.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2006 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: handler container +* +*/ + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::Session +// Returns specific handler +// +// ----------------------------------------------------------------------------- +// +inline MVtEngSessionInfo& CVtEngHandlerContainer::Session() const + { + return *iSession; + } + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::Media +// Returns specific handler +// +// ----------------------------------------------------------------------------- +// +inline MVtEngMedia& CVtEngHandlerContainer::Media() const { return *iMedia; } + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::Audio +// Returns specific handler +// +// ----------------------------------------------------------------------------- +// +inline MVtEngAudio& CVtEngHandlerContainer::Audio() const { return *iAudio; } + + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::Dtmf +// Returns specific handler +// +// ----------------------------------------------------------------------------- +// +inline CVtEngDtmfHandler& CVtEngHandlerContainer::Dtmf() const { return *iDtmf; } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngInitializer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngInitializer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,239 @@ +/* +* Copyright (c) 2004 - 2006 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: Class for initializing the engine gradually. +* Active object initializes one "subsystem" on each +* round. In case of failure timer is started and +* retrial is done after time-out. Uninitialization +* is done is one shot. +* +*/ + + + +#ifndef CVTENGINITIALIZER_H +#define CVTENGINITIALIZER_H + +// INCLUDES +#include "MVtEngSettingObserver.h" +#include +#include + +// FORWARD DECLARATIONS +class CVtEngHandlerContainer; +class CVtEngOperation; + + +/** +* Engine initializer. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngInitializer ) : + public CActive, + public MVtEngSettingObserver + { + public: // Constructors and destructor + + static CVtEngInitializer* NewL( CVtEngHandlerContainer& aHandlers ); + + /** + * Destructor. + */ + virtual ~CVtEngInitializer(); + + public: // new functions + + /** + * Starts initialization process. + */ + void InitializeL( CVtEngOperation& aCallback ); + + /** + * Cancels initialiation + * @return ETrue if CActive::Cancel was called + */ + TBool CancelInit(); + + /** + * Uninitializes engine. + */ + void Uninitialize( CVtEngOperation& aCallback ); + + /** + * Gets GetSessionCommand ownership after initialization. + * @return CSessionCommand interface. + */ + MVtSessionCommand* GetSessionCommand(); + + /** + * Returns if engine is initialized. + * @return ETrue if initialized + */ + TBool Initialized() const; + + /** + * Creates handler for DTMF sending. + * @param aH324Config H324 configure interface + */ + void CreateDtmfHandlerL( MVtH324ConfigCommand* aH324Config ); + + /** + * Gets pointer to comms. Still owns the comms. + * @return Pointer to comms. + */ + MCommServer* GetVtComms(); + + private: // from CActive + + /** + * performs one initialization step. + */ + void RunL(); + + /** + * Cancels initialization process. + */ + void DoCancel(); + + /** + * Handles error in the process. + * @return always returns KErrNone + */ + TInt RunError( TInt aError ); + + public: // from MVtEngSettingObserver + virtual void HandleSettingChangedL( + CVtEngSettings::TSettingId aId, + const TDesC& aValue ); + + + private: // Constructors + + /** + * c++ constructor + */ + CVtEngInitializer( CVtEngHandlerContainer& aHandlers ); + + /** + * + */ + void ConstructL(); + + private: + + enum TProcess + { + // Go to next step + EContinue, + // Reset engine + EReset, + // Retry current step when failed. + ERetry + }; + + private: // new functions + + /** + * Reads bit reversal information from locally variated flags. + * @return ETrue if reversed. + */ + TBool BitReversalUsed(); + + /** + * Proceeds to next step or starts retrial of + * previously failed step. + */ + void ContinueOrRetry( const TProcess aOperation ); + + /** + * Notifies observer on initialization completion. + */ + void Notify( const TInt aResult ); + + /** + * Callback for retrial timer. + */ + static TInt HandleTimer( TAny* aAny ); + + /** + * Handles retrial timer expiration. + */ + void DoHandleTimer(); + + TBool ActivateAndSignal( TInt aSignalValue ); + + private: + + + /** + * Initialization steps + */ + enum TVtEngInitializationSteps + { + EInitNone, + EInitSession, + EInitMedia, + EInitProto, + EInitDataportCompleted, + EInitComplete, + EResetMedia, + EResetMediaPhase2 + }; + + /** + * Dataport information handling flags. + */ + enum TVtEngDataportInformationFlags + { + EDataportListened = 0x01, + EDataportReceived = 0x02 + }; + + private: + + // handler container + CVtEngHandlerContainer& iHandlers; + + // Current (un)initialization step + TInt iStep; + + // Operation to be notified on completion + CVtEngOperation* iCallback; + + // Retrial count + TInt iRetrials; + + // Retrial timer + CPeriodic* iTimer; + + // Protocol Session Engine + MVtSessionCommand* iSessionCommand; + + // Protocol Comms Server + MCommServer* iComms; + + // Has subscription been made for dataport name. + TInt iDataportHandled; + + // If MediaHandler has taken ownership of 2-way, this is true, + // otherwise false. + TBool iOwnershipInMH; + + }; + + +#endif // CVTENGINITIALIZER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngModel.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2006 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: Video telephony engine class +* +*/ + + + +#ifndef CVTENGMODEL_H +#define CVTENGMODEL_H + +// INCLUDES +#include +//#include + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class MVtEngEventObserver; +class MVtEngCommandObserver; +class CVtEngEventManager; +class CVtEngHandlerContainer; +class MVtEngCommandHandler; +class CVtEngCommandHandler; +class MVtEngSessionInfo; +class MVtEngMedia; +class MVtEngAudio; +class CVtEngStateManager; +class CVtEngUtility; +class CVtEngExtensions; + +// CLASS DECLARATION + +/** +* Model for video telephony engine. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngModel ) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEventObserver event observer + * @param aCommandObserver command observer + */ + IMPORT_C static CVtEngModel* NewL( + MVtEngEventObserver& aEventObserver, + MVtEngCommandObserver& aCommandObserver ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CVtEngModel(); + + public: // New functions + + IMPORT_C MVtEngCommandHandler& CommandHandler() const; + + IMPORT_C MVtEngSessionInfo& Session() const; + + IMPORT_C MVtEngMedia& Media() const; + + IMPORT_C MVtEngAudio& Audio() const; + + /** + * Returns extension or NULL if extension cannot be found. + * @param aExtensionUid extension uid + * @return pointer to extension + */ + IMPORT_C TAny* Extension( const TUid& aExtensionUid ); + + + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + + private: + + /** + * C++ default constructor. + */ + CVtEngModel(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MVtEngEventObserver& aEventObserver, + MVtEngCommandObserver& aCommandObserver ); + + private: // Data + + // Event manager acting as event mediator. + CVtEngEventManager* iEventManager; + + // Container for functional units. + CVtEngHandlerContainer* iHandlers; + + // Handler for UI commands + CVtEngCommandHandler* iCommandHandler; + + // Manager for engine states + CVtEngStateManager* iStateManager; + + // Utility for TLS access + CVtEngUtility* iUtils; + + // Container for engine extensions + CVtEngExtensions* iExtensions; + + }; + +#endif // CVTENGMODEL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngSATClient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngSATClient.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2005 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: SAT listener. +* +*/ + + + +#ifndef CVTENGSATCLIENT_H +#define CVTENGSATCLIENT_H + +// INCLUDES +#include +#include +#include +#include + + +// CLASS DECLARATION + +/** +* SAT listener. +* +* @lib videoteleng.lib +* @since Series 60 3.0 +*/ +NONSHARABLE_CLASS( CVtEngSATClient ) : public CBase, MSatRefreshObserver + { + public: // Constructors and destructor. + + /** + * Two-phased constructor. + * @return instance of CVtEngSATClient + */ + static CVtEngSATClient* NewL( ); + + /** + * Destructor. + */ + virtual ~CVtEngSATClient(); + + public: // Functions from base classes + + /** + * From MSatRefreshObserver + */ + TBool AllowRefresh( + TSatRefreshType aType, const TSatRefreshFiles& aFiles ); + /** + * From MSatRefreshObserver. + */ + void Refresh( TSatRefreshType aType, const TSatRefreshFiles& aFiles ); + + private: + + /** + * C++ default constructor. + */ + CVtEngSATClient(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( ); + + private: // Data + + // Session & Refresh for SAT listening. + RSatSession iSatSession; + RSatRefresh iSatRefresh; + + }; + +#endif // CVTENGSATCLIENT_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngSettings.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,484 @@ +/* +* Copyright (c) 2004-2006 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: Video call setting data. +* +*/ + + + +#ifndef CVTENGSETTINGS_H +#define CVTENGSETTINGS_H + +// INCLUDES +#include +#include +#include "MVtEngCRSettingObserver.h" +#include "CVtEngCRObserverItem.h" +#include "CVtEngCRProxy.h" +#include "MVtEngAudio.h" +#include "MVtEngMedia.h" +#include "MVtEngSessionInfo.h" + +// CONSTANTS +// Default routing. +const MVtEngAudio::TVtEngRoutingSetting + KVtEngDefaultAudioRouting = MVtEngAudio::EActivateHandsfree; + +// FORWARD DECLARATIONS +class MVtEngSettingObserver; + +// CLASS DECLARATION + +/** +* Container for video call settings. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngSettings ) : public CBase +, public MVtEngCRSettingObserver + { + public: + + /** + * Settings ids + */ + enum TSettingId + { + EStillImage, + EStillImagePath, + ECallTimer, + EHandsetVolume, + EHandsfreeVolume, + EBTAudioAccessory, + EIhfMode, + ESelectVolume, // select Handset / Handsfree volume + EDataportInfo + }; + + /** + * Audio configuration + */ + struct TVtEngAudioConfig + { + // Current volume in use, EFalse: handset, + // ETrue: loudspeaker. + TBool iCurrentVolume; + // Speaker volume + MVtEngAudio::TVtEngOutputVolume iVolume; + // Audio routing + MVtEngAudio::TVtEngRoutingSetting iRouting; + }; + + /** + * Video configuration + */ + struct TVtEngVideoConfig + { + // Still image file name + TFileName iStillImageFile; + // Determines if still image is valid. + TBool iImageIsValid; + // Determines if video is enabled. + TBool iVideoEnabled; + }; + + /** + * Video quality framerates + */ + struct TVtEngVideoQualityFrameRateConfig + { + // Frame rate for videoquality settings detail + TInt iDetail; + + // Frame rate for videoquality settings normal + TInt iNormal; + + // Frame rate for videoquality settings motion + TInt iMotion; + }; + + /** + * Media configuration + */ + struct TVtEngVideoCallConfig + { + // @see TVtEngAudioConfig + TVtEngAudioConfig iAudio; + // @see TVtEngVideoConfig + TVtEngVideoConfig iVideo; + // defines if call timer is enabled + TBool iCallTimerOn; + // Engine has green light to make connect on Protocol. + TBool iReadyForConnect; + // Dataport loaning status + TBool iIsDataportLoaned; + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @return instance of CVtEngSettings + */ + static CVtEngSettings* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngSettings(); + + public: // New functions + + /** + * Creates stored data observers. + * @param aObserver callback interface + * @param aUid UID to monitor + * @param aKey ID to monitor + * @param aType which data type + */ + void CreateDataObserverL( + MVtEngCRSettingObserver* aObserver, TUid aUid, TUint32 aKey, + CCenRepNotifyHandler::TCenRepKeyType aType ); + + /** + * Returns configuration. + * @return settings data + */ + const CVtEngSettings::TVtEngVideoCallConfig& Config() const; + + /** + * Sets current volume. + * @param aVolume selected volume, + * EFalse: handset, ETrue: loudspeaker. + */ + void SetCurrentVolume( TBool aVolume ); + + /** + * Returns current volume. + * @return EFalse: handset, ETrue: loudspeaker. + */ + TBool CurrentVolume() const; + + /** + * Sets audio output volume levels. + * @param aHandsetVolume handset volume level. + * @param aHandsfreeVolume handsfree volume level. + * @param aInternal not stored to shared data but + * internal variable to be used when correct state + * is entered. + * @return Symbian error code + */ + TInt SetVolume( + const TInt aHandsetVolume, + const TInt aHandsfreeVolume, + const TBool aInternal ); + + /** + * Gets audio output volume levels from Shared Data. + * @param aVolume volume level. + * @param aHandsfree if true handsfree volume is read, + * otherwise handset. + * @param aInternal not read from shared data but + * from internal variable + * @return error code + */ + TInt GetVolume( + TInt& aVolume, + const TBool aHandsfree, + const TBool aInternal ) const; + + /** + * Gets maximum audio output volume level. + * @return max volume for device + */ + inline TInt MaxVolume( ) const; + + + /** + * Gets minimum audio output volume level. + * @return max volume for device + */ + inline TInt MinVolume( ) const; + + /** + * Checks the validity of the volume level. + * return either constant minimum, constant maximum + * or the passed value level. + * @param aVolume the volume level to check + * @return suitable volume level + */ + inline TInt ValidVolume( const TInt aVolume ) const; + + /** + * Sets audio routing setting. + * @param aState audio routing state. + */ + void SetRouting( const MVtEngAudio::TVtEngRoutingSetting& aState ); + + /** + * Sets output video state setting. + * @param aEnabled ETrue if sending is enabled + */ + void SetVideoEnabled( const TBool aEnabled ); + + /** + * Sets connected state. + */ + void SetConnectReady(); + + /** + * Reads local variations. + */ + void ReadVariationsL(); + + /** + * Gets camera orientations for primary and secondary camera. + * @see MVtEngMedia::TCameraOrientation + * @param aPrimaryCameraOrientation primary camera orientation. + * @param aSecondaryCameraOrientation secondary camera orientation. + */ + void GetCameraOrientations( + MVtEngMedia::TCameraOrientation& aPrimaryCameraOrientation, + MVtEngMedia::TCameraOrientation& aSecondaryCameraOrientation ) const; + + /** + * Checks if given bits is turned on in local variation. + * @param aBits bits to check + * @return ETrue if turned on + */ + TBool CheckBits( const TInt aBits ); + + /** + * Returns video quality frame rate configuration. + * @return Reference to video quality frame rate + * configuration. + */ + const TVtEngVideoQualityFrameRateConfig& + VideoQualityFrameRateConfig() const; + + /** + * Resets settings to default values. + */ + void ResetAll(); + + /** + * Registers interest on setting change. + * @param aId event to observe for + * @param aObserver setting observer + */ + void NotifyChangeL( + TSettingId aId, + MVtEngSettingObserver& aObserver ); + + /** + * Cancels observering setting changes. + * @param aId event to cancel + * @param aObserver setting observer + */ + void CancelNotifyChange( + TSettingId aId, + const MVtEngSettingObserver& aObserver ); + + /** + * Informs setting is dataport loaned or not yet. + * @param aLoaned TBool value is loaned (ETrue) or not (EFalse) + */ + void SetDataportLoaned( TBool aLoaned ); + + /** + * Checks if still image exists. + * @return ETrue if still image exists. + */ + TBool IsDefaultStillImageDefined(); + + + + /** + * Sets CLI. + * @since S60 5.0 + * @params aCLI call id and address (MSISDN) availability + */ + void SetCLI( const MVtEngSessionInfo::TCLI& aCLI ); + + /** + * Returns CLI + * @since S60 5.0 + * @param aCLI call id and address (MSISDN) availability + * @return ETrue if CLI is valid (stored in the first place) + */ + TBool GetCLI( MVtEngSessionInfo::TCLI& aCLI ) const; + + /** + * Sets dataport info + * @since S60 5.0 + * @param aPortInfo port name and number as string + */ + void SetDataportInfoL( const TDesC& aPortInfo ); + + /** + * Returns dataport info or NULL if not available yet + * @since S60 5.0 + * @return dataport info + */ + const TDesC* DataportInfo() const; + + public: // From MVtEngCRSettingObserver. + + /** + * Callback to notify changed setting. + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyInt( const TUid aUid, const TUint32 aId, + TInt aNewValue ); + + /** + * Callback to notify changed setting. + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyReal( const TUid aUid, const TUint32 aId, + TReal aNewValue ); + + /** + * Callback to notify changed setting. + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue + */ + void HandleNotifyString( const TUid aUid, const TUint32 aId, + const TDesC16& aNewValue ); + + private: // New functions. + struct TObserverItem + { + // Callback interface. + MVtEngSettingObserver* iObserver; + // UID of item. + TUid iUid; + // Key of observer. + TPtrC iKey; + // Integer key, used with CR. + TInt iIntKey; + // Settings internal id. + TSettingId iId; + }; + + /** + * Finds observer item. + * @param aUid + * @param aKey + * @return observer item or NULL + */ + TObserverItem* FindItem( const TUid& aUid, const TDesC& aKey ) const; + + /** + * Finds observer item. + * @param aUid + * @param aKey + * @return observer item or NULL + */ + TObserverItem* FindItem( const TUid& aUid, const TInt& aKey ) const; + + /** + * Returns value as integer. + * @param aValue value to convert + * @return value as integer + */ + static TInt SettingAsTInt( const TDesC& aValue ); + + /** + * Derived class for internal book keeping. Engine knows whether + * CLI has been received from call handling + */ + struct TVtEngCLI : public MVtEngSessionInfo::TCLI + { + // Set to True when CLI received from call handling. + TBool iValid; + }; + + private: + + /** + * C++ default constructor. + */ + CVtEngSettings(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Callback function to inform the observer. + * @param aAny pointer to instance of this class. + * @return KErrNone always. + */ + static TInt DoInformSelectVolumeObserver( TAny* aAny ); + + + /** + * Parses VQ frame rates read from cenrep. + */ + void ParseFrameRates( TVtEngVideoQualityFrameRateConfig& aVQFR, + const TDesC& aBuffer ); + + private: // Data + // Central Repository proxy. + CVtEngCRProxy* iCRProxy; + + // Settings data. + TVtEngVideoCallConfig iConfig; + + // Setting data observers. + CArrayFixFlat* iObserverItems; + + // File system handle. + RFs iFs; + + // Owned idle callback instance. + CIdle* iSelectVolumeIdle; + + // Observer for ESelectVolume. + MVtEngSettingObserver* iSelectVolumeObserver; + + // Observer for EDataportInfo + MVtEngSettingObserver* iDataportObserver; + + // Locally variated bits are read to this. + TInt iVariantReadOnlyValues; + + // If local variations are read + TBool iVariationsRead; + + // Video quality frame rate configuration holder + TVtEngVideoQualityFrameRateConfig iVQFRConfig; + + // If default still image is defined + TBool iDefaultStillImageDefined; + + // CLI information of video call. + TVtEngCLI iCLI; + + HBufC* iDataportInfo; + }; + +#include "CVtEngSettings.inl" + +#endif // CVTENGSETTINGS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/CVtEngSettings.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/CVtEngSettings.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2006 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: Settings inline methods +* +*/ + + +//Constants +const TInt8 KVTEngMaxVolume = 10; +const TInt8 KVTEngMinVolume = 0; + + +// ----------------------------------------------------------------------------- +// CVtEngSettings::GetMinVolume +// Return device min volume. +// +// ----------------------------------------------------------------------------- +// +inline TInt CVtEngSettings::MinVolume() const + { return KVTEngMinVolume; } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::GetMaxVolume +// Return event manager. +// +// ----------------------------------------------------------------------------- +// +inline TInt CVtEngSettings::MaxVolume() const + { return KVTEngMaxVolume; } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::ValidVolume +// Checks if the volume is within allowed limits +// +// ----------------------------------------------------------------------------- +// +inline TInt CVtEngSettings::ValidVolume( const TInt aVolume ) const + { + if ( aVolume < KVTEngMinVolume ) + { + return KVTEngMinVolume; + } + else if ( aVolume > KVTEngMaxVolume ) + { + return KVTEngMaxVolume; + } + else + { + return aVolume; + } + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/MVtEngAccessoryObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/MVtEngAccessoryObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2004-2006 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: Observer interface for indicating changes in accessories. +* +*/ + +#ifndef MVTENGACCESSORYOBSERVER_H +#define MVTENGACCESSORYOBSERVER_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION + +/** +* Interface to indicate changes in accessories. +* +* @lib videoteleng +* @since 3.0 +*/ +class MVtEngAccessoryObserver + { + public: // New functions + + /** + * Callback to notify mode change in accessories. + * @param aMode new mode + * @param aActivated audio is on + */ + virtual void AccessoryModeChanged( const TAccMode& aMode, + const TBool aActivated ) = 0; + }; + +#endif // MVTENGACCESSORYOBSERVER_H +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/MVtEngCRSettingObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/MVtEngCRSettingObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2004-2006 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: Observer interface for indicating setting changes in Cent Rep +* +*/ + + +#ifndef MVTENGSETTINCRGOBSERVER_H +#define MVTENGSETTINGCROBSERVER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Observer interface for indicating setting changes +* +* @lib videoteleng.lib +* @since Series 60 3.0 +*/ +class MVtEngCRSettingObserver + { + public: // New functions + + /** + * Callback to notify changed setting + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue new value + */ + virtual void HandleNotifyInt( const TUid aUid, const TUint32 aId, + TInt aNewValue ) = 0; + + /** + * Callback to notify changed setting + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue new value + */ + virtual void HandleNotifyReal( const TUid aUid, const TUint32 aId, + TReal aNewValue ) = 0; + + /** + * Callback to notify changed setting + * @param aUid changed Uid + * @param aId changed id + * @param aNewValue new value + */ + virtual void HandleNotifyString( const TUid aUid, const TUint32 aId, + const TDesC16& aNewValue ) = 0; + }; + +#endif // MVTENGCRSETTINGOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/MVtEngEventObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/MVtEngEventObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2006 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: Observer interface for video telephony events. +* +*/ + + + +#ifndef MVTENGEVENTOBSERVER_H +#define MVTENGEVENTOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Video telephony event observer interface. +* +* @lib videlteleng +* @since 2.6 +*/ +class MVtEngEventObserver + { + public: // New functions + + /** + * Handler method for events + * @param aEvent events defined in VtEngEvents.h + */ + virtual void HandleVtEventL( + TInt aEvent ) = 0; + + }; + +#endif // MVTENGEVENTOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/MVtEngSettingObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/MVtEngSettingObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2006 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: Observer interface for indicating setting changes +* +*/ + + + +#ifndef MVTENGSETTINGOBSERVER_H +#define MVTENGSETTINGOBSERVER_H + +// INCLUDES +#include "CVtEngSettings.h" + +// CLASS DECLARATION + +/** +* Observer interface for indicating setting changes +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngSettingObserver + { + public: // New functions + + /** + * Handler for setting changed event + * @param aId id of setting + * @param aValue new value for the setting + */ + virtual void HandleSettingChangedL( + CVtEngSettings::TSettingId aId, + const TDesC& aValue ) = 0; + }; + +#endif // MVTENGSETTINGOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/MVtEngSettingPSObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/MVtEngSettingPSObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2004-2006 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: Observer interface for indicating publish and subscribe +* changes +* +*/ + + + +#ifndef MVTENGSETTINGPSOBSERVER_H +#define MVTENGSETTINGPSOBSERVER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Observer interface for indicating P&S changes +* +* @lib videoteleng.lib +* @since Series 60 2.8 +*/ +class MVtEngSettingPSObserver + { + public: // New functions + + /** + * Handler for changed event. + * @param aUid uid of setting + * @param aKey id of setting + * @param aStatus status of completed AO operation + */ + virtual void HandleNotifyPSL( const TUid aUid, const TInt& aKey, + const TRequestStatus& aStatus ) = 0; + }; + +#endif // MVTENGSETTINGPSOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/TVtEngType.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/TVtEngType.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2006 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: Base class for data types that can be identified by an +* identifier (extension id). +* +*/ + + + +#ifndef TVTENGTTYPE_H +#define TVTENGTTYPE_H + +// INCLUDES +#include + +// DATA TYPES + +enum TVtEngTypeId + { + EVtEngTypeV1 = 0, + EVtEngTypeDtmf + }; + +// CLASS DECLARATION + +/** +* Base class for data types +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngtType + { + public: // constructor + + inline TInt TypeId() const; + + protected: // constructors + /** + * C++ constructor that only for descendant classes may call. + */ + inline TVtEngtType( TVtEngTypeId aTypeId ); + + /** + * copy constructor + */ + inline TVtEngtType( const TVtEngtType& aType ); + + protected: // operators + + inline TVtEngtType& operator=( const TVtEngtType& aType ); + + protected: + // Extension id + TInt iTypeId; + }; + +#include "TVtEngType.inl" + +#endif // TVTENGTTYPE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/TVtEngType.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/TVtEngType.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2006 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: Inline methods for TVtEngtType. +* +*/ + + +inline TVtEngtType::TVtEngtType( TVtEngTypeId aTypeId ) + : iTypeId( aTypeId ) {} + +inline TInt TVtEngtType::TypeId() const { return iTypeId; } + +inline TVtEngtType::TVtEngtType( const TVtEngtType& aType ) + : iTypeId( aType.iTypeId ) {} + +inline TVtEngtType& TVtEngtType::operator=( const TVtEngtType& aType ) + { iTypeId = aType.iTypeId; + return *this; } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngConstants.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngConstants.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2006 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: Constants for video telephony +* +*/ + + + +#ifndef VTENGCONSTANTS_H +#define VTENGCONSTANTS_H + +// INCLUDES +#include +#include +// CONSTANTS + +/** +* Remote video default size. +* QCIF where one pixel removed from left, top and right side. +*/ +//const TSize KVtEngRemoteVideoDefaultSize( 174, 143 ); + +/** +* View finder default size. +*/ +//const TSize KVtEngLocalVideoDefaultSize( 44, 36 ); + +/** +* Display mode +*/ +//const TDisplayMode KVtEngDisplayMode( EColor64K ); + +// MACROS + + +#endif // VTENGCONSTANTS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngDefs.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngDefs.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2006 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: engine macro define +* +*/ + + +#ifndef VTDEFS_HRH +#define VTDEFS_HRH + + +// DATA TYPES +// MACROS + + +#if defined(_DEBUG) || defined(WINS) +/** +* Debugging enabled always in debug builds +*/ +#define VTDEBUG +#else +/** +* Define here for release builds (disabled by default) +* Uncomment VTDEBUG below if you want to enable logging in UREL. +*/ +//#define VTDEBUG +#endif + +#ifdef VTDEBUG +/** +* 0 = No logging +* 1 = File logging +* 2 = RDebug +*/ +#if defined(__WINSCW) || defined(__WINS__) || defined (WINS) +// In emulator log to output window +#define VTLOGGING 1 +#else +/** +* In HW to which ever is desired (File (1) by default) +* Change VTLOGGING to 1 (file) or 2 (RDebug) as desired. +*/ +#define VTLOGGING 1 +#endif + +#else // !VTDEBUG + +// no logging +#define VTLOGGING 0 + +#endif //VTDEBUG + +#if VTLOGGING == 1 +#define VTFILELOGGING 1 +#else +#define VTFILELOGGING 0 +#endif + +#endif // VTDEFS_HRH +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngEvents.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngEvents.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,147 @@ +/* +* Copyright (c) 2004-2006 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: Video telephony engine events +* +*/ + + + +#ifndef VTENGEVENTS_H +#define VTENGEVENTS_H + +// INCLUDES +#include + +// CONSTANTS + +const TInt KVtEngEventNone = -1; + +const TInt KVtEngEventBase = 0; + +/** +* Engine configuration events +*/ +const TInt KVtEngConfigureEventBase = KVtEngEventBase + 100; // 100 +const TInt KVtEngDurationSettingChanged = KVtEngConfigureEventBase + 1; +const TInt KVtEngInitializationProblem = KVtEngConfigureEventBase + 2; + +/** +* Engine media events +*/ +const TInt KVtEngMediaEventBase = KVtEngConfigureEventBase + 100; // 200 +const TInt KVtEngCameraChanged = KVtEngMediaEventBase + 1; +const TInt KVtEngSourceChanged = KVtEngMediaEventBase + 2; +const TInt KVtEngRemoteVideoPaused = KVtEngMediaEventBase + 3; +const TInt KVtEngRemoteVideoResumed = KVtEngMediaEventBase + 4; +const TInt KVtEngRemoteAudioPaused = KVtEngMediaEventBase + 5; +const TInt KVtEngRemoteAudioResumed = KVtEngMediaEventBase + 6; +const TInt KVtEngAudioMuted = KVtEngMediaEventBase + 7; +const TInt KVtEngAudioUnmuted = KVtEngMediaEventBase + 8; +const TInt KVtEngRemoteVideoStarted = KVtEngMediaEventBase + 10; +const TInt KVtEngRemoteVideoStopped = KVtEngMediaEventBase + 11; +const TInt KVtEngRemoteAudioStarted = KVtEngMediaEventBase + 12; +const TInt KVtEngRemoteRenderingProblem = KVtEngMediaEventBase + 14; +const TInt KVtEngLocalRenderingProblem = KVtEngMediaEventBase + 15; +const TInt KVtEngSourceCapsChanged = KVtEngMediaEventBase + 16; +const TInt KVtEngRemoteRenderStopped = KVtEngMediaEventBase + 17; +const TInt KVtEngViewFinderStopped = KVtEngMediaEventBase + 18; +const TInt KVtEngResolutionToSQCIF = KVtEngMediaEventBase + 19; +const TInt KVtEngResolutionToQCIF = KVtEngMediaEventBase + 20; + +// Problems in starting negotiation with remote end +const TInt KVtEngNegotiationProblem = KVtEngMediaEventBase + 21; + +// Initializing media component failed +const TInt KVtEngMediaInitFailure = KVtEngMediaEventBase + 22; + +// Begin initialization of image sharing (convert, scale, etc.) +const TInt KVtEngShareImageInitializeBegin = KVtEngMediaEventBase + 23; + +// End initialization of image sharing (convert, scale, etc.) +const TInt KVtEngShareImageInitializeEnd = KVtEngMediaEventBase + 24; + +// Informs status change in outgoing video channel. +const TInt KVtEngMediaOutgoingVideoChannelStatusChanged = + KVtEngMediaEventBase + 25; + +// Informs status change in outgoing audio channel. +const TInt KVtEngMediaOutgoingAudioChannelStatusChanged = + KVtEngMediaEventBase + 26; + +// Informs UI that decoding error happened during image share +const TInt KVtEngShareImageDecodingError = KVtEngMediaEventBase + 27; + +// Informs UI that volume is already maximum +const TInt KVtEngAudioVolumeMax = KVtEngMediaEventBase + 28; + +// Informs UI that volume is already minimum +const TInt KVtEngAudioVolumeMin = KVtEngMediaEventBase + 29; + +// Informs UI that Locvid layoutchange has been done +const TInt KVtEngLCHProviderSwitchDone = KVtEngMediaEventBase + 30; + +/** +* Engine audio events +*/ +const TInt KVtEngAudioEventBase = KVtEngMediaEventBase + 100; // 300 +const TInt KVtEngAudioOutputVolumeChanged = KVtEngAudioEventBase + 1; +const TInt KVtEngAudioRoutingChanged = KVtEngAudioEventBase + 2; +const TInt KVtEngAudioRoutingAvailabilityChanged = KVtEngAudioEventBase + 3; +const TInt KVtEngAudioRoutingIHFActivated = KVtEngAudioEventBase + 4; +const TInt KVtEngAudioRoutingIHFDeactivated = KVtEngAudioEventBase + 5; + +/** +* Engine session events +*/ +const TInt KVtEngSessionEventBase = KVtEngAudioEventBase + 100; // 400 +const TInt KVtEngSessionStateChanged = KVtEngSessionEventBase + 1; +const TInt KVtEngSessionAnswerPossible = KVtEngSessionEventBase + 2; +const TInt KVtEngSessionWaitingCallActive = KVtEngSessionEventBase + 3; +const TInt KVtEngSessionWaitingCallInactive = KVtEngSessionEventBase + 4; +const TInt KVtEngCLIAvailable = KVtEngSessionEventBase + 5; + +/** +* General events +*/ +const TInt KVtEngGeneralEventBase = KVtEngSessionEventBase + 100; // 500 +const TInt KVtEngResourceMemAllocFailure = KVtEngGeneralEventBase + 1; +const TInt KVtEngDtmfFailure = KVtEngGeneralEventBase + 2; +/** +* Remote supports UII DTMF. +*/ +const TInt KVtEngRemoteUIIDtmfSupport = KVtEngGeneralEventBase + 13; +/** +* Remote supports UII basic string. +*/ +const TInt KVtEngRemoteUIIBasicStringSupport = KVtEngGeneralEventBase + 14; +/** +* Remote supports UII IA5 string. +*/ +const TInt KVtEngRemoteUIIIA5StringSupport = KVtEngGeneralEventBase + 15; +/** +* Remote supports UII general string. +*/ +const TInt KVtEngRemoteUIIGeneralStringSupport = KVtEngGeneralEventBase + 6; + + +// Device is locked or unlocked (autolock feature) +const TInt KVtEngDeviceLockOn = KVtEngGeneralEventBase + 3; +const TInt KVtEngDeviceLockOff = KVtEngGeneralEventBase + 4; + +// Remote disconnected +const TInt KVtEngRemoteDisconnect = KVtEngGeneralEventBase + 5; + +#endif // VTENGEVENTS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngPanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngPanic.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006 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: Panic definitions for video telephone engine. +* +*/ + + + +#ifndef CVTENGPANIC_H +#define CVTENGPANIC_H + +// INCLUDES +#include + +// CONSTANTS +_LIT( KVtEngPanicCategory, "VTENG" ); + +// DATA TYPES +enum TVtEngPanic + { + EVtEngPanicInvalidInitializationEntry, /** 0 */ + EVtEngPanicInvalidInitializationState, /** 1 */ + EVtEngPanicIncorrectUtility, /** 2 */ + EVtEngPanicTlsPanic, /** 3 */ + EVtEngPanicNoVideoProvider, /** 4 */ + EVtEngPanicInvalidSessionState, /** 5 */ + EVtEngPanicMediaHandlerOpStateFailure, /** 6 */ + EVtEngPanicInvalidFlag, /** 7 */ + EVtEngPanicInvalidPointer, /** 8 */ + EVtEngPanicInvalidAudioPointer, /** 9 */ + EVtEngPanicCommsDestructOnInvalidState, /** 10 */ + EVtEngPanicUnInitIncorrectOperation, /** 11 */ + EVtEngPanicDisconnectTimerExpired, /** 12 */ + EVtEngPanicInvalidDtmfState, /** 13 */ + EVtEngPanicInvalidBitmapHandle, /** 14 */ + EVtEngPanicInvalidPortRead, /** 15 */ + /** Too many asynchronous events pending in queue */ + EVtEngPanicInvalidTooManyPendingEvents, /** 16 */ + /** VT variation cenrep file is missing or corrupt */ + EVtEngPanicVtCenrepVariation, /** 17 */ + /** VT configuration cenrep file is missing or corrupt */ + EVtEngPanicVtCenrepConfiguration, /** 18 */ + EVtEngPanicInvalidVideoQualityValue, /** 19 */ + EVtEngPanicWrongMediatorSenderState /** 20 */ + }; + +// FUNCTION PROTOTYPES +void Panic( TVtEngPanic aPanic ); + +#endif // CVTENGPANIC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngUtils.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 2004-2006 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: Video telephony engine TLS container. +* +*/ + + + +#ifndef VTENGUTILS_H +#define VTENGUTILS_H + +// INCLUDES +#include + + +// FORWARD DECLARATIONS +class CVtEngInitializer; +class CVtEngHandlerContainer; +class CVtEngDebug; +class CVtEngStateManager; +class CVtEngSettings; +class CVtEngEventManager; +class CVtEngCRProxy; +class CVtEngAccessoryHandler; +class CVtEngSATClient; +class CVtEngDeviceLockMonitor; +class CVtEngExtensions; +class CVtEngMdtrMessageListener; +class CVtEngMdtrCommandSender; + +// CLASS DECLARATION + +/** +* TLS container for pointers to essential objects. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngUtility ) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngUtility* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngUtility(); + + public: // New functions + + /** + * Creates SAT listener for updates. + */ + void StartSATListenL(); + + /** + * Returns engine initializer. + * @return initializer + */ + inline CVtEngInitializer& Initializer() const; + + /** + * Returns engine utility. + * @return utility + */ + static CVtEngUtility* EngineUtils(); + + /** + * Returns state manager. + * @return state manager + */ + static CVtEngStateManager* StateManager(); + + /** + * Returns event manager. + * @return event manager + */ + static CVtEngEventManager& EventManager(); + + /** + * Returns Central repository proxy. + * @return ref to CR proxy + */ + static CVtEngCRProxy& CRProxy(); + + /** + * Returns accessory listener. + * @return accessory handler + */ + static CVtEngAccessoryHandler& AccessoryHandler(); + + /** + * Returns settings. + * @return ref to settings + */ + static CVtEngSettings& Settings(); + + /** + * Returns mediator command sender. + * @return ref to command sender + */ + static CVtEngMdtrCommandSender& MediatorCommands(); + + /** + * Prepares the utility + * @param aHandlers handler container + * @param aStateManagerPtr state manager pointer ref + * @param aEventManagerPtr event manager pointer ref + * @param aExtensionPtr extension container pointer + */ + void PrepareL( + CVtEngHandlerContainer& aHandlers, + CVtEngStateManager*& aStateManagerPtr, + CVtEngEventManager*& aEventManagerPtr, + CVtEngExtensions* aExtensionPtr ); + + /** + * Notifies device lock to UI. + */ + void NotifyLockState(); + + /** + * Returns Extension container. + * @since S60 v3.2 + * @return pointer to extensions + */ + static CVtEngExtensions* Extensions(); + /** + * Starts listening mediator messages. + */ + void StartMediatorListenerL(); + + private: + + /** + * C++ default constructor. + */ + CVtEngUtility(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Initializater for the engine + CVtEngInitializer* iEngineInit; + + // State manager pointer + CVtEngStateManager** iStateManager; + + // Settigs + CVtEngSettings* iSettings; + + // Event manager pointer + CVtEngEventManager** iEventManager; + + // Central repository interface + CVtEngCRProxy* iCRProxy; + + // Accessory handler + CVtEngAccessoryHandler* iAccessoryHandler; + + // SAT refresh listener + CVtEngSATClient* iSATClient; + + // Monitor for device lock state + CVtEngDeviceLockMonitor* iLockMonitor; + + // Extension pointer + CVtEngExtensions* iExtensions; + // For receiving Mediator commands and events + CVtEngMdtrMessageListener* iMdtrMessageListener; + + // For sending Mediator commands + CVtEngMdtrCommandSender* iMdtrCommandSender; + + }; + +#include "VtEngUtils.inl" + +#endif // VTENGUTILS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/VtEngUtils.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/VtEngUtils.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006 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: Video telephony engine TLS container. +* +*/ + + +// MEMBER FUNCTIONS + +inline CVtEngInitializer& CVtEngUtility::Initializer() const + { + return *iEngineInit; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/cvtengincomingcallmonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/cvtengincomingcallmonitor.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2006 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: Monitor for incoming call +* +*/ + + + +#ifndef C_VTENGINCOMINGCALLMONITOR_H +#define C_VTENGINCOMINGCALLMONITOR_H + +// INCLUDES +#include +#include "MVtEngSettingPSObserver.h" + +// FORWARD DECLARATIONS +class CVtEngPubSubsListener; + +// CLASS DECLARATION +/** +* Monitor for incoming call state. +* +* @lib videoteleng +* @since S60 v3.2 +*/ +NONSHARABLE_CLASS( CVtEngIncomingCallMonitor ) : public CBase, public MVtEngSettingPSObserver + { +public: // Constructors and destructor + + static CVtEngIncomingCallMonitor* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngIncomingCallMonitor(); + +public: // New functions + + /** + * Sends event to UI of current incoming call state + */ + void NotifyState() const; + +public: // From MVtEngSettingPSObserver + + /** + * @see MVtEngSettingPSObserver::HandleNotifyPSL + */ + void HandleNotifyPSL( const TUid aUid, const TInt& aKey, + const TRequestStatus& aStatus ); + +private: + /** + * C++ constructor. + */ + CVtEngIncomingCallMonitor(); + + /** + * 2nd phase constructor + */ + void ConstructL(); + +private: + + // Listener for incoming call state + CVtEngPubSubsListener* iIncomingCallListener; + }; + +#endif // C_VTENGINCOMINGCALLMONITOR_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/cvtengmdtrcommandsender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/cvtengmdtrcommandsender.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* 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" +* 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: Sender class for mediator commands +* +*/ + + +#ifndef C_VTENGMDTRCOMMANDSENDER_H +#define C_VTENGMDTRCOMMANDSENDER_H + +// INCLUDES + +#include +#include +#include "MVtEngEventObserver.h" + +// FORWARD DECLARATIONS +class CVtEngUtility; +class CVtEngOperation; +class CVtEngMdtrCommandSender; +class TVtMdtrStateIdle; +// CLASS DECLARATION + +/** +* Mediator command sender +* +* @lib videoteleng +* @since 5.0 +*/ +NONSHARABLE_CLASS( CVtEngMdtrCommandSender ) : + public CBase, + public MMediatorCommandResponseObserver, + public MVtEngEventObserver + { +public: // constructor and destructors + + /** + * two-phase constructor + */ + static CVtEngMdtrCommandSender* NewL( CVtEngUtility& aUtils ); + + // Destructor + ~CVtEngMdtrCommandSender(); + +public: // new methods + + /** + * Requests telephony to end video call + */ + void EndCall(); + + /** + * Requests telephony to fallback to voice call + */ + void VoiceFallback(); + + /** + * Requests telephony to make voice call + */ + void SwitchToVoiceL( CVtEngOperation& aOperation ); + + /** + * Notifies telephony about outgoing audio state change + */ + void NotifyOutgoingAudioState( const TBool aMicEnabled ); + + void SetSenderState( TVtMdtrStateIdle& aNewState ); + + +public: // from MMediatorCommandResponseObserver + + // responses are not handled but required by mediator api + virtual void CommandResponseL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TInt aStatus, + const TDesC8& aData ); + +public: // from MVtEngEventObserver + + // handles event accordint to ongoing operation + virtual void HandleVtEventL( TInt aEvent ); + +private: // constructors + + CVtEngMdtrCommandSender( CVtEngUtility& aUtils ); + + void ConstructL(); + +private: + // for switch to voice operation, signaled when mediator command is issued. + CVtEngOperation* iOperation; + + // for mediator command reception + CMediatorCommandInitiator* iMediatorInitiator; + + CVtEngUtility& iUtils; + + TVtMdtrStateIdle* iSenderState; + }; + +#endif // C_VTENGMDTRCOMMANDSENDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/cvtengmdtrmessagelistener.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/cvtengmdtrmessagelistener.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* 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" +* 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: Listener class for mediator commands +* +*/ + + +#ifndef C_VTENGMDTRMESSAGELISTENER_H +#define C_VTENGMDTRMESSAGELISTENER_H + +// INCLUDES + +//#include +#include +#include +#include "MVtEngEventObserver.h" +#include "CVtEngStateManager.h" +#include "MVtEngSessionInfo.h" + +// FORWARD DECLARATIONS +class CMediatorCommandResponder; +class CVtEngUtility; + +// CLASS DECLARATION + +/** +* Mediator command and event listener +* +* @lib videoteleng +* @since 5.0 +*/ +NONSHARABLE_CLASS( CVtEngMdtrMessageListener ) : + public CBase, + private MMediatorCommandObserver, + private MMediatorEventObserver, + private MVtEngEventObserver + + { +public: // constructor and destructors + + /** + * two-phase constructor + */ + static CVtEngMdtrMessageListener* NewL( CVtEngUtility& aUtils ); + + // Destructor + ~CVtEngMdtrMessageListener(); + +public: // from MMediatorCommandObserver + + virtual void MediatorCommandL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TVersion aVersion, + const TDesC8& aData ); + + virtual void CancelMediatorCommand( TUid aDomain, + TUid aCategory, + TInt aCommandId ); + +public: // from MMediatorEventObserver + + virtual void MediatorEventL( TUid aDomain, + TUid aCategory, + TInt aEventId, + const TDesC8& aData ); + +public: // from MVtEngEventObserver + + // handles deferred CLI event dispatching + virtual void HandleVtEventL( TInt aEvent ); + +private: // constructors + + CVtEngMdtrMessageListener( CVtEngUtility& aUtils ); + + void ConstructL(); + +private: // new functions + + void HandleCLIEventL( const TDesC8& aData ); + + TBool IsReadyForCLIEvent() const; + +private: + CVtEngUtility& iUtils; + + // for mediator command reception + CMediatorCommandResponder* iMediatorResponder; + + CMediatorEventConsumer* iMediatorEvents; + + // supported mediator commands + MediatorService::RCommandList iCommandList; + }; + +#endif // C_VTENGMDTRMESSAGELISTENER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Base/cvtengmediatorservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Base/cvtengmediatorservice.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,124 @@ +/* +* 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" +* 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: Handles commands received via Mediator +* +*/ + + +#ifndef C_VTENGMEDIATORSERVICE_H +#define C_VTENGMEDIATORSERVICE_H + +// INCLUDES +#include +#include "mvtengoperationobserver.h" +#include "MVtEngEventObserver.h" +#include "vtengcommands.h" + +// FORWARD DECLARATIONS +class CMediatorCommandResponder; +class CVtEngOperation; +class CVtEngInternalOperation; +class CVtEngUtility; + +// CLASS DECLARATION + +/** +* Handles shutdown and audio commands from mediator. Deletes itself +* after service is completed. +* +* @lib videoteleng +* @since 5.0 +*/ +NONSHARABLE_CLASS( CVtEngMediatorService ) : + public CBase, + private MVtEngOperationObserver, + private MVtEngEventObserver + { +public: // constructor and destructors + + /** + * Starts requested service. + * @param aResponder target for mediator response + * @param aUtils engine internal utility + * @param aCommandId service to start + */ + static void StartLD( + CMediatorCommandResponder& aResponder, + CVtEngUtility& aUtils, + const TUid aCategory, + const TInt aCommandId ); + + ~CVtEngMediatorService(); + +public: // from MVtEngOperationObserver + + /** + * @see MVtEngOperationObserver + */ + virtual void SetOperation( CVtEngOperation* aActiveOp ); + + /** + * @see MVtEngOperationObserver + */ + virtual void CommandCompleteL( + const TVtEngCommandId aCommand, + const TInt aResult ); + +public: // from MVtEngEventObserver + + // handles event according to ongoing operation + virtual void HandleVtEventL( TInt aEvent ); + +private: // c++ constructor + + CVtEngMediatorService( + CMediatorCommandResponder& aResponder, + CVtEngUtility& aUtils, + const TUid aCategory, + const TInt aCommandId ); + +private: + + // prepares and starts requested operation + void ConstructAndDoServiceL(); + + // sends response to shutdown command if shutdown already ongoing + TBool IsShuttingDown() const; + + void StartOperationL( const TVtEngCommandId aCommand ); + + // Sends mediator response for shutdown or audio mute/unmute commands. + // deletes itself if not waiting internal command response. + void SendMediatorResponseD( const TBool aDeleteThis ); + +private: + CMediatorCommandResponder& iResponder; + + CVtEngInternalOperation* iOperation; + + CVtEngUtility& iUtils; + + // mediator Category [KCatVideotelInternalCommands, KCatPhoneToVideotelCommands] + TUid iCategory; + + // mediator command [shutdown, mute mic, unmute mic] + TInt iCommandId; + + // this is used for controlling + TInt iServiceStatus; + }; + +#endif // T_VTENGMEDIATORSERVICE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/CVtEngCommandHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/CVtEngCommandHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,193 @@ +/* +* Copyright (c) 2006 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: Command handler of the engine. +* +*/ + + + +#ifndef CVTENGCOMMANDHANDLER_H +#define CVTENGCOMMANDHANDLER_H + +// INCLUDES +#include +#include "MVtEngCommandHandler.h" +#include "mvtengoperationobserver.h" + +// FORWARD DECLARATIONS +class CVtEngHandlerContainer; +class CVtEngOperation; + +// CLASS DECLARATION + +/** +* Handler for commands from client. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngCommandHandler ) : public CBase, + public MVtEngCommandHandler, + public MVtEngOperationObserver + { + public: // constructor and destructors + + static CVtEngCommandHandler* NewL( + CVtEngHandlerContainer& aHandlers ); + + virtual ~CVtEngCommandHandler(); + + public: // from MVtEngCommandHandler + + /** + * @see MVtEngCommandHandler + */ + virtual void ExecuteL( + const TVtEngCommandId aCommand, + TDesC8* aParams ); + + /** + * @see MVtEngCommandHandler + */ + virtual TInt CancelCommand( const TVtEngCommandId aCommandId ); + + /** + * @see MVtEngCommandHandler + */ + virtual TInt GetCommandCaps( + const TVtEngCommandId aCommand ); + + /** + * @see MVtEngCommandHandler + */ + virtual TVtEngCommandId PendingCommand(); + + /** + * @see MVtEngCommandHandler + */ + virtual void AddObserverL( MVtEngCommandObserver& aObserver ); + + /** + * @see MVtEngCommandHandler + */ + virtual void RemoveObserver( MVtEngCommandObserver& aObserver ); + + public: // from MVtEngOperationObserver + + /** + * Handles command completion. + * @param aCommand command id + * @param aResult Symbian OS error code. + */ + virtual void CommandCompleteL( + const TVtEngCommandId aCommand, + const TInt aResult ); + + /** + * Sets pending asynch operation + * @param aActiveOp pending operation or NULL. + */ + virtual void SetOperation( CVtEngOperation* aActiveOp ); + + private: // constructors + + /** + * Second phase constructor + */ + void ConstructL(); + + /** + * c++ constructor + */ + CVtEngCommandHandler( CVtEngHandlerContainer& aHandlers ); + + private: + + void AddToPoolL( TVtEngCommandId aCommand ); + + /** + * Validates command + */ + void ValidateL( + const TVtEngCommandId aCommandId, + TDesC8* aParams ); + + /** + * Check if command is async. + */ + void CheckAsynchronity( + const TVtEngCommandId aCommandId, + TInt& aCaps ); + + /** + * Check if command is supported. + */ + void CheckSupport( + const TVtEngCommandId aCommandId, + TInt& aCaps ); + + /** + * Check if command is applicable in current state. + */ + void CheckState( + const TVtEngCommandId aCommandId, + TInt& aCaps ); + + private: // command pool + + struct TVtOpItem + { + TVtEngCommandId iId; + CVtEngOperation* iOperation; + }; + /** + * Command pool for commands instantiated at construction + * time to guarantee certain operations. + */ + NONSHARABLE_CLASS( CVtEngCmdPool ): public CArrayPtrFlat + { + public: // constructor and destructor + + // Constructor + CVtEngCmdPool( TInt aGranularity ); + + // Destructor + ~CVtEngCmdPool(); + + public: // data structures + + + public: // new methods + + /** + * Returns operation stored in the pool. + * @param aId command id + * @return operation or NULL if not found. + */ + CVtEngOperation* Get( const TVtEngCommandId aId ); + + }; + + private: // Data members + + RPointerArray iObservers; + CVtEngHandlerContainer& iHandlers; + CVtEngOperation* iActiveOp; + CVtEngCmdPool* iCommandPool; + + }; + +#endif //CVTENGCOMMANDHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/CVtEngOperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/CVtEngOperation.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2006 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: Operation base class. +* +*/ + + + +#ifndef CVTENGOPERATION_H +#define CVTENGOPERATION_H + +// INCLUDES +#include +#include "vtengcommands.h" + +// FORWARD DECLARATIONS +class CVtEngCommandHandler; +class CVtEngHandlerContainer; +class MVtEngOperationObserver; + +/** +* Operation base class. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngOperation ) : public CBase + { + public: // constructor and destructors + + /** + * two-phase constructor + * @param aCommandId command id + * @param aHandlers handler container + * @param aObserver observer called back when operation is completed + * @param aDelete if ETrue command deletes itself after completion + */ + static CVtEngOperation* NewL( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete = ETrue ); + + /** + * Destructor + */ + ~CVtEngOperation( ); + + public: // new functions + + /** + * Performs operations. + * @return ETrue is operation is complete (i.e. sync). + */ + virtual TBool ExecuteL( TDesC8* aParams ); + + /** + * Cancels pending command. + * @return ETrue if cancelled was succesfull or there + * is nothing to cancel. + */ + TBool Cancel(); + + /** + * Returns command identifier. + * @return command identifier + */ + inline TVtEngCommandId Command() const; + + /** + * Returns command parameter buffer. + * @return parameter buffer + */ + inline const TDesC8* Parameters() const; + + /** + * Notifies observer on completion. + * @param aResult Symbian OS error code + */ + virtual void HandleOpComplete( const TInt aResult ); + + protected: // new functions + + /** + * + */ + TBool OfferExecuteSyncL( TDesC8* aParams ); + + protected: + /** + * c++ constructor + */ + CVtEngOperation( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aCommandHandler, + TBool aDelete ); + + /** + * Handles asynchronous operation complete + */ + static TInt ASyncHandleOpComplete( TAny* aPtr ); + + protected: + + // Command identifier + const TVtEngCommandId iCommand; + + // Handler container + CVtEngHandlerContainer& iHandlers; + + // observer for command response + MVtEngOperationObserver& iObserver; + + // Parameter + TDesC8* iParams; + + // Delete command when complete + TBool iDelete; + + // Pointer to asynchronous callback + CAsyncCallBack* iAsyncCallback; + + // Asynchronous callback error identifier + TInt iAsyncErr; + }; + +/** +* Utility class for unpacking data type with descriptor data. +* @lib videoteleng +* @since 2.6 +*/ +template +class TVtEngOpParamUtil + { + public: + /** + * Sets parameter in aDes to aRef. + */ + inline void static Set( T& aRef , const CVtEngOperation& aOp ); + }; + +#include "CVtEngOperation.inl" + +#endif // CVTENGOPERATION_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/CVtEngOperation.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/CVtEngOperation.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006 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: Operation inline methods +* +*/ + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CVtEngOperation::Command +// ----------------------------------------------------------------------------- +inline TVtEngCommandId CVtEngOperation::Command() const { return iCommand; } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::Parameters +// ----------------------------------------------------------------------------- +inline const TDesC8* CVtEngOperation::Parameters() const { return iParams; } + +// ----------------------------------------------------------------------------- +// TVtEngOpParamUtil::Set +// ----------------------------------------------------------------------------- +template +inline void TVtEngOpParamUtil::Set( + T& aRef, + const CVtEngOperation& aOp ) + { + TPckgC pckg( aRef ); + pckg.Set( *aOp.Parameters() ); + aRef = pckg(); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/MVtEngCommandHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/MVtEngCommandHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2006 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: Command handler interface of the engine. +* +*/ + + + +#ifndef MVTENGCOMMANDHANDLER_H +#define MVTENGCOMMANDHANDLER_H + +// INCLUDES +#include +#include "vtengcommands.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +class MVtEngCommandObserver; + +// CLASS DECLARATION + +/** +* Handler for commands from client. +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngCommandHandler + { + public: + + /** + * EAttribAsync + * command is asynchronous. + * EAttribEnabled + * Command can be executed at the moment. + * EAttribSupported + * Command is supported by the engine. + */ + enum TCommandCaps + { + EAttribAsync = 0x00000001, + EAttribEnabled = 0x00000002, + EAttribSupported = 0x00000004 + }; + + /** + * Excecutes a command. This function leaves KErrNotReady + * if engine is in such a state that command cannot be + * executed. + * + * @param aCommandId command to be executed. + * @param aParams command parameters, NULL if command + * does not require any. + */ + virtual void ExecuteL( + const TVtEngCommandId aCommandId, + TDesC8* aParams ) = 0; + + /** + * Cancels a command. + * @param aCommandId command to cancel. + * @return KErrNotFound if command is not pending. + */ + virtual TInt CancelCommand( const TVtEngCommandId aCommandId ) = 0; + + /** + * Returns capabilities of a command. + * @return command caps + */ + virtual TInt GetCommandCaps( + const TVtEngCommandId aCommand ) = 0; + + /** + * Returns pending command. + * @return pending command + */ + virtual TVtEngCommandId PendingCommand() = 0; + + /** + * Sets command observer. First call on this is guaranteed + * to succeed. + * @param aObserver command observer. + */ + virtual void AddObserverL( MVtEngCommandObserver& aObserver ) = 0; + + /** + * Removes a command observer or if non-op if specified observer + * is not found. + * @param aObserver command observer to be removed. + */ + virtual void RemoveObserver( MVtEngCommandObserver& aObserver ) = 0; + }; + +#endif //MVTENGCOMMANDHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/MVtEngCommandObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/MVtEngCommandObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2006 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: Observer for asynchronous commands. +* +*/ + + + +#ifndef MVTENGCOMMANDOBSERVER_H +#define MVTENGCOMMANDOBSERVER_H + +// INCLUDES +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + + +// CLASS DECLARATION + +/** +* Observer for asynchronous commands. +* +* @since 2.6 +*/ +class MVtEngCommandObserver + { + public: // new functions + + /** + * Callback for command completion. + * @param aCommand completed command. This is + * same instance as passed in MVtEngCommandHandler::ExecuteL. + * Client may delete the command. + * @param aError Symbian OS error code. + */ + virtual void HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ) = 0; + }; + +#endif // MVTENGCOMMANDOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/TVtEngOperationUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/TVtEngOperationUtils.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2006 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: Handler utili +* +* +*/ + + + +#ifndef TVTENGOPERATIONUTILS +#define TVTENGOPERATIONUTILS + +// INCLUDES +#include +#include "vtengcommands.h" + + +// FORWARD DECLARATIONS +class CVtEngHandlerContainer; +class CVtEngOperation; +// CLASS DECLARATION + +/** +* Handles rendering operation +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngRenderUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + + static void Cancel( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + }; + +/** +* Handles audio routing operation. +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngAudioRoutingUtil + { + public: + + /** + * + * @param aOperation operation + */ + static void HandleL( + CVtEngOperation& aOperation ); + }; + + +/** +* Handles audio playback operation. +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngAudioPlaybackUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + }; + +/** +* Handles media transport operation like pausing/resuming. +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngMediaTransportUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + }; + +/** +* +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngViewFinderConfigureUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + }; + +/** +* +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngCameraConfigUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + }; + +/** +* Handles engine initialization. +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngEngineInitUtil + { + public: + + static void HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ); + + static void Cancel( CVtEngOperation& aOperation ); + }; + + +/** +* Handles extension operations. +* +* @lib videoteleng +* @since S60 v3.2 +*/ +class TVtEngExtensionUtil + { + public: + + /** + * Handles extension operations + * @param aOperation operation + */ + static void HandleL( + CVtEngOperation& aOperation ); + }; +#endif // TVTENGOPERATIONUTILS + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/cvtenginternaloperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/cvtenginternaloperation.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,88 @@ +/* +* 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" +* 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: Operation class for commands not originated by UI but +* engine itself. +* +*/ + + +#ifndef C_VTENGINTERNALOPERATION_H +#define C_VTENGINTERNALOPERATION_H + +// INCLUDES +#include +#include "CVtEngOperation.h" + +// FORWARD DECLARATIONS +class CVtEngCommandHandler; +class CVtEngHandlerContainer; + +/** +* Class for handling operation (command) originated engine itself. +* Deviation from base class behavior: does not set itself as "active +* operation" in command handler (observer of the operation). Also +* response is given in synchronous manner. +* +* @lib videoteleng +* @since S60 5.0 +*/ +NONSHARABLE_CLASS( CVtEngInternalOperation ) : public CVtEngOperation + { +public: // constructor and destructors + + /** + * two-phase constructor + * @param aCommandId command id + * @param aHandlers handler container + * @param aCommandHandler command handler + * @param aDelete if ETrue command deletes itself after completion + * @return internal operation + */ + static CVtEngInternalOperation* NewL( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete = ETrue ); + + /** + * Destructor + */ + ~CVtEngInternalOperation( ); + +public: // from CVtEngOperation + + /** + * @see CVtEngOperation + */ + virtual TBool ExecuteL(); + + /** + * @see CVtEngOperation + */ + virtual void HandleOpComplete( const TInt aResult ); + +private: + /** + * c++ constructor + */ + CVtEngInternalOperation( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete ); + }; + +#endif // C_VTENGINTERNALOPERATION_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/mvtengoperationobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/mvtengoperationobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,50 @@ +/* +* 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" +* 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: Observer interface for engine operations +* +*/ + + +#ifndef M_VTENGOPERATIONOBSERVER_H +#define M_VTENGOPERATIONOBSERVER_H + +// INCLUDES +#include +#include "vtengcommands.h" + +// FORWARD DECLARATIONS +class CVtEngOperation; + +// CLASS DECLARATION + +/** +* Interface for setting active operation and responding to commands +* +* @lib videoteleng +* @since 5.0 +*/ +class MVtEngOperationObserver + { +public: + + virtual void SetOperation( CVtEngOperation* aActiveOp ) = 0; + + virtual void CommandCompleteL( + const TVtEngCommandId aCommand, + const TInt aResult ) = 0; + }; + +#endif // M_VTENGOPERATIONOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Commands/vtengcommands.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Commands/vtengcommands.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,300 @@ +/* +* Copyright (c) 2006 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: Video telephony engine command identifiers. +* +*/ + + + +#ifndef CVTENGCOMMANDS_H +#define CVTENGCOMMANDS_H + +// INCLUDES +#include + +// DATA TYPES +typedef TInt TVtEngCommandId; + +// CONSTANTS + + +const TInt KVtEngCommandNone = -1; + +const TInt KVtEngCommandBase = 0; + +/** +* Configuration commands +*/ +const TInt KVtEngConfigureCommandBase = KVtEngCommandBase + 100; + +// Allocates essential resources when application starts up +const TInt KVtEngInitializeEngine = KVtEngConfigureCommandBase + 1; + +// Resets engine. Use when all video calls are ended. +const TInt KVtEngResetEngine = KVtEngConfigureCommandBase + 2; + +/** +* Makes voice call to existing peer. +*/ +const TInt KVtEngSwitchToVoice = KVtEngConfigureCommandBase + 4; + +// Allocates essential resources when application starts up - TEST MODE +const TInt KVtEngInitializeEngineDiag = KVtEngConfigureCommandBase + 50; + +// Allocates essential resources when application starts up - TEST MODE +const TInt KVtEngInitializeEngineTest = KVtEngConfigureCommandBase + 51; +// + +/** +* Media commands for controlling local display and sending +* of media (audio/video) to the peer. +*/ +const TInt KVtEngMediaCommandBase = KVtEngConfigureCommandBase + 100; // 200 + +// Actual commands + +/** +* Selects source, +* @see MVtEngMedia::TMediaSource for command parameters. +*/ +const TInt KVtEngSetSource = KVtEngMediaCommandBase + 1; + +/** +* Async +* Initializes default or selected camera. +* Does not take parameters. See KVtEngSetSource command parameters. +*/ +const TInt KVtEngPrepareCamera = KVtEngMediaCommandBase + 2; + +/** +* prepares engine to pass view finder frames to UI +* @see MVtEngMedia::TVtEngViewFinderConfig for command parameters. +*/ +const TInt KVtEngPrepareViewFinder = KVtEngMediaCommandBase + 3; + +/** +* Sync +* prepares engine to render view finder frames using DSA +* @see MVtEngMedia::TRenderingOptionsDSA for command parameters. +*/ +const TInt KVtEngPrepareViewFinderDSA = KVtEngMediaCommandBase + 4; + +/** +* Async +* Starts view finder +* @see MVtEngMedia::TRenderingOptionsDSA for command parameters. +*/ +const TInt KVtEngStartViewFinder = KVtEngMediaCommandBase + 5; + +/** +* Async +* View finder control commands, do not take parameters. +*/ +const TInt KVtEngPauseViewFinder = KVtEngMediaCommandBase + 6; +const TInt KVtEngStopViewFinder = KVtEngMediaCommandBase + 7; + +/** +* Prepares engine for rendering video (with DSA) from peer +* @see MVtEngMedia::TRenderingOptionsDSA for command parameters. +*/ +const TInt KVtEngPrepareRemoteRenderDSA = KVtEngMediaCommandBase + 8; + +/** +* Prepares engine for rendering video from peer +* @see MVtEngMedia::TVtEngViewFinderConfig for command parameters. +*/ +const TInt KVtEngPrepareRemoteRender = KVtEngMediaCommandBase + 9; + +/** +* Remote video rendering commands, do not take parameters. +*/ +const TInt KVtEngStartRenderRemote = KVtEngMediaCommandBase + 10; +const TInt KVtEngPauseRenderRemote = KVtEngMediaCommandBase + 11; +const TInt KVtEngStopRenderRemote = KVtEngMediaCommandBase + 12; + +/** +* Media transport control commands, do not take parameters. +*/ +// Audio +const TInt KVtEngMuteOutgoingAudio = KVtEngMediaCommandBase + 13; +const TInt KVtEngUnmuteOutgoingAudio = KVtEngMediaCommandBase + 14; +const TInt KVtEngPauseIncomigAudio = KVtEngMediaCommandBase + 15; +const TInt KVtEngResumeIncomigAudio = KVtEngMediaCommandBase + 16; + +/** +* Sync. +* Sets video source provider zoom step. +* Parameter is TInt from zero to maximum zoom step. +* @see MVtEngMedia::GetMaxZoomStep. +*/ +const TInt KVtEngSetZoomStep = KVtEngMediaCommandBase + 17; + +/** +* Sync +* Sets size of remote video, parameter is of type TSize +*/ +const TInt KVtEngSetRemoteVideoSize = KVtEngMediaCommandBase + 18; + +/** +* Sets UI foreground state (ETrue or EFalse) +*/ +const TInt KVtEngSetUIForeground = KVtEngMediaCommandBase + 19; + +/** +* Freeze provider video. +*/ +const TInt KVtEngFreeze = KVtEngMediaCommandBase + 20; + +/** +* Unfreeze provider video. +*/ +const TInt KVtEngUnfreeze = KVtEngMediaCommandBase + 21; + +/** +* Adjusts video quality. +*/ +const TInt KVtEngSetVideoQuality = KVtEngMediaCommandBase + 22; + +/** +* Initialize image sharing. +*/ +const TInt KVtEngInitializeShareImage = KVtEngMediaCommandBase + 23; + +/** +* Start image sharing (must be initialized first). +*/ +const TInt KVtEngStartShareImage = KVtEngMediaCommandBase + 24; + +/** +* Stop image sharing. +*/ +const TInt KVtEngStopShareImage = KVtEngMediaCommandBase + 25; + +/** +* Sync +* prepares engine to render view finder frames using DP +* @see MVtEngMedia::TRenderingOptionsDP for command parameters. +*/ +const TInt KVtEngPrepareViewFinderDP = KVtEngMediaCommandBase + 26; + +/** +* Prepares engine for rendering video (with DP) from peer +* @see MVtEngMedia::TRenderingOptionsDP for command parameters. +*/ +const TInt KVtEngPrepareRemoteRenderDP = KVtEngMediaCommandBase + 27; + +/** +* Engine reintializes camera instance when layout change happens and active +* provider is onboard camera. If anyother provider is selected, then nothing +* will be done by the engine. +*/ +const TInt KVtEngHandleLayoutChange = KVtEngMediaCommandBase + 28; + +/** + * Sync + * Request update last remote video frame through MVtEngFrameObserver::vtSetFrame + */ +const TInt KVtEngRequestLastRemoteFrame = KVtEngMediaCommandBase + 29; + + +const TInt KVtEngPrepareRemoteRenderNGA = KVtEngMediaCommandBase + 30; + +/** +* Audio control +*/ +const TInt KVtEngAudioCommandBase = KVtEngMediaCommandBase + 100; // 300 + +// Actual commands + +/** +* Sets output volume level [1..10] for active audio device +*/ +const TInt KVtEngSetAudioVolume = KVtEngAudioCommandBase + 1; + +/** +* Audiorouting command +*/ +const TInt KVtEngSetAudioRouting = KVtEngAudioCommandBase + 2; + +/** +* Increase volume by one step. +*/ +const TInt KVtEngIncreaseAudioVolume = KVtEngAudioCommandBase + 3; + +/** +* Decrease volume by one step. +*/ +const TInt KVtEngDecreaseAudioVolume = KVtEngAudioCommandBase + 4; + +/** +* Session commands +*/ +const TInt KVtEngSessionCommandBase = KVtEngAudioCommandBase + 100; + +// Actual commands + +/** +* Terminates session and tears down connection +*/ +const TInt KVtEngTerminateSession = KVtEngSessionCommandBase + 1; + +const TInt KVtEngSendDtmf = KVtEngSessionCommandBase + 2; + +/** +* Starts sending a DTMF tone. Takes TChar parameter. Sync +*/ +const TInt KVtEngStartDtmfTone = KVtEngSessionCommandBase + 3; + +/** +* Stops previously started tone. Does not take parametners. Sync +*/ +const TInt KVtEngStopDtmfTone = KVtEngSessionCommandBase + 4; + +/** +* Remote supports UII DTMF. +*/ +const TInt KVtEngSetUIIDtmfSupport = KVtEngSessionCommandBase + 5; + +/** +* Remote supports UII basic string. +*/ +const TInt KVtEngSetUIIBasicStringSupport = KVtEngSessionCommandBase + 6; + +/** +* Remote supports UII IA5 string. +*/ +const TInt KVtEngSetUIIIA5StringSupport = KVtEngSessionCommandBase + 7; + +/** +* Remote supports UII general string. +*/ +const TInt KVtEngSetUIIGeneralStringSupport = KVtEngSessionCommandBase + 8; + + +/** +* Extension commands. +*/ +const TInt KVtEngExtensionCommandBase = KVtEngSessionCommandBase + 100; //500 +const TInt KVtEngSetContrast = KVtEngExtensionCommandBase + 1; +const TInt KVtEngSetBrightness = KVtEngExtensionCommandBase + 2; +const TInt KVtEngSetWhiteBalance = KVtEngExtensionCommandBase + 3; +const TInt KVtEngSetColorTone = KVtEngExtensionCommandBase + 4; +#if defined ( RD_VT_RTF ) +const TInt KVtEngStartRecord = KVtEngExtensionCommandBase + 5; +const TInt KVtEngStopRecord = KVtEngExtensionCommandBase + 6; +#endif // RD_VT_RTF + +#endif // CVTENGCOMMANDS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/CVtEngCameraPreferences.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/CVtEngCameraPreferences.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2006 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: Videoteleng Camera Preferences extension +* +*/ + + +#ifndef CVTENGCAMERAPREFERENCES_H +#define CVTENGCAMERAPREFERENCES_H + +// INCLUDES +#include "VtEngPanic.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngOperation.h" + +#include +#include + +#include +#include "CVtEngExtensionBase.h" + +// FORWARD DECLARATIONS +class CVSDataProvider; +class MVtEngCameraPreferencesObserver; + +// CLASS DECLARATION + +/** +* Videoteleng extension base class. +* +* @lib videoteleng.lib +* @since S60 v3.2 +*/ +NONSHARABLE_CLASS ( CVtEngCameraPreferences ): public CVtEngExtensionBase, + public MVtEngCameraPreferences + { + public: //Constructor and destructor. + + /** + * Symbian two-phase constructor. + * @return engine extension instance + */ + static CVtEngCameraPreferences* NewL(); + + /** + * Destructor. + */ + ~CVtEngCameraPreferences(); + + public: // from base class CVtEngExtensionBase + + /** + * @see CVtEngExtensionBase::GetInterface + */ + virtual TAny* GetInterface(); + + /** + * @see CVtEngExtensionBase::HandleL + */ + virtual TBool HandleL( CVtEngOperation* aOp ); + + /** + * @see CVtEngExtensionBase::ValidateCommand + */ + virtual TBool ValidateCommand( const TVtEngCommandId aCommandId ); + + public: // from base class MVtEngCameraPreferences + + /** + * @see MVtEngCameraPreferences::GetColorTone + */ + virtual TInt GetColorTone( + MVtEngCameraPreferences::TColorTone& aColortone ) const; + + /** + * @see MVtEngCameraPreferences::GetSupportedColorTones + */ + virtual TInt GetSupportedColorTones( + TUint32& aSupportedColorTones ) const; + + /** + * @see MVtEngCameraPreferences::GetWhiteBalance + */ + virtual TInt GetWhiteBalance( + MVtEngCameraPreferences::TWhiteBalance& aWhiteBalance ) const; + + /** + * @see MVtEngCameraPreferences::GetSupportedWhiteBalanceModes + */ + virtual TInt GetSupportedWhiteBalanceModes( + TUint32& aWhiteBalance ) const; + + /** + * @see MVtEngCameraPreferences::GetBrightness + */ + virtual TInt GetBrightness( TInt& aBrightness) const; + + /** + * @see MVtEngCameraPreferences::GetContrast + */ + virtual TInt GetContrast( TInt& aContrast ) const; + + public: + + /** + * Sets data provider to camera prefefrences + * @param aProvider pointer to current active data provider + * @param aObserver reference to observer + */ + virtual void SetProvider( CVSDataProvider* aProvider, + MVtEngCameraPreferencesObserver& aObserver ); + + /** + * Detaches observer from preference instance. + * @param aObserver reference to observer + */ + void Detach( MVtEngCameraPreferencesObserver& aObserver ); + + private: + + /* + * C++ default constructor. + */ + CVtEngCameraPreferences(); + + /** + * Symbian two-phase constructor. + */ + void ConstructL(); + + private: + + // Video source data provider pointer + CVSDataProvider* iProvider; + + // Preference observer pointer + MVtEngCameraPreferencesObserver* iObserver; + + }; + +#endif //CVTENGCAMERAPREFERENCES_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/CVtEngExtensionBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/CVtEngExtensionBase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2006 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: Videoteleng extension base class +* +*/ + + +#ifndef CVTENGEXTENSIONSBASE_H +#define CVTENGEXTENSIONSBASE_H + +// INCLUDES +#include +#include "vtengcommands.h" + +// FORWARD DECLARATIONS +class CVtEngOperation; + +// CLASS DECLARATION + +/** +* Videoteleng extension base class. +* +* @lib videoteleng.lib +* @since S60 v3.2 +*/ +NONSHARABLE_CLASS ( CVtEngExtensionBase ): public CBase + + { + public: // pure virtuals. + + /** + * Returns extension API interface + * @return API IF as TAny pointer + */ + virtual TAny* GetInterface() = 0; + + /** + * Handles requested extension operation + * @param aOp requested operation pointer + * @return TBool if operation succeed or not + */ + virtual TBool HandleL( CVtEngOperation* aOp ) = 0; + + /** + * Validates requested extension command + * @param aCommandId requested command identifier (TInt) + * @return TBool if command is valid or not + */ + virtual TBool ValidateCommand( const TVtEngCommandId aCommandId ) = 0; + + /** + * Gets extension UID + * @return extension UID + */ + const TUid& Uid() const; + + protected:// Constructor. + /* + * C++ default constructor. + */ + CVtEngExtensionBase( TUid aExtensionUid ); + + private: + + // Extension UID + const TUid iExtensionUid; + }; + +#endif //CVTENGEXTENSIONSBASE_H diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/CVtEngExtensions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/CVtEngExtensions.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2006 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: Videoteleng API extension configuration +* +*/ + + +#ifndef CVTENGEXTENSIONS_H +#define CVTENGEXTENSIONS_H + +// INCLUDES +#include +#include "vtengcommands.h" + +// CONSTANTS AND MACROS +const TInt KExtensionGranularity = 1; + +// FORWARD DECLARATIONS +class CVtEngExtensionBase; +class CVtEngCameraPreferences; +class CVtEngOperation; +class CVtEngMediaHandler; + +// CLASS DECLARATION + +/** +* Video telephony extension handling. +* +* @lib videoteleng.lib +* @since S60 v3.2 +*/ +NONSHARABLE_CLASS(CVtEngExtensions): public CBase + + { + public: // Constructor and destructor. + + /** + * Symbian two-phase constructor. + * @return engine extension instance + */ + static CVtEngExtensions* NewL(); + + /** + * Destructor. + */ + ~CVtEngExtensions(); + + public: + + /** + * Gets client interface from certain extension + * @param aInterfacePtr a pointer to client IF pointer + * @param aUid requested client IF extension UID + * @param aHandler a handle to media handler + */ + TInt GetClientInterface( TAny** aInterfacePtr, + const TUid& aUid , CVtEngMediaHandler& aHandler ); + + /** + * Offers operation for extensions + * @param aOp operation pointer + * @return TBool value indicating if any of exsisting extension + * was able to handle operation + */ + TBool OfferOperationL( CVtEngOperation* aOp ); + + /** + * Validates extension command + * @param aCommandId command ID (TInt) + * @return TBool value indicating if any of exsisting extension + * was able to validate operation + */ + TBool ValidateCommand( const TVtEngCommandId aCommandId ); + + private: + + /** + * C++ default constructor. + */ + CVtEngExtensions(); + + /** + * Symbian constructor that may leave. + */ + void ConstructL(); + + /** + * Creates certain extension + */ + CVtEngExtensionBase* CreateExtensionsL( const TUid& aUid, + CVtEngMediaHandler& aHandler ); + + /** + * Search extensions using UID + */ + TInt LookupExtensions( const TUid& aUid) const; + + private: + + // Extension handle container + RPointerArray iExtensionArray; + + }; + +#endif //CVTENGEXTENSIONS_H diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/MVtEngCameraPreferences.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/MVtEngCameraPreferences.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2006 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: Videoteleng Camera Preferences extension API +* +*/ + + +#ifndef MVTENGCAMERAPREFERENCES_H +#define MVTENGCAMERAPREFERENCES_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +// CONSTANTS +const TUid KVtEngExtensionCameraPreferences = {0x10282814}; + +/** +* Camera preferences extension API class. +* +* @lib videoteleng.lib +* @since S60 v3.2 +*/ + +class MVtEngCameraPreferences + { + public: + + enum TColorTone + { + /** Normal colors. */ + ENormal = CCamera::CCameraImageProcessing::EEffectNone, + /** Sepial. */ + ESepia = CCamera::CCameraImageProcessing::EEffectSepia, + /** Black and White. */ + EGrayscale = CCamera::CCameraImageProcessing::EEffectMonochrome, + /** Inverted colors. */ + ENegative = CCamera::CCameraImageProcessing::EEffectNegative + }; + + enum TWhiteBalance + { + /** Automatically adjusted. */ + EAuto = CCamera::EWBAuto, + /** Normal daylight. */ + EDaylight = CCamera::EWBDaylight, + /** Overcast daylight. */ + ECloudy = CCamera::EWBCloudy, + /** Tungsten filament lighting. */ + ETungsten = CCamera::EWBTungsten, + /** Fluorescent bulb lighting. */ + EFluorescent = CCamera::EWBFluorescent, + /** Flash lighting. */ + EFlash = CCamera::EWBFlash, + /** High contrast daylight primarily snowy. */ + ESnow = CCamera::EWBSnow, + /** High contrast daylight primarily near the sea. */ + EBeach = CCamera::EWBBeach, + /** User configurable mode. */ + EManual = CCamera::EWBManual, + /** Shade. */ + EShade = CCamera::EWBShade + }; + + enum TBrightness + { + /** Automatically set brightness value*/ + EAutomaticBrightness = KMinTInt + }; + + enum TContrasts + { + /** Automatically set contrast value*/ + EAutomaticContrast = KMinTInt + }; + + /** + * Gets current color tone value from camera + * @param aColortone reference value for current color tone + * @return Symbian error code + */ + virtual TInt GetColorTone( TColorTone& aColortone ) const = 0; + + /** + * Gets all suported color tone values from camera + * @param aSupportedColorTones reference value for supported colortone + * values (a bit field) + * @return Symbian error code + */ + virtual TInt GetSupportedColorTones( + TUint32& aSupportedColorTones ) const = 0; + + /** + * Gets current whitebalance value from camera + * @param aWhiteBalance reference value for current whitebalance + * @return Symbian error code + */ + virtual TInt GetWhiteBalance( + TWhiteBalance& aWhiteBalance ) const = 0; + + /** + * Gets all suported whitebalance values from camera + * @param aWhiteBalance reference value for supported whitebalance + * values (a bit field) + * @return Symbian error code + */ + virtual TInt GetSupportedWhiteBalanceModes( + TUint32& aWhiteBalance ) const = 0; + + /** + * Gets current brightness value from camera + * @param aBrightness reference value for current brightness + * @return Symbian error code + */ + virtual TInt GetBrightness( TInt& aBrightness) const = 0; + + /** + * Gets current contrast value from camera + * @param aContrast reference value for current brightness + * @return Symbian error code + */ + virtual TInt GetContrast( TInt& aContrast ) const = 0; + + }; + +#endif //MVTENGCAMERAPREFERENCES_H + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/cvtengr2ftoneplayer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/cvtengr2ftoneplayer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2006 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: Plays video start/stop sounds. +* +*/ + + +#ifndef CVTENGR2FTONEPLAYER_H +#define CVTENGR2FTONEPLAYER_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Plays video start/stop sounds. +* @since s60 v5.0 +*/ +NONSHARABLE_CLASS ( CVtEngR2FTonePlayer ) : public CBase, + public MMdaAudioPlayerCallback + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngR2FTonePlayer* NewL(); + + /** + * Destructor. + */ + virtual ~CVtEngR2FTonePlayer(); + + public: // New functions + /** + * Play a sound with given id. + * @param aSound identifies which sound to play + * (see r_ccor_sound_list in resources). + * @return Symbian error code. + */ + TInt PlaySound( TInt aSound ); + + /** + * Stop any ongoing sound. + */ + void StopSound(); + + private: // Functions from base classes + /** + * From MMdaAudioPlayerCallback. + */ + void MapcInitComplete( TInt aError, + const TTimeIntervalMicroSeconds& aDuration ); + + /** + * From MMdaAudioPlayerCallback. + */ + void MapcPlayComplete( TInt aError ); + + private: // New functions + /** + * C++ constructor. + */ + CVtEngR2FTonePlayer(); + + /** + * Symbian OS 2nd phase constructor. + */ + void ConstructL(); + + private: // Data + + TBool iOpenFileInProgress; + TBool iSoundInProgress; + CMdaAudioPlayerUtility* iAudioPlayer; // owned + + HBufC* iVideoStartSound; // owned + HBufC* iVideoStopSound; // owned + + public: + + /** + * Enum for tone player sound ID's + */ + enum TVtR2FSoundId + { + /** Video record start sound*/ + EVtR2FVideoStartSoundId = 1, + /** Video record stopt sound*/ + EVtR2FVideoStopSoundId + }; + }; + +#endif //CVTENGR2FTONEPLAYER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/cvtengrecord2file.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/cvtengrecord2file.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2006 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: Videoteleng Camera Preferences extension +* +*/ + + +#ifndef CVTENGRECORD2FILE_H +#define CVTENGRECORD2FILE_H + +// INCLUDES +#include "VtEngPanic.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngOperation.h" + +#include "cvtengr2ftoneplayer.h" + +#include +#include + +#include +#include "CVtEngExtensionBase.h" + +// FORWARD DECLARATIONS + +// CLASS DECLARATION +class CVtEngR2FTonePlayer; +/** +* Videoteleng extension base class. +* +* @lib videoteleng.lib +* @since S60 v3.2 +*/ +NONSHARABLE_CLASS ( CVtEngRecord2File ): public CVtEngExtensionBase, + public MVtEngRecord2File + { + public: //Constructor and destructor. + + /** + * Symbian two-phase constructor. + * @return engine extension instance + */ + static CVtEngRecord2File* NewL(); + + /** + * Destructor. + */ + ~CVtEngRecord2File(); + + public: // from base class CVtEngExtensionBase + + /** + * @see CVtEngExtensionBase::GetInterface + */ + virtual TAny* GetInterface(); + + /** + * @see CVtEngExtensionBase::HandleL + */ + virtual TBool HandleL( CVtEngOperation* aOp ); + + /** + * @see CVtEngExtensionBase::ValidateCommand + */ + virtual TBool ValidateCommand( const TVtEngCommandId aCommandId ); + + public: // from base class MVtEngRecord2File + + /** + * For testin puposes only + * @see MVtEngRecord2File::IsTonePlaySupported + */ + virtual TInt IsTonePlaySupported( TBool& aSupported) const; + + + private: + + /** + * C++ default constructor. + */ + CVtEngRecord2File(); + + /** + * Symbian two-phase constructor. + */ + void ConstructL(); + + public: // data + + private: // data + CVtEngR2FTonePlayer* iTonePlayer; + }; + +#endif //CVTENGRECORD2FILE_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/mvtengcamerapreferencesobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/mvtengcamerapreferencesobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,79 @@ +/* +* 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" +* 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: Videoteleng Camera Preferences extension Observer +* +*/ + + +#ifndef MVTENGCAMERAPREFERENCESOBSERVER_H +#define MVTENGCAMERAPREFERENCESOBSERVER_H + +// INCLUDES +#include + +/** +* Camera preferences extension observer. +* +* @lib videoteleng.lib +* @since S60 v5.0 +*/ +class MVtEngCameraPreferencesObserver + { + +public: + + /** + * Called when observer is attached to camera preferences instance. + * @param aCamPrefs Reference to camera preferences instance this observer + * was attached to. + */ + virtual void Attach( MVtEngCameraPreferences& aCamPrefs ) = 0; + + /** + * Called when color tone is updated. + * @param aColorTone New color tone value. + */ + virtual void ColorToneUpdated( + MVtEngCameraPreferences::TColorTone aColorTone ) = 0; + + /** + * Called when white balance is updated. + * @param aWhiteBalance New white balance value. + */ + virtual void WhiteBalanceUpdated( + MVtEngCameraPreferences::TWhiteBalance aWhiteBalance ) = 0; + + /** + * Called when brightness is updated. + * @param aBrightness New brightness value set. + */ + virtual void BrightnessUpdated( TInt aBrightness ) = 0; + + /** + * Called when contrast is updated. + * @param aContrast New contrast value set. + */ + virtual void ContrastUpdated( TInt aContrast ) = 0; + + /** + * Called when observer is detached from camera preferences instance. + * @param aCamPrefs Reference to camera preferences instance this observer + * was detached from. + */ + virtual void Detach( MVtEngCameraPreferences& aCamPrefs ) = 0; + + }; + +#endif // MVTENGCAMERAPREFERENCESOBSERVER_H + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Extensions/mvtengrecord2file.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Extensions/mvtengrecord2file.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2006 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: Videoteleng Record to file extension API +* +*/ + + +#ifndef MVTENGRECORD2FILE_H +#define MVTENGRECORD2FILE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +// CONSTANTS +const TUid KVtEngExtensionRecord2File = {0x10283156}; + +/** +* Record to file extension API class. +* +* @lib videoteleng.lib +* @since S60 v5.0 +*/ + +class MVtEngRecord2File + { + public: + + /** + * For testin puposes only REMOVE + * @param aSupported boolean for tone play support + * @return Symbian error code + */ + virtual TInt IsTonePlaySupported( TBool& aSupported) const = 0; + }; +#endif //MVTENGRECORD2FILE_H + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngDrawDP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngDrawDP.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,509 @@ +/* +* Copyright (c) 2004-2005 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: Remote video handling class. +* +*/ + + + +#ifndef CVTENGDRAWDP_H +#define CVTENGDRAWDP_H + +// INCLUDES + +#include "CVtEngRemoteVideo.h" +#include "TVtEngRenderConfigDP.h" + +#include + +// FORWARDS + +class TDisplaySinkParamsDP; +class CVtImageBitmap; +class CVtImageScaler; + +// CONSTANTS AND MACROS + +const TInt KVtEngMaxBuffers = 2; + +// CLASSES + +/** +* Buffer waiter observer API +* +* @lib videoteleng.lib +* @since Series 60 3.2 +*/ +NONSHARABLE_CLASS( MVtEngBufferWaiterObserver ) + { + public: // New methods + + /** + * Buffer fetched without errors. + * @param aBuffer Pointer to fetched buffer. + */ + virtual void BufferReady( + CPostingSurface::TPostingBuff* aBuffer ) = 0; + + /** + * Buffer fetch error. + * @param aError Error code. + */ + virtual void FetchError( TInt aError ) = 0; + }; + +/** +* Display Posting drawer +* +* @lib videoteleng.lib +* @since Series 60 3.2 +*/ +NONSHARABLE_CLASS( CVtEngDrawDP ) : public CVtEngRemoteVideo::CVtEngDraw, + public MVtEngBufferWaiterObserver, + public MVtImageScalerObserver + + { + public: // constructor and destructor + + /** + * Two-phased constructor. + * @param aObserver call back interface to Display Sink + * @return instance of CVtEngDrawDP + */ + static CVtEngDrawDP* NewL( MDisplaySinkObserver* aObserver ); + + // Destructor + ~CVtEngDrawDP(); + + private: + + /** + * C++ constructor as private. + * @param aObserver callback interface for Display Sink + */ + CVtEngDrawDP( MDisplaySinkObserver* aObserver ); + + private: // from MVtEngDraw + + /** + * @see CVtEngDraw::BaseConstructL + */ + void BaseConstructL(); + + /** + * @see CVtEngDraw::CreateSinkL + */ + MDisplaySink* CreateSinkL(); + + /** + * @see CVtEngDraw::BaseRefreshL + */ + void BaseRefreshL(); + + /** + * @see CVtEngDraw::BaseRefreshBitmapsL + */ + void BaseRefreshBitmapsL(); + + /** + * @see CVtEngDraw::BaseDoCancel + */ + void BaseDoCancel(); + + /** + * @see CVtEngDraw::BaseVerifyConfigL + */ + void BaseVerifyConfigL(); + + /** + * @see CVtEngDraw::BaseRestartL + */ + void BaseRestartL(); + + /** + * @see CVtEngDraw::BaseAbortNow + */ + void BaseAbortNow(); + + /** + * @see CVtEngDraw::BaseStartDrawL + */ + void BaseStartDrawL(); + + /** + * @see CVtEngDraw::BaseStopDraw + */ + void BaseStopDraw(); + + /** + * @see CVtEngDraw::BaseSetConfigL + */ + void BaseSetConfigL( const TVtEngRenderConfig& aConfig ); + + /** + * @see CVtEngDraw::BaseSetUIForegroundL + */ + void BaseSetUIForegroundL( TBool aForeground ); + + /** + * @see CVtEngDraw::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& aTo ); + + /** + * @see CVtEngDraw::BaseRequestLastFrame + */ + void BaseRequestLastFrame(); + + /** + * @see CVtEngDraw::Config + */ + TVtEngRenderConfig& Config(); + + private: // new methods + + /** + * Handles all delayed calls. + */ + void HandleDelayedCallsL(); + + /** + * Base construct implementation + */ + void DoBaseConstructL(); + + /** + * Base start drawing implementation + */ + void DoBaseStartDrawL(); + + /** + * Initialize posting surface implementation + */ + void DoInitializePostingSurfaceL(); + + /** + * Update sink params implementation. + */ + void DoUpdateSinkParamsL(); + + /** + * Updates sink params. + */ + void UpdateSinkParamsL(); + + /** + * Checks if the alpha has been trashed on screen buffer (ETrue if it + * has been trashed, EFalse otherwise). + */ + TBool IsAlphaTrashed() const; + + /** + * Sets clipping region (read from DSA). + */ + void SetClipRegionL(); + + /** + * Initializes DP. + */ + void InitializePostingSurfaceL(); + + /** + * Fills posting source params structure. + */ + void GetPostingSourceParams( + CPostingSurface::TPostingSourceParams& aParams ) const; + + /** + * Fills posting params structure. + */ + void GetPostingParams( + CPostingSurface::TPostingParams& aParams ) const; + + /** + * Returns ETrue if given format is supported, EFalse otherwise. + */ + TBool SupportsFormat( + const CPostingSurface::TPostingFormat& aFormat ) const; + + /** + * Returns ETrue if given size is supported, EFalse otherwise. + */ + TBool SupportsSize( const TSize& aSize ) const; + + /** + * Returns ETrue if given rotation is supported, + * EFalse otherwise. + */ + TBool SupportsRotation( + CPostingSurface::TRotationType aRotation ) const; + + /** + * Returns ETrue if mirroring is supported, EFalse otherwise. + */ + TBool SupportsMirroring() const; + + /** + * Returns ETrue if scaling is supported, EFalse otherwise. + */ + TBool SupportsScaling() const; + + /** + * Returns ETrue if brightness controlling is supported, + * EFalse otherwise. + */ + TBool SupportsBrightness() const; + + /** + * Returns ETrue if contrast controlling is supported, + * EFalse otherwise. + */ + TBool SupportsContrast() const; + + /** + * Returns buffer size in bytes for given size and current posting + * format. + */ + TInt GetFrameBufferSize( const TSize& aTo ) const; + + /** + * Recreates clipregion. May leave with KErrNoMemory. + */ + void RecalculateClipRegionL(); + + /** + * Fixes rect for DP. + */ + void FixRectForDP( TRect& aRect ) const; + + /** + * Fills sink parameters. + */ + void GetSinkParams( TDisplaySinkParamsDP& aSinkParams ); + + /** + * Returns reference to sink. + */ + MDisplaySink& DisplaySink(); + + /** + * Stores given frame buffer. + */ + void StoreFrameBuffer( CPostingSurface::TPostingBuff* aPostingBuffer ); + + /** + * Creates frame buffer. + */ + void CreateFrameBufferL( const TSize& aSize ); + + /** + * Async draw callback. + */ + static TInt CallBack( TAny* aPtr ); + + /** + * Sets given buffer available to display sink. + */ + void SetAvailableToSink( CPostingSurface::TPostingBuff* aBuffer ); + + /** + * Creates instance of posting surface. + */ + CPostingSurface* CreatePostingSurfaceL(); + + /** + * Close the DP API library and free the allocated instance. + */ + void CloseDPLibrary(); + + /** + * Loads DP API library. + */ + void LoadDPLibraryL(); + + /** + * Converts YUV420 image to bitmap. + */ + void Convert420ToVtImg( HBufC8* aSource, CVtImageBitmap& aTarget ); + + /** + * Converts YUV422 image to bitmap. + */ + void Convert422ToVtImg( HBufC8* aSource, CVtImageBitmap& aTarget ); + + /** + * Updates Vt frame to frame observer. + */ + void UpdateVtFrame(); + + public: // From MVtImageScalerObserver. + + /** + * @ see MVtImageScalerObserver. + */ + virtual void ScalingFinished( TInt aError ); + + + private: // from CActive + + /** + * Handles prepared bitmap from display sink. + * @see CActive::RunL + */ + void RunL(); + + private: // from MVtEngBufferWaiterObserver + + /** + * @see MVtEngBufferWaiterObserver::BufferReady + */ + void BufferReady( CPostingSurface::TPostingBuff* aBuffer ); + + /** + * @see MVtEngBufferWaiterObserver::FetchError + */ + void FetchError( TInt aError ); + + private: // inner classes + + // Buffer class for storing buffer. + NONSHARABLE_CLASS( TVtEngBuffer ) + { + public: + + /** + * C++ constructor + */ + TVtEngBuffer(); + + /** + * Sets buffer + */ + void Set( CPostingSurface::TPostingBuff* aBuffer ); + + /** + * Unsets buffer + */ + void UnSet(); + + /** + * Returns ETrue if buffer is set + */ + TBool IsSet() const; + + /** + * Returns pointer reference to stored buffer. + */ + CPostingSurface::TPostingBuff*& Buffer(); + + private: + + // Pointer's pointer to buffer + CPostingSurface::TPostingBuff* iBuffer; + }; + + // Waiter class for asynchronous events. + NONSHARABLE_CLASS( CVtEngBufferWaiter ) : public CActive + { + public: + + /** + * C++ constructor. + */ + CVtEngBufferWaiter( CPostingSurface& aPostingSurface, + MVtEngBufferWaiterObserver& aObserver ); + + /** + * Destructor, frees all resources allocated by this instance. + */ + ~CVtEngBufferWaiter(); + + /** + * Fetch new buffer (also activates listening). + */ + TInt FetchBuffer(); + + private: // new methods + + /** + * Activate buffer listening (also calls CActive::SetActive()). + */ + void Activate(); + + private: // from CActive + + /** + * @see CActive::RunL() + */ + void RunL(); + + /** + * @see CActive::DoCancel() + */ + void DoCancel(); + + private: // data + + // Posting surface instance (not owned) + CPostingSurface* iPostingSurface; + + // BufferWaiter observer who gets informed about buffers + MVtEngBufferWaiterObserver* iObserver; + }; + + private: // data + + // Posting surface instance + CPostingSurface* iPostingSurface; + + // Posting capabilities + CPostingSurface::TPostingCapab iPostingCaps; + + // Posting buffers + TVtEngBuffer + iBuffers[ MDisplaySink::EFirstBitmap + KVtEngMaxBuffers ]; + + // Buffer waiter instance + CVtEngBufferWaiter* iBufferWaiter; + + // Rendering configuration + TVtEngRenderConfigDP iConfig; + + // Clipping region + RRegion iClipRegion; + + // Frame buffer + HBufC8* iFrameBuffer; + + // Selected posting format + CPostingSurface::TPostingFormat iPostingFormat; + + // DP API DLL + RLibrary* iDPLib; + + // Source image contains converted YUV frame + CVtImageBitmap* iSource; + + // Target image contains scaled bitmap + CVtImageBitmap* iTarget; + + // Image scaler instance + CVtImageScaler* iImageScaler; + + // Clip region updated + TBool iClipRegionUpdated; + + }; + +#endif // CVTENGDRAWDP_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngDrawDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngDrawDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2004-2006 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: Remote video handling class. +* +*/ + + + +#ifndef CVTENGDRAWDSA_H +#define CVTENGDRAWDSA_H + +// INCLUDES + +#include "CVtEngRemoteVideo.h" +#include "TVtEngRenderConfigDSA.h" + +// FORWARDS + +class TDisplaySinkParamsDSA; + +/** +* Direct Screen Access drawer +* +* @lib videoteleng.lib +* @since Series 60 3.2 +*/ +NONSHARABLE_CLASS( CVtEngDrawDSA ) : public CVtEngRemoteVideo::CVtEngDraw, + public MVtEngScalerObserver + { + public: // constructor and destructor + + /** + * Two-phased constructor. + * @param aObserver call back interface to Display Sink + * @return instance of CVtEngDrawDSA + */ + static CVtEngDrawDSA* NewL( MDisplaySinkObserver* aObserver ); + + // Destructor + ~CVtEngDrawDSA(); + + private: // construction + + /** + * C++ constructor as private. + * @param aObserver callback interface for Display Sink + */ + CVtEngDrawDSA( MDisplaySinkObserver* aObserver ); + + private: // from CVtEngDraw + + /** + * @see CVtEngDraw::BaseConstructL + */ + void BaseConstructL(); + + /** + * @see CVtEngDraw::CreateSinkL + */ + MDisplaySink* CreateSinkL(); + + /** + * @see CVtEngDraw::BaseRefreshL + */ + void BaseRefreshL(); + + /** + * @see CVtEngDraw::BaseRefreshBitmapsL + */ + void BaseRefreshBitmapsL(); + + /** + * @see CVtEngDraw::BaseDoCancel + */ + void BaseDoCancel(); + + /** + * @see CVtEngDraw::BaseVerifyConfigL + */ + void BaseVerifyConfigL(); + + /** + * @see CVtEngDraw::BaseRestartL + */ + void BaseRestartL(); + + /** + * @see CVtEngDraw::BaseAbortNow + */ + void BaseAbortNow(); + + /** + * @see CVtEngDraw::BaseStartDrawL + */ + void BaseStartDrawL(); + + /** + * @see CVtEngDraw::BaseStopDraw + */ + void BaseStopDraw(); + + /** + * @see CVtEngDraw::BaseSetConfigL + */ + void BaseSetConfigL( const TVtEngRenderConfig& aConfig ); + + /** + * @see CVtEngDraw::BaseSetUIForegroundL + */ + void BaseSetUIForegroundL( TBool aForeground ); + + /** + * @see CVtEngDraw::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& ); + + /** + * @see CVtEngDraw::BaseRequestLastFrame + */ + void BaseRequestLastFrame(); + + /** + * @see CVtEngDraw::Config + */ + TVtEngRenderConfig& Config(); + + private: // from CActive + + /** + * Handles prepared bitmap from display sink. + * @see CActive::RunL + */ + void RunL(); + + public: // from MVtEngScalerObserver + + /** + * From MVtEngScalerObserver, this method is called when + * scaling is finished. + * @see MVtEngScalerObserver::ScalingCompleted + */ + virtual void ScalingCompleted( + CFbsBitmap* aBitmap, TInt aError ); + + private: // New functions + + /** + * Does the drawing. + * @param aBitmap a bitmap to draw + */ + void DrawBitmap( CFbsBitmap& aBitmap ); + + /** + * Fills TDisplaySinkParamsDSA struct + */ + void GetSinkParams( TDisplaySinkParamsDSA& aSinkParams ); + + private: // data + + // Bitmapts for remote video (double buffering). + CFbsBitmap* iBitmap1; + CFbsBitmap* iBitmap2; + + // Bitmap indexes indicating which. + // bitmap was provided. + MDisplaySink::TBitmapNo iBitmapNo; + + // If a bitmap has been set available. + TBool iBitmapSetAvail; + + // VT image scaler + MVtEngImageScaler* iImageScaler; + + // DSA configuration + TVtEngRenderConfigDSA iConfig; + }; + +#endif // CVTENGDRAWDSA_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngDrawNGA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngDrawNGA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,453 @@ +/* +* Copyright (c) 2004-2006 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: Class for NGA Drawer. +* +*/ + + +#ifndef CVTENGDRAWNGA_H +#define CVTENGDRAWNGA_H + +// INCLUDES +//#include +#include +#include +#include +//#include +// GCE Surface +#include "graphics/surfacemanager.h" +#include "graphics/surface.h" +#include "graphics/surfaceupdateclient.h" + +#include "CVtEngRemoteVideo.h" +#include "TVtEngRenderConfigNGA.h" + +// FORWARDS + +class TDisplaySinkParamsNGA; + +// CONSTANTS AND MACROS +const TInt KVtEngMaxSurfaceBuffers = 2; + +NONSHARABLE_CLASS( TVTSurfaceBuffer ) + { + public: + + /** + * C++ constructor + */ + TVTSurfaceBuffer( TUint8* aBuffer = NULL, TInt aSurfaceNo = KErrNotFound ); + + /** + * Returns pointer reference to stored buffer. + */ + TUint8* &Buffer(); + + /** + * Returns surface no.. + */ + TInt SurfaceNo(); + + void Set( TUint8* aBuffer, TInt aSurfaceNo ); + + void UnSet(); + + private: + + // Pointer's pointer to buffer + TUint8* iBuffer; + TInt iSurfaceBufferNo; + }; + +/** +* Buffer waiter observer API +* +* @lib videoteleng.lib +* @since Series 60 MCL +*/ +NONSHARABLE_CLASS( MVtEngNGABufferWaiterObserver ) + { + public: // New methods + + /** + * Buffer fetched without errors. + * @param aBuffer Pointer to fetched buffer. + */ + virtual void BufferReadyL( + TVTSurfaceBuffer* aBuffer ) = 0; + + /** + * Buffer fetch error. + * @param aError Error code. + */ + virtual void FetchError( TInt aError ) = 0; + }; + + +/** +* DNGA drawer +* +* @lib videoteleng.lib +* @since Series 60 MCL +*/ +NONSHARABLE_CLASS( CVtEngDrawNGA ) : + public CVtEngRemoteVideo::CVtEngDraw, + public MVtEngNGABufferWaiterObserver + { + + public: // constructor and destructor + + /** + * Two-phased constructor. + * @param aObserver call back interface to Display Sink + * @return instance of CVtEngDrawDSA + */ + static CVtEngDrawNGA* NewL( MDisplaySinkObserver* aObserver ); + + // Destructor + ~CVtEngDrawNGA(); + + private: // construction + + /** + * C++ constructor as private. + * @param aObserver callback interface for Display Sink + */ + CVtEngDrawNGA( MDisplaySinkObserver* aObserver ); + + private: // from CVtEngDraw + + /** + * @see CVtEngDraw::BaseConstructL + */ + void BaseConstructL(); + + /** + * @see CVtEngDraw::CreateSinkL + */ + MDisplaySink* CreateSinkL(); + + /** + * @see CVtEngDraw::BaseRefreshL + */ + void BaseRefreshL(); + + /** + * @see CVtEngDraw::BaseRefreshBitmapsL + */ + void BaseRefreshBitmapsL(); + + /** + * @see CVtEngDraw::BaseDoCancel + */ + void BaseDoCancel(); + + /** + * @see CVtEngDraw::BaseVerifyConfigL + */ + void BaseVerifyConfigL(); + + /** + * @see CVtEngDraw::BaseRestartL + */ + void BaseRestartL(); + + /** + * @see CVtEngDraw::BaseAbortNow + */ + void BaseAbortNow(); + + /** + * @see CVtEngDraw::BaseStartDrawL + */ + void BaseStartDrawL(); + + /** + * @see CVtEngDraw::BaseStopDraw + */ + void BaseStopDraw(); + + /** + * @see CVtEngDraw::BaseSetConfigL + */ + void BaseSetConfigL( const TVtEngRenderConfig& aConfig ); + + /** + * @see CVtEngDraw::BaseSetUIForegroundL + */ + void BaseSetUIForegroundL( TBool aForeground ); + + /** + * @see CVtEngDraw::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& ); + + /** + * @see CVtEngDraw::BaseRequestLastFrame + */ + void BaseRequestLastFrame(); + + /** + * @see CVtEngDraw::Config + */ + TVtEngRenderConfig& Config(); + + private: // New mothod + + /** + * Returns reference to sink. + */ + MDisplaySink& DisplaySink(); + + /** + * Base construct implementation + */ + void DoBaseConstructL(); + + /** + * Base start drawing implementation + */ + void DoBaseStartDrawL(); + + /** + * Sets given buffer available to display sink. + */ + void SetAvailableToSink( TVTSurfaceBuffer* aBuffer ); + + /** + * Update sink params implementation. + */ + void DoUpdateSinkParamsL(); + + /** + * Updates sink params. + */ + void UpdateSinkParamsL(); + + /** + * Create surface + */ + void CreateSurfaceL(); + + /** + * Create surface implementation + */ + void DoCreateSurfaceL(); + + static TInt SurfaceBuffer0Ready(TAny* aAny); + + static TInt SurfaceBuffer1Ready(TAny* aAny); + + TBool DoSurfaceBuffer0Ready(); + + TBool DoSurfaceBuffer1Ready(); + + public: //from MVtEngNGABufferWaiterObserver + + /** + * @see MVtEngNGABufferWaiterObserver::BufferReadyL + */ + void BufferReadyL( TVTSurfaceBuffer* aBuffer ); + + /** + * @see MVtEngNGABufferWaiterObserver::FetchError + */ + void FetchError( TInt aError ); + + + private: + /** + * @see CActive::RunL + */ + void RunL(); + + private: // New functions + /** + * Fills TDisplaySinkParamsNGA struct + */ + void GetSinkParams( TDisplaySinkParamsNGA& aSinkParams ); + + private: //inner class + + // Buffer class for storing buffer. + NONSHARABLE_CLASS( TVtEngBuffer ) + { + public: + + /** + * C++ constructor + */ + TVtEngBuffer(); + + /** + * Sets buffer + */ + void Set( TVTSurfaceBuffer* aBuffer ); + + /** + * Unsets buffer + */ + void UnSet(); + + /** + * Returns ETrue if buffer is set + */ + TBool IsSet() const; + + /** + * Returns pointer reference to stored buffer. + */ + TVTSurfaceBuffer* &SurfaceBuffer(); + + /** + * Returns pointer reference to stored buffer. + */ + TUint8* &Buffer(); + + private: + + // Pointer's pointer to buffer + TUint8* iBuffer; + TVTSurfaceBuffer* iSurfaceBuffer; + }; + + // Waiter class for asynchronous events. + NONSHARABLE_CLASS( CVtEngBufferWaiter ) : public CActive + { + public: + + /** + * C++ constructor. + */ + CVtEngBufferWaiter( //CVideoRenderer& aVideoRenderer, + MVtEngNGABufferWaiterObserver& aObserver ); + + /** + * Destructor, frees all resources allocated by this instance. + */ + ~CVtEngBufferWaiter(); + + /** + * Fetch new buffer (also activates listening). + */ + TInt FetchBuffer(); + + /** + * One SurfaceBuffer is available + */ + void BufferAvailable(TVTSurfaceBuffer& aBuffer); + + private: // new methods + + /** + * Activate buffer listening (also calls CActive::SetActive()). + */ + void Activate(); + + private: // from CActive + + /** + * @see CActive::RunL() + */ + void RunL(); + + /** + * @see CActive::DoCancel() + */ + void DoCancel(); + + private: // data + + // Video frame renderer (not owned) + //CVideoRenderer* iVideoRenderer; + + // BufferWaiter observer who gets informed about buffers + MVtEngNGABufferWaiterObserver* iObserver; + + //Avaiable surface buffers + TVTSurfaceBuffer* iBuffers[KVtEngMaxSurfaceBuffers]; + + }; + + // Surface Buffer Active Call back. + NONSHARABLE_CLASS( CActiveCallBack ) : public CActive + { + public: + CActiveCallBack( TCallBack aCallBack, TInt aPriority): CActive(aPriority), iCallBack(aCallBack) + {}; + CActiveCallBack(); + + public: // Functions from base classes + void SetActive() + { + CActive::SetActive(); + }; + void RunL() + { + iCallBack.CallBack(); + }; + void DoCancel() + {}; + + private: // Data + TCallBack iCallBack; + }; + + private: // data + + //Video frame renderer + //CVideoRenderer *iVideoRenderer; + RSurfaceManager* iSurfaceManager; + RSurfaceUpdateSession iSurfaceUpdateSession; + //Surface pixel format + TUidPixelFormat iSurfaceFormat; + + RChunk* iSurfaceChunk; + + TInt8* iChunkBuffer0; + + TInt8* iChunkBuffer1; + + TVTSurfaceBuffer iSurfaceBuffer0; + + TVTSurfaceBuffer iSurfaceBuffer1; + + //CActiveCallBack* iSurfaceBufferAo0; + + //CActiveCallBack* iSurfaceBufferAo1; + + CActiveCallBack* iCallBackTable[KVtEngMaxSurfaceBuffers]; + + //NGA surface id + TSurfaceId iSurfaceId; + + //NGA surface has created + TBool iSurfaceCreated; + + // Buffer waiter instance + CVtEngBufferWaiter* iBufferWaiter; + + // Surface buffers + TVtEngBuffer + iSurfaceBuffers[ MDisplaySink::EFirstBitmap + KVtEngMaxSurfaceBuffers ]; + + TSglQue iWaitingBuffers; // buffers waiting to be submitted + TBool iSubmitPending; + + //configuration + TVtEngRenderConfigNGA iConfig; + + }; + +#endif // CVTENGDRAWDSA_H diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngDtmfHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngDtmfHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2006 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: DTMF handler +* +*/ + + + +#ifndef CVTENGDTMFHANDLER_H +#define CVTENGDTMFHANDLER_H + +// INCLUDES +#include +#include +#include "CVtEngDtmfState.h" +#include "CVtEngOperation.h" +#include "MVtEngDtmfHandler.h" + +// FORWARD DECLARATIONS +class MVTUserInput; + +// CLASS DECLARATION + +/** +* Base class for data types +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngDtmfHandler ) : public CBase, public MVtEngDtmfHandler + { + public: // Data structures + enum TUIISupport + { + EBasicString = 2, + EIA5String = 4, + EGeneralString = 8, + EDTMFString = 16 + }; + + public: // constructor and destructor + + /** + * Two-phased constructor. + * @param aH324Config H324 configure interface + * @return dtmf handler + */ + static CVtEngDtmfHandler* NewL( + MVtH324ConfigCommand& aH324Config ); + + /** + * Destructor + */ + ~CVtEngDtmfHandler(); + + public: // from MVtEngDtmfHandler + + /** + * @see MVtEngDtmfHandler + */ + virtual void HandleL( CVtEngOperation& aOp ); + + /** + * @see MVtEngDtmfHandler + */ + virtual CVtEngDtmfState& ActivateState( + MVtEngDtmfHandler::TVtEngDtmfState aNewState ); + + /** + * @see MVtEngDtmfHandler + */ + virtual void SendComplete( TInt aError ); + + /** + * @see MVtEngDtmfHandler + */ + virtual MVTUserInput& ReserveProtoDtmfL( + const TVtEngDtmfTone& aTone ); + + /** + * @see MVtEngDtmfHandler + */ + virtual void ReleaseProtoDtmf(); + + /** + * @see MVtEngDtmfHandler + */ + virtual TBool CheckCommandId( TInt aCheckCommandId ) const; + + /** + * @see MVtEngDtmfHandler + */ + virtual void StoreCommandId( TInt aStoreCommandId ); + + + public: // Protocol DTMF Support + + /** + * Specifies the UII support + * @param aValue the support to be used + */ + void SetUIISupport( TUIISupport aValue ); + + /** + * Gets the current UII support + * @return UII support + */ + TUIISupport GetUIISupport() const; + + private: // constructors + + /** + * C++ constructor + */ + CVtEngDtmfHandler( MVtH324ConfigCommand& aH324Config ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: // new functions + + /** + * Handles completion of DTMF sending, leavable method. + */ + void HandleSendCompleteL( TInt aError ); + + /** + * Creates a state instance + * @param EVtDtmfStateIdle, EVtDtmfStateSending or EVtDtmfStateBuffered + */ + void CreateStateL( TInt aState ); + + private: // member data + + // DTMF states + CArrayPtrFlat* iDtmfStates; + + // current state index + TVtEngDtmfState iCurrentState; + + // protocol tone + MVTUserInput* iProtoDtmf; + + // H324 interface + MVtH324ConfigCommand& iH324Config; + + // Indicates supported UII type: + // 16 DTMF + // 8 General String + // 4 IA5 String + // 2 Basic string + TUIISupport iUIISupport; + + // DTMF command ID returned by H324 interface for last tone + TInt iIssuedDtmfCommandId; + }; + + +#endif CVTENGDTMFHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngImageScaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngImageScaler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2004-2006 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: Scaler for bitmaps. +* +*/ + + + +#ifndef CVTENGIMAGESCALER_H +#define CVTENGIMAGESCALER_H + +// INCLUDES +#include "MVtEngImageScaler.h" +#include + +// FORWARD DECLARATIONS +class MVtEngScalerObserver; +class CVtImageScaler; +class CVtImageBitmap; + +/** +* Image scaler implementation class. +* +* @lib videoteleng.lib +* @since Series 60 2.8 +*/ +NONSHARABLE_CLASS( CVtEngImageScaler ) : public CBase, + public MVtImageScalerObserver, + public MVtEngImageScaler + { + public: // constructor and destructor + + /** + * Two-phased constructor. + * @param aObserver scaling finished callback. + * @return scaler + */ + static MVtEngImageScaler* NewL( + MVtEngScalerObserver& aObserver ); + + /** + * Destructor + */ + virtual ~CVtEngImageScaler(); + + private: // constructor + + /** + * C++ constructor. + * @param aObserver scaling finished callback. + */ + CVtEngImageScaler( + MVtEngScalerObserver& aObserver ); + + + /** + * Symbian constructor that may leave. + */ + void ConstructL(); + + public: // From MVtEngImageScaler. + + /** + * @see MVtEngImageScaler. + */ + virtual void ScaleL( + TInt aSourceIndex ); + + /** + * @see MVtEngImageScaler + */ + virtual TBool ConfigureL( + TDisplayMode aDisplayMode, + TSize aSize, + TInt aSourceHandle1, + TInt aSourceHandle2 ); + + /** + * @see MVtEngImageScaler. + */ + virtual void Release(); + + /** + * @see MVtEngImageScaler. + */ + virtual TInt Cancel(); + + public: // From MVtImageScalerObserver. + + /** + * @ see MVtImageScalerObserver. + */ + virtual void ScalingFinished( TInt aError ); + + private: + /** + * EFirstBitmap + * Use the first bitmap. + * ESecondBitmap + * Use the second bitmap. + */ + enum + { + EFirstBitmap = 0, + ESecondBitmap = 1 + }; + + /** + * Fetches the used scaling method from locally. + * variated properties, and stores it into iScalingMethod. + */ + void GetScalingMethodL(); + + private: + + // Observer receiving scaled bitmaps. + MVtEngScalerObserver& iObserver; + + // Actual component doing the scaling. + CVtImageScaler* iVtScaler; + + // Target bitmaps. + RPointerArray iTargets; + + // Source bitmaps. + RPointerArray iSources; + + // Bitmap index in targets. + TInt iTargetBitmapInUse; + + // Display mode. + TDisplayMode iMode; + + // Scaled size. + TSize iSize; + + // Method of scaling + CVtImageScaler::TQuality iScalingMethod; + }; + +#endif // CVTENGIMAGESCALER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngLocalVideo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngLocalVideo.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1475 @@ +/* +* Copyright (c) 2004-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: Local video handler. +* +*/ + + +#ifndef CVTENGLOCALVIDEO_H +#define CVTENGLOCALVIDEO_H + +// INCLUDES +#include +#include +#include "TVtEngRendering.h" +#include "TVtEngRenderingDSA.h" +#include "TVtEngRenderingDP.h" +#include "TVtEngRenderingNGA.h" +#include "VtEngEvents.h" +#include "MVtEngMedia.h" //TMediaSource +#include "MVtEngSettingPSObserver.h" +#include "CVTEngPubSubsListener.h" +#include "mvtengcamerapreferencesobserver.h" + +// FORWARD DECLARATIONS +class CVSDataProvider; +class CVtEngMediaHandler; +class CVtEngCameraPreferences; + +// CLASS DECLARATION + +/** +* Local (uplink) video handling. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngLocalVideo ) : + public CActive, + public MVSDataProviderObserver, + public MVSDataSourceObserver, + public MVSControllerObserver, + public MVtEngSettingPSObserver + { + public: // Constructors and destructor + + /** + * Symbian two-phase constructor. + * @param aObserver callback interface to Media Handler + * @return local video instance + */ + static CVtEngLocalVideo* NewL( + CVtEngMediaHandler& aObserver ); + + /** + * Destructor. + */ + virtual ~CVtEngLocalVideo(); + + public: // Public data structures + enum TVtEngProviderType + { + KVtEngProviderUndefined = -1, + /** Blank imnage provider */ + KVtEngProviderNone = 0, + /** Primary camera provider */ + KVtEngProviderCam1, + /** Secondary camera provider */ + KVtEngProviderCam2, + /** GS image provider */ + KVtEngProviderImage, + /** ? */ + KVtEngProviderTempImage, + /** Still share provider */ + KVtEngProviderShareImage, + /** Video share provider */ + KVtEngProviderShareVideoClip, + /** Default image provider */ + KVtEngProviderDefaultStillImage + }; + + public: // from MVSDataProviderObserver + + /** + * @see MVSDataProviderObserver::vsProviderError + */ + virtual void vsProviderError( TInt aError ); + + /** + * @see MVSDataProviderObserver::vsProviderReady + */ + virtual void vsProviderReady(); + + /** + * @see MVSDataProviderObserver::vsViewFinderFrameReady + */ + virtual void vsViewFinderFrameReady( CFbsBitmap& aFrame ); + + public: // from MVSDataSourceObserver + + /** + * @see MVSDataSourceObserver::vsProviderSwitchDone + */ + virtual void vsProviderSwitchDone( CVSDataProvider* aOldProvider ); + + public: // from MVSControllerObserver + + /** + * @see MVSControllerObserver::vsProvidersChanged + */ + void vsProvidersChanged( TBool aAttached ); + + public: // From MVtEngSettingPSObserver. + + /** @see MVtEngSettingPSObserver */ + virtual void HandleNotifyPSL( const TUid aUid, + const TInt& aKey, const TRequestStatus& aStatus ); + + public: // New functions + + /** + * Pauses frame sending from video source (this method is called when + * VT is initializing and video source has not yet been added to stack) + * + */ + void PauseVideoSending(); + + /** + * Resumes frame sending from video source. + * + */ + void ResumeVideoSending(); + + /** + * Tells if the provider has started viewfinder. + * @return ETrue if started + */ + TBool ViewFinderStarted() const; + + /** + * Tells if the provider has been frozen. + * @return ETrue if frozen + */ + TBool IsFrozen() const; + + /** + * Creates an audio source. + * @return an error code + */ + TInt CreateAudioSource(); + + /** + * Sets configuration for view finder. + * @param aParams view finder configuration + */ + void SetViewFinderParameters( const TVtEngRenderingOptions& aParams ); + + /** + * Sets DSA configuration for view finder. + * @param aDSA DSA configuration + */ + void SetViewFinderParameters( const TVtEngRenderingOptionsDSA& aDSA ); + + /** + * Sets DP configuration for view finder. + * @param aDP DP configuration + */ + void SetViewFinderParameters( const TVtEngRenderingOptionsDP& aDP ); + + /** + * Sets default still image. + */ + void SetDefaultStillImageL(); + + /** + * Sets still image or none. + * @param aSetAsActive sets as active provider + */ + void SetStillImageL( TBool aSetAsActive ); + + /** + * Initializes default blank provider. + */ + void InitializeL(); + + /** + * Selects camera1, camera2, still image or none as source. + * @param aSource video source + * @return ETrue if selecting started + */ + TBool SelectSourceL( TVtEngProviderType aSource ); + + /** + * Returns currently active video provider. + * @return provider type + */ + TVtEngProviderType ActiveProvider( ) const; + + /** + * Starts view finder if it was started earlier and current state is + * ELocReady. + */ + void StartViewFinderIfWasStartedL(); + + /** + * Starts view finder. Uses either DSA or WS depending on + * which configuration is active. + * @param aClientRequest request issued by user + */ + void StartViewFinderL( TBool aClientRequest = EFalse ); + + /** + * Stops view finder. + * @param aClientRequest request issued by user + */ + void StopViewFinder( TBool aClientRequest = EFalse ); + + /** + * Freeze video sending (i.e. start sending last frame only). + */ + void FreezeL(); + + /** + * Unfreeze video sending (i.e. resume sending). + */ + void UnfreezeL(); + + /** + * Checks that all other providers don't have + * view finder active and stops if found. + * @param aProvider provider that should not be stopped + */ + void CheckOthersStopped( const CVSDataProvider& aProvider ); + + /** + * Returns video source. + * @return video source + */ + MVTVideoSource* Source() const; + + /** + * Returns audio source. + * @return audio source + */ + MVTAudioSource* AudioSource() const; + + /** + * Gets media state. + * @param aActiveMedia returns active TMediaType + * @return Symbian OS error code + */ + TInt GetMediaState( TInt& aActiveMedia ); + + /** + * Gets source type. + * @return media source type + */ + MVtEngMedia::TMediaSource GetMediaSource(); + + /** + * Gets source capabilities. + * @param aCaps capability of providers + * @return Symbian OS error code + */ + TInt GetSourceCaps( TInt& aCaps ); + + /** + * Sets boolean to indicate if the provider is to be initialized only. + * Selected camera is not necessary activated. If current media is + * other than camera, initialization can be done on the background. + * @param aInitOnly boolean value stating if to initialize only + */ + void InitializeOnly( TBool aInitOnly = ETrue ); + + /** + * Sets boolean to indicate if the provider is to be initialized only. + * @param aInitOnly boolean value stating if to initialize only + */ + void InitializeOnlyEx( TBool aInitOnly = ETrue ); + + /** + * Indicates if camera provider is initialized. + * @param aId provider ID + * @param aInitialized + * @return Symbian OS error code + */ + TInt IsInitialized( MVtEngMedia::TCameraId aId, TBool& aInitialized ); + + /** + * Gets camera info. + * @param TCameraId camera ID + * @param aInfo camera info + * @return Symbian OS error code + */ + TInt GetCameraInfo( MVtEngMedia::TCameraId aId, + MVtEngMedia::TCameraInfo& aInfo ); + + /** + * Gets current digital zoom step (Factor in VS camera terminology). + * @param aCurrentStep current zoom step + * @return Symbian OS error code + */ + TInt GetDigitalZoomFactor( TInt& aCurrentStep ); + + /** + * Gets maximum digital zoom value that may be passed to camera. + * @param aMaxZoomStep maximum zoom step + * @return Symbian OS error code + */ + TInt GetMaxDigitalZoomStep( TInt& aMaxZoomStep ); + + /** + * Gets number of major zoom level leaps. + * One to maximum digital zoom steps plus one. + * Less than or equal to maximum digital zoom steps plus one. + * @param aCount number of leaps + * @param aProviderSupplied use original or mapped + * @return Symbian OS error code + */ + TInt GetMajorDigitalZoomStepCount( TInt& aCount, + TBool aProviderSupplied = EFalse ); + + /** + * Maps major zoom leap step to corresponding step index. + * @param aIndex major zoom step + * @param aStep zoom step + */ + void GetMajorDigitalZoomStep( const TInt aIndex, TInt& aStep ); + + /** + * Sets video provider's digital zoom step. + * @param aDigitalZoomFactor step + */ + void SetDigitalZoomFactorL( TInt aDigitalZoomFactor ); + + /** + * Gets video provider's freeze support. + * @param aFreezeSupported Freeze support status + * @return KErrNotReady if provider not initialized. + */ + TInt GetFreezeSupported( TBool& aFreezeSupported ) const; + + /** + * Returns ETrue if it is ok to freeze provider. + */ + TBool OkToFreeze() const; + + /** + * Returns ETrue if it is ok to unfreeze provider. + */ + TBool OkToUnfreeze() const; + + /** + * Sets audio as muted. + */ + void Mute(); + + /** + * Resumes audio output. + */ + void UnMute(); + + /** + * Sets UI foreground state (i.e. is the Application + * current active application or not). + * @param aForeground ETrue if the VT application is + * in foreground, EFalse otherwise. + */ + void SetUIForeground( TBool aForeground ); + + /** + * Gets current media object sharing state. Only local video related + * checks do here. Connection issues have been checked by + * the caller. + * @param aObjectSharingState On return contains current media object + * sharing state. @see MVtEngMedia::TShareObjectState. + */ + void GetObjectSharingState( + MVtEngMedia::TShareObjectState& aObjectSharingState ) const; + + /** + * Start Image sharing initialization. + */ + void InitializeShareImageL( + const MVtEngMedia::TShareObjectImageParameters& aParameters, + TBool& aFirstTime ); + + /** + * Cancel Image sharing initialization. + */ + void CancelInitializeShareImage(); + + /** + * Start Image sharing. + */ + void StartShareImageL(); + + /** + * Stop Image sharing. + */ + void StopShareImageL(); + + /** + * Report error. + */ + void ShareError( TInt aError ); + + /** + * Returns share's stored media source. + */ + TVtEngProviderType ShareStoredSource() const; + + /** + * General settings changed. + */ + void SettingsChanged(); + + /** + * Creates camera preferences extension + * @since S60 v3.2 + * @return pointer to extension + * @exeption Leaves if creation fails + */ + CVtEngCameraPreferences* CreateCameraPreferencesL(); + + /** + * Called when prepare camera has been handled in media handler. + */ + void SetIsPrepareCameraCalled( TBool aCalled ); + + /** + * Returns ETrue if prepare camera has been handled in media handler, + * EFalse otherwise. + */ + TBool IsPrepareCameraCalled() const; + + /** + * Reinitializes camera if onboard camera is being used as a provider. + */ + void HandleLayoutChangeL(); + + /** + * Returns ETrue if delayed select is pending. + */ + TBool IsDelayedSelectPending() const; + + /** + * Completes operation to mediahandler. + */ + void CompleteOperation( const TInt aResult ); + + /** + * Called when video channel is opened. + */ + void VideoChannelOpenedL(); + + private: // constructors + + /** + * C++ constructor. + * @param aObserver callback interface to Media Handler + */ + CVtEngLocalVideo( + CVtEngMediaHandler& aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( ); + + /** + * Async callback method + */ + static TInt CallBackFunc( TAny* aPtr ); + + /** + * Returns result. + */ + TInt Result() const; + + /** + * Sets result. + */ + void SetResult( const TInt aResult ); + + private: // Rendering configuration + + /** + * Options for window server rendering. + * iObserver callback interface + * iSize VF image size + */ + struct TOptions + { + MVtEngFrameObserver* iObserver; + TSize iSize; + }; + + /** + * Direct screen access options. + * iWsSession windor server session + * iWsSD screen device + * iWindow handle to server based window + * iRect iRect window size + * iClipRect drawing size + */ + struct TDsaOptions + { + RWsSession* iWs; + CWsScreenDevice* iWsSD; + RWindowBase* iWindow; + TRect iRect; + TRect iClipRect; + }; + + /** + * Internal state of a video provider. + */ + enum TProviderState + { + /** initial state */ + EUndefined = KErrNone, + /** never deleted */ + EPermanent, + /** to be deleted when another provider selected */ + EFading, + /** waiting for blank provider switch */ + EWaiting, + /** changing still image */ + ERefreshing + }; + + /** + * Provider information. + */ + NONSHARABLE_CLASS( TProviderItem ) : + public MVtEngCameraPreferencesObserver + { + public: + + /** + * C++ constructor + */ + TProviderItem(); + + /** + * Destructor + */ + ~TProviderItem(); + + /** + * Sets zoom factor to resetted state. + */ + void ResetStoredValues(); + + /** + * Tries to restore preferences. + */ + TInt RestoreZoomFactor(); + + /** + * Tries to restore preferences. + */ + TInt RestorePreferences(); + + public: + // pointer to provider + CVSDataProvider* iProvider; + + // provider type + TVtEngProviderType iType; + + // provider initialized + TBool iInitialized; + + // provider has errors + TInt iErrorCode; + + // state of a provider + TProviderState iProviderState; + + // Stored zoom value + TInt iStoredZoomFactor; + + // Error code setting zoom factor + TInt iZFErr; + + public: // MVtEngCameraPreferencesObserver + + /** + * @see MVtEngCameraPreferencesObserver::Attach + */ + void Attach( MVtEngCameraPreferences& aCamPrefs ); + + /** + * @see MVtEngCameraPreferencesObserver::ColorToneUpdated + */ + void ColorToneUpdated( + MVtEngCameraPreferences::TColorTone aColorTone ); + + /** + * @see MVtEngCameraPreferencesObserver::WhiteBalanceUpdated + */ + void WhiteBalanceUpdated( + MVtEngCameraPreferences::TWhiteBalance aWhiteBalance ); + + /** + * @see MVtEngCameraPreferencesObserver::BrightnessUpdated + */ + void BrightnessUpdated( TInt aBrightness ); + + /** + * @see MVtEngCameraPreferencesObserver::ContrastUpdated + */ + void ContrastUpdated( TInt aContrast ); + + /** + * @see MVtEngCameraPreferencesObserver::Detach + */ + void Detach( MVtEngCameraPreferences& aCamPrefs ); + + public: + + /** + * Detach from preference and reset pointer. + */ + void DetachFromCameraPreferences(); + + private: + + // Pointer to camera preferences object this provider item is + // attached to + MVtEngCameraPreferences* iCamPrefs; + + // Stored color tone value + MVtEngCameraPreferences::TColorTone iColorTone; + + // Error code reading color tone value + TInt iCtErr; + + // Stored white balance + MVtEngCameraPreferences::TWhiteBalance iWhiteBalance; + + // Error code reading white balance value + TInt iWbErr; + + // Stored brightness + TInt iBrightness; + + // Error code reading brightness value + TInt iBrErr; + + // Stored contrast + TInt iContrast; + + // Error code reading contrast value + TInt iCrErr; + + // ETrue if Attach is called first time + TBool iFirstTime; + + }; + + /** + * Inner class for hiding image sharing details. + */ + NONSHARABLE_CLASS( CVtEngShareImage ) : public CBase + { + private: // enumerations + + /** + * Media object sharing internal state. + */ + enum TState + { + EStopped, + EInitializing, + ESharing + }; + + public: // New public methods + + /** + * Constructor. + */ + static CVtEngShareImage* NewL( CVtEngLocalVideo& aLocalVideo ); + + /** + * C++ destructor. + */ + ~CVtEngShareImage(); + + /** + * Start initialization of image sharing. + * @param aParameters Image sharing parameters (from UI) + * @param aCurrent Currently active provider's type. + * @param aFirstTime After call ETrue if this call was first to + * share initialize, EFalse otherwise. + * @exception May leave with KErrNotReady already initializing. May + * also leave with system wide error code if something goes wrong + * during provider initialization. + */ + void InitializeL( + const MVtEngMedia::TShareObjectImageParameters& aParameters, + TVtEngProviderType aCurrent, + TBool& aFirstTime ); + + /** + * Cancel sharing initialized image. + */ + void CancelInitialize(); + + /** + * Start sharing initialized image. + * @exception May leave with KErrNotReady if not initialized. May + * also leave with system wide error code if something goes wrong + * during provider swap. + */ + void ShareL(); + + /** + * Stop sharing image. + * @exception May leave with KErrNotReady if not sharing. May also + * leave with system wide error code if something goes wrong during + * provider swap. + */ + void StopL(); + + /** + * An error happened during initialization, sharing or stopping. + * @param aError Error reason. + */ + void Error( TInt aError ); + + /** + * Returns stored source from sharer. + * @return Stored source (source that was selected before share). + */ + TVtEngProviderType StoredSource() const; + + /** + * Get sharing state. + * @param aObjectSharingState On return contains current object + * sharing state. + */ + void GetObjectSharingState( + MVtEngMedia::TShareObjectState& aObjectSharingState ) const; + + /** + * Check whether share is being initialized or not. + * @return ETrue if share is being initialized EFalse otherwise. + */ + TBool IsInitializingShare() const; + + /** + * Called when General settings have been changed. + */ + void SettingsChanged(); + + /** + * Called when vsProviderSwitchDone() is called to local video. + */ + void ProviderSwitchDone( CVSDataProvider* aOldProvider ); + + /** + * Called when camera change event is received from PS. + */ + void NotifyCameraChanged( const TVtEngProviderType& aProviderType ); + + private: // New private methods + + /** + * C++ constructor. + */ + CVtEngShareImage( CVtEngLocalVideo& aLocalVideo ); + + /** + * 2nd constructor, may leave. + */ + void ConstructL(); + + /** + * Get image sharing parameters. + * @return Constant reference to image sharing parameters. + */ + const MVtEngMedia::TShareObjectImageParameters& Parameters() const; + + /** + * Get initialization state. + * @return ETrue if sharing is being initialized, EFalse otherwise. + */ + TBool IsInitializing() const; + + /** + * Set sharing state. + * @param aNewState New image sharing state. + */ + void SetState( const TState aNewState ); + + /** + * Fetches next available provider item pointer. + * @return Pointer to next available provider item or NULL if none + * could be found. + */ + TProviderItem* FetchProviderItem() const; + + /** + * Creates provider. + */ + void CreateProviderL( TProviderItem& aProviderItem ); + + /** + * Initializes provider. + */ + void InitializeProviderL( TProviderItem& aProviderItem ); + + /** + * Deletes provider. + */ + void DeleteProvider( TVtEngProviderType aProviderType ); + + /** + * Deletes all precreated providers. + */ + void DeleteProviders(); + + private: // Data + + // Pointer to local video instance + CVtEngLocalVideo* iLocalVideo; + + // Current state + TState iState; + + // Previous state + TState iPreviousState; + + // Copy of image sharing parameters + MVtEngMedia::TShareObjectImageParameters iParameters; + + // Type of provider that was active before image sharing + TVtEngProviderType iStoredType; + + // Type of provider that was originally active before image sharing + // This is needed because iStoredType may change according to PS + // events. + TVtEngProviderType iOriginalStoredType; + + // Currently active provider + TProviderItem* iActiveProvider; + + // Currently initialized provider + TProviderItem* iInitializingProvider; + + // Buffered items + RPointerArray< TProviderItem > iBuffered; + + // General settings were changed while sharing + TBool iSettingsChanged; + }; + + /** + * Inner class for handling delayed provider switches (e.g. PS signalled + * camera changes) + */ + NONSHARABLE_CLASS( TVtEngDelayedSelect ) + { + public: + + /** + * Constructor + */ + TVtEngDelayedSelect(); + + /** + * Called when camera change event is received from PS. + */ + void NotifyDelayedSelect( const TVtEngProviderType& aProviderType ); + + /** + * Returns ETrue if delayed select is pending, EFalse otherwise. + */ + TBool IsDelayedSelectPending() const; + + /** + * Returns delayed select target and resets stored value. + */ + TVtEngProviderType DelayedSelectTarget(); + + private: // data + + TVtEngProviderType iDelayedProviderType; + }; + + /** + * Inner class for handling layout change reinitialization. + */ + NONSHARABLE_CLASS( TVtEngLayoutChangeHandler ) + { + + public: + + /** + * Constructor + */ + TVtEngLayoutChangeHandler( CVtEngLocalVideo& aLocalVideo ); + + /** + * Called when layout change has happened + */ + void HandleLayoutChangeL(); + + /** + * Called when layout change needs to be cancelled + */ + void CancelHandleLayoutChange(); + + /** + * Called when provider is unfrozen. + * @return ETrue if unfreeze was handled by the layout change handler, + * EFalse otherwise. + */ + TBool UnfreezeL(); + + /** + * Called by the local video when provider error happens. + * @param aError Type of error + * @return ETrue If error was handled by the layout change handler + */ + TBool ProviderError( TInt aError ); + + /** + * Called by the local video when provider is ready after initialization. + * @return ETrue If callback was handled by the layout change handler. + */ + TBool ProviderReady(); + + /** + * Called by the local video when provider has been switched. + * @param CVSDataProvider Pointer of old provider instance. + * @return ETrue If callback was handled by the layout change handler. + */ + TBool ProviderSwitchDone( CVSDataProvider* aOldProvider ); + + private: + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Does the layout change handling. + */ + void DoHandleLayoutChangeL(); + + /** + * Call to CompleteL() that is trapped. + */ + TInt Complete( const TInt aError ); + + /** + * Completes handling and resets state to EIdle. + */ + void CompleteL( const TInt aError ); + + /** + * Completes asynchronous request. + */ + void CompleteOperation( const TInt aError ); + + private: // data + + // Pointer to local video instance + CVtEngLocalVideo* iLocalVideo; + + /** + * Layout change handler internal state. + */ + enum TState + { + /** Layout change handler is ready to be called */ + EIdle, + /** Layout change handler has been called, but layout update is + pending */ + ELayoutChangePending, + /** Layout change handler is switching blank provider */ + ESwitchingBlank, + /** Layout change handler is initializing camera provider */ + EInitializingCamera, + /** Layout change handler is switching camera provider */ + ESwitchingCamera + }; + + // Handler's internal state + TState iState; + + // Stored provider type + TVtEngProviderType iStored; + + }; + + private: + + /** + * Rendering method. + */ + enum TRenderingMethod + { + // Unspecified + EUnspecified, + // Through window server + EWindowServer, + // Direct screen access + EDSA, + // Display posting + EDP + }; + + /** + * View finder state. + */ + enum TViewFinderState + { + // View finder not active. + EVFNone, + // View finder started to reveive bitmaps. + EVFReceivingBitmaps, + // View finder started to render with DSA. + EVFRenderingDsa + }; + + /** + * Internal state. + */ + enum TState + { + // Initial and state when error occurred. + ELocNone, + // Provider initialization ongoing. + ELocInitializing, + // Switch to another provider ongoing. + ELocSwichingProvider, + // Provider initialization or switch completed. + ELocReady + }; + + public: + + /** + * Deletes provider. + * @param aItem provider to delete + */ + void DeleteProvider( TProviderItem& aItem ); + + /** + * Deletes provider. + * @param aType type of provider to delete. + */ + void DeleteProvider( TVtEngProviderType aType ); + + /** + * Resets local video after a video call. + */ + void Reset(); + + private: // New functions + + /** + * Sets current camera id. + */ + void SetCurrentCameraId( MVtEngMedia::TCameraId aCamId ); + + /** + * Configures provider item for outwards camera in + * construction phase. + */ + void ConfigureOutwardsCameraItem( + TProviderItem& aItem, + const TInt aCurrentIndex ); + + /** + * Calculater digital zoom steps. + * @param aProvider the used provider in counting + * @return amount of major zoom steps + */ + TInt CalculateMajorDigitalZoomStepCount( + CVSDataProvider* aProvider ); + + /** + * Calculater digital zoom steps. + * @param aInfo provider info structure from which zoom steps will be + * calculated + * @return amount of major zoom steps + */ + TInt CalculateMajorDigitalZoomStepCount( + const TVSDataProviderInfo& aInfo ) const; + + /** + * Deletes audio source. + */ + void DeleteAudioSource(); + + /** + * Gets a provider for a given type. + * @param aType type to search for + * @param aItem returned provider item + * @return index in provider array or KErrNotFound + */ + TInt GetProviderByType( + TVtEngProviderType aType, TProviderItem& aItem ); + + /** + * Gets a provider for a given type. + * @param aType type to search for + * @param aItem returned provider item + * @return index in provider array or KErrNotFound + */ + TInt GetProviderByType( + TVtEngProviderType aType, TProviderItem*& aItem ); + + /** + * Gets a provider for a given provider instance. + * @param aInstance Instance to search for + * @param aItem returned provider item + * @return index in provider array or KErrNotFound + */ + TInt GetProviderByInstance( + const CVSDataProvider* aInstance, + TProviderItem*& aItem ) const; + + /** + * Initializes provider. + * @param aProviderItem provider + */ + void InitializeProviderL( TProviderItem& aProviderItem ); + + /** + * Initializes provider for sharing. + */ + void InitializeShareProviderL( TProviderItem& aProviderItem, + const TDesC8& aParams ); + + /** + * Re-creates provider. First deletes old instance inside provider + * item structure and then creates a new instance, using given + * provider type. + * @param aProviderItem Provider to be recreated. + * @param aType Type of the new provider to be created. + */ + void ReCreateProviderL( + TProviderItem& aProviderItem, const TVtEngProviderType aType ); + + /** + * Provider index by provider type. + * @param aType Type of provider + */ + TInt ProviderIndex( TVtEngProviderType aType ) const; + + /** + * Gets a provider index by state. + * @param aState state of returned provider + * @return Index of provider + */ + TInt ProviderIndexByState( TProviderState aState ) const; + + /** + * Gets a provider index by provider instance. + * @param aInstance instance of provider to be found + * @return Index of provider or KErrNotFound if given provider item + * is not found + */ + TInt ProviderIndexByInstance( const CVSDataProvider* aInstance ) const; + + /** + * Creates VideoSource provider by type. + * @param aType Engine provider type + * @return CVSDataProvider pointer + */ + CVSDataProvider* CreateDataProviderL( TVtEngProviderType aType ); + + /** + * Maps camera orientation to provider type. + * @param aOrientation camera orientation + * @return provider type + */ + static TVtEngProviderType + OrientationToType( TCameraInfo::TCameraOrientation aOrientation ); + + /** + * Maps camera ID to provider type. + * @param aId camera ID + * @return provider type + */ + static TVtEngProviderType CameraIdToType( MVtEngMedia::TCameraId aId ); + + /** + * Creates blank still image provider. + * @param aIndex index of still image provider + */ + void CreateBlankProviderL( const TInt aIndex ); + + /** + * Creates default still image provider. + * @param aIndex index of default still image provider + */ + void CreateDefaultStillImageProviderL( const TInt aIndex ); + + /** + * Updates available camera providers. + * @return primary provider + */ + TVtEngProviderType UpdateAvailableProvidersL(); + + /** + * Switches to active provider. + */ + void SwitchProvider( TProviderItem* aProviderItem ); + + /** + * Overloaded SwitchProvider() that takes new provider as a parameter. + */ + void SwitchProvider( TProviderItem& aProviderItem ); + + /** + * Uninitializes non-permanent provider. + */ + void UninitializeProviderL(); + + /** + * Updates iState if view finder is active. + */ + void UpdateState(); + + /** + * Checks if initialization or provider switch is pending. + * @return ETrue if either one is pending + */ + TBool InitializingOrSwitching() const; + + /** + * Resets provider info index variables. + */ + void ResetIndices(); + + /** + * Sets active camera tracking. + * @param aProviderIndex current camera in use + * @return error code + */ + TInt SetCameraTrackingL( TInt& aProviderIndex ); + + /** + * Maps pubsub provided camera id to internal indexes. + * @param aCameraId id to map + * @return internally mapped id + */ + MVtEngMedia::TCameraId MapCameraInternally( TInt aCameraId ); + + /** + * Checks if desired camera is available. + * @param aType provider type to return + */ + void CameraAvailable( CVtEngLocalVideo::TVtEngProviderType &aType ); + + /** + * checks if given provider type is already waiting for initialization + * or switch. + * @param aType Provider type. + * @return ETrue if given provider type is in waiting state, EFalse + * otherwise. + */ + TBool IsProviderWaiting( TVtEngProviderType aType ) const; + + /** + * Returns highest provider type which is available for selection. + * Priority is following: + * KVtEngProviderCam1 << highest + * KVtEngProviderCam2 + * KVtEngProviderImage + * KVtEngProviderNone + * If eg. cam2 is designated as preferred, possible returns values are + * Cam2, Image and None. + * + * @param aType in/out argument. In => preferred provider which + * caller of the method wishes to select + * Out => highest available provider + * @return ETrue if preferred == highest i.e. aPreferred is intact + * + */ + TBool GetHighestSelectableProvider( TVtEngProviderType& aPreferred ) const; + + /** + * checks if given provider type is acitven + * @param aType Provider type. + * @return ETrue if given provider is already active, EFalse + * otherwise. + */ + TBool IsActiveProvider( TVtEngProviderType aType ) const; + + + private: // From CActive. + + /** + * Handles sync operations as async. + * @see CActive::RunL + */ + virtual void RunL(); + + /** + * @see CActive::DoCancel() + */ + virtual void DoCancel(); + + private: + + // Local video flags + enum TVtEngLocalVideoFlags + { + // Camera 1 is available (inwards) + EFlagCamera1Available = 0x00000001, + // Camera 2 is available (outwards) + EFlagCamera2Available = 0x00000002, + // video call ongoing + EFlagInitialized = 0x00000004, + // view finder enabled from UI + EFlagVFEnabled = 0x00000008, + // Non-user orginated switch + EFlagAutomaticSwitchCallback = 0x00000010, + // Audio muted + EFlagAudioMuted = 0x00000020, + // Only initialize a provider (no switch when initialized) + EFlagInitializeOnly = 0x00000040, + // Signal observer when switch is complete + EFlagSignalSourceSelection = 0x00000080, + // Provider event received while switch ongoing. + // When this is set and switch completes it + // is checked if revert to previous is needed. + EFlagCheckRevertToPrevious = 0x00000100, + // Avoid calculating the step count by using flag. + EFlagZoomStepCountNeedsMapping = 0x00000200, + // VT application foreground state + EFlagUIForeground = 0x00000400, + // VT application background state ( notification purpose) + EFlagUIBackground = 0x00000800, + // Provider is frozen + EFlagFrozen = 0x00001000 + }; + + /** + * Sets a flag on. + * @param aFlag flag to set + */ + void SetFlag( const TInt aFlag ); + + /** + * Removes a flag. + * @param aFlag flag to remove + */ + void ClearFlag( const TInt aFlag ); + + /** + * Checks if a flag has been set. + * @param aFlag flag to check + * @return ETsrue if set + */ + TBool IsFlag( const TInt aFlag ) const; + + private: // Data + + // Options for window server rendering. + TOptions iOptions; + + // Options for DSA rendering. + TDsaOptions iDsaOptions; + + // Video source controller. + CVSController* iSourceController; + + // Video source. + CVSDataSource* iSource; + + // Audio source. + MVTAudioSource* iAudioSource; + + // Video providers (cameras and still image). + CArrayFixFlat* iVideoProviders; + + // Currently active provider. + TProviderItem* iActiveProvider; + + // Provider item we're switching away from. + TProviderItem* iFadingProvider; + + // Provider that is selected as next one and + // is initializing or switching. + TProviderItem* iSelectedProvider; + + // DSA or window server. + TRenderingMethod iRenderingMethod; + + // Local video status. + TState iState; + + // View finder state. + TViewFinderState iViewFinderState; + + // Callback interface to Media Handler. + CVtEngMediaHandler& iObserver; + + // Still image file name. + TFileName iStillImage; + + // Local video state flags. + TInt iFlags; + + // Friend declaration provides extended access. + friend class TProviderItem; + + // Member variables to use in referencing to + // provider information + TInt iProviderInfoIndexCam1; + TInt iProviderInfoIndexCam2; + TInt iProviderInfoIndexStill; + + // Used for default camera notifications. + CVtEngPubSubsListener* iCameraListener; + + // Camera received from pubsub. + MVtEngMedia::TCameraId iCurrentCamera; + + // Contains logics for image sharing. + CVtEngShareImage* iShareImage; + + // Pointer to camera preferences extension + CVtEngCameraPreferences* iCameraPref; + + // Logics for delayed provider selection + TVtEngDelayedSelect iDelayedSelect; + + // Active provider's info + TVSDataProviderInfo iProviderInfo; + + // ETrue if prepare camera has been handled in media handler + TBool iPrepareCameraCalled; + + // Layout change handler + TVtEngLayoutChangeHandler iLayoutChangeHandler; + + // ASync callback + CAsyncCallBack* iAsyncCallBack; + + // Result + TInt iResult; + + // Pointer to provider item that is being initialized + TProviderItem* iInitializingProvider; + + // Number of cameras in the device + TInt iNumSupportedCameras; + }; + +#endif // CVTENGLOCALVIDEO_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngMediaHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngMediaHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1299 @@ +/* +* Copyright (c) 2004-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: Video session interface. +* +*/ + + + +#ifndef CVTENGMEDIAHANDLER_H +#define CVTENGMEDIAHANDLER_H + +// INCLUDES +#include +#include +#include "MVtEngMedia.h" +#include "vtengcommands.h" +#include "CVtEngLocalVideo.h" +#include "MVtEngSettingObserver.h" + +// FORWARD DECLARATIONS +class CVtEngLocalVideo; +class CVtEngRemoteVideo; +class MVtEngFrameObserver; +class CVtEngOperation; +class CVtEngExtensionBase; + +// CLASS DECLARATION + +/** +* Media control. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngMediaHandler ) : + public CBase, + public MVtEngMedia, + public MVtEngSettingObserver, + public MVtProtocolHandler + { + public: // Constructor and destructor. + + /** + * Symbian two-phase constructor. + * @return media handler instance + */ + static CVtEngMediaHandler* NewL(); + + /** + * Destructor. + */ + ~CVtEngMediaHandler(); + + public: // From MVtEngMedia. + + /** + * @see MVtEngMedia + */ + virtual TInt GetMediaState( + const TMediaDirection aMediaDirection, + TInt& aActiveMedia ) const; + + /** + * @see MVtEngMedia + */ + virtual TBool RenderingStarted( + const TMediaDirection + aDirection ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetSource( TMediaSource& aSource ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetSourcesCaps( TInt& aCaps ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetCurrentCameraId( TCameraId& aId ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetCameraInfo( + const TCameraId aId, + TCameraInfo& aInfo ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetCurrentZoomStep( TInt& aCurrentStep ); + + /** + * @see MVtEngMedia + */ + virtual TInt GetMaxZoomStep( TInt& aMaxZoomStep ); + + /** + * @see MVtEngMedia + */ + virtual TInt GetMajorZoomStepCount( TInt& aCount ); + + /** + * @see MVtEngMedia + */ + virtual void GetMajorZoomStep( TInt aIndex, TInt& aStep ); + + /** + * @see MVtEngMedia + */ + virtual TInt GetFreezeSupported( TBool& aFreezeSupported ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetFreezeState( TBool& aFrozen ) const; + + /** + * @see MVtEngMedia + */ + virtual TInt GetDsaState( + const TMediaDirection aMediaDirection, + TBool& aActive ) const; + + /** + * @see MVtEngMedia + */ + virtual TBool VideoCallConnected () const; + + /** + * @see MVtEngMedia + */ + virtual void GetVideoQuality( TVideoQuality& aVideoQuality ) const; + + /** + * @see MVtEngMedia + */ + virtual void GetObjectSharingState( + TShareObjectState& aObjectSharingState ) const; + + /** + * @ see MVtEngMedia + */ + virtual void GetCameraOrientations( + TCameraOrientation& aPrimaryCameraOrientation, + TCameraOrientation& aSecondaryCameraOrientation ) const; + +public: // New functions. + + /** + * Tells if the Protocol initialization has completed. + * @return ETrue if initialized + */ + TBool ProtoInitialized() const; + + /** + * Performs an operation in the handler. + * @param operation to be performed on the handler + */ + virtual void HandleL( CVtEngOperation& aOperation ); + + /** + * Returns if command can be performed by media handler. + * @return KErrNone if a command can be perfomed + * KErrNotReady if not in appropriate state + * KErrNotSupported if command is not for media handler + */ + TInt ValidateCommand( const TVtEngCommandId aCommand ) const; + + /** + * Returns ETrue if video channel is closed. + */ + TBool IsVideoChannelClosed() const; + + /** + * Request update last remote video frame through MVtEngFrameObserver::vtSetFrame + */ + void RequestLastRemoteFrame(); + + public: // from MVtProtocolHandler + + /** + * Handles callback from protocol. + * @param aResponse response + */ + virtual void HandleSessionCommandEventL(const TVtCommandResponse& aResponse); + + public: // From MVtProtocolHandler. + + /** + * Handles callback from protocol audiocontroller. + * @param aId which command + * @param aCmd which audio command + * @param aContextData any additional data + * @param aStatus how did it end up with + */ + virtual void HandleAudioOutputControlCommandComplete(TInt aId, + TVtAudioOutputControlCommand aCmd, + TAny *aContextData, + TInt aStatus); + + public: // From MVtProtocolHandler. + + /** + * Handles event from protocol. + * @param aEvent event + */ + virtual void HandleSessionInformationalEventL( + const TVtIndicationEvent& aEvent); + + public: // from MVtProtocolHandler + + /** + * Handles error event from protocol. + * @param aEvent error event + */ + virtual void HandleSessionErrorEventL(const TVtErrorEvent& aEvent); + + public: // from MVtEngSettingObserver + + /** + * Handles shared data setting change. + * @param aId setting id + * @param aValue setting value + */ + virtual void HandleSettingChangedL( + CVtEngSettings::TSettingId aId, + const TDesC& aValue ); + + public: // From MVtProtocolHandler. + + /** + * @see MVtProtocolHandler. + */ + void HandleVideoEncoderCommandCompletedL( + const TVtCommandResponse& aResponse ); + + /** + * @see MVtProtocolHandler. + */ + void HandleVideoEncoderInformationalEventL( + const TVtIndicationEvent& aEvent); + + public: // From MVtProtocolHandler + + /** + * @see MVtProtocolHandler. + * @since 3.1 + */ + void HandleH324MConfigCommandCompletedL( const TVtCommandResponse& aResponse ); + + /** + * @see MVtProtocolHandler. + * @since 3.1 + */ + void HandleH324MConfigInformationalEventL( + const TVtIndicationEvent& aEvent ); + + public: // New functions. + + /** + * Initializes media handler. + * @param aStatus signaling handle + */ + void InitializeL( TRequestStatus& aStatus ); + + /** + * Cancels media handler initialization. + */ + void CancelInitialize(); + + /** + * Initializes default blank provider. + * @param aStatus signaling handle + */ + void InitializeProviderL( TRequestStatus& aStatus ); + + /** + * Cancel Image sharing initialization. + */ + void CancelInitializeShareImage(); + + /** + * Sets protocol interface. + * aProto2Way protocol interface + */ + void SetSessionCommand( MVtSessionCommand* aProto2Way ); + + /** + * Unitializes media handler. + * @param aStatus request semaphore to complete + * when uninitialization is complete + */ + void Uninitialize( TRequestStatus& aStatus ); + + /** + * Goes to next step of uninitialization process, it can + * be one of following + * - Cancel all Protocol commands + * - Protocol disconnect + * - Protocol reset + * - Switch blank provider. + */ + void UninitializeNextStep(); + + /** + * Sets selected camera ID. + * @param aId camera ID (primary or secondary) + * @param aUpdateRequired if ETrue switch could not be performed + * Switch will be done when engine has been initialized. + */ + void SetSelectedCameraId( + const TCameraId aId, + TBool aUpdateRequired = EFalse ); + + /** + * Handles source initialization or switch. + * @param aResult Symbian OS error code + */ + void HandleLocalVideoOperationCompleteL( const TInt aResult ); + + /** + * SDK init info. + * @return Protocol initialization info + */ + TVtInitInfo& SdkInitInfo(); + + /** + * Returns protocol state maintained by VTEngine, not by Protocol. + * @return state + */ + MVtProtocolCommand::TVtProtocolState ProtoState(); + + /** + * Sets up video connection to remote terminal. + * @return Symbian OS error code + */ + TInt Connect(); + + /** + * Disconnects session. + * @return Symbian OS error code + */ + TInt Disconnect(); + + /** + * Adds video data source to protocol engine. + * @param Video channel logical channel ID number. + * @return Symbian OS error code + */ + TInt AddVideoSource( TUint aChannelId ); + + /** + * Adds audio data source to protocol engine. + * @param Audio channel logical channel ID number. + * @return Symbian OS error code + */ + TInt AddAudioSource( TUint aChannelId ); + + /** + * Adds video sink. + * @param Video channel logical channel ID number. + * @return Symbian OS error code + */ + TInt AddVideoSink( TUint aChannelId ); + + /** + * Adds audio sink. + * @param Audio channel logical channel ID number. + * @return Symbian OS error code + */ + TInt AddAudioSink( TUint aChannelId ); + + /** + * Sets the output volume for Protocol. + * @param aVolume the level of the volume + * @return Symbian OS error code + */ + TInt SetVolume( const TInt aVolume, + CVtEngOperation* aOperation = NULL ); + + /** + * Enables video when primary camera becomes available. + * @param aEnable do we enable or disable + * @return Symbian OS error code + */ + TInt AutoEnableVideo( TBool aEnable = ETrue ); + + /** + * Deletes protocol instance and associated Protocol interfaces. + */ + void FinalizeUninitialization(); + + /** + * Creates extension according to API Uid. + * @since S60 v3.2 + * @param aUid extension API Uid. + * @return Extension pointer + * @exeption Leaves if creation fails + * + */ + CVtEngExtensionBase* CreateExtensionsL( const TUid& aUid ); + + /** + * Checks if there is already an operation pending. + * @return KVtEngCommandNone if no operation is pending or Command identifier + */ + TVtEngCommandId GetPendingCommand(); + + private: // new functions + + /** + * Sends a sync message to Protocol after provider switch. + */ + void RequestFrame( ); + + /** + * Sets video quality + */ + void SetVideoQualityL( + const TVideoQuality aVideoQuality, + const TBool aSetPeerVideoQuality ); + + /** + * Sets peer video quality + */ + void SetPeerVideoQuality( const TVideoQuality aVideoQuality ); + + /** + * Check's flag's validity. If not valid, panic's in debug mode. + * @param aFlag flag to check. + */ + void AssertFlag( const TInt aFlag ) const; + + /** + * Gets the version information from SysUtil + * and sets it into Protocol. + */ + void SetVersionInfoL(); + + /** + * Sets supported resolutions to Protocol. + */ + void SetSupportedResolutions(); + + /** + * Sets used call setup enhancement parameters. + */ + void SetFastCsupOptions(); + + /** + * Does Protocol reset. + */ + void ResetProtoL(); + + /** + * Does the actual disconnecting with Protocol. + */ + void DisconnectProtoL(); + + /** + * Sets the defaults for volumes. + */ + void InitializeVolume(); + + /** + * Checks if a flag in iProtoInitFlags is set. + * @return ETrue if flag is set + */ + TBool IsFlag( const TInt aFlag ) const; + + /** + * Sets a flag in iProtoInitFlags. + * @param aFlag flag to set + */ + inline void SetFlag( const TInt aFlag ); + + /** + * Clears a flag in iProtoInitFlags. + * @param aFlag flag to clear + */ + inline void ClearFlag( const TInt aFlag ); + + /** + * Requests the volume controller. + * @return ETrue if retrieved ok + */ + TBool RequestAudioControllerL(); + + /** + * Spatial trade off indication handling method. Indication is + * sent by the peer every time when its spatial trade off is updated. + * @param aLogicalChannelId Indication's logical channel Id. + * @param aTradeOff Indication trade off value. + */ + void HandleSpatialTradeoffIndication( + const TUint16 aLogicalChannelId, const TUint8 aTradeOff ); + + /** + * Spatial trade off command handling method. Spatial trade off + * command is sent by the peer whenever peer wants to adjust our + * video quality. + * @param aLogicalChannelId Command's logical channel Id. + * @param aTradeOff New trade off value. + */ + void HandleSpatialTradeoffCommandL( + const TUint16 aLogicalChannelId, const TUint8 aTradeOff ); + + private: // constructor and destructor + + /** + * C++ default constructor. + */ + CVtEngMediaHandler(); + + /** + * Symbian constructor that may leave. + */ + void ConstructL(); + + private: + /** + * Operation values + */ + enum TOperation + { + /** + * No-op. + * 0 + */ + ENone, + + /** + * Add video source to protocol. + * 1 + */ + EAddVideoSource, + + /** + * Add video source to protocol. + * 2 + */ + EAddVideoSink, + + /** + * Add audio source to protocol. + * 3 + */ + EAddAudioSource, + + /** + * Add audio source to protocol. + * 4 + */ + EAddAudioSink, + + /** + * Connect protocol. + * 5 + */ + EConnectProto, + + /** + * Mute audio. + * 6 + */ + EMuteAudio, + + /** + * Resume audio sending. + * 7 + */ + EUnmuteAudio, + + /** + * Enable video for peer. + * 8 + */ + EEnableVideo, + + /** + * Disable video for peer. + * 9 + */ + EDisableVideo, + + /** + * Cancel ongoing request to Protocol + * as part of uninitiazation process. + * 10 + */ + EUninitializeCancelAllProto, + + /** + * Disconnect protocol. + * 11 + */ + EDisconnectProto, + + /** + * Destructs local/remote video and VS instances. + * 12 + */ + EDestructInternals, + + /** + * Terminates H.324 session. + * 13 + */ + ETerminateSession, + + /** + * Removing sinks and sources. + * 14 + */ + ERemovingSinksAndSources, + + /** + * Request 324 control interface from protocol. + * 15 + */ + EGet324CtrlInterface, + + /** + * Set volume. + * 16 + */ + ESetAudioVolume, + + /** + * Gets the maximum volume for Protocol. + * 17 + */ + EGetAudioGetMaxVolume, + + /** + * Reset protocol. + * 18 + */ + EDestructProtoPhaseDisconnect, + + /** + * Destruct switch blank. + * 19 + */ + EDestructSwitchBlank, + + /** + * Reset protocol. + * 20 + */ + EDestructProtoPhaseReset, + + /** + * Check Protocol state. + * 21 + */ + ECheckProtoState, + + /** + * Enables video internally (not originated by UI). + * 22 + */ + EEnableVideoInternal, + + /** + * Disables video internally (not originated by UI). + * 23 + */ + EDisableVideoInternal, + + /** + * Request H263Enc interface from protocol. + * 24 + */ + EGetH263EncInterface, + + /** + * Requests an intra frame. + * 25 + */ + ESendIntraframe, + + /** + * Set supported resolutions. + * 26 + */ + ESetSupportedResolutions, + + /** + * Set video quality (by changing framerate) + * 27 + */ + ESetVideoQuality, + + /** + * Remove H324 interface + * 28 + */ + ERemove324CtrlInterface, + + /** + * Remove video encoder interface + * 29 + */ + ERemoveH263EncInterface, + + /** + * Sends Video Temporal-spatial trade off command + * 30 + */ + ESendVTSTO, + + /** + * Sets fast call setup options + * 31 + */ + ESetFastCsupOptions, + + /** + * Sets vendor id + * 32 + */ + ESetVendorId, + + /** + * Set interval when I-frames are sent + * 33 + */ + ESetIFrameInterval + }; + + /** + * Operation and related command id. + */ + struct TCmdOpPair + { + // Operation + TOperation iOp; + // Command id returned by proto2way asynch request + TInt iProtoCmdId; + }; + + /** + * Enables/Disables video sending. + * @param aEnable ETrue if video is to be enabled + * @param aOp operation to be added + * NOTE. Valid only for enabling video, not when disabled. + * @see void AutoEnableVideo + * @return started operation or ENone + */ + TOperation EnableVideoL( + const TBool aEnable, + const TOperation aOp = EEnableVideo ); + + /** + * Calls Protocol pausing and acts according to the result. + * @return operation id for performed operation + */ + TOperation DoPauseVideo(); + + /** + * Continues to next step of uninitialization. + * @param aOp operation to perform + * @return command id + */ + void ContinueUninitializeL( const TOperation aOp ); + + /** + * Cancels all the running commands within Protocol. + * @param operation to be returned + * EUninitializeCancelAllProto if cancellation is ongoing + * (either because was already or just started) + * ENone if cancellation is not ongoing + * @return error code + * KErrNotReady if engine not in suitable state + * KErrAlreadyExists if cancel was already pending + * KErrNone if cancellation request succeeded + * other Symbian OS error code if cancellation fails + */ + TInt CancelAllProtoCommands( TOperation &aOp ); + + /** + * Stops view finder and remote video rendering. + */ + void StopRendering(); + + /** + * Updates volume to Protocol (if possible). + */ + void UpdateVolume(); + + /** + * Initiates protocol engine reset. + */ + void ResetProto2WayL(); + + /** + * Removes operation from pending operations array. + * @param aOp TOperation + * @return ETrue if operation was found (and hence removed) + */ + template + TBool RemoveOperation( const T& aOp ); + + /** + * Adds operation pending for callback. + * @param aOp operation value + * @param aCmdId protocol commd id or 0 if not Protocol cmd + * @param aResetExisting if ETrue removes existing operations + * from array + * @return index of the operation in array (i.e. >= 0 ) + */ + TInt AddOperation( + const TOperation aOp, + TInt aCmdId, + const TBool aResetExisting = EFalse ); + + /** + * Checks if an operation is pending. + * @param aOp operation + * @return index if operation is pending or KErrNotFound + */ + TInt IsPending( const TOperation aOp ) const; + + /** + * Checks if an operation is pending. + * @param aCmdId command id + * @return index if operation is pending or KErrNotFound + */ + TInt IsPending( const TInt aCmdId ) const; + + /** + * Completes asynchronous operation. + * @param aResult + * @return KErrNotFound if no operation else KErrNone + */ + TInt CompleteOp( const TInt aResult ); + + /** + * Completes asynchronous operation asynchronously. + * @param aResult + * @return KErrNotFound if no operation else KErrNone + */ + void AsyncCompleteOp( const TInt aResult = KErrNone ); + + /** + * Checks if specific operation matches to response from protocol. + * @param aProtoCmdId command id returned by protocol + * @param aOperation operation to search for in pending commands + * @param aIndex index in iPendingOps array if found + * @return ETrue if there's corrensponding entry in pending ops + */ + TBool MatchResponseToPendingOps( + const TInt aProtoCmdId, + const TOperation aOperation, + TInt* aIndex = NULL ); + + /** + * Starts "self-destruction" timer. + */ + void StartDisconnectTimerL(); + + /** + * Assigns new pending operation. Only one can be pending at a time + * so if there already is pending operation it is completed with error. + * @param aOperation operation to assign as pending + * @param aReplaceError error code to complete penging operation if + * one exists. If KErrNone is passed, replacement is not done. + * @return KErrNone if assignment done successfully i.e. there was + not pending operation that was completed. + * KErrCancel if some other operation was pending and was + * completed with aReplaceError. Operation is + * still assigned successfully. + * KErrGeneral if operation was not assigned. + */ + TInt AssignPendingOp( + CVtEngOperation& aOperation, + TInt aReplaceError = KErrCancel ); + + /** + * Callback function that completes ongoing operation. + * @param aAny pointer to an instance of the class. + * @return always KErrNone. + */ + static TInt DoCompleteOp( TAny* aAny ); + + /** + * Implementation of self-destruction timer activity. + * Causes a panic. + * @param aAny pointer to an instance of the class + * Not used. + * @return KErrNone; + */ + static TInt TimerCallback( TAny* aAny ); + + /** + * Creates and enques async callback for uninitialization. + * @see iNextStepCallback + */ + void NextUninitStepCallbackL(); + + /** + * Callback method for async uninitialization step. + * @seeiNextStepCallback + * @return KErrNone; + */ + static TInt UninitCallback( TAny* aAny ); + + /** + * Query 2-way's additional interfaces, encoder and H324 + * @return KErrNone; + */ + void QueryProtoInterfacesL(); + + /** + * Release 2-way's additional interfaces, encoder and H324 + * @return KErrNone; + */ + void ReleaseProtoInterfacesL(); + + /** + * Check for pending Protocol extension interface commands. + * @return ETrue if one or more extension command is pending + */ + TBool ExtensionCommandsPending() const; + + /** + * Checks is it possible to add sink / source from session + * state point of view. + * @return ETrue if adding is allowed. + */ + TBool MediaAddingValidity() const; + + /** + * Provider initialization state + */ + enum TInitState + { + /** + * Initialization not ongoing. + */ + EInitStateNone, + + /** + * Initialize still image. + */ + EStateInitStillImage, + + /** + * Initilize default blank provider. + */ + EStateInitProvider, + + /** + * Provider is set to none. + */ + EStateWaitingProviderChangeForUninit, + + /** + * Initialization has been cancelled. + */ + EStateInitCanceled + }; + + /** + * State flags. + */ + enum + { + // Protocol state flags + // Sink/source added + EProtoAudioSourceAdded = 0x000001, + EProtoVideoSourceAdded = 0x000002, + EProtoAudioSinkAdded = 0x000004, + EProtoVideoSinkAdded = 0x000008, + // Track paused + EProtoAudioTrackPaused = 0x000040, + EProtoVideoTrackPaused = 0x000080, + + // Pause/resume related flags. + ETwoStageOperation = 0x000100, + ESourceUpdateNeeded = 0x000200, + EProtoPauseVideoRequested= 0x000400, + EProtoPauseVideoBlankProv= 0x000800, + EProtoContVideoBlankProv = 0x001000, + EProtoContVideoBlankInit = 0x002000, + + // Must send intra + EProtoSendIntraFrame = 0x004000, + + // 324 interface acquired + EProto324IFAcquired = 0x008000, + + // Cancel all command is called on Protocol + // or there's nothing to cancel + EProtoCancelProtoCmdsOk = 0x010000, + + // NON Protocol related flags + + EVideoQualitySetByPeer= 0x020000, + + // Outgoing video channel closed (after being open) + // Used for preventing video pause/resume when + // the channel is not open + EOutVideoChannelClosed = 0x040000, + + // Outgoing audio channel closed (after being open) + // Used for preventing audio pause/resume + // the channel is not open + EOutAudioChannelClosed = 0x080000 + }; + + + /** + * Defines actions that can be taken when sharing started + * and/or stopped + */ + enum TVideoEngAction + { + EVideoActionNone, + EVideoActionEnable, + EVideoActionDisable + }; + + /** + * Helper class for handling video quality manipulation. + */ + class TVtEngVideoQuality + { + + public: + + // Forward for inner class + class TVQSParams; + + public: + + /** + * Constructor. + */ + TVtEngVideoQuality(); + + /** + * Destructor. + */ + ~TVtEngVideoQuality(); + + /** + * Sets new local video quality setting. + * @param aId Operation id. + * @param aSetPeer ETrue if peer video quality needs to be set, + * EFalse otherwise. + */ + void SettingVideoQuality( TInt aId, const TVideoQuality aValue, + TBool aSetPeer ); + + /** + * Get current local video quality setting. + * @return Current local video quality setting. + */ + TVideoQuality VideoQuality() const; + + /** + * Setting video quality succeeded. + * @return ETrue if record with given id was found, EFalse other + * wise. + */ + TBool SettingSucceeded( TInt aId, TVQSParams& aParams ); + + /** + * Setting video quality failed. + */ + void SettingFailed( TInt aId ); + + /** + * Called when video quality indication is received from peer. + */ + void UpdateVideoQuality( const TVideoQuality aVideoQuality ); + + /** + * Converts given trade off value to video quality enum. + */ + TVideoQuality FromTradeOff( const TInt aTradeOff ) const; + + /** + * Converts given video quality enum to trade off value. + */ + TInt ToFrameRate( const TVideoQuality aVideoQuality ) const; + + /** + * Converts given video quality value to frame rate. + */ + TUint8 ToTradeOff( const TVideoQuality aVideoQuality ) const; + + /** + * Finds id of setting param and returns index to it. + */ + TInt FindVQSParam( TInt aId ) const; + + public: + + /** + * Video quality parameters. + */ + struct TVQSParams + { + + public: + + // Default constructor + TVQSParams(); + + // Constructor with initializing parameters + TVQSParams( TInt aId, const TVideoQuality aValue, + TBool aSetPeer ); + + public: // data + + // Operation id + TInt iId; + + // VideoQuality value to be set + TVideoQuality iValue; + + // Defines whether peer video quality needs to be set or not + TBool iSetPeer; + + }; + + private: + + // Current local video quality + TVideoQuality iCurrent; + + // Qued params + RArray< TVQSParams > iParamList; + }; + + // Class for handling different kind of H.245 logical + // channels and their state in different MONA call setup + // scenarios + class TLogicalChannel + { + public: + + // H.245 logical channel ID to be established or + // already active + TUint iLogicalChannelId; + + // H.245 logical channel ID that is currently closing. + TUint iLogicalChannelIdClosing; + + // Variable to tell is same type (video or audio, incoming or outgoing) + // channel already started to close but not closed yet. If closing is pending + // same type channel cannot be opened until closing has finished or sink/source + // addition has failed for some reason. + TBool iSameTypeClosingPending; + + // Variable to tell is same type (video or audio, incoming or outgoing) + // channel ready to be opened. + TBool iSameTypeChannelReadyToOpen; + + }; + + private: // Data members. + + // Protocol engine pointer. + MVtSessionCommand* iSessionCommand; + + // Local video configuration. + CVtEngLocalVideo* iLocalVideo; + + // Remote video configuration. + CVtEngRemoteVideo* iRemoteVideo; + + // Pending internal operations. + TInt iCmdId; + CArrayFixFlat* iPendingOps; + + // Video Source initialization state. + TInitState iVSInitState; + + // Flags used to determine if audio and video sink/source + // is added to protocol and media state. + TInt iProtoStateFlags; + + // protocol state. + MVtProtocolCommand::TVtProtocolState iProtoState; + + // Initialization flag. + TBool iInitialized; + + // Remote media state. + TInt iRemoteMediaState; + + // Pending operation from client. + CVtEngOperation* iPendingOp; + + // Protocol initialization information. + TVtInitInfo iSdkInitInfo; + + + // Request status for (un)initialization. + TRequestStatus* iRequestStatus; + + // Audio controller handle. + MVtAudioConfigCommand* iAudioCtrl; + + // Timer to detect failure in disconnection. + CPeriodic* iTimer; + + // Protocol max volume. + TInt iProtoMaxVolume; + + // Selected camera is not necessary activated also. + TCameraId iSelectedCameraId; + + // ETrue when it is allowed to update volume. + TBool iUpdateVolumeAllowed; + + // ETrue when it is needed to update volume. + TBool iUpdateVolumeRequired; + + // Owned asynch callback. + CIdle* iAsyncCallback; + + // Pending volume operation. + CVtEngOperation* iPendingVolumeOp; + + // Used for various connection related operations. + TInt iConnectionStates; + + // Used while pausing and resuming video. + CVtEngLocalVideo::TVtEngProviderType iTempProviderInfo; + + // Used for setting the vendor info. + MVtH324ConfigCommand* iH324Config; + + + // Used H263 interface. + MVtVideoConfigCommand* iH263Encoder; + + // Video quality + TVtEngVideoQuality iVideoQuality; + + // Sharing object while video is disable will set this flag + TVideoEngAction iVideoAction; + + // Logical channel structure for outgoing video channel(s). + TLogicalChannel iVideoOutgoingLogicalChannel; + + // Logical channel structure for outgoing audio channel(s). + TLogicalChannel iAudioOutgoingLogicalChannel; + + // Logical channel structure for incoming video channel(s). + TLogicalChannel iVideoIncomingLogicalChannel; + + // Logical channel structure for incoming audio channel(s). + TLogicalChannel iAudioIncomingLogicalChannel; + + /* For proceeding to next uninit step asynchronously. + * Needed because Proto extension interface cannot be released within + * callback + */ + CAsyncCallBack* iNextStepCallback; + + + /* Do not complete operation on pause command. This flag + * is used when image sharing is stopped and video was disabled + * when sharing was initially started to prevent black frame sending + * during blank switch. + */ + TBool iPauseNoCompleteOp; + + /** + * Result for asynchronous operation completion. + */ + TInt iAsyncCompleteOpResult; + }; + +#endif // CVTENGMEDIAHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/CVtEngRemoteVideo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/CVtEngRemoteVideo.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,441 @@ +/* +* Copyright (c) 2006 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: Remote video handling class. +* +*/ + + + +#ifndef CVTENGREMOTEVIDEO_H +#define CVTENGREMOTEVIDEO_H + +// INCLUDES +#include +#include +#include "MVtEngImageScaler.h" +#include "MVtEngDraw.h" +#include "TVtEngRendering.h" +#include "TVtEngRenderConfig.h" +#include +#include + +// FORWARD DECLARATIONS +class CDirectScreenAccess; +class CFbsBitmap; +class CVtEngStateManager; +class MVtEngScalerObserver; + +class TVtEngRenderingOptionsDSA; +class TVtEngRenderingOptionsDP; +class TVtEngRenderingOptionsNGA; + +// Define image sizes. +// QCIF. +const TInt KVtEngResolutionQCIFWidth = 176; +const TInt KVtEngResolutionQCIFHeight = 144; + +// SQCIF. +const TInt KVtEngResolutionSQCIFWidth = 128; +const TInt KVtEngResolutionSQCIFHeight = 96; + +// Default video screen width. +const TInt KVtEngRemoteVideoDefaultWidth = 176; + +// Default video screen height. +const TInt KVtEngRemoteVideoDefaultHeight = 144; + +// Watcher checks point time-out 400 ms. +const TInt KVtEngWatcherTimeout = 400000; + +// When the watcher has timed out 15 times without new frame, send event to UI. +const TInt KVtEngWatcherThreshold = 15; + +// CLASS DECLARATION + +/** +* Class handling remote video. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +NONSHARABLE_CLASS( CVtEngRemoteVideo ) : + public CBase, + public MDisplaySinkObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aPv2Way a reference to PV instance. + * @param aStateManager reference to VT state manager + * @return instance of CVtEngRemoteVideo + */ + static CVtEngRemoteVideo* NewL( + MVtSessionCommand& aSessionCommand, + CVtEngStateManager& aStateManager ); + + /** + * Destructor. + */ + virtual ~CVtEngRemoteVideo(); + + public: // From MDisplaySinkObserver + + /** + * @see MDisplaySinkObserver + */ + void VideoFrameSizeChangedL( const TSize& aFrom, + const TSize& aTo ); + + public: // New functions + + /** + * Sets parameters used when rendering remote video. + */ + void SetRenderingParametersL( + const TVtEngRenderingOptionsNGA& aParams ); + + /** + * Sets parameters used when rendering remote video. + * @param aParams direct screen access parameters + */ + void SetRenderingParametersL( + const TVtEngRenderingOptionsDSA& aParams ); + + /** + * Sets parameters used when rendering remote video. + * @param aParams direct screen access parameters + */ + void SetRenderingParametersL( + const TVtEngRenderingOptionsDP& aParams ); + + /** + * Starts remote video rendering. + */ + void StartVideoL(); + + /** + * Stops remote video rendering. + */ + void StopVideoRendering(); + + /** + * Pauses remote video rendering. + * @return command id from PV + */ + TInt PauseVideoL(); + + /** + * Adds Display sink into PV. + * @param Video channel logical channel ID number. + * @return PV command ID + */ + TInt AddVideoSinkL( TInt aChannelId ); + + /** + * Adds Audio sink into PV. + * @param Audio channel logical channel ID number. + * @return PV command ID + */ + TInt AddAudioSinkL( TInt aChannelId ); + + /** + * Returns state of Direct Screen Access. + * @return state of Direct Screen Access + */ + TBool GetDsaState() const; + + /** + * Returns the audiosink of nested CVtEngDraw class. + * @return the audiosink of nested CVtEngDraw class + */ + MVTAudioSink* AudioSink(); + + /** + * Sets UI foreground state (i.e. is the Application + * current active application or not). + * @param aForeground ETrue if the VT application is + * in foreground, EFalse otherwise. + * @exception May leave with KErrNotReady. + */ + void SetUIForegroundL( TBool aForeground ); + + /** + * Request update last remote video frame through MVtEngFrameObserver::vtSetFrame + */ + void RequestLastFrame(); + + private: + + /** + * C++ constructor. + * @param aPv2Way a reference to PV instance + * @param aStateManager reference to VT state manager + */ + CVtEngRemoteVideo( + MVtSessionCommand& aSessionCommand, + CVtEngStateManager& aStateManager ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + + public: + + /** + * Base rendering class + */ + NONSHARABLE_CLASS( CVtEngDraw ) : + public CActive, + public MVtEngDraw, + public MDirectScreenAccess + { + + protected: // new methods + /** + * C++ constructor as private. + * @param aObserver callback interface for Display Sink + */ + CVtEngDraw( MDisplaySinkObserver* aObserver ); + + /** + * Destructor + */ + ~CVtEngDraw(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * If not active, set iStatus to KRequestPending and calls + * SetActive(); + */ + void Activate(); + + /** + * Creates DSA instance. + */ + void CreateAndStartDSAL(); + + public: // from MDirectScreenAccess + + /** + * From MDirectScreenAccess, this function is called by the + * window server when direct screen access must stop. + * @see MDirectScreenAccess::AbortNow + */ + virtual void AbortNow( + RDirectScreenAccess::TTerminationReasons aReason ); + + /** + * From MDirectScreenAccess, this method is called by the direct + * screen access instance as soon as direct screen access can + * resume. + * @see MDirectScreenAccess::Restart + */ + virtual void Restart( + RDirectScreenAccess::TTerminationReasons aReason ); + + public: // new functions + + /** + * Configuration was updated. + */ + void ConfigUpdatedL(); + + /** + * Display Sink pointer. + * @return instance of MDisplaySink + */ + MDisplaySink* DisplaySink(); + + /** + * Returns state of Direct Screen Access. + * @return true if rendering + */ + TBool GetDsaState() const; + + /** + * Checks frame watcher expiration. + * @param aAny pointer to CVtEngDrawDSA + * @return Symbian OS error code + */ + static TInt WatcherExpired( TAny* aAny ); + + /** + * Handles frame watcher expiration. + */ + void HandleWatcherExpired(); + + /** + * Sets certain flag on. + * @param aFlags flags to turn on. + */ + void SetFlag( TUint aFlags ); + + /** + * Clears certain flag. + * @param aFlags flags to clear. + */ + void ClearFlag( TUint aFlags ); + + /** + * Checks if certain flag is on. + * @param aFlags flags to check. + */ + TBool IsFlag( TUint aFlag ) const; + + /** + * Called by CVtEngRemoteVideo, when video sink is added + * to PV. + */ + void VideoSinkAdded(); + + private: // from CActive + + /** + * Handles active object cancellation. + * @see CActive::Cancel + */ + void DoCancel(); + + /** + * Handles active object execution errors. + * @see CActive::RunError + */ + TInt RunError( TInt aError ); + + protected: + + /** + * Defines if drawing can be done + * and if we have not received frames + * for some time and observer is notified + * (and no new frames since then). + */ + enum TFlags + { + // Start the rendering. + EStarted = ( 1 << 0 ), + // Ready by window server. + EReadyForeground = ( 1 << 1 ), + // Ready by internal state. + EReadyInternal = ( 1 << 2 ), + // Ready to draw. + EReady = EReadyInternal | EReadyForeground, + // Watcher expired because no frames received in time. + EFrameWatcherExpired= ( 1 << 3 ), + // First frame has been received. + EFirstFrameReceived = ( 1 << 4 ), + // Drawing ongoing flag + ERemoteVideoDrawing = ( 1 << 5 ), + // VT UI foreground status (if set, UI is foreground) + EFlagUIForeground = ( 1 << 6 ), + // Components have been initialized + EFlagInitialized = ( 1 << 7 ), + // VT UI has been sent to background + ESentToBackground = ( 1 << 8 ), + // Frame buffer contains data when this flag is set (DP,NGA) + EFrameBufferFilled = ( 1 << 9 ), + // BaseConstructL() call is pending (DP,NGA) + EBaseConstructCalled = ( 1 << 10 ), + // BaseSetConfigL() call is pending (DP,NGA) + EBaseSetConfigCalled = ( 1 << 11 ), + // BaseStartDrawL() call is pending (DP,NGA) + EBaseBaseStartDrawCalled = ( 1 << 12 ), + // UpdateSinkParamsL() needs to be called (DP,NGA) + ESinkParamUpdateRequired = ( 1 << 13 ), + // Sink().Resume() needs to be called (DP,NGA) + ESinkResumeRequired = ( 1 << 14 ), + // InitializePostingSurfaceL() call is pending (DP), CreateSurfaceL call is pending (NGA) + EInitializePostingSurfaceCalled = ( 1 << 15 ), + // New frame buffer is store, not coverted and scaled yet + EFrameBufferNeedsConvertAndScale = ( 1 << 16 ), + + // Bitmask for all pending calls (DP) + EDelayedCallsMask = EBaseConstructCalled | + EBaseSetConfigCalled | + EBaseBaseStartDrawCalled | + ESinkParamUpdateRequired | + EInitializePostingSurfaceCalled + }; + + protected : // data + + // Direct Screen Access. + CDirectScreenAccess* iDSA; + + // Display sink providing bitmaps. + MDisplaySink* iDisplaySink; + + // @see TFlags + TInt iFlags; + + // For checking if display sink stops feeding. + // drawer with bitmaps + CPeriodic* iWatcher; + + // to reduce watcher restarts do cancel it + // only every 15 frames + // Counter for frame expiration. + TInt iCheckpoint; + + // DisplaySink callback interface. + MDisplaySinkObserver* iObserver; + + // Frame watcher callback. + TCallBack iCallback; + + // Container class as a friend. + friend class CVtEngRemoteVideo; + + // Temporarily store image size when size changes on the fly. + TSize iSourceSize; + + // DisplaySink status boolean. + TBool iDSUpdated; + }; + + private: // Data + // Packet Video interface. + MVtSessionCommand& iSessionCommand; + + // State manager. + CVtEngStateManager& iStateManager; + + // Draws remote video with DSA. + CVtEngDraw* iDrawer; + + // Display sink. + MDisplaySink* iDisplaySink; + + // Audio sink interface. + MVTAudioSink* iAudioSink; + + // Information from PV regarding sink. + TInt iTrackId; + + // @see TFlags + TInt iStateFlags; + + TBool iEnableNGA; + }; + +#endif // CVTENGREMOTEVIDEO_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/MVtEngDraw.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/MVtEngDraw.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2004-2006 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: Remote video handling class. +* +*/ + + + +#ifndef MVTENGDRAW_H +#define MVTENGDRAW_H + +// INCLUDE + +#include + +// FORWARD + +class MDisplaySink; +class MDisplaySinkObserver; +class TVtEngRenderConfig; + +/** +* Drawer API. +* +* @lib videoteleng.lib +* @since Series 60 3.2 +*/ +NONSHARABLE_CLASS( MVtEngDraw ) + { + public: + + /** + * Base construction for derived classes. + */ + virtual void BaseConstructL() = 0; + + /** + * Instantiates display sink. + */ + virtual MDisplaySink* CreateSinkL() = 0; + + /** + * Refresh view. + */ + virtual void BaseRefreshL() = 0; + + /** + * Updates the target bitmaps and/or displaymode + * and/or the sizes of bitmaps + */ + virtual void BaseRefreshBitmapsL() = 0; + + /** + * DoCancel method for inherited classes. + */ + virtual void BaseDoCancel() = 0; + + /** + * Configuration verifying routine for derived classes. If + * new configuration is not supported, then may this method + * leaves with appropriate error code. + */ + virtual void BaseVerifyConfigL() = 0; + + /** + * Called when DSA calls Restart() to start drawing again. + */ + virtual void BaseRestartL() = 0; + + /** + * Called when DSA calls AbortNow() to stop drawing. + */ + virtual void BaseAbortNow() = 0; + + /** + * Starts rendering. + */ + virtual void BaseStartDrawL() = 0; + + /** + * Stops rendering. + */ + virtual void BaseStopDraw() = 0; + + /** + * Sets configuration. + */ + virtual void BaseSetConfigL( const TVtEngRenderConfig& aConfig ) = 0; + + /** + * Called when UI foreground status changes. + */ + virtual void BaseSetUIForegroundL( TBool aForeground ) = 0; + + /** + * Called when incoming video frame size changes. + */ + virtual void BaseVideoFrameSizeChangedL( const TSize& aTo ) = 0; + + /** + * Request update last remote video frame through MVtEngFrameObserver::vtSetFrame. + */ + virtual void BaseRequestLastFrame() = 0; + + protected: + + /** + * Returns current configuration settings. + */ + virtual TVtEngRenderConfig& Config() = 0; + + }; + +/** +* Remote drawer factory. +* +* @lib videoteleng.lib +* @since Series 60 3.2 +*/ +class VtEngDrawFactory + { + public: + /** + * Factory method for creating drawer + * @param aObserver a callback interface + */ + static MVtEngDraw* CreateDrawerL( MDisplaySinkObserver* aObserver, TBool ); + }; + +#endif // MVTENGDRAW_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/MVtEngFrameObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/MVtEngFrameObserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2006 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: Observer interface for video frames. +* +*/ + + + +#ifndef MVTENGFRAMEOBSERVER_H +#define MVTENGFRAMEOBSERVER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFbsBitmap; + +// CLASS DECLARATION + +/** +* Observer interface for video frames. +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngFrameObserver + { + public: + + enum TFrameType + { + ELocalVideoFrame, + ERemoteVideoFrame + }; + + virtual void vtHandleFrameL( TFrameType aType, + CFbsBitmap* aBitmap ) = 0; + + /** + * Sets last drawn frame. This frame will be stored by UI + * and will be drawn when DSA is temporarily disabled (e.g. + * when a menu is opened) + */ + virtual void vtSetFrame( TFrameType aType, + CFbsBitmap* aBitmap ) = 0; + + }; + +#endif // MVTENGFRAMEOBSERVER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/MVtEngImageScaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/MVtEngImageScaler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2004-2006 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: Interface used for scaling images to certain size. +* +*/ + + + +#ifndef VTENGIMAGESCALER_H +#define VTENGIMAGESCALER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFbsBitmap; + +/** +* Image scaler observer. +* +* @lib videoteleng.lib +* @since Series 60 2.8 +*/ +class MVtEngScalerObserver + { + public: + + /** + * Called when scaling is ready. + * @param aBitmap a scaled bitmap + * @param aError Symbian OS error code + */ + virtual void ScalingCompleted( + CFbsBitmap* aBitmap, + TInt aError ) = 0; + }; + +/** +* Image scaler. +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngImageScaler + { + public: // new functions + + /** + * Used to start the scaling of an image. + * @param aSourceIndex the index of the source to use. + */ + virtual void ScaleL( + TInt aSourceIndex ) = 0; + + /** + * Configures the scaler. + * @param aDisplayMode which kind of display + * @param aSize the width and height of the display + * @return ETrue if previous scaling was cancelled + */ + virtual TBool ConfigureL( + TDisplayMode aDisplayMode, + TSize aSize, + TInt aSourceHandle1, + TInt aSourceHandle2 ) = 0; + + /** + * Deletes the scaling object. + */ + virtual void Release() = 0; + + /** + * Possibility to cancel the scaling. + * @return error code of canceling. + */ + virtual TInt Cancel() = 0; + }; + +/** +* Image scaler factory. +* +* @lib videoteleng.lib +* @since Series 60 2.8 +*/ +class VtEngScalerFactory + { + public: + /** + * Factory method for creating scaler + * @param aObserver a callback interface + */ + static MVtEngImageScaler* CreateScalerL( + MVtEngScalerObserver& aObserver ); + }; + +#endif // VTENGIMAGESCALER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/MVtEngMedia.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/MVtEngMedia.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,357 @@ +/* +* Copyright (c) 2004-2006 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: Media interface +* +*/ + + + +#ifndef MVTENGMEDIA_H +#define MVTENGMEDIA_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MVtEngLocalVideoDisplay; +class CFbsBitmap; + +// CLASS DECLARATION + +/** +* Media interface for defining data types for media transport and +* presentation of it locally as well methods for obtaining current +* configuration. +* +* @lib videoteleng.lib +* @since Series 60 2.6 +*/ +class MVtEngMedia + { + public: // New functions. + + enum TMediaType + { + EMediaAudio = (1 << 0 ), + EMediaVideo = ( 1 << 1 ), + EMediaAudioPreparing = ( 1 << 2 ), + EMediaVideoPreparing = ( 1 << 3 ), + // Status of audio channel, applicable only for outgoing audio. + EMediaAudioChannelOpen = ( 1 << 4 ), + // Status of video channel, applicable only for outgoing video. + EMediaVideoChannelOpen = ( 1 << 5 ) + }; + + /** + * ESourceCapsPrimaryCamera + * primary camera can be selected. + * ESourceCapsSecondaryCamera + * secondary camera can be selected. + * ESourceCapsStillImage + * still image can be selected. + */ + enum TSourceCapsFlags + { + ESourceCapsPrimaryCamera = ( 1 << 0 ), + ESourceCapsSecondaryCamera = ( 1 << 1 ), + ESourceCapsStillImage = ( 1 << 2 ) + }; + + /** + * EMediaOutgoing + * outbound media + * EMediaIncoming + * inbound media + */ + enum TMediaDirection + { + EMediaOutgoing, + EMediaIncoming + }; + + /** + * EMediaNone + * No media source selected. + * EMediaCamera + * Camera selected + * EMediaCameraPri + * Primary camera selected. + * Camera is inwards + * EMediaCameraSec + * Secondary camera selected. + * Camera is outwards + * EMediaStillImage + * Still image as source. + * EMediaVideoStream + * Video stream selected. + */ + enum TMediaSource + { + EMediaNone, + EMediaCamera, + EMediaCameraPri, + EMediaCameraSec, + EMediaStillImage, + EMediaVideoStream, + EMediaShare + }; + + /** + * EPrimaryCamera + * Primary camera is inwards faced. + * ESecondaryCamera + * Camera is facing outwards. + */ + enum TCameraId + { + EPrimaryCamera, + ESecondaryCamera + }; + + /** + * Camera information (zoom mainly). + */ + struct TCameraInfo + { + TInt iMinZoom; + TInt iMaxZoom; + TInt iMaxDigitalZoom; + TInt iMajorZoomStepCount; + }; + + /** + * + * Video quality enumeration. + * + * EVideoQualityUndefined video quality has not been set + * yet. + * EVideoQualityDetail means slow frame rate, good image + * quality.. + * EVideoQualityNormal smoother video with somewhat lower + * image quality than EVideoQualityDetail. + * EVideoQualityMotion the smoothest video with the worst + * image quality. + */ + enum TVideoQuality + { + EVideoQualityUndefined, + EVideoQualityDetail, + EVideoQualityNormal, + EVideoQualityMotion + }; + + /** + * Enumerates object sharing state. + * + * ENotAbleToShare Is not able to share any objects (engine in wrong + * state) + * ENotSharing Is not sharing anything + * EInitializingShareImage Initializing still image sharing. + * ESharingImage Is sharing image + * ESharingVideoClip Is sharing video clip + */ + enum TShareObjectState + { + ENotAbleToShare, + ENotSharing, + EInitializingShareImage, + EInitializingShareVideoClip, + ESharingImage, + ESharingVideoClip + }; + + /** + * Defines layout (screen orientation) used by + * Video Telephone application per active camera. + * Each camera has one of the following values: + * + * EOrientationLandscape Layout is always landscape. + * EOrientationPortrait Layout is always portrait. + * EOrientationObeyLayoutSwitch Obey layout in specific device mode. + */ + enum TCameraOrientation + { + EOrientationLandscape, + EOrientationPortrait, + EOrientationObeyLayoutSwitch + }; + + /** + * Command parameters for Image sharing. + */ + typedef TFileName TShareObjectImageParameters; + + /** + * Command parameters for Video Clip sharing. + */ + typedef TFileName TShareObjectVideoClipParameters; + + /** + * Parameters for Prepare Camera. + */ + struct TPrepareCameraParams + { + TMediaSource iMediaSource; + TBool iInitialize; + }; + + /** + * Returns state of transmission local video/audio to remote end. + * + * @param aMediaDirection + * @param aActiveMedia returns active media as bitmap (see TMediaType). + * @return Symbian OS error code. + */ + virtual TInt GetMediaState( + const TMediaDirection aMediaDirection, + TInt& aActiveMedia ) const = 0; + + /** + * Returns active source for video transmission and + * local display. + * @param aSource source in return + * @return Symbian OS error code + */ + virtual TInt GetSource( TMediaSource& aSource ) const = 0; + + /** + * Returns source capabilities. + * @param combination of capability flags + * @return Symbian OS error code + */ + virtual TInt GetSourcesCaps( TInt& aCaps ) const = 0; + + /** + * Returns currently active camera. + * @param returns current camera id. + * @return Symbian OS error code. + * KErrNotReady if the engine is not ready or it's in wrong state, + * KErrInUse if camera is used by other application. + * Camera must be initialized, by async KVtEngPrepareCamera command or + * KVtEngSetSource command with camera parameter, in order to get + * KErrInUse indication. + */ + virtual TInt GetCurrentCameraId( TCameraId& aId ) const = 0; + + /** + * Returns camera information. + * @param aId camera to query information for. + * @param aInfo returns camera information + * @return Symbian OS error code. If camera is not + * available returns KErrNotFound. + */ + virtual TInt GetCameraInfo( + const TCameraId aId, + TCameraInfo& aInfo ) const = 0; + + /** + * Gets current zoom step + * @param aCurrentStep current zoom step + * @return Symbian OS error code. + */ + virtual TInt GetCurrentZoomStep( TInt& aCurrentStep ) = 0; + + /** + * Gets maximum zoom value that may be passed to camera. + * @param aMaxZoomStep maximum zoom step. + * @return Symbian OS error code. + */ + virtual TInt GetMaxZoomStep( TInt& aMaxZoomStep ) = 0; + + /** + * Gets number of major zoom level leaps. + * Less than or equal to maximum digital zoom steps. + * @param aCount number of leaps + * @return Symbian OS error code. + */ + virtual TInt GetMajorZoomStepCount( TInt& aCount ) = 0; + + /** + * Maps major zoom leap step to corresponding step index. + * @param aIndex major zoom step. + * @param aStep zoom step + */ + virtual void GetMajorZoomStep( TInt aIndex, TInt& aStep ) = 0; + + /** + * Gets freeze support status. + * @param aFreezeSupported ETrue if freeze is supported, EFalse otherwise. + * @return KErrNotReady if provider is not ready yet. + * @since S60 3.1 + */ + virtual TInt GetFreezeSupported( TBool& aFreezeSupported ) const = 0; + + /** + * Gets freeze current status. + * @param aFreezeSupported ETrue if active provider is frozen, EFalse otherwise. + * @return KErrNotReady if provider is not ready yet. + * @since S60 3.1 + */ + virtual TInt GetFreezeState( TBool& aFrozen ) const = 0; + + /** + * Returns state of DSA drawing, whether is active or not. + * @param aMediaDirection in or out direction + * @param aState returns state of Direct Screen Access + * @return Symbian OS error code + */ + virtual TInt GetDsaState( + const TMediaDirection aMediaDirection, + TBool& aActive ) const = 0; + + /** + * Returns state of VideoCall, whether is connected or not. + * @return state + */ + virtual TBool VideoCallConnected () const = 0; + + /** + * Returns ETrue if rendering has been started. + * + * @param aDirection specifies the rendering direction to check + * @return ETrue if rendering has been started. + */ + virtual TBool RenderingStarted( const TMediaDirection + aDirection ) const = 0; + + /** + * Gets current local video quality setting. + * @param aVideoQuality Current local video quality settings. + * @since S60 3.1 + */ + virtual void GetVideoQuality( TVideoQuality& aVideoQuality ) const = 0; + + /** + * Gets current object sharing state. + * @param aObjectSharingState On return contains current object sharing + * state. @see MVtEngMedia::TShareObjectState. + * @since S60 3.1 + */ + virtual void GetObjectSharingState( + TShareObjectState& aObjectSharingState ) const = 0; + + /** + * Gets camera orientations for primary and secondary camera. + * @see MVtEngMedia::TCameraOrientation + * @param aPrimaryCameraOrientation priamry camera orientation. + * @param aSecondaryCameraOrientation secondary camera orientation. + */ + virtual void GetCameraOrientations( + TCameraOrientation& aPrimaryCameraOrientation, + TCameraOrientation& aSecondaryCameraOrientation ) const = 0; + }; + +#endif // MVTENGMEDIA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfig.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGRENDERCONFIG_H +#define TVTENGRENDERCONFIG_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; +class RWindow; + + +// CLASS DECLARATION + +/** +* Configuration for representation of local or remote video. +* Used only internally. +* +* @lib videoteleng +* @since 2.6 +*/ +struct TVtEngRenderConfig + { + public: // enumerations + + /** + * Indication of type of rendering specified by configuration. + * EWsRender fields applicable for window server are valid + * EDsaRender fields applicable for DSA are valid + */ + enum TRenderType + { + EWsRender, + EDsaRender, + EDpRender, + ENgaRender + }; + + public: // data + RWindow* iRemoteWindow; + + RWsSession* iWsSession; + CWsScreenDevice* iWsSreenDevice; + RWindowBase* iWindow; + + MVtEngFrameObserver* iObserver; + TRect iRect; + TRect iClipRect; + TPoint iOffset; + TRenderType iType; + }; + +#endif // TVTENGRENDERCONFIG_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDP.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGRENDERCONFIGDP_H +#define TVTENGRENDERCONFIGDP_H + +// INCLUDES +#include "TVtEngRenderConfig.h" +#include "TVtEngRenderingDP.h" +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Configuration for representation of local or remote video. +* Used only internally. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderConfigDP ) : public TVtEngRenderConfig + { +public: // new functions + + TVtEngRenderConfigDP(); + + TVtEngRenderConfigDP( const TVtEngRenderingOptionsDP& aOptions ); + + TVtEngRenderConfigDP& operator=( const TVtEngRenderConfig& aConfig ); + +public: // data + // Background color value. This color is filled to areas that are not + // covered by the image. + TUint iBackGround; + }; + +#include "TVtEngRenderConfigDP.inl" + +#endif // TVTENGRENDERCONFIGDP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDP.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDP.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDP::TVtEngRenderConfigDP +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDP::TVtEngRenderConfigDP() + { + Mem::FillZ( this, sizeof( TVtEngRenderConfigDP ) ); + iType = EDpRender; + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDP::TVtEngRenderConfigDP +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDP::TVtEngRenderConfigDP( + const TVtEngRenderingOptionsDP& aOptions ) + { + iType = EDpRender; + iWsSession = &aOptions.iWs; + iWsSreenDevice = &aOptions.iWsSD; + iWindow = &aOptions.iWindow; + iObserver = aOptions.iObserver; + iRect = aOptions.iRect; + iClipRect = aOptions.iClipRect; + iOffset = aOptions.iOffset; + iBackGround = 0; + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDP::operator= +// +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDP& TVtEngRenderConfigDP::operator=( + const TVtEngRenderConfig& aConfig ) + { + iWsSession = aConfig.iWsSession; + iWsSreenDevice = aConfig.iWsSreenDevice; + iWindow = aConfig.iWindow; + iObserver = aConfig.iObserver; + iRect = aConfig.iRect; + iClipRect = aConfig.iClipRect; + iOffset = aConfig.iOffset; + iType = aConfig.iType; + return *this; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGRENDERCONFIGDSA_H +#define TVTENGRENDERCONFIGDSA_H + +// INCLUDES +#include +#include "TVtEngRenderConfig.h" +#include "TVtEngRenderingDSA.h" + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Configuration for representation of local or remote video. +* Used only internally. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderConfigDSA ) : public TVtEngRenderConfig + { +public: // new functions + + TVtEngRenderConfigDSA(); + + TVtEngRenderConfigDSA( const TVtEngRenderingOptionsDSA& aOptions ); + + TVtEngRenderConfigDSA& operator=( const TVtEngRenderConfig& aConfig ); + +public: // data + }; + +#include "TVtEngRenderConfigDSA.inl" + +#endif // TVTENGRENDERCONFIGDSA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDSA.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigDSA.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDSA::TVtEngRenderConfigDSA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDSA::TVtEngRenderConfigDSA() + { + Mem::FillZ( this, sizeof( TVtEngRenderConfigDSA ) ); + iType = EDsaRender; + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDSA::TVtEngRenderConfigDSA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDSA::TVtEngRenderConfigDSA( + const TVtEngRenderingOptionsDSA& aOptions ) + { + iType = EDsaRender; + iWsSession = &aOptions.iWs; + iWsSreenDevice = &aOptions.iWsSD; + iWindow = &aOptions.iWindow; + iObserver = aOptions.iObserver; + iRect = aOptions.iRect; + iClipRect = aOptions.iClipRect; + } + + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDSA::operator= +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigDSA& TVtEngRenderConfigDSA::operator=( + const TVtEngRenderConfig& aConfig ) + { + iWsSession = aConfig.iWsSession; + iWsSreenDevice = aConfig.iWsSreenDevice; + iWindow = aConfig.iWindow; + iObserver = aConfig.iObserver; + iRect = aConfig.iRect; + iClipRect = aConfig.iClipRect; + iOffset = aConfig.iOffset; + iType = aConfig.iType; + return *this; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigNGA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigNGA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2004-2006 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: Class for NGA render configuration. +* +*/ + + +#ifndef TVTENGRENDERCONFIGNGA_H +#define TVTENGRENDERCONFIGNGA_H + +// INCLUDES +#include "TVtEngRenderConfig.h" +#include "TVtEngRenderingNGA.h" + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Configuration for representation of local or remote video. +* Used only internally. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderConfigNGA ) : public TVtEngRenderConfig + { +public: // new functions + + TVtEngRenderConfigNGA(); + + TVtEngRenderConfigNGA( const TVtEngRenderingOptionsNGA& aOptions ); + + TVtEngRenderConfigNGA& operator=( const TVtEngRenderConfig& aConfig ); + +public: // data + }; + +#include "TVtEngRenderConfigNGA.inl" + +#endif // TVTENGRENDERCONFIGNGA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderConfigNGA.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderConfigNGA.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2004-2006 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: Inline implementation for TVtEngRenderConfigNGA. +* +*/ + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigNGA::TVtEngRenderConfigNGA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigNGA::TVtEngRenderConfigNGA() + { + Mem::FillZ( this, sizeof( TVtEngRenderConfigNGA ) ); + iType = ENgaRender; + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDP::TVtEngRenderConfigNGA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigNGA::TVtEngRenderConfigNGA( + const TVtEngRenderingOptionsNGA& aOptions ) + { + iType = ENgaRender; + iWsSession = &aOptions.iWs; + //iWsSreenDevice = &aOptions.iWsSD; + // iWindow = &aOptions.iWindow; + iObserver = aOptions.iObserver; + //iRect = aOptions.iRect; + //iClipRect = aOptions.iClipRect; + //iOffset = aOptions.iOffset; + iRemoteWindow = &aOptions.iWindow; + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderConfigDP::operator= +// +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderConfigNGA& TVtEngRenderConfigNGA::operator=( + const TVtEngRenderConfig& aConfig ) + { + iWsSession = aConfig.iWsSession; + // iWsSreenDevice = aConfig.iWsSreenDevice; + // iWindow = aConfig.iWindow; + iObserver = aConfig.iObserver; + // iRect = aConfig.iRect; + //iClipRect = aConfig.iClipRect; + // iOffset = aConfig.iOffset; + iType = aConfig.iType; + iRemoteWindow = aConfig.iRemoteWindow; + return *this; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRendering.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRendering.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGRENDERING_H +#define TVTENGRENDERING_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Configuration for representation of local or remote video +* via window server. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderingOptions ) + { + public: // constructor + + /** + * C++ constructor + */ + inline TVtEngRenderingOptions( + MVtEngFrameObserver& aObserver, + TSize aRect ); + + /** + * copy constructor + */ + inline TVtEngRenderingOptions( const TVtEngRenderingOptions& aOptions ); + + private: + TVtEngRenderingOptions& operator=( const TVtEngRenderingOptions& ); + + public: + // Frame observer + MVtEngFrameObserver* iObserver; + + // Bitmap size + TSize iSize; + }; + +#include + +#endif // TVTENGRENDERING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRendering.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRendering.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptions::TVtEngRenderingOptions +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptions::TVtEngRenderingOptions( + MVtEngFrameObserver& aObserver, + TSize aSize ) : + iObserver( &aObserver ), + iSize( aSize) + { + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptions::TVtEngRenderingOptions +// C++ copy constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptions::TVtEngRenderingOptions( + const TVtEngRenderingOptions& aOptions ) : + iObserver( aOptions.iObserver ), + iSize( aOptions.iSize ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingDP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingDP.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGRENDERINGDP_H +#define TVTENGRENDERINGDP_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Display posting access rendering definitions. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderingOptionsDP ) + { + public: // constructor + + /** + * C++ constructor + */ + inline TVtEngRenderingOptionsDP( + MVtEngFrameObserver& aObserver, + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + const TRect& aScreenRect, + const TRect& aClipRect, + const TPoint& aOffset ); + + /** + * C++ copy constructor. + * @param aOptions options to be copied to this instance. + */ + inline TVtEngRenderingOptionsDP( + const TVtEngRenderingOptionsDP& aOptions ); + + private: + TVtEngRenderingOptionsDP& operator=( + const TVtEngRenderingOptionsDP& ); + + public: // data members + RWsSession& iWs; + CWsScreenDevice& iWsSD; + RWindowBase& iWindow; + TRect iRect; + TRect iClipRect; + TPoint iOffset; + + // Frame observer + MVtEngFrameObserver* iObserver; + }; + +#include + +#endif // TVTENGRENDERINGDP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingDP.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingDP.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsDP::TVtEngRenderingOptionsDP +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsDP::TVtEngRenderingOptionsDP( + MVtEngFrameObserver& aObserver, + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + const TRect& aScreenRect, + const TRect& aClipRect, + const TPoint& aOffset ) : + iWs( aWs ), + iWsSD( aScreenDevice ), + iWindow( aWindow ), + iRect( aScreenRect ), + iClipRect( aClipRect ), + iOffset( aOffset ), + iObserver( &aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsDSA::TVtEngRenderingOptionsDP +// C++ copy constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsDP::TVtEngRenderingOptionsDP( + const TVtEngRenderingOptionsDP& aOptions ) + : iWs( aOptions.iWs ), + iWsSD( aOptions.iWsSD ), + iWindow( aOptions.iWindow ), + iRect( aOptions.iRect ), + iClipRect( aOptions.iClipRect ), + iOffset( aOptions.iOffset ), + iObserver( aOptions.iObserver ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + +#ifndef TVTENGRENDERINGDSA_H +#define TVTENGRENDERINGDSA_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; + +// CLASS DECLARATION + +/** +* Direct screen access rendering definitions. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderingOptionsDSA ) + { + public: // constructor + + /** + * C++ constructor + */ + inline TVtEngRenderingOptionsDSA( + MVtEngFrameObserver& aObserver, + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + const TRect& aScreenRect, + const TRect& aClipRect ); + + /** + * C++ copy constructor. + * @param aOptions options to be copied to this instance. + */ + inline TVtEngRenderingOptionsDSA( + const TVtEngRenderingOptionsDSA& aOptions ); + + private: + TVtEngRenderingOptionsDSA& operator=( + const TVtEngRenderingOptionsDSA& ); + + public: // data members + RWsSession& iWs; + CWsScreenDevice& iWsSD; + RWindowBase& iWindow; + TRect iRect; + TRect iClipRect; + + // Frame observer + MVtEngFrameObserver* iObserver; + }; + +#include + +#endif // TVTENGRENDERINGDSA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingDSA.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingDSA.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2006 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: Local and remote video rendering configuration. +* +*/ + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsDSA::TVtEngRenderingOptionsDSA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsDSA::TVtEngRenderingOptionsDSA( + MVtEngFrameObserver& aObserver, + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + const TRect& aScreenRect, + const TRect& aClipRect ) : + iWs( aWs ), + iWsSD( aScreenDevice ), + iWindow( aWindow ), + iRect( aScreenRect ), + iClipRect( aClipRect ), + iObserver( &aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsDSA::TVtEngRenderingOptionsDSA +// C++ copy constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsDSA::TVtEngRenderingOptionsDSA( + const TVtEngRenderingOptionsDSA& aOptions ) + : iWs( aOptions.iWs ), + iWsSD( aOptions.iWsSD ), + iWindow( aOptions.iWindow ), + iRect( aOptions.iRect ), + iClipRect( aOptions.iClipRect ), + iObserver( aOptions.iObserver ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingNGA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingNGA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2004-2006 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: Class for NGA Rendering. +* +*/ + +#ifndef TVTENGRENDERINGNGA_H +#define TVTENGRENDERINGNGA_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +class MVtEngFrameObserver; +class RWindow; +class RWsSession; +// CLASS DECLARATION + +/** +* Direct screen access rendering definitions. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( TVtEngRenderingOptionsNGA ) + { + public: // constructor + + /** + * C++ constructor + */ + inline TVtEngRenderingOptionsNGA( + MVtEngFrameObserver& aObserver, + RWindow& aWindow, RWsSession& aWs ); + + /** + * C++ copy constructor. + * @param aOptions options to be copied to this instance. + */ + inline TVtEngRenderingOptionsNGA( + const TVtEngRenderingOptionsNGA& aOptions ); + + private: + TVtEngRenderingOptionsNGA& operator=( + const TVtEngRenderingOptionsNGA& ); + + public: // data members + RWindow& iWindow; + + RWsSession& iWs; + + // Frame observer + MVtEngFrameObserver* iObserver; + }; + +#include + +#endif // TVTENGRENDERINGNGA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Media/TVtEngRenderingNGA.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Media/TVtEngRenderingNGA.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2004-2006 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: Inline implementation for TVtEngRenderingOptionsNGA +* +*/ + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsNGA::TVtEngRenderingOptionsNGA +// C++ constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsNGA::TVtEngRenderingOptionsNGA( + MVtEngFrameObserver& aObserver, + RWindow& aWindow, RWsSession& aWs) : + iWindow( aWindow ), + iWs( aWs ), + iObserver( &aObserver ) + { + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderingOptionsNGA::TVtEngRenderingOptionsNGA +// C++ copy constructor +// ----------------------------------------------------------------------------- +// +inline TVtEngRenderingOptionsNGA::TVtEngRenderingOptionsNGA( + const TVtEngRenderingOptionsNGA& aOptions ) + : iWindow( aOptions.iWindow ), + iWs( aOptions.iWs), + iObserver( aOptions.iObserver ) + { + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Session/CVtEngSessionHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Session/CVtEngSessionHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2006 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: Video session interface. +* +*/ + + + +#ifndef CVTENGSESSIONHANDLER_H +#define CVTENGSESSIONHANDLER_H + +// INCLUDES +#include +#include "MVtEngSessionInfo.h" +#include "MVtCtlEventObserver.h" +#include "MVtCtlCallControl.h" +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CVtEngStateManager; +class CVtCtlFactory; +class CVtEngOperation; +class CVtEngIncomingCallMonitor; +// CLASS DECLARATION + +/** +* Abstraction for video telephony session with remote end. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngSessionHandler ) : + public CActive, + public MVtEngSessionInfo, + public MVtCtlEventObserver + { + public: // constructor and destructors + + static CVtEngSessionHandler* NewL( ); + + virtual ~CVtEngSessionHandler(); + + public: // New functions + + /** + * Performs on operation in the handler. + * @param operation to be performed on the handler + */ + void HandleL( CVtEngOperation& aOperation ); + + public: // from MVtEngSessionInfo + + /** + * Gets session state. + * @return + */ + virtual TSessionState State( TBool aForcedRefresh ) const; + + /** + * Gets session direction. + * @return + */ + virtual TInt GetDirection( TDirection& aDirection ) const; + + /** + * Gets session duration. + * @param + * @param + */ + virtual TInt GetDuration( + TDuration& aDuration, + TBool& aEnabled ) const; + + /* + * @see MVtEngSessionInfo::aCLI + */ + virtual TInt GetCLI( TCLI& aCLI ) const; + + public: // From MVtCtlEventObserver + virtual void HandleVtSessionEventL( + TVtCtlEvent aEvent, + TAny* aParams ); + + public: // new functions + /** + * Initializes session handler. + */ + void InitializeL(); + + /** + * Frees resources used by session handler. + */ + void Uninitialize(); + + MVtCtlCallControl::TVtCtlState RealState() const; + + /** + * Starts Incoming call PS key monitoring + */ + void StartIncomingCallMonitorL(); + + private: // constructors + + void ConstructL(); + + CVtEngSessionHandler( ); + + private: // from CActive + void RunL(); + + void DoCancel(); + + private: // Member data + MVtCtlCallControl* iSessionControl; + CVtCtlFactory* iFactory; + + RLibrary iLib; + + CVtEngIncomingCallMonitor* iIncomingCallMonitor; + }; + + +#endif // CVTENGSESSIONHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Session/MVtEngDtmfHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Session/MVtEngDtmfHandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2004 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: DTMF handler interface for DTMF states and media +* handler to use. +* +*/ + + + +#ifndef MVTENGDTMFHANDLER_H +#define MVTENGDTMFHANDLER_H + +// INCLUDES +#include + +// DATA TYPES + +// FORWARD DECLARATIONS +class CVtEngOperation; +class TVtEngDtmfTone; +class MVTUserInput; +class CVtEngDtmfState; + +// CLASS DECLARATION + +/** +* Base class for data types +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngDtmfHandler + { + public: // + /** + * Dtmf states + */ + enum TVtEngDtmfState + { + // Not sending DTMF + EVtDtmfStateIdle = 0, + // Sending DTMF + EVtDtmfStateSending, + // Sending DTMF, another waiting in buffer + EVtDtmfStateBuffered + }; + + public: + + /** + * Handles a DTMF command. + * @param + */ + virtual void HandleL( CVtEngOperation& aOp ) = 0; + + /** + * Activates a DTMF state. + * @param aNewState state index + * @return activated state + */ + virtual CVtEngDtmfState& ActivateState( + MVtEngDtmfHandler::TVtEngDtmfState aNewState ) = 0; + + /** + * Handles completion of DTMF sending, non-leavable method. + * @param aError Symbian OS error code + */ + virtual void SendComplete( TInt aError ) = 0; + + /** + * Returns new instance used for sending DTMF tone to protocol + * @param aTone tone to send + * @return protocol DTMF tone. + */ + virtual MVTUserInput& ReserveProtoDtmfL( + const TVtEngDtmfTone& aTone ) = 0; + + /** + * Releses protocol DTMF instance. + */ + virtual void ReleaseProtoDtmf() = 0; + + /** + * Compares last issued DTMF command ID to given command ID. + * @param aCheckCommandId command ID to be compared against + * @return ETrue if IDs are same, otherwise EFalse + */ + virtual TBool CheckCommandId( TInt aCheckCommandId ) const = 0 ; + + /** + * Stores command ID, used in CheckCommandID. + * @param aStoreCommandId command ID to be stored. + */ + virtual void StoreCommandId( TInt aStoreCommandId ) = 0; + }; + +#endif MVTENGDTMFHANDLER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Session/MVtEngSessionInfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Session/MVtEngSessionInfo.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2006 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: Video session interface. +* +*/ + + + +#ifndef MVTENGSESSIONINFO_H +#define MVTENGSESSIONINFO_H + +// INCLUDES +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Abstraction for video telephony session with remote end. +* +* @lib videoteleng +* @since 2.6 +*/ +class MVtEngSessionInfo + { + public: // + + /** + * Session state + * EIdle Session not established. + * EInitializing Initializing MO session + * ERemoteAlerting Remote end is alerting + * EReceiving Incoming session request from network + * EConnected Connection to peer is established. + * ENegotiating Handshaking with peer. + * EOpen Session active and media channels are open. + * EClearing Clearing connection. + */ + enum TSessionState + { + EUnknown = -1, + EIdle, + EInitializing, + ERemoteAlerting, + EReceiving, + EConnected, + ENegotiating, + EOpen, + EClearing + }; + + typedef TTimeIntervalSeconds TDuration; + + /** + * Session direction + * EDirectionNone In idle there's no direction . + * EDirectionMO Mobile originated sesison + * EDirectionMT Mobile terminated session + */ + enum TDirection + { + EDirectionNone, + EDirectionMO, + EDirectionMT + }; + + enum { KCallNameLength = 50 }; + + typedef TBuf TCallName; + /** + * CLI data related to a call + */ + struct TCLI { + // call id of the call + TInt iCallId; + + // caller name + TCallName iName; + + // indicates if voice call can be made to peer + TBool iVoiceCallPossible; + }; + + /** + * Returns session state + * @aForcedRefresh if ETrue current state is forced to update. + * Should be EFalse when called in frequently because forced + * refresh is more time consuming (requires context switch) + * @return + */ + virtual TSessionState State( TBool aForcedRefresh ) const = 0; + + /** + * + * @return direction + */ + virtual TInt GetDirection( TDirection& aDirection ) const = 0; + + /** + * + * @param + * @param aEnabled + */ + virtual TInt GetDuration( + TDuration& aDuration, + TBool& aEnabled ) const = 0; + + + virtual TInt GetCLI( TCLI& aCLI ) const = 0; + }; + + +#endif // TVTENGSESSIONINFO_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Session/TVtEngDtmfTone.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Session/TVtEngDtmfTone.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2004 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: Local and remote video rendering configuration. +* +*/ + + + +#ifndef TVTENGDTMFTONE_H +#define TVTENGDTMFTONE_H + +// INCLUDES +#include "TVtEngType.h" + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Abstraction for DTMF tone +* +* @lib videoteleng +* @since 2.6 +*/ +class TVtEngDtmfTone : public TVtEngtType + { + public: // constructor + + /** + * C++ constructor + */ + TVtEngDtmfTone( const TChar& aTone ); + + public: + // Tone + TChar iTone; + }; +#include "TVtEngDtmfTone.inl" + +#endif // TVTENGDTMFTONE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/Session/TVtEngDtmfTone.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/Session/TVtEngDtmfTone.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 2004 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: Inline methods for TVtEngDtmfTone +* +*/ + + + +inline TVtEngDtmfTone::TVtEngDtmfTone( const TChar& aTone ) +: TVtEngtType( EVtEngTypeDtmf ) { iTone = aTone; } + +// End of File \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngDtmfState.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngDtmfState.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2006 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: DTMF state classes. +* +*/ + + + +#ifndef CVTENGDTMFSTATE_H +#define CVTENGDTMFSTATE_H + +// INCLUDES +#include +#include +#include "TVtEngDtmfTone.h" +#include "MVtEngDtmfHandler.h" + + + +// CLASS DECLARATION + +/** +* Base class for DTMF states. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngDtmfState ) : public CBase + { + public: + /** + * C++ constructor. + * @param aDtmfHandler + * @param aH324Config H324 configure interface + */ + CVtEngDtmfState( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + public: // new methods + + /** + * Sends a DTMF tone. Derived classes implement this + * and each vary in behavior. + * @param aTone tone to send + */ + virtual void SendDtmfL( const TVtEngDtmfTone& aTone ) = 0; + + /** + * Handles callback about DTMF sending. Releases pv2way dtmf instance. + * @param aError Symbian OS error code + */ + virtual void DtmfSendCompleteL( TInt aError ); + + protected: // new methods + /** + * Sends tone and changes state + * @param aDtmf tone to send + * @param aNewState new DTMF state + */ + void DoSendAndActivateStateL( + const TVtEngDtmfTone& aDtmf, + MVtEngDtmfHandler::TVtEngDtmfState aNewState ); + + protected: // member data + + // DTMF handler + MVtEngDtmfHandler& iDtmfHandler; + + // H324 configure interface + MVtH324ConfigCommand& iH324Config; + }; + +/** +* Idle DTMF state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngDtmfIdle ) : public CVtEngDtmfState + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aDtmfHandler + * @param aH324Config H324 configure interface + */ + static CVtEngDtmfState* NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + /** + * Destructor. + */ + virtual ~CVtEngDtmfIdle(); + + public: // From CVtEngStateBase + + /** + * Sends DTMF tone and changes state to "sending". + * @param aTone tone to send + */ + virtual void SendDtmfL( const TVtEngDtmfTone& aTone ); + + /** + * @see CVtEngDtmfState + */ + virtual void DtmfSendCompleteL( TInt aError ); + + private: // constructors + + /** + * C++ constructor. + * @param aDtmfHandler + * @param aH324Config H324 configure interface + */ + CVtEngDtmfIdle( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + }; + +/** +* Sending DTMF state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngDtmfSending ) : public CVtEngDtmfState + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aDtmfHandler + * @param aH324Config H324 configure interface + */ + static CVtEngDtmfState* NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + /** + * Destructor. + */ + virtual ~CVtEngDtmfSending(); + + public: // From CVtEngStateBase + + /** + * Changes state to "buffered". + * @param aTone tone to send + */ + virtual void SendDtmfL( const TVtEngDtmfTone& aTone ); + + /** + * @see CVtEngDtmfState + */ + virtual void DtmfSendCompleteL( TInt aError ); + + private: // constructor + + /** + * C++ constructor. + * @param aDtmfHandler + * @param aH324Config + */ + CVtEngDtmfSending( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + }; + +/** +* Buffered DTMF state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngDtmfBuffered ) : public CVtEngDtmfState + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aDtmfHandler + * @param aH324Config H324 configure interface + */ + static CVtEngDtmfState* NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + /** + * Destructor. + */ + virtual ~CVtEngDtmfBuffered(); + + public: // From CVtEngStateBase + + /** + * Buffers DTMF tone that is sent when previous + * tones in buffer are sent. + * @param aTone tone that is added to the buffer + */ + virtual void SendDtmfL( const TVtEngDtmfTone& aTone ); + + /** + * @see CVtEngDtmfState + */ + virtual void DtmfSendCompleteL( TInt aError ); + + private: // constructors + + /** + * C++ constructor. + * @param aDtmfHandler + * @param aH324Config + */ + CVtEngDtmfBuffered( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Member data + + // Buffered DTMF tones. + CArrayFixFlat* iTones; + }; + +#endif // CVTENGDTMFSTATE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateAlerting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateAlerting.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2006 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: Base class for states +* +*/ + + + +#ifndef CVTENGSTATEALERTING_H +#define CVTENGSTATEALERTING_H + +// INCLUDES +#include "CVtEngStateBase.h" +//#include + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Alerting state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateAlerting ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateAlerting( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateAlerting(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + virtual TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * + */ + virtual TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Handles state transition to alerting. + */ + void DoOpenL(); + + + + }; + +#endif // CVTENGSTATEALERTING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateBase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,190 @@ +/* +* Copyright (c) 2006 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: Base class for states +* +*/ + + + +#ifndef CVTENGSTATEBASE_H +#define CVTENGSTATEBASE_H + +// INCLUDES +#include +#include "vtengcommands.h" +#include "CVtEngStateManager.h" +#include "CVtEngEventManager.h" +#include "CVtEngMediaHandler.h" +#include "CVtEngSessionHandler.h" +#include "CVtEngOperation.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" + +// FORWARD DECLARATIONS +class CVtEngSessionHandler; +class CVtEngMediaHandler; +class CVtEngAudioHandler; + +// CLASS DECLARATION + +/** +* State base class + +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateBase ) : public CBase + { + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CVtEngStateBase(); + + public: // New functions + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL() = 0; + + /** + * Checks if a command is valid in current state. + * @param aCommandId command to be validated + * @return ETrue if command is valid. + */ + virtual TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * Handles an operation. Base class method is empty + * and derived classes may handle the operation if applicable. + * @param aOp operation to be handled + * @return ETrue if handled + */ + virtual TBool HandleL( CVtEngOperation& aOp ); + + /** + * Returns session handler. + * @return reference to session handler + */ + CVtEngSessionHandler& SessionHandler(); + + /** + * Returns media handler. + * @return reference to media handler + */ + CVtEngMediaHandler& MediaHandler(); + + /** + * Returns audio handler. + * @return reference to audio handler + */ + CVtEngAudioHandler& AudioHandler(); + + /** + * Creates new state if needed. + * @return new state or NULL + */ + CVtEngStateBase* NewStateL( + const MVtEngSessionInfo::TSessionState aState ); + + virtual MVtEngSessionInfo::TSessionState State() const = 0; + + public: // New functions + + /** + * Sets new current state. + * @param aOldState old state. + */ + void OpenL( CVtEngStateBase* aOldState ); + + /** + * For derived classes to handle state change + */ + virtual void DoOpenL( ) = 0; + + + /** + * State uninitialization. + */ + virtual void Close(); + + protected: // new functions + + /** + * Saves configuration to settings for later + * usage. + */ + void SaveToSettingsL( CVtEngOperation& aOp ); + + /** + * Notifies state change to event manager. + * @param aNewState new session state. + */ + void NotifyStateChange( MVtEngSessionInfo::TSessionState aNewState ); + + /** + * Saves video state to settings. Used e.g. when video can not be + * started in current state. + * @param aEnabled video is enabled + */ + void SetVideoEnabled( TBool aEnabled ); + + /** + * Goes to disconnecting or idle state if needed. + * @return state object if transition is required. + */ + //CVtEngStateBase* DisconnectingOrIdleStateL(); + + /** + * Creates negotiating state if bearer state is connected + * and pv state is ESetup, and UI has indicated state changte + * is permitted. + * @return negotiating state object or NULL + */ + CVtEngStateBase* NegotiatingOrConnectedStateL( + TBool aAcceptOnlyNegotiating = EFalse ); + + + /** + * Saves video state to settings. Used e.g. when video can not be + * started in current state. + * @param aEnabled video is enabled + */ + void TerminateSessionL( CVtEngOperation& aOp ); + + protected: + + /** + * C++ constructor. + */ + CVtEngStateBase( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + protected: // Data + // State manager + CVtEngStateManager& iStateManager; + + // Event manager + CVtEngEventManager& iEventManager; + + private: + }; + +#endif // CVTENGSTATEBASE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateClearing.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateClearing.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2006 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: Clearing state +* +*/ + + + +#ifndef CVTENGSTATECLEARING_H +#define CVTENGSTATECLEARING_H + +// INCLUDES + +#include "CVtEngStateBase.h" + +/** +* Clearing state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateClearing ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateClearing( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateClearing(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * @see CVtEngStateBase::HandleL + */ + TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Handles state transition to clearing. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATECLEARING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateConnected.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateConnected.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2006 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: Base class for states +* +*/ + + + +#ifndef CVTENGSTATECONNECTED_H +#define CVTENGSTATECONNECTED_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Clearing state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateConnected ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateConnected( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateConnected(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * @see CVtEngStateBase::HandleL + */ + TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Handles state transition to connected. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATECONNECTED_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateIdle.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateIdle.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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: Idle state +* +*/ + + + +#ifndef CVTENGSTATEIDLE_H +#define CVTENGSTATEIDLE_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Idle state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateIdle ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateIdle( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateIdle(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + private: + + /** + * Handles state transition to idle. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATEIDLE_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateInitializing.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateInitializing.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2006 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: Initializing state +* +*/ + + + +#ifndef CVTENGSTATEINITIALIZING_H +#define CVTENGSTATEINITIALIZING_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Initializing state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateInitializing ): public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateInitializing( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateInitializing(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * @see CVtEngStateBase::HandleL + */ + TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Handles state transition to initializing. + */ + void DoOpenL(); + }; + +#endif // CVTENGSTATEINITIALIZING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateManager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2006 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: State manager for session and audio routing states. +* +*/ + + + +#ifndef CVTENGSTATEMANAGER_H +#define CVTENGSTATEMANAGER_H + +// INCLUDES +#include +#include "vtengcommands.h" +#include "MVtEngSessionInfo.h" +// FORWARD DECLARATIONS +class CVtEngStateBase; +class CVtEngHandlerContainer; +class CVtEngEventManager; +class CVtEngOperation; + +// CLASS DECLARATION + +/** +* Owner of engine states. Delegates update request +* to active state when requested. Provides method +* to enquire command availability in current state. +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateManager ): public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtEngStateManager* NewL( + CVtEngHandlerContainer& aHandlers, + CVtEngEventManager& aEventManager ); + + /** + * Destructor. + */ + virtual ~CVtEngStateManager(); + + public: // New functions + + /** + * Requests updates for current state. + */ + void Update( ); + + /** + * Checks if a command is possible in current state + * @param aCommandId command to check + * @return ETrue if command can be performed + */ + TBool IsCommandPossible( + const TVtEngCommandId aCommandId ) const; + + /** + * Sets new session state. + * @param aNewState new session state + */ + void SetState( CVtEngStateBase& aNewState ); + + /** + * Passes an operation to current state for + * handling. + * @param aOp operation to be handled + * @return ETrue if operation handled + */ + TBool HandleOperationL( CVtEngOperation& aOp ); + + /** + * Previous session state. + */ + MVtEngSessionInfo::TSessionState PreviousSessionState() const; + + /** + * Current session state. + */ + MVtEngSessionInfo::TSessionState SessionState() const; + + /** + * Returns handler container. + * @return handler container + */ + inline CVtEngHandlerContainer& Handlers(); + + /** + * Returns event manager. + * @return event manager + */ + inline CVtEngEventManager& EventManager(); + + private: + + /** + * C++ constructor. + */ + CVtEngStateManager( + CVtEngHandlerContainer& aHandlers, + CVtEngEventManager& aEventManager ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + // Previous session state + MVtEngSessionInfo::TSessionState iPreviousSessionState; + + // Current session state + CVtEngStateBase* iSessionState; + + // Handler container + CVtEngHandlerContainer& iHandlers; + + // Event manager + CVtEngEventManager& iEventManager; + + }; + +#include "CVtEngStateManager.inl" + +#endif // CVTENGSTATEMANAGER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateManager.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateManager.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2006 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: State manager inline methods. +* +*/ + + +// MEMBER FUNCTIONS + + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::Handlers +// Return handler container. +// +// ----------------------------------------------------------------------------- +// +inline CVtEngHandlerContainer& CVtEngStateManager::Handlers() + { return iHandlers; } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::EventManager +// Return event manager. +// +// ----------------------------------------------------------------------------- +// +inline CVtEngEventManager& CVtEngStateManager::EventManager() + { return iEventManager; } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateNegotiating.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateNegotiating.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2006 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: Negotiating state +* +*/ + + + +#ifndef CVTENGSTATENEGOTIATING_H +#define CVTENGSTATENEGOTIATING_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Negotiatimg state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateNegotiating ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateNegotiating( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateNegotiating(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * @see CVtEngStateBase + */ + virtual TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Handles state transition to negotiating. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATENEGOTIATING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateOpen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateOpen.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2006 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: Open state +* +*/ + + + +#ifndef CVTENGSTATEOPEN_H +#define CVTENGSTATEOPEN_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Open state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateOpen ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateOpen( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateOpen(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + /** + * @see CVtEngStateBase::HandleL + */ + TBool HandleL( CVtEngOperation& aOp ); + + private: + + /** + * Changes audio routing + * @param aOp audio routing or null if value should + * be read from settings + */ + void RouteAudioL( + CVtEngOperation* aOp ); + + /** + * Uses extension framework to complete + * from operation. + * @since S60 v3.2 + * @param aOp audio routing or null + */ + void CallExtensionL( CVtEngOperation* aOp ); + + private: + + /** + * Handles state transition to open. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATEOPEN_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Inc/State/CVtEngStateRinging.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Inc/State/CVtEngStateRinging.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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: Ringing state +* +*/ + + + +#ifndef CVTENGSTATERINGING_H +#define CVTENGSTATERINGING_H + +// INCLUDES +#include "CVtEngStateBase.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CVtEngStateManager; + +// CLASS DECLARATION + +/** +* Ringing state class +* +* @lib videoteleng +* @since 2.6 +*/ +NONSHARABLE_CLASS( CVtEngStateRinging ) : public CVtEngStateBase + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtEngStateRinging( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ); + + + /** + * Destructor. + */ + virtual ~CVtEngStateRinging(); + + public: // From CVtEngStateBase + + /** + * Updates state. May result to state transition + */ + virtual void UpdateL(); + + /** + * Validates a command. + */ + TBool ValidateCommand( + const TVtEngCommandId aCommandId ); + + /** + * @see CVtEngStateBase + */ + virtual MVtEngSessionInfo::TSessionState State() const; + + private: + + /** + * Handles state transition to ringing. + */ + void DoOpenL(); + + }; + +#endif // CVTENGSTATERINGING_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Bmarm/VTLOGGERU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Bmarm/VTLOGGERU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,8 @@ +EXPORTS + Initialize__9CVtLogger @ 1 NONAME R3UNUSED ; CVtLogger::Initialize(void) + Print__9CVtLoggeriG7TPtrC16 @ 2 NONAME ; CVtLogger::Print(int, TPtrC16) + Print__9CVtLoggeriG7TPtrC16i @ 3 NONAME ; CVtLogger::Print(int, TPtrC16, int) + Print__9CVtLoggeriG7TPtrC16ii @ 4 NONAME ; CVtLogger::Print(int, TPtrC16, int, int) + Uninitialize__9CVtLogger @ 5 NONAME R3UNUSED ; CVtLogger::Uninitialize(void) + Flags__9CVtLogger @ 6 NONAME R3UNUSED ; CVtLogger::Flags(void) + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Bwins/VTLOGGERU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Bwins/VTLOGGERU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,9 @@ +EXPORTS + ?Initialize@CVtLogger@@SAXXZ @ 1 NONAME ; public: static void __cdecl CVtLogger::Initialize(void) + ?Print@CVtLogger@@SAXHVTPtrC16@@@Z @ 2 NONAME ; public: static void __cdecl CVtLogger::Print(int,class TPtrC16) + ?Print@CVtLogger@@SAXHVTPtrC16@@H@Z @ 3 NONAME ; public: static void __cdecl CVtLogger::Print(int,class TPtrC16,int) + ?Print@CVtLogger@@SAXHVTPtrC16@@HH@Z @ 4 NONAME ; public: static void __cdecl CVtLogger::Print(int,class TPtrC16,int,int) + ?Uninitialize@CVtLogger@@SAXXZ @ 5 NONAME ; public: static void __cdecl CVtLogger::Uninitialize(void) + ?Flags@CVtLogger@@SAHXZ @ 6 NONAME ; public: static int __cdecl CVtLogger::Flags(void) + ?Print@CVtLogger@@SAXHHVTPtrC16@@H@Z @ 7 NONAME ; void CVtLogger::Print(int, int, class TPtrC16, int) + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/EABI/vtloggerU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/EABI/vtloggerU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,11 @@ +EXPORTS + _ZN9CVtLogger10InitializeEv @ 1 NONAME + _ZN9CVtLogger12UninitializeEv @ 2 NONAME + _ZN9CVtLogger5FlagsEv @ 3 NONAME + _ZN9CVtLogger5PrintEi7TPtrC16 @ 4 NONAME + _ZN9CVtLogger5PrintEi7TPtrC16i @ 5 NONAME + _ZN9CVtLogger5PrintEi7TPtrC16ii @ 6 NONAME + _ZTI9CVtLogger @ 7 NONAME ; ## + _ZTV9CVtLogger @ 8 NONAME ; ## + _ZN9CVtLogger5PrintEii7TPtrC16i @ 9 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2004 - 2006 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: Video Telephony logger build information file. +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/cvtlogger.h |../../../inc/cvtlogger.h +../inc/VtLogger.hrh |../../../inc/VtLogger.hrh + +PRJ_MMPFILES +../Group/vtlogger.mmp + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Group/vtlogger.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Group/vtlogger.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2004 - 2006 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 is project specification file video telephony logger. +* +*/ + +#include + +// default vendor id +VENDORID VID_DEFAULT + +// Capability assignment. +CAPABILITY CAP_GENERAL_DLL + +TARGET vtlogger.dll +TARGETTYPE dll +UID 0x1000008d 0x101F8699 + +SOURCEPATH ../Src + +SOURCE CVtLogger.cpp + +DOCUMENT ../Group/bld.inf + +USERINCLUDE ../Inc + +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY flogger.lib + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Inc/cvtlogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Inc/cvtlogger.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,378 @@ +/* +* Copyright (c) 2004 - 2005 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: Video telephony engine debugging support. +* +*/ + + + +#ifndef CVTLOGGER_H +#define CVTLOGGER_H + +// INCLUDES +#include +#include +#include +#include "vtlogger.hrh" + +// CONSTANTS +const TInt KVtDebugBufferSize = 100; +const TInt KVtDebugReturnValNotApplicable = -1; + +// MACROS + +#define DEBUG_CONSTRUCT CVtLogger::ELogConstruction +#define DEBUG_DESTRUCT CVtLogger::ELogDestruction +#define DEBUG_MEDIA CVtLogger::ELogMedia +#define DEBUG_AUDIO CVtLogger::ELogAudio +#define DEBUG_SESSION CVtLogger::ELogSession +#define DEBUG_DETAIL CVtLogger::ELogDetails +#define DEBUG_ALL CVtLogger::ELogLogEverything +#define DEBUG_GEN CVtLogger::ELogGeneric +#define DEBUG_RETURN CVtLogger::ELogReturn + +#define DEBUG_FLAG1 CVtLogger::ELogApp1 +#define DEBUG_FLAG2 CVtLogger::ELogApp2 +#define DEBUG_FLAG3 CVtLogger::ELogApp3 +#define DEBUG_FLAG4 CVtLogger::ELogApp4 + +#if defined(VTDEBUG) && defined(__CS_VIDEO_TELEPHONY) +/** +* Write a text buffer to log. +*/ +#define __VTPRINT(level,x) CVtLogger::Print(level, _L(x)); + +/** +* Write a text buffer and integer value to log. +*/ +#define __VTPRINT2(level,x,y) CVtLogger::Print(level, _L(x), y); + +/** +* Write a text buffer and two integer values to log. +*/ +#define __VTPRINT3(level,x,y,z) CVtLogger::Print(level, _L(x), y, z); + +#define __VTPRINTENTER(x) CVtLogger::Print( CVtLogger::ELogGeneric, ETrue, _L(x)); + +#define __VTPRINTEXIT(x) CVtLogger::Print( CVtLogger::ELogGeneric, EFalse, _L(x) ); + +#define __VTPRINTEXITR(x,y) CVtLogger::Print( CVtLogger::ELogGeneric, EFalse, _L(x), y ); + +/** +* Initialize VT logging, must be called before any __VTPRINT's are called. +*/ +#define VTLOGINIT CVtLogger::Initialize(); + +/** +* Uninitializes VT logging, must be called client using logging is deleted. +*/ +#define VTLOGUNINIT CVtLogger::Uninitialize(); + +/** +* Returns logging and configuration flags +*/ +#define VTFLAGS CVtLogger::Flags(); + +/** +* check if baseband loopback is enabled +*/ +#define DEBUG_CFG_BB_LOOPBACK ( CVtLogger::Flags() & CVtLogger::ECfgBBLoopbackEnabled ) + +/** +* check if PV engine loopback is enabled +*/ +#define DEBUG_CFG_PV_LOOPBACK ( CVtLogger::Flags() & CVtLogger::ECfgPVLoopbackEnabled ) + +/** +* Disables passing of audio source to PV +*/ +#define DEBUG_CFG_NO_AUDIO_SOURCE ( CVtLogger::Flags() & CVtLogger::ECfgNoAudioSource ) + +/** +* Disables passing of audio source to PV +*/ +#define DEBUG_CFG_NO_AUDIO_SINK ( CVtLogger::Flags() & CVtLogger::ECfgNoAudioSink ) + +/** +* Disables passing of video sink to PV +*/ +#define DEBUG_CFG_NO_VIDEO_SINK ( CVtLogger::Flags() & CVtLogger::ECfgNoVideoSink ) + +/** +* Disables passing of video source to PV +*/ +#define DEBUG_CFG_NO_VIDEO_SOURCE ( CVtLogger::Flags() & CVtLogger::ECfgNoVideoSource ) + +#else + +/** +* Disables VT Debug mode if __CS_VIDEO_TELEPHONY is undefined +*/ +#undef VTDEBUG + +#define __VTPRINT(level,x) +#define __VTPRINT2(level,x,y) +#define __VTPRINT3(level,x,y,z) +#define __VTPRINTENTER(x) +#define __VTPRINTEXIT(x) +#define __VTPRINTEXITR(x,y) +#define VTLOGINIT +#define VTLOGUNINIT +#define VTFLAGS 0 +#define DEBUG_CFG_BB_LOOPBACK 0 +#define DEBUG_CFG_PV_LOOPBACK 0 +#define DEBUG_CFG_NO_AUDIO_SINK 0 +#define DEBUG_CFG_NO_AUDIO_SOURCE 0 +#define DEBUG_CFG_NO_VIDEO_SINK 0 +#define DEBUG_CFG_NO_VIDEO_SOURCE 0 + +#endif // VTDEBUG + +// FORWARD DECLARATIONS + + +// CLASS DECLARATION + +/** +* Debbuging support. +* To enable logging (either with RDebug or RFileLogger) follow steps below: +* 1. Create folder c:\Logs\VT +* 2. Create file VTLOGCONF.txt +* 3. Open the file and define logging level by hexadecimal digit, +* see TLogLevel in class declaration below. Example: 2007 means that +* constructors (0x1), destructors (0x2 ) in media subsystem (0x4) are +* logged to file (0x2000), i.e. the values are bitwise or'ed. Log file +* name is ".txt" where is name of the thread +* where logging takes places. +* +* @lib videoteleng +* @since 2.6 +*/ +class CVtLogger : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtLogger* NewL(); + + /** + * Destructor. + */ + virtual ~CVtLogger(); + + public: // New functions + + /** + * Writes to log file or RDebug. + * @param aDes text output + */ + virtual void Print( TDesC& aDes ); + + /** + * Log level defining logging behavior. + */ + enum TLogLevel { + // Constructors are logged + ELogConstruction = 0x00000001, + // Destructors are logged + ELogDestruction = 0x00000002, + // Media subsystem methods are logged + ELogMedia = 0x00000004, + // Session subsystem methods are logged + ELogSession = 0x00000008, + // Audio subsystem methods are logged + ELogAudio = 0x00000010, + // Details in methods are logged + ELogDetails = 0x00000020, + // Generic framework methods are logged + ELogGeneric = 0x00000040, + // Log return from function + ELogReturn = 0x00000080, + // Everything is logged, as if all above were set. + ELogLogEverything = 0x0000007F, + // Insert time at the beginning of each log entry + // For file logging time is always written because + // it is automatically done by RFileLogger. + ELogTime = 0x00001000, + // Log to file instead of using RDebug + ELogToFile = 0x00002000, + // Application specific flag 1 + ELogApp1 = 0x00004000, + // Application specific flag 2 + ELogApp2 = 0x00008000, + // Application specific flag 3 + ELogApp3 = 0x00010000, + // Application specific flag 4 + ELogApp4 = 0x00020000, + + // Configuration flags + + /** Loopback configuration (set only + * one of the following flags + */ + // Baseband loopback enabled + ECfgBBLoopbackEnabled = 0x00100000, + // PV Engine loopback enabled + ECfgPVLoopbackEnabled = 0x00200000, + + // Disable passing of audio source + ECfgNoAudioSink = 0x00400000, + + // Disable passing of audio sink + ECfgNoAudioSource = 0x00800000, + + // Disable passing of video source + ECfgNoVideoSource = 0x01000000, + + // Disable passing of video sink + ECfgNoVideoSink = 0x02000000 + }; + + /** + * Writes buffer to log. + * @param aLevel combination of TLogLevel values + * @param aBuffer buffer to log + */ + IMPORT_C static void Print( + TInt aLevel, + TPtrC aBuffer ); + + /** + * Writes buffer to log. + * @param aLevel combination of TLogLevel values + * @param aBuffer buffer to log + * @param aValue value appended to buffer + */ + IMPORT_C static void Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue ); + + /** + * Writes buffer to log. + * @param aLevel combination of TLogLevel values + * @param aBuffer buffer to log + * @param aValue1 first value appended to buffer + * @param aValue2 second value appended to buffer + */ + IMPORT_C static void Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue1, + TInt aValue2 ); + + /** + * Writes buffer to log. This overloaded method is used + * for printing entry or exit from a function. + * @since Series60 2.8 + * @param aLevel combination of TLogLevel values + * @param aEntry if ETrue "<" is appended to end of string + * if EFalse ">" is appended to end of string + * @param aBuffer buffer to log + * @param aRetVal return value of the function. If this value + * is present (i.e. other than KVtDebugReturnValNotApplicable + * is passed) then aBuffer should include format tag '%d' where + * aRetValue should be placed. + */ + IMPORT_C static void Print( + TInt aLevel, + const TBool aEntry, + TPtrC aBuffer, + TInt aRetVal = KVtDebugReturnValNotApplicable ); + + /** + * Initializes logging. This must be called before + * any use of __VTPRINT macros. + */ + IMPORT_C static void Initialize(); + + /** + * Uninitializes logging. This must be called when + * client of logging service is deleted. + */ + IMPORT_C static void Uninitialize(); + + /** + * Returns flags in configuration file + * @return flags + */ + IMPORT_C static TInt Flags(); + + private: + + /** + * Returns logger. + * @return logger + */ + static CVtLogger* Logger(); + + /** + * Returns if certain log levels are set. + * @param aLevels bitmap of TLogLevel values + * @return ETrue if all aLevels are set. + */ + TBool CheckLevels( TInt aLevels ) const; + + /** + * Reads configuration file and starts + * monitoring changes on it. + */ + void ReadCongigFile(); + + private: // from CActive + + /** + * Handles file change notification + */ + void RunL(); + + /** + * Cancels monitoring file change + */ + void DoCancel(); + + private: + + /** + * C++ default constructor. + */ + CVtLogger(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( ); + + private: // Data + + // Buffer size for printed lines + enum + { + ETempBufLength = 80 + }; + + TFileName iFileName; + RFs iFs; + TInt iLogLevel; + TInt iAccessCount; + TBuf iBuffer; + TBuf iTempBuf; + }; + + +#endif // CVTLOGGER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Inc/vtlogger.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Inc/vtlogger.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2004 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: Defines when logger is enabled. +* +*/ + + +#ifndef VTLOGGER_HRH +#define VTLOGGER_HRH + +// DATA TYPES +// MACROS + +#if defined(_DEBUG) +/** +* Debugging enabled always in debug builds +*/ +#define VTDEBUG + +#endif + +#endif // VTLOGGER_HRH + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Src/CVtLogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Src/CVtLogger.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,371 @@ +/* +* Copyright (c) 2004 - 2005 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: Video telephony logger +* +*/ + + +#pragma CTC SKIP +// INCLUDE FILES +#include "cvtlogger.h" + + +// LOCAL CONSTANTS +_LIT( KVtEngLogConfig, "c:\\Logs\\VT\\VTLOGCONF.txt" ); +_LIT( KVtEngLogFolder, "c:\\Logs\\VT" ); +_LIT( KVtEngLogFolderLogger, "VT" ); +_LIT( KVtEngLogPrefix, "VT: " ); +_LIT( KVtEngLogExtension, ".txt" ); +_LIT( KVtLoggerEnterFunc, "<" ); +_LIT( KVtLoggerExitFunc, ">" ); + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtLogger::CVtLogger +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtLogger::CVtLogger() : CActive( CActive::EPriorityStandard - 1 ), + iLogLevel( ELogLogEverything ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtLogger::ConstructL( ) + { + User::LeaveIfError( iFs.Connect() ); + TFindFile find( iFs ); + TUint logLevel( 0 ); + TInt ret = iFs.Att(KVtEngLogFolder, logLevel ); + if ( ret == KErrNone ) + { + if ( find.FindByPath( KVtEngLogConfig, NULL ) == KErrNone ) + { + CActiveScheduler::Add( this ); + ReadCongigFile(); + } + if ( iLogLevel & ELogToFile ) + { + RThread thread; + iFileName.Copy( thread.Name() ); + iFileName.Append( KVtEngLogExtension ); + } + } + Dll::SetTls( this ); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtLogger* CVtLogger::NewL( ) + { + CVtLogger* self = new( ELeave ) CVtLogger; + + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::~CVtLogger +// Destructor +// ----------------------------------------------------------------------------- +// +CVtLogger::~CVtLogger() + { + Cancel(); + iFs.Close(); + Dll::SetTls( NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +void CVtLogger::Print( TDesC& aDes ) + { + if ( iLogLevel & ELogTime && !(iLogLevel & ELogToFile) ) + { + TTime time; + time.HomeTime(); + const TDateTime dt= time.DateTime(); + + iTempBuf.Zero(); + iTempBuf.AppendNum( dt.Minute() ); + iTempBuf.Append(':'); + iTempBuf.AppendNum( dt.Second() ); + iTempBuf.Append(':'); + iTempBuf.AppendNum( dt.MicroSecond() ); + iTempBuf.Append(' '); + + const TInt currentLength( iTempBuf.Length() ); + + iTempBuf.Append( aDes.Left( Min( iTempBuf.MaxLength() - currentLength, aDes.Length() ) ) ); + RDebug::Print( iTempBuf ); + } + else + { + if ( iLogLevel & ELogToFile ) + { + RFileLogger::Write( + KVtEngLogFolderLogger, + iFileName, + EFileLoggingModeAppend, + aDes ); + } + else + { + RDebug::Print( aDes ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Copy( KVtEngLogPrefix ); + logger->iBuffer.Append( aBuffer); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Zero(); + logger->iBuffer.AppendNum( aValue ); + logger->iBuffer.Format( aBuffer, aValue ); + logger->iBuffer.Insert( 0, KVtEngLogPrefix ); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + TPtrC aBuffer, + TInt aValue1, + TInt aValue2 ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Format( aBuffer, aValue1, aValue2 ); + logger->iBuffer.Insert( 0, KVtEngLogPrefix ); + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Writes to log. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt aLevel, + const TBool aEntry, + TPtrC aBuffer, + TInt aRetVal ) + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger && logger->CheckLevels( aLevel ) ) + { + logger->iBuffer.Copy( KVtEngLogPrefix ); + if ( aEntry ) + { + logger->iBuffer.Append( aBuffer ); + logger->iBuffer.Append( KVtLoggerEnterFunc ); + } + else + { + if ( aRetVal != KVtDebugReturnValNotApplicable ) + { + logger->iTempBuf.Format( aBuffer, aRetVal ); + logger->iBuffer.Append( logger->iTempBuf ); + } + else + { + logger->iBuffer.Append( aBuffer ); + } + logger->iBuffer.Append( KVtLoggerExitFunc ); + } + logger->Print( logger->iBuffer ); + } + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Logger +// Returns logger. +// ----------------------------------------------------------------------------- +// +CVtLogger* CVtLogger::Logger() + { + TAny* tls = Dll::Tls(); + if ( tls ) + { + return reinterpret_cast( tls ); + } + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Initialize +// Initialize logger. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Initialize() + { + CVtLogger* logger = NULL; + if ( Dll::Tls() == NULL ) + { + TRAPD( err, logger = CVtLogger::NewL() ); + if ( err == KErrNone ) + { + Dll::SetTls( logger ); + } + } + else + { + logger = CVtLogger::Logger(); + } + if ( logger ) + { + (logger->iAccessCount)++; + } + + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Uninitialize +// Uninitialize logger. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Uninitialize() + { + TAny* tls = Dll::Tls(); + if ( tls ) + { + CVtLogger* logger = CVtLogger::Logger(); + TInt count( --(logger->iAccessCount) ); + if ( !count ) + { + delete reinterpret_cast( tls ); + Dll::SetTls( NULL ); + } + } + + } + +void CVtLogger::ReadCongigFile() + { +#ifdef _DEBUG + RDebug::Print(_L(" VT: ReadConfigFile" ) ); +#endif + RFile config; + if ( config.Open( iFs, KVtEngLogConfig, EFileShareAny ) == KErrNone ) + { + TBuf8<16> buf; + if ( config.Read( buf ) == KErrNone ) + { + TLex8 lex( buf ); + TUint logLevel( 0 ); + if ( lex.Val( logLevel, EHex ) == KErrNone ) + { + iLogLevel = logLevel; + } + } + config.Close(); + } + iFs.NotifyChange( ENotifyEntry, iStatus, KVtEngLogConfig() ); + SetActive(); + } + +void CVtLogger::RunL() + { + if ( iStatus == KErrNone ) + { + ReadCongigFile(); + } + } + +void CVtLogger::DoCancel() + { + iFs.NotifyChangeCancel(); + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Flags +// Returns flags. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CVtLogger::Flags() + { + CVtLogger* logger = CVtLogger::Logger(); + if ( logger ) + { + return logger->iLogLevel; + } + return KErrGeneral; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::CheckLevels +// Check debug level. +// ----------------------------------------------------------------------------- +// +TBool CVtLogger::CheckLevels( TInt aLevels ) const + { + if ( aLevels & iLogLevel ) + { + return ETrue; + } + return EFalse; + } +#pragma CTC ENDSKIP +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Logger/Src/CVtLoggerStub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Logger/Src/CVtLoggerStub.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,126 @@ +/* +* Copyright (c) 2004 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: Video telephony logger stub +* +*/ + + + +// INCLUDE FILES +#include "CVtLogger.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtLogger::CVtLogger +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtLogger::CVtLogger() + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtLogger::ConstructL( ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtLogger* CVtLogger::NewL( ) + { + return NULL; + } + +// Destructor +CVtLogger::~CVtLogger() + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Prints to log. +// +// ----------------------------------------------------------------------------- +// +void CVtLogger::Print( TDesC& ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Prints to log. +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt , + TDesC& ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Prints to log. +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt , + TDesC& , + TInt ) + { + } + +// ----------------------------------------------------------------------------- +// CVtLogger::Print +// Prints to log. +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVtLogger::Print( + TInt , + TDesC& , + TInt , + TInt ) + { + } + +CVtLogger* CVtLogger::Logger() + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtLogger::CheckLevels +// Check debug level. +// +// ----------------------------------------------------------------------------- +// +TBool CVtLogger::CheckLevels( TInt aLevels ) const + { + return EFalse; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Rom/videoteleng.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Rom/videoteleng.iby Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2004-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: IBY file + * +*/ + + +#ifndef __VIDEOTELENG_IBY__ +#define __VIDEOTELENG_IBY__ + +REM Video telephony engine libraries + +#ifdef __CS_VIDEO_TELEPHONY +file=ABI_DIR\BUILD_DIR\videotelproto.dll SHARED_LIB_DIR\videotelproto.dll +file=ABI_DIR\BUILD_DIR\Videoteleng.dll SHARED_LIB_DIR\Videoteleng.dll +file=ABI_DIR\BUILD_DIR\cscallctrl.dll SHARED_LIB_DIR\cscallctrl.dll +file=ABI_DIR\BUILD_DIR\vtlogger.dll SHARED_LIB_DIR\vtlogger.dll + +// Enabler for eclipsing ROM binaries +data=ZSYSTEM\install\videoteleng_stub.sis system\install\videoteleng_stub.sis + +#endif + +#endif diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Audio/CVtEngAudioHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Audio/CVtEngAudioHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,709 @@ +/* +* Copyright (c) 2004-2006 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: Audio handler implementation. +* +*/ + + +// INCLUDE FILES +#include "CVtEngAudioHandler.h" +#include "CVtEngSettings.h" +#include "CVtEngEventManager.h" +#include "VtEngUtils.h" +#include +#include +#include +#include +#include "VtEngUtils.h" +#include "CVtEngStateManager.h" +#include "MVtEngSessionInfo.h" +#include "CVtEngHandlerContainer.h" + +// CONSTANTS + +// For DevSound initialization +const TInt KVtEngUidControlHwDevice = 0x10206593; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::CVtEngAudioHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngAudioHandler::CVtEngAudioHandler() + { + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.c++" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::ConstructL() + { + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.ConstructL" ) + + iAccHandler = &CVtEngUtility::AccessoryHandler(); + iAccHandler->RegisterObserverL( this ); + iTelephonyAudioRouting = CTelephonyAudioRouting::NewL( *this ); + iCurrentAudioOutput = iTelephonyAudioRouting->Output(); + + // Fetch the mode. + User::LeaveIfError( iAccHandler->AccessoryMode( iAccMode ) ); + __VTPRINT2( DEBUG_AUDIO, "AH.iAccMode %d", ( TInt )iAccMode.iAccessoryMode ) + + UpdateCurrentVolume(); + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.ConstructL<") + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngAudioHandler* CVtEngAudioHandler::NewL() + { + CVtEngAudioHandler* self = new( ELeave ) CVtEngAudioHandler; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::~CVtEngAudioHandler +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngAudioHandler::~CVtEngAudioHandler() + { + __VTPRINT( DEBUG_AUDIO, "AH.~<" ) + delete iRoutingEnabler; + + delete iTelephonyAudioRouting; + if ( iAccHandler ) + { + iAccHandler->RemoveObserver( this ); + } + __VTPRINT( DEBUG_AUDIO, "AH.~>" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::HandleL +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::HandleL( CVtEngOperation& aOperation ) + { + __VTPRINT2( DEBUG_AUDIO, "AH.HandleL op=%d", ( TInt )iOperation ) + if ( iOperation ) + { + // While operation is ongoing, another call should not be made. + User::Leave( KErrArgument ); + } + + MVtEngAudio::TVtEngRoutingSetting routeSetting; + TVtEngOpParamUtil::Set( + routeSetting, aOperation ); + + switch( routeSetting ) + { + case EActivateHandsfree: + SetLoudspeakerL( ETrue, ETrue ); + break; + + case EDeactivateHansfree: + SetLoudspeakerL( EFalse, ETrue ); + break; + + case EActivateBT: + SetBluetoothL( ETrue ); // asynchronous + break; + + case EDeactivateBT: + SetBluetoothL( EFalse ); + break; + } + + iOperation = &aOperation; + __VTPRINT( DEBUG_AUDIO | DEBUG_RETURN, "AH.HandleL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::SetRoutingEnablerL +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::SetRoutingEnablerL( const TBool aEnable ) + { + __VTPRINTENTER( "AHRout.SetRoutingEnablerL" ) + + if ( aEnable && !iRoutingEnabler ) + { + // Before connected state audio routing can be changed by the user + // only in MO calls. Create temporary devsound only if call is such. + const CVtEngHandlerContainer& handlers = + CVtEngUtility::StateManager()->Handlers(); + const MVtEngSessionInfo& session = handlers.Session(); + MVtEngSessionInfo::TDirection direction = + MVtEngSessionInfo::EDirectionNone; // init to MO, if + const TInt err( session.GetDirection( direction ) ); + if ( err == KErrNone && direction == MVtEngSessionInfo::EDirectionMO ) + { + iRoutingEnabler = CRoutingEnabler::NewL(); + } + } + else if ( !aEnable ) + { + delete iRoutingEnabler; + iRoutingEnabler = NULL; + } + __VTPRINTEXIT( "AHRout.ReleaseRoutingEnablerL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::IncreaseVolume +// ----------------------------------------------------------------------------- +// +TBool CVtEngAudioHandler::IncreaseVolume() + { + __VTPRINTENTER( "AH.IncreaseVolume" ) + TBool adjustOk( AdjustVolume( 1 ) ); + if ( !adjustOk ) + { + // only reason for AdjustVolume to fail is that volume is max already + CVtEngEventManager::NotifyEvent( KVtEngAudioVolumeMax ); + } + __VTPRINTEXITR( "AH.IncreaseVolume %d", adjustOk ) + return adjustOk; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::DecreaseVolume +// ----------------------------------------------------------------------------- +// +TBool CVtEngAudioHandler::DecreaseVolume() + { + __VTPRINTENTER( "AH.DecreaseVolume" ) + TBool adjustOk( AdjustVolume( -1 ) ); + if ( !adjustOk ) + { + // only reason for AdjustVolume to fail is that volume is min already + CVtEngEventManager::NotifyEvent( KVtEngAudioVolumeMin ); + } + __VTPRINTEXITR( "AH.DecreaseVolume %d", adjustOk ) + return adjustOk; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::AdjustVolume +// ----------------------------------------------------------------------------- +// +TBool CVtEngAudioHandler::AdjustVolume( const TInt aDelta ) + { + __VTPRINTENTER( "AH.AdjustVolume" ) + __VTPRINT2( DEBUG_AUDIO, "AH.AdjustVolume aDelta = %d", aDelta ) + TBool result( EFalse ); + CVtEngSettings& settings( CVtEngUtility::Settings() ); + TVtEngOutputVolume volume; + settings.GetVolume( volume.iHandsetVolume, EFalse, EFalse ); + settings.GetVolume( volume.iHandsfreeVolume, ETrue, EFalse ); + TAudioRoutingState routingState; + GetRoutingState( routingState ); + TInt& value( ( routingState == EAudioLoudspeaker ) ? + volume.iHandsfreeVolume : volume.iHandsetVolume ); + value += aDelta; + TInt validValue( settings.ValidVolume( value ) ); + if ( validValue == value ) + { + settings.SetVolume( + volume.iHandsetVolume, + volume.iHandsfreeVolume, + ETrue ); + settings.SetVolume( + volume.iHandsetVolume, + volume.iHandsfreeVolume, + EFalse ); + result = ETrue; + } + __VTPRINTEXITR( "AH.AdjustVolume %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::GetRoutingState +// ----------------------------------------------------------------------------- +// +TInt CVtEngAudioHandler::GetRoutingState( + TAudioRoutingState& aAudioRoutingState ) + { + switch ( iCurrentAudioOutput ) + { + // Wired headset has the highest priority. + case CTelephonyAudioRouting::EWiredAudioAccessory: + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.GRS.wired" ) + aAudioRoutingState = EAudioWiredHeadset; + break; + + // Then bluetooth handsfree. + case CTelephonyAudioRouting::EBTAudioAccessory: + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.GRS.bt" ) + aAudioRoutingState = EAudioBT; + break; + + // Loudspeaker. + case CTelephonyAudioRouting::ELoudspeaker: + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.GRS.IHF" ) + aAudioRoutingState = EAudioLoudspeaker; + break; + + // Handset as fallback. + default: + __VTPRINT( DEBUG_CONSTRUCT | DEBUG_AUDIO, "AH.GRS.Handset" ) + aAudioRoutingState = EAudioHandset; + break; + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::GetRoutingAvailability +// ----------------------------------------------------------------------------- +// +TInt CVtEngAudioHandler::GetRoutingAvailability( + const TAudioRoutingState aAudioRoutingState, + TBool& aAvailable ) + { + TAudioRoutingState currentRouting; + GetRoutingState( currentRouting ); // always succeeds + + if ( currentRouting == aAudioRoutingState ) + { + // It is possible to route to itself, although it does not make + // much sense. + aAvailable = ETrue; + } + else if ( currentRouting == EAudioWiredHeadset ) + { + // For wired headset, audio routings are not possible. + aAvailable = EFalse; + } + else + { + switch ( aAudioRoutingState ) + { + case EAudioHandset: + case EAudioLoudspeaker: + // Handset & loudspeaker are always available. + aAvailable = ETrue; + break; + + case EAudioBT: + aAvailable = IsOutputAvailable( CTelephonyAudioRouting::EBTAudioAccessory ); + break; + + case EAudioWiredHeadset: + // Wired headset can not be routed to. When headset is + // attached, routing happens automatically. + aAvailable = EFalse; + break; + } + } + + __VTPRINT3( DEBUG_AUDIO, "AH.GRA state %d availability=%d", + aAudioRoutingState, aAvailable ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::GetHeadsetType +// ----------------------------------------------------------------------------- +// +TInt CVtEngAudioHandler::GetHeadsetType( + TWiredHeadsetType& aHeadsetType ) + { + switch ( iAccMode.iAccessoryMode ) + { + case EAccModeWiredHeadset: + case EAccModeWiredCarKit: + case EAccModeMusicStand: + aHeadsetType = EWiredHeadset; + break; + + case EAccModeLoopset: + aHeadsetType = EWiredLoopset; + break; + + case EAccModeTextDevice: + aHeadsetType = EWiredTty; + break; + + case EAccModeHandPortable: + case EAccModeWirelessHeadset: + case EAccModeWirelessCarKit: + default: + // Not wired headset. + aHeadsetType = EWiredNone; + break; + } + + __VTPRINT2( DEBUG_AUDIO, "AH.HeadsetType=%d", aHeadsetType ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::OutputVolume +// ----------------------------------------------------------------------------- +// +TInt CVtEngAudioHandler::OutputVolume( + const TBool aHandsetVolume ) const + { + __VTPRINT2( DEBUG_AUDIO, "AH.OutputVolume isHandset=%d", aHandsetVolume ) + TInt vol = 0; + CVtEngSettings& setting = CVtEngUtility::Settings(); + TInt err( setting.GetVolume( vol, !aHandsetVolume, EFalse ) ); + if ( err != KErrNone ) + { + vol = err; + } + __VTPRINT2( DEBUG_AUDIO, "AH.OutputVolume vol=%d",vol ) + return vol; + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::SetLoudspeakerL +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::SetLoudspeakerL( TBool aTurnOn, TBool /*aShowNote*/ ) + { + __VTPRINTENTER( "AH.SetLoudspeakerL" ) + __VTPRINT2( DEBUG_AUDIO, "AH.SetLoudspeakerL %d", aTurnOn ) + TBool available( EFalse ); + GetRoutingAvailability( EAudioLoudspeaker, available ); + if ( !available ) + { + User::Leave( KErrNotSupported ); + } + // Set shownote flag up in telephony audiorouting, before calling SetOutputL. + User::LeaveIfError( iTelephonyAudioRouting->SetShowNote( ETrue ) ); + + if( aTurnOn ) + { + iTelephonyAudioRouting->SetOutputL( CTelephonyAudioRouting::ELoudspeaker ); + } + else + { + iTelephonyAudioRouting->SetOutputL( CTelephonyAudioRouting::EHandset ); + } + __VTPRINTEXIT( "AH.SetLoudspeakerL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::SetBluetoothL +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::SetBluetoothL( TBool aTurnOn ) + { + __VTPRINTENTER( "AH.SetBluetoothL" ) + TBool available( EFalse ); + GetRoutingAvailability( EAudioBT, available ); + if ( !available ) + { + User::Leave( KErrNotSupported ); + } + // Set shownote flag up in telephony audiorouting, before calling SetOutputL. + User::LeaveIfError( iTelephonyAudioRouting->SetShowNote( ETrue ) ); + + if( aTurnOn ) + { + iTelephonyAudioRouting->SetOutputL( CTelephonyAudioRouting::EBTAudioAccessory ); + } + else + { + iTelephonyAudioRouting->SetOutputL( CTelephonyAudioRouting::EHandset ); + } + __VTPRINTEXIT( "AH.SetBluetoothL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::AvailableOutputsChanged +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::AvailableOutputsChanged( + CTelephonyAudioRouting& /*aTelephonyAudioRouting*/ ) + { + __VTPRINTENTER( "AH.AvailableOutputsChanged" ) + CVtEngEventManager::NotifyEvent( KVtEngAudioRoutingAvailabilityChanged ); + __VTPRINTEXIT( "AH.AvailableOutputsChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::OutputChanged +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::OutputChanged( + CTelephonyAudioRouting& aTelephonyAudioRouting ) + { + __VTPRINTENTER( "AH.OutputChanged" ) + CTelephonyAudioRouting::TAudioOutput + previousAudioOutput( iCurrentAudioOutput ); + iCurrentAudioOutput = aTelephonyAudioRouting.Output(); + CVtEngEventManager::NotifyEvent( KVtEngAudioRoutingChanged ); + // HandSet -> IHF + if( ( previousAudioOutput == CTelephonyAudioRouting::EHandset ) && + ( iCurrentAudioOutput == CTelephonyAudioRouting::ELoudspeaker ) ) + { + __VTPRINT( DEBUG_AUDIO, "AH.OutputChanged signalling HandSet to IHF" ) + } + // IHF -> HandSet + else if( ( previousAudioOutput == CTelephonyAudioRouting::ELoudspeaker ) && + ( iCurrentAudioOutput == CTelephonyAudioRouting::EHandset ) ) + { + __VTPRINT( DEBUG_AUDIO, "AH.OutputChanged signalling IHF to HandSet" ) + } + UpdateCurrentVolume(); + __VTPRINTEXITR( "AH.OutputChanged %d", iCurrentAudioOutput ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::SetOutputComplete +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::SetOutputComplete( + CTelephonyAudioRouting& aTelephonyAudioRouting, + TInt aError ) + { + __VTPRINTENTER( "AH.SetOutputComplete" ) + if ( aError == KErrNone ) + { + OutputChanged( aTelephonyAudioRouting ); + } + CompleteOperation( aError ); + __VTPRINTEXIT( "AH.SetOutputComplete" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::CompleteOperation +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::CompleteOperation( TInt aResult ) + { + __VTPRINT3( DEBUG_AUDIO, "AH.CompleteOperation op=%d,res=%d" , + ( TInt )iOperation, aResult ) + if ( iOperation ) + { + iOperation->HandleOpComplete( aResult ); + iOperation = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::UpdateCurrentVolume +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::UpdateCurrentVolume() + { + __VTPRINTENTER( "AH.UpdateCurrentVolume" ) + TAudioRoutingState currentRouting = EAudioHandset; + GetRoutingState( currentRouting ); + + const TBool currentVolume = ( currentRouting == EAudioLoudspeaker ); + CVtEngSettings& setting = CVtEngUtility::Settings(); + setting.SetCurrentVolume( currentVolume ); + + __VTPRINTEXITR( "AH.UpdateCurrentVolume output is IHF=%d", currentVolume ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::AccessoryModeChanged +// ----------------------------------------------------------------------------- +// +void CVtEngAudioHandler::AccessoryModeChanged( + const TAccMode& aMode, const TBool /* aActivated */ ) + { + iAccMode.iAccessoryMode = aMode; + } + + +// ----------------------------------------------------------------------------- +// CVtEngAudioHandler::IsOutputAvailable +// ----------------------------------------------------------------------------- +// +TBool CVtEngAudioHandler::IsOutputAvailable( + const CTelephonyAudioRouting::TAudioOutput aOutput ) + { + const TArray< CTelephonyAudioRouting::TAudioOutput > outputs = + iTelephonyAudioRouting->AvailableOutputs(); + + for ( TInt i = 0; i < outputs.Count(); i++ ) + { + if ( outputs[ i ] == aOutput ) + { + return ETrue; + } + } + return EFalse; + } +// ----------------------------------------------------------------------------- +// CRoutingEnabler::NewL +// ----------------------------------------------------------------------------- +// +CRoutingEnabler* CRoutingEnabler::NewL() + { + CRoutingEnabler* enabler = + new ( ELeave ) CRoutingEnabler(); + CleanupStack::PushL( enabler ); + enabler->StartL(); + CleanupStack::Pop( enabler ); + return enabler; + } + +// Destructor +CRoutingEnabler::~CRoutingEnabler() + { + if ( iDevSound ) + { + // If initialization ahs been successfull, Devsound Play has started + // and need to be stopped. + if( !iDevsoundInitializeFailure ) + { + __VTPRINT( DEBUG_MEDIA, "AHRout.~ Stopping audio" ) + iDevSound->Stop(); + } + delete iDevSound; + iDevSound = NULL; + } + } + +// c++ constructor +CRoutingEnabler::CRoutingEnabler() + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::StartL +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::StartL() + { + __VTPRINTENTER( "AHRout.StartL" ) + iDevSound = CMMFDevSound::NewL(); + + iDevSound->InitializeL( + *( this ), + EMMFStatePlaying ); + __VTPRINTEXIT( "AHRout.StartL" ) + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::InitializeComplete +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::InitializeComplete( TInt aError ) + { + __VTPRINTENTER( "AHRout.InitializeComplete" ) + if ( aError == KErrNone ) + { + TMMFPrioritySettings prioritySettings; + prioritySettings.iPriority = KAudioPriorityCSCallDownlink; + prioritySettings.iPref = + ( TMdaPriorityPreference ) KAudioPrefCSCallDownlink; + prioritySettings.iState = EMMFStatePlaying; + if ( iDevSound ) + { + iDevSound->SetPrioritySettings( prioritySettings ); + + TRAPD( err, iDevSound->PlayInitL() ); + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_AUDIO, "AHRout.InitializeComplete PlayInitL err=%d", err ) + + // Devsound PlayInitL leave error happened. + iDevsoundInitializeFailure = ETrue; + } + } + } + else + { + __VTPRINT2( DEBUG_AUDIO, "AHRout.InitializeComplete err=%d", aError ) + + // Devsound initialization failed + iDevsoundInitializeFailure = ETrue; + } + __VTPRINTEXIT( "AHRout.InitializeComplete" ) + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::ToneFinished +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::ToneFinished( TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::BufferToBeFilled +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::BufferToBeFilled( + CMMFBuffer* /*aBuffer*/) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::PlayError +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::PlayError( TInt /*aError*/) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::BufferToBeEmptied +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::BufferToBeEmptied( + CMMFBuffer* /*aBuffer*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::RecordError +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::RecordError( + TInt /*aError*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::ConvertError +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::ConvertError( TInt /*aError*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CRoutingEnabler::DeviceMessage +// ----------------------------------------------------------------------------- +// +void CRoutingEnabler::DeviceMessage( + TUid /*aMessageType*/, const TDesC8& /*aMsg*/ ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngAccessoryHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngAccessoryHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 2004-2005 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: Accessory listener. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngAccessoryHandler.h" +#include "MVtEngAccessoryObserver.h" +#include + +// CONSTANTS +const TInt KVtEngAccObserverGranularity = 1; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::CVtEngAccessoryHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngAccessoryHandler::CVtEngAccessoryHandler() : + CActive( CActive::EPriorityStandard ), + iAccessoryObservers( KVtEngAccObserverGranularity ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::ConstructL() + { + User::LeaveIfError( iAccessoryServer.Connect() ); + User::LeaveIfError( iAccessoryMode.CreateSubSession( iAccessoryServer ) ); + StartListening(); + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngAccessoryHandler* CVtEngAccessoryHandler::NewL( ) + { + __VTPRINTENTER( "AccHdr.NewL" ) + CVtEngAccessoryHandler* self = new( ELeave ) CVtEngAccessoryHandler; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "AccHdr.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::~CVtEngAccessoryHandler +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngAccessoryHandler::~CVtEngAccessoryHandler() + { + __VTPRINTENTER( "AccHdr.~" ) + Cancel(); + RemoveAllObservers(); + iAccessoryMode.CloseSubSession(); + iAccessoryServer.Disconnect(); + __VTPRINTEXIT( "AccHdr.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::RemoveObserver +// Removes an accessory listener. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::RemoveObserver( + MVtEngAccessoryObserver* aObserver ) + { + __VTPRINTENTER( "AccHdr.RemoveObserver" ) + TInt pos = iAccessoryObservers.Find( aObserver ); + if ( pos != KErrNotFound ) + { + iAccessoryObservers.Remove( pos ); + } + __VTPRINTEXIT( "AccHdr.RemoveObserver" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::RegisterObserverL +// New accessory listener. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler:: + RegisterObserverL( MVtEngAccessoryObserver* aObserver ) + { + __VTPRINTENTER( "AccHdr.RegisterObserverL" ) + TInt pos = iAccessoryObservers.Find( aObserver ); + if ( pos == KErrNotFound ) + { + User::LeaveIfError( iAccessoryObservers.Append( aObserver ) ); + } + __VTPRINTEXIT( "AccHdr.RegisterObserverL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::RemoveAllObservers +// All observers off they go +// +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::RemoveAllObservers() + { + iAccessoryObservers.ResetAndDestroy(); + iAccessoryObservers.Close(); + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::StartListening +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::StartListening() + { + iAccessoryMode.NotifyAccessoryModeChanged( iStatus, iMode ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::RunL +// From CActive. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::RunL() + { + __VTPRINTENTER( "AccHdr.RunL" ) + StartListening(); + NotifyObserversL(); + __VTPRINTEXIT( "AccHdr.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::DoCancel +// From CActive. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::DoCancel() + { + __VTPRINTENTER( "AccHdr.DoCancel" ) + iAccessoryMode.CancelNotifyAccessoryModeChanged(); + __VTPRINTEXIT( "AccHdr.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::RunError +// From CActive. +// ----------------------------------------------------------------------------- +// +TInt CVtEngAccessoryHandler::RunError( TInt /*aError*/ ) + { + __VTPRINTENTER( "AccHdr.RunError" ) + __VTPRINTEXIT( "AccHdr.RunError" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::NotifyObserversL. +// ----------------------------------------------------------------------------- +// +void CVtEngAccessoryHandler::NotifyObserversL() + { + const TInt obsCount( iAccessoryObservers.Count() ); + for ( TInt i = 0; i < obsCount; i++ ) + { + MVtEngAccessoryObserver* obs = iAccessoryObservers[ i ]; + if ( obs ) + { + obs->AccessoryModeChanged( + iMode.iAccessoryMode, iMode.iAudioOutputStatus ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtEngAccessoryHandler::CMonitor::AccessoryMode +// ----------------------------------------------------------------------------- +// +TInt CVtEngAccessoryHandler:: + AccessoryMode( TAccPolAccessoryMode& aAccessoryMode) const + { + return iAccessoryMode.GetAccessoryMode( aAccessoryMode ); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngCRObserverItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngCRObserverItem.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,242 @@ +/* +* Copyright (c) 2004-2006 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: Video call CR listener. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngCRObserverItem.h" +#include +#include "MVtEngCRSettingObserver.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::CVtEngCRObserverItem +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngCRObserverItem::CVtEngCRObserverItem( + MVtEngCRSettingObserver* aObserver, + TUid aUid, TUint32 aKey, + CCenRepNotifyHandler::TCenRepKeyType aType ) : + iObserver( aObserver ), iUid( aUid ), iKey( aKey ), iType( aType ), + iNotifier( NULL ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngCRObserverItem* CVtEngCRObserverItem::NewL( + MVtEngCRSettingObserver* aObserver, + TUid aUid, TUint32 aKey, + CCenRepNotifyHandler::TCenRepKeyType aType ) + { + __VTPRINTENTER( "CRListener.NewL" ) + CVtEngCRObserverItem* self = + new( ELeave ) CVtEngCRObserverItem( aObserver, aUid, aKey, aType ); + __VTPRINTEXIT( "CRListener.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::~CVtEngCRObserverItem +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngCRObserverItem::~CVtEngCRObserverItem() + { + __VTPRINTENTER( "CRListener.~" ) + if ( iNotifier ) + { + iNotifier->StopListening(); + } + delete iNotifier; + __VTPRINTEXIT( "CRListener.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Offer +// Checks if uid and id match this observer's. +// ----------------------------------------------------------------------------- +// +TBool CVtEngCRObserverItem::Offer( const TUid aUid, const TUint32 aKey ) const + { + return aUid == iUid && iKey == aKey ? ETrue : EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Offer +// Checks if uid matches this observer's. +// ----------------------------------------------------------------------------- +// +TBool CVtEngCRObserverItem::Offer( const TUid aUid ) const + { + return aUid == iUid ? ETrue : EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Offer +// Checks if id matches this observer's. +// ----------------------------------------------------------------------------- +// +TBool CVtEngCRObserverItem::Offer( const TUint32 aKey ) const + { + return iKey == aKey ? ETrue : EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::SetCenRepNotifier +// Sets the actual change handler to this object. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::SetCenRepNotifier( CCenRepNotifyHandler* aNotifier ) + { + iNotifier = aNotifier; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyInt +// Callback of changed int value. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::HandleNotifyInt( TUint32 aId, TInt aNewValue ) + { + __VTPRINTENTER( "CRListener.Int" ) + iObserver->HandleNotifyInt( iUid, aId, aNewValue ); + __VTPRINTEXIT( "CRListener.Int" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyReal +// Callback of changed real value. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::HandleNotifyReal( TUint32 aId, TReal aNewValue ) + { + __VTPRINTENTER( "CRListener.Real" ) + iObserver->HandleNotifyReal( iUid, aId, aNewValue ); + __VTPRINTEXIT( "CRListener.Real" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyString +// Callback of changed string value. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::HandleNotifyString( TUint32 aId, + const TDesC16& aNewValue ) + { + __VTPRINTENTER( "CRListener.String" ) + iObserver->HandleNotifyString( iUid, aId, aNewValue ); + __VTPRINTEXIT( "CRListener.String" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyBinary +// Callback of changed binary value. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::HandleNotifyBinary( TUint32 /* aId */, + const TDesC8& /* aNewValue */ ) + { + __VTPRINTENTER( "CRListener.Binary" ) + __VTPRINTEXIT( "CRListener.Binary" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyGeneric +// Callback of a change in central repository. +// ----------------------------------------------------------------------------- +// +void CVtEngCRObserverItem::HandleNotifyGeneric( TUint32 /* aId */ ) + { + __VTPRINTENTER( "CRListener.Generic" ) + __VTPRINTEXIT( "CRListener.Generic" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::HandleNotifyError +// Callback of an error occurred. +// ----------------------------------------------------------------------------- +// +#ifdef VTDEBUG +void CVtEngCRObserverItem::HandleNotifyError( TUint32 aId, TInt aError, + CCenRepNotifyHandler* /* aHandler */ ) +#else +void CVtEngCRObserverItem::HandleNotifyError( + TUint32 /* aId */, TInt /* aError */, CCenRepNotifyHandler* /* aHandler */ ) +#endif // VTDEBUG + { + __VTPRINT3( DEBUG_GEN, "CRListener.error id=%d,err=%d ", aId, aError ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Uid +// Returns Uid for this observer. +// ----------------------------------------------------------------------------- +// +TUid CVtEngCRObserverItem::Uid() const + { + return iUid; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Key +// Returns Key for this observer. +// ----------------------------------------------------------------------------- +// +TUint32 CVtEngCRObserverItem::Key() const + { + return iKey; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Notifier +// Returns Notifier for this observer. +// ----------------------------------------------------------------------------- +// +CCenRepNotifyHandler* CVtEngCRObserverItem::Notifier() const + { + return iNotifier; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Type +// Returns Type for this observer. +// ----------------------------------------------------------------------------- +// +CCenRepNotifyHandler::TCenRepKeyType CVtEngCRObserverItem::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRObserverItem::Observer +// Returns true observer for this observer. +// ----------------------------------------------------------------------------- +// +MVtEngCRSettingObserver* CVtEngCRObserverItem::Observer() const + { + return iObserver; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngCRProxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngCRProxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,441 @@ +/* +* Copyright (c) 2004-2006 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: Central repository proxy. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngCRObserverItem.h" +#include "CVtEngCRProxy.h" +#include "MVtEngCRSettingObserver.h" +#include + +// CONSTANTS + +const TInt KVtEngCRProxyObsGranularity = 5; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::CVtEngCRProxy +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy::CVtEngCRProxy() : iObserverItems( KVtEngCRProxyObsGranularity ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy* CVtEngCRProxy::NewL( ) + { + __VTPRINTENTER( "CRProxy.NewL" ) + CVtEngCRProxy* self = new( ELeave ) CVtEngCRProxy; + __VTPRINTEXIT( "CRProxy.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::~CVtEngCRProxy +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy::~CVtEngCRProxy() + { + __VTPRINTENTER( "CRProxy.~" ) + RemoveAllObservers(); + RemoveSessions(); + __VTPRINTEXIT( "CRProxy.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::FindItem +// Finds observer item. +// ----------------------------------------------------------------------------- +// +CVtEngCRObserverItem* CVtEngCRProxy::FindItem( + const TUid& aUid, + const TUint32 aKey, + TInt& aIndex ) const + { + TInt count( iObserverItems.Count() ); + CVtEngCRObserverItem* item = NULL; + TBool found( EFalse ); + while ( count-- && !found ) + { + item = iObserverItems[ count ]; + if ( item->Offer( aUid, aKey ) ) + { + aIndex = count; + found = ETrue; + } + } + + // Just NULL the item if not found + if ( !found ) + { + item = NULL; + } + return item; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::FindItem +// Finds observer item. +// ----------------------------------------------------------------------------- +// +CVtEngCRObserverItem* CVtEngCRProxy::FindItem( + const TUint32 aKey, TInt& aIndex ) const + { + TInt count( iObserverItems.Count() ); + CVtEngCRObserverItem* item = NULL; + if ( aIndex < 0 ) + { + return NULL; + } + + for ( ; aIndex < count; aIndex++ ) + { + item = iObserverItems[ aIndex ]; + if ( item->Offer( aKey ) ) + { + break; + } + } + return item; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::RemoveInterested +// Removes a cent rep listener. +// ----------------------------------------------------------------------------- +// +void CVtEngCRProxy::RemoveInterested( CVtEngCRObserverItem& aObserver ) + { + __VTPRINTENTER( "CRProxy.RemoveInterested" ) + TInt index ( 0 ); + CVtEngCRObserverItem* item = FindItem( aObserver.Uid(), + aObserver.Key(), index ); + if ( !item ) + { + // Should not be possible. + __VTPRINTEXITR( "CRProxy.RemoveInterested %d", 0 ) + return; + } + + delete item; + iObserverItems.Remove( index ); + __VTPRINTEXITR( "CRProxy.RemoveInterested %d", 1 ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::NewCRSessionL +// New Central repository-uid pairing. +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy::CCRSession* CVtEngCRProxy::NewCRSessionL( TUid aUid ) + { + __VTPRINTENTER( "CRProxy.NewCRSessionL" ) + CRepository* crSession = CRepository::NewL( aUid ); + CleanupStack::PushL( crSession ); + CCRSession* csSession = new ( ELeave ) CCRSession; + csSession->iSession = crSession; + csSession->iUid = aUid; + CleanupStack::Pop( crSession ); + __VTPRINTEXIT( "CRProxy.NewCRSessionL" ) + return csSession; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::RegisterInterested +// New Central repository listener. +// ----------------------------------------------------------------------------- +// +void CVtEngCRProxy::RegisterInterestedL( CVtEngCRObserverItem* aObserver ) + { + __VTPRINTENTER( "CRProxy.RegisterInterestedL" ) + CRepository* crSession = MapUidToCR( aObserver->Uid() ); + CCRSession* csSession = NULL; + if( !crSession ) + { + csSession = NewCRSessionL( aObserver->Uid() ); + CleanupStack::PushL( csSession ); + crSession = csSession->iSession; + iCRSessions.AppendL( csSession ); + CleanupStack::Pop( csSession ); + } + + CCenRepNotifyHandler* notifier = + CCenRepNotifyHandler::NewL( *aObserver, *crSession, + aObserver->Type(), aObserver->Key() ); + //notifier ownership transfered + aObserver->SetCenRepNotifier( notifier ); + notifier->StartListeningL(); + iObserverItems.AppendL ( aObserver ); + __VTPRINTEXIT( "CRProxy.RegisterInterestedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::MapUidToCR +// Maps a given UID to a Central repository session. +// ----------------------------------------------------------------------------- +// +CRepository* CVtEngCRProxy::MapUidToCR( const TUid aUid ) + { + __VTPRINTENTER( "CRProxy.Map" ) + CCRSession* csSession = NULL; + TBool found( EFalse ); + TInt count( iCRSessions.Count() ); + for ( TInt i = 0 ; i < count; i++ ) + { + csSession = iCRSessions[ i ]; + if ( csSession->iUid == aUid ) + { + i = count; // break loop + found = ETrue; + } + } + CRepository* session = NULL; + // Only return something when found. + if ( found ) + { + session = csSession->iSession; + } + __VTPRINTEXITR( "CRProxy.Map %d", (TInt) session ) + return session; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::RemoveAllObservers +// All observers off they go. +// ----------------------------------------------------------------------------- +// +void CVtEngCRProxy::RemoveAllObservers() + { + __VTPRINTENTER( "CRProxy.RemoveAll" ) + iObserverItems.ResetAndDestroy(); + iObserverItems.Close(); + __VTPRINTEXIT( "CRProxy.RemoveAll" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::RemoveSessions +// Removes all Central repository sessions. +// ----------------------------------------------------------------------------- +// +void CVtEngCRProxy::RemoveSessions() + { + __VTPRINTENTER( "CRProxy.RemoveAllS" ) + iCRSessions.ResetAndDestroy(); + iCRSessions.Close(); + __VTPRINTEXIT( "CRProxy.RemoveAllS" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::GetSession +// Gets an existing or a new Central repository session for a UID. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::GetSessionL( const TUid aUid, CRepository*& crSession ) + { + TInt err( KErrNone ); + crSession = MapUidToCR( aUid ); + if ( !crSession ) + { + CCRSession* session = NULL; + session = NewCRSessionL( aUid ); + if ( session ) + { + CleanupStack::PushL( session ); + iCRSessions.AppendL( session ); + CleanupStack::Pop( session ); + crSession = session->iSession; + } + else + { + err = KErrNotFound; + } + } + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Get +// Gets integer value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Get( const TUid aUid, const TUint32 aId, TInt& aVal ) + { + __VTPRINTENTER( "CRProxy.GetInt" ) + __VTPRINT3( DEBUG_GEN, "UID=%d,key=%d", aUid.iUid, (TInt) aId ); + + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Get( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.GetInt %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Get +// Gets real value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Get( const TUid aUid, const TUint32 aId, TReal& aVal ) + { + __VTPRINTENTER( "CRProxy.GetReal" ) + __VTPRINT3( DEBUG_GEN, "UID=%d,key=%d", aUid.iUid, (TInt) aId ); + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Get( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.GetR %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Get +// Gets binary value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Get( const TUid aUid, const TUint32 aId, TDes8& aVal ) + { + __VTPRINTENTER( "CRProxy.GetD8" ) + __VTPRINT3( DEBUG_GEN, "UID=%d,key=%d", aUid.iUid, (TInt) aId ); + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Get( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.GetD8 %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Get +// Gets string value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Get( const TUid aUid, const TUint32 aId, TDes16& aVal ) + { + __VTPRINTENTER( "CRProxy.GetD16" ) + __VTPRINT3( DEBUG_GEN, "UID=%d,key=%d", aUid.iUid, (TInt) aId ); + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Get( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.GetD16 %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Set +// Sets integer value to Central Repository. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Set( const TUid aUid, const TUint32 aId, TInt aVal ) + { + __VTPRINTENTER( "CRProxy.SetInt" ) + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Set( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.SetInt %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Set +// Sets real value to Central Repository. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Set( const TUid aUid, const TUint32 aId, const TReal& aVal ) + { + __VTPRINTENTER( "CRProxy.SetR" ) + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Set( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.SetR %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Set +// Sets binary value to Central Repository. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Set( const TUid aUid, const TUint32 aId, const TDesC8& aVal ) + { + __VTPRINTENTER( "CRProxy.SetD8" ) + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Set( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.SetD8 %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::Set +// Sets string value to Central Repository. +// ----------------------------------------------------------------------------- +// +TInt CVtEngCRProxy::Set( + const TUid aUid, const TUint32 aId, const TDesC16& aVal ) + { + __VTPRINTENTER( "CRProxy.SetD16" ) + CRepository* crSession = NULL; + TRAPD( err, GetSessionL( aUid, crSession ) ); + if ( err == KErrNone ) + { + err = crSession->Set( aId, aVal ); + } + __VTPRINTEXITR( "CRProxy.SetD16 %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCRProxy::CCRSession::~CCRSession +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy::CCRSession::~CCRSession() + { + __VTPRINTENTER( "CRProxy.~" ) + delete iSession; + __VTPRINTEXIT( "CRProxy.~" ) + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngDeviceLockMonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngDeviceLockMonitor.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2006 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: Monitors device lock state +* +*/ + + + +// INCLUDE FILES +#include "CVtEngDeviceLockMonitor.h" +#include "CVTEngPubSubsListener.h" +#include "CVtEngEventManager.h" +#include "cvtlogger.h" + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngDeviceLockMonitor::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngDeviceLockMonitor* CVtEngDeviceLockMonitor::NewL() + { + CVtEngDeviceLockMonitor* self = new ( ELeave ) CVtEngDeviceLockMonitor(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CVtEngDeviceLockMonitor::~CVtEngDeviceLockMonitor() + { + delete iAutolockListener; + } + +// ----------------------------------------------------------------------------- +// CVtEngDeviceLockMonitor::NotifyState +// Notifies UI about device lock state +// ----------------------------------------------------------------------------- +// +void CVtEngDeviceLockMonitor::NotifyState() const + { + __VTPRINTENTER( "LockMonitor.NotifyState" ) + + TInt state = EAutolockStatusUninitialized; + + // Get autolock state + TInt err = iAutolockListener->Get( state ); + + __VTPRINT2( DEBUG_GEN, "LockMonitor Get err: %d", err ); + __VTPRINT2( DEBUG_GEN, "LockMonitor state: %d", state ); + + if( err == KErrNone ) + { + const TInt event = + ( state <= EAutolockOff ) ? + KVtEngDeviceLockOff : KVtEngDeviceLockOn; + CVtEngEventManager::NotifyEvent( event ); + } + + __VTPRINTEXIT( "LockMonitor.NotifyState" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDeviceLockMonitor::HandleNotifyPSL +// Callback for autolock state change +// ----------------------------------------------------------------------------- +// +void CVtEngDeviceLockMonitor::HandleNotifyPSL( + const TUid aUid, + const TInt& aKey, + const TRequestStatus& aStatus ) + { + if ( aStatus == KErrNone && + aUid == KPSUidCoreApplicationUIs && + aKey == KCoreAppUIsAutolockStatus ) + { + NotifyState(); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngDeviceLockMonitor::CVtEngDeviceLockMonitor +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngDeviceLockMonitor::CVtEngDeviceLockMonitor() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDeviceLockMonitor::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngDeviceLockMonitor::ConstructL() + { + __VTPRINTENTER( "LockMonitor.ConstructL" ) + // Listener for autolock state + iAutolockListener = CVtEngPubSubsListener::NewL( + KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, this ); + __VTPRINTEXIT( "LockMonitor.ConstructL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngEventManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngEventManager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2006 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: Event manager implementation. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngEventManager.h" +#include "MVtEngEventObserver.h" +#include "VtEngUtils.h" +#include "VtEngEvents.h" +#include "VtEngPanic.h" +#include + +// CONSTANTS +const TInt KMaxEventsInQueue = 8; + +// max amount of simultanous event observers +const TInt KMaxVtEventObservers = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::CVtEngEventManager +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngEventManager::CVtEngEventManager() : CActive( CActive::EPriorityHigh ), + iObservers( KMaxVtEventObservers ) + { + CActiveScheduler::Add( this ); + } + + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngEventManager* CVtEngEventManager::NewL( + MVtEngEventObserver& aEventObserver ) + { + CVtEngEventManager* self = + new ( ELeave ) CVtEngEventManager(); + CleanupStack::PushL( self ); + self->ConstructL( aEventObserver ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::ConstructL +// 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::ConstructL( MVtEngEventObserver& aEventObserver ) + { + iEventQueue = new ( ELeave ) CArrayFixFlat< TInt >( KMaxEventsInQueue ); + iEventQueue->SetReserveL( KMaxEventsInQueue ); + iObservers.Append( &aEventObserver ); + } + +// Destructor +CVtEngEventManager::~CVtEngEventManager() + { + Cancel(); + delete iEventQueue; + iObservers.Close(); + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::SessionStateChangedL +// Notifies session state change to UI. +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::SessionStateChanged() + { + __VTPRINTENTER( "EventManager.SessionStateChanged" ) + NotifyEvent( KVtEngSessionStateChanged ); + __VTPRINTEXIT( "EventManager.SessionStateChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::NotifyEvent +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::NotifyEvent( const TInt aEvent ) + { + __VTPRINTENTER( "EventManager.NotifyEvent" ) + __VTPRINT2( DEBUG_GEN, "EventManager.NotifyEvent event=%d", aEvent ); + CVtEngEventManager& eventManager = + CVtEngUtility::EventManager(); + if ( !eventManager.QueueAsyncEvent( aEvent ) ) + { + eventManager.DoNotifyEvent( aEvent ); + } + __VTPRINTEXIT( "EventManager.NotifyEvent" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::AddObserverL +// +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::AddObserverL( MVtEngEventObserver* aObserver ) + { + TInt count( iObservers.Count() ); + TBool duplicate = EFalse; + while ( count-- ) + { + if ( aObserver == iObservers[ count ] ) + { + count = 0; // break loop + duplicate = ETrue; + } + } + if ( !duplicate ) + { + User::LeaveIfError( iObservers.Append( aObserver ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::RemoveObserver +// +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::RemoveObserver( const MVtEngEventObserver* aObserver ) + { + TInt count( iObservers.Count() ); + while ( count-- ) + { + if ( aObserver == iObservers[ count ] ) + { + iObservers.Remove( count ); + count = 0; // break loop + } + } + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::RunL +// Notify event +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::RunL() + { + __VTPRINTENTER( "EventManager.RunL" ) + __VTPRINT2( DEBUG_GEN, "EventManager.RunL count=%d", iEventQueue->Count() ); + // get oldest event in queue (event at index 0) + const TInt event = iEventQueue->At( 0 ) ; + + // delete event before calling DoNotifyEvent(), because DoNotifyEvent() may + // hang if it causes ASynchronous call in handler + iEventQueue->Delete( 0 ); + + // if more events pending -> signal again + if( iEventQueue->Count() > 0 ) + { + Signal(); + } + + // and finally notify event + DoNotifyEvent( event ); + __VTPRINTEXIT( "EventManager.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::DoCancel +// No op +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::DoCancel() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::DoNotifyEvent +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::DoNotifyEvent( const TInt aEvent ) + { + __VTPRINTENTER( "EventManager.DoNotifyEvent" ) + __VTPRINT2( DEBUG_GEN, "EventManager.DoNotifyEvent event=%d", aEvent ); + TRAP_IGNORE( { + TInt count( iObservers.Count() ); + while ( count-- ) + { + iObservers[count]->HandleVtEventL( aEvent ) ; + } + } ) + __VTPRINTEXIT( "EventManager.DoNotifyEvent" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::QueueAsyncEvent +// ----------------------------------------------------------------------------- +// +TBool CVtEngEventManager::QueueAsyncEvent( const TInt aEvent ) + { + __VTPRINTENTER( "EventManager.QueueAsyncEvent" ) + __VTPRINT2( DEBUG_GEN, "EventManager.QueueAsyncEvent event=%d", aEvent ); + TBool async( EFalse ); + switch ( aEvent ) + { + case KVtEngSessionStateChanged: + case KVtEngNegotiationProblem: + case KVtEngShareImageInitializeBegin: + case KVtEngShareImageInitializeEnd: + async = ETrue; + QueueAndSignal( aEvent ); + break; + default: + break; + } + __VTPRINTEXIT( "EventManager.QueueAsyncEvent" ) + return async; + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::QueueAndSignal +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::QueueAndSignal( const TInt aEvent ) + { + __VTPRINTENTER( "EventManager.QueueAndSignal" ) + __VTPRINT2( DEBUG_GEN, "EventManager.QueueAndSignal event=%d", aEvent ); + if( iEventQueue->Count() < KMaxEventsInQueue ) + { + TRAP_IGNORE( iEventQueue->AppendL( aEvent ) ); // can't leave + Signal(); + } + else + { + Panic( EVtEngPanicInvalidTooManyPendingEvents ); + } + __VTPRINTEXIT( "EventManager.QueueAndSignal" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngEventManager::Signal +// ----------------------------------------------------------------------------- +// +void CVtEngEventManager::Signal() + { + __VTPRINTENTER( "EventManager.Signal" ) + if( !IsActive() ) + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + __VTPRINT2( DEBUG_GEN, "EventManager.QueueAndSignal count=%d", iEventQueue->Count() ); + } + __VTPRINTEXIT( "EventManager.Signal" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngHandlerContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngHandlerContainer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2006 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: Container for functional handlers in the engine. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngHandlerContainer.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::Uninitialize +// Uninitialises handlers. +// ----------------------------------------------------------------------------- +// +void CVtEngHandlerContainer::Uninitialize() + { + iSession->Uninitialize(); + } + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::CVtEngHandlerContainer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngHandlerContainer::CVtEngHandlerContainer() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngHandlerContainer::ConstructL( ) + { + iMedia = CVtEngMediaHandler::NewL( ); + iSession = CVtEngSessionHandler::NewL( ); + iAudio = CVtEngAudioHandler::NewL( ); + + } + +void CVtEngHandlerContainer::CreateDtmfHandlerL( + MVtH324ConfigCommand* aH324Config ) + { + __VTPRINTENTER( "HlrCnr.CreateDtmfHandlerL" ) + iDtmf = CVtEngDtmfHandler::NewL( *aH324Config ); + __VTPRINTEXIT( "HlrCnr.CreateDtmfHandlerL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngHandlerContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngHandlerContainer* CVtEngHandlerContainer::NewL( ) + { + __VTPRINTENTER( "HlrCnr.NewL" ) + + CVtEngHandlerContainer* self = new( ELeave ) CVtEngHandlerContainer; + + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + __VTPRINTEXIT( "HlrCnr.NewL" ) + return self; + } + + +// Destructor +CVtEngHandlerContainer::~CVtEngHandlerContainer() + { + __VTPRINTENTER( "HlrCnr.~" ) + + delete iMedia; + delete iSession; + delete iAudio; + delete iDtmf; + + __VTPRINTEXIT( "HlrCnr.~" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngInitializer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngInitializer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,687 @@ +/* +* Copyright (c) 2004 - 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" +* 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 class for initializing the engine gradually. +* Active object initializes one "subsystem" on each +* round. In case of failure timer is started and +* retrial is done after time-out. Uninitialization +* is done is one shot. + + + + +* +*/ + + +// INCLUDE FILES +#include "CVtEngInitializer.h" +#include "CVtEngStateManager.h" +#include "CVtEngEventManager.h" +#include "VtEngUtils.h" +#include "CVtEngHandlerContainer.h" +#include "CVtEngOperation.h" +#include "VtEngPanic.h" +#include "VtEngConstants.h" +#include "VtEngDefs.hrh" +#include +#include +#include +#include +#include "VtEngUtils.h" +#include "CVtEngSettings.h" + +// CONSTANTS +const TInt KVtEngInitializerPriority = CActive::EPriorityStandard; +const TInt KVtEngInitializerRetrials = 3; +const TInt KVtEngInitializerRetrialTimeout = 500000; // 0.5 seconds +const TInt KVtEngInitializerTimerPriority = CActive::EPriorityUserInput; + +_LIT( KVtEngCommDiagPortName, "PVDIAGPORT" ); +_LIT( KVtEngCommTestPortName, "COMM::0" ); + +// ============================ MEMBER FUNCTIONS =============================== + +CVtEngInitializer* CVtEngInitializer::NewL( CVtEngHandlerContainer& aHandlers ) + { + __VTPRINTENTER( "Intlzr.NewL" ) + CVtEngInitializer* self = new ( ELeave ) CVtEngInitializer( aHandlers ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "Intlzr.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::CVtEngInitializer +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngInitializer::CVtEngInitializer( + CVtEngHandlerContainer& aHandlers ) : + CActive( KVtEngInitializerPriority ), + iHandlers( aHandlers ), + iStep( EInitNone ), + iDataportHandled( 0 ), + iOwnershipInMH( EFalse ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::ConstructL +// Second phase constructor. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::ConstructL() + { + iTimer = CPeriodic::NewL( KVtEngInitializerTimerPriority ); + + } + +// Destructor +CVtEngInitializer::~CVtEngInitializer() + { + __VTPRINTENTER( "Intlzr.~" ) + delete iTimer; + Cancel(); + + if ( iSessionCommand && !iOwnershipInMH ) + { + VTProtocolFactory::DeleteSessionCommand( iSessionCommand ); + iSessionCommand = NULL; + } + __VTPRINTEXIT( "Intlzr.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::InitializeL +// Start initialization process. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::InitializeL( CVtEngOperation& aCallback ) + { + __VTPRINTENTER( "Intlzr.InitializeL" ) + __VTPRINT( DEBUG_GEN, "Intlzr.Init") + __ASSERT_ALWAYS( iStep != EInitComplete, + Panic( EVtEngPanicInvalidInitializationEntry ) ); + iCallback = &aCallback; + if ( iStep == EInitComplete ) + { + __VTPRINTEXIT( "Intlzr.InitializeL" ) + return; + } + ContinueOrRetry( EContinue ); + __VTPRINTEXIT( "Intlzr.InitializeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::CancelInit +// Cancels already started ini. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngInitializer::CancelInit() + { + __VTPRINTENTER( "Intlzr.CancelInit" ) + TBool cancelSignalled = EFalse; + __VTPRINT2( DEBUG_GEN, "Intlzr.CancelInit %d", iStep ) + if ( IsActive() ) + { + switch ( iStep ) + { + case EInitMedia: // media->InitializeL pending + case EInitProto: // media->InitializeProviderL pending + { + if ( ! ( iDataportHandled & EDataportReceived ) ) + { + __VTPRINT( DEBUG_GEN, "Intlzr.CancelInit complete" ) + if ( iStatus == KRequestPending ) + { + // Actual protocol init is not done yet. + TRequestStatus* status = &iStatus; + __VTPRINT( DEBUG_GEN, "Intlzr.CancelInit complete1" ) + User::RequestComplete( status, KErrNone ); + __VTPRINT( DEBUG_GEN, "Intlzr.CancelInit complete2" ) + } + iDataportHandled |= EDataportReceived; + __VTPRINT( DEBUG_GEN, "Intlzr.CancelInit complete" ) + } + __VTPRINT( DEBUG_GEN, "Intlzr.CancelInit MH cancel" ) + CVtEngMediaHandler* media = + static_cast( &iHandlers.Media() ); + media->CancelInitialize(); + iStep = EResetMediaPhase2; + } + break; + case EResetMedia: + break; + default: + cancelSignalled = ETrue; + Cancel(); + } + } + __VTPRINTEXITR( "Intlzr.CancelInit %d", cancelSignalled ) + return cancelSignalled; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::Uninitialize +// Start un-initialization process. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::Uninitialize( CVtEngOperation& aCallback ) + { + __VTPRINTENTER( "Intlzr.Uninitialize" ) + iCallback = &aCallback; + ContinueOrRetry( EReset ); + __VTPRINTEXIT( "Intlzr.Uninitialize" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::GetSessionCommand +// Transfer ownership of Protocol and continue initialization. +// +// ----------------------------------------------------------------------------- +// +MVtSessionCommand* CVtEngInitializer::GetSessionCommand() + { + __VTPRINTENTER( "Intlzr.GetSessionCommand" ) + __VTPRINT2( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.GetSessionCommand iSessionCommand: $%x", reinterpret_cast< TUint >( iSessionCommand ) ) + MVtSessionCommand* sessionCommand = iSessionCommand; + + // Set ownership to media handler since media handler is requesting so. + iOwnershipInMH = ETrue; + if( iStep >= EInitDataportCompleted ) + { + // Ownership can be totally given to MH after dataport is loaned. + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.GetSessionCommand iSessionCommand ownership to MH GetSessionCommand") + + iSessionCommand = NULL; + iStep = EInitComplete; + ContinueOrRetry( EContinue ); + } + if ( iStep != EResetMedia ) + { + __VTPRINT( DEBUG_GEN, "Intlzr.GetSessionCommand=>ContinueOrRetry( EContinue )") + ContinueOrRetry( EContinue ); + } + else + { + // Reset requested. ContinueOrRetry with EReset was called + // while protocol Init was ongoing. Now continue + __VTPRINT( DEBUG_GEN, "Intlzr.GetSessionCommand=>ContinueOrRetry( EReset )") + ContinueOrRetry( EReset ); + } + __VTPRINTEXIT( "Intlzr.GetSessionCommand" ) + return sessionCommand; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::Initialized +// Returns if engine is initialized. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngInitializer::Initialized() const + { + return ( iStep == EInitComplete ); + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::RunL +// Perform initialization step +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::RunL() + { + __VTPRINTENTER( "Intlzr.RunL" ) + __VTPRINT3( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run step=%d err=%d", + iStep, iStatus.Int() ) + if ( iStatus != KErrNone ) + { + Notify( iStatus.Int() ); + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + } + CVtEngMediaHandler* media = + static_cast( &iHandlers.Media() ); + + switch ( iStep ) + { + case EInitNone: + return; + case EInitMedia: + // Initialize video source + iStatus = KRequestPending; + media->InitializeL( iStatus ); + SetActive(); + iStep++; // EInitProto + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + case EInitProto: + // Initialize Protocol => create terminal only once. + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run create Protocol") + if ( !iSessionCommand ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run DOCREATE Protocol" ) + TVt3G324MSupported protocolSupported; + iSessionCommand = VTProtocolFactory::CreateSessionCommandL( + media, ETrue, protocolSupported ); + + if (protocolSupported == EVt3G324MMissing) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run init 3G324M stack is missing") + Notify(KErrNotReady); + return; + } + + // Initialize Protocol immediately after it is created. + if( iSessionCommand ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run InitL protocol") + iSessionCommand->InitProtocolL( media->SdkInitInfo() ); + } + } + if ( iSessionCommand ) + { + const TDesC* dataportName = NULL; + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run init protocol") + if(iCallback->Command() == KVtEngInitializeEngineTest ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.Run init with COMM::0") + CVtEngUtility::Settings().SetConnectReady(); + iComms = VTProtocolFactory::CreateCommServerL( + KVtEngCommTestPortName ); + } + else if( iCallback->Command() == KVtEngInitializeEngineDiag ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.Run init with PVDIAGPORT") + CVtEngUtility::Settings().SetConnectReady(); + iComms = VTProtocolFactory::CreateCommServerL( + KVtEngCommDiagPortName ); + } + else + { // [MediatorChange]: + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.Run init with DATAPORT" ) + dataportName = + CVtEngUtility::Settings().DataportInfo(); + if ( !dataportName ) + { + // not available yet, start waiting, + // HandleSettingChangedL is called when dataport + // becomes available + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.Run DATAPORT is not ready yet" ) + + CVtEngUtility::Settings().NotifyChangeL( + CVtEngSettings::EDataportInfo, *this ); + iStatus = KRequestPending; + SetActive(); + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + } + else + { + //RDebug::Print( _L("DataportName is:%S"), dataportName ); + TBool bitReversed( BitReversalUsed() ); + + iComms = VTProtocolFactory::CreateCommServerL( + *dataportName, bitReversed ); + // not interested of DP info any more + CVtEngUtility::Settings().CancelNotifyChange( + CVtEngSettings::EDataportInfo, *this ); + } + } + + // Initialization is now completed + iStep = EInitDataportCompleted; + + // Dataport is now loaned + CVtEngUtility::Settings().SetDataportLoaned( ETrue ); + + // Update states since dataport is now loaned + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update(); + + // No need for ownership anymore, media handler owns the pointer and is + // responsible of deletion. + if( iOwnershipInMH ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.Run iSessionCommand ownership to MH") + iSessionCommand = NULL; + iStep = EInitComplete; + ContinueOrRetry( EContinue ); + } + + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.Run init protocol port operation completed") + // Media handler calls GetSessionCommand when InitL + // is complete and initialization continues. + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + } + break; + case EInitSession: + { + CVtEngSessionHandler* session = + static_cast( &iHandlers.Session() ); + session->InitializeL(); + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.RunL StartMediatorListenerL" ) + CVtEngUtility::EngineUtils()->StartMediatorListenerL(); + } + break; + case EResetMedia: + iHandlers.Uninitialize(); + iStatus = KRequestPending; + media->Uninitialize( iStatus ); + SetActive(); + iStep++; // EResetMediaPhase2 + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.RunL step reset media started" ) + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + case EResetMediaPhase2: + if ( iComms ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.RunL VTENgine deletes COMM server" ) + CVtEngMediaHandler* media = + static_cast( &iHandlers.Media() ); + if ( media->ProtoInitialized() ) + { + TRAPD( err, VTProtocolFactory::DeleteCommServerL( iComms ) ); + __VTPRINT2( DEBUG_GEN | DEBUG_DETAIL, + "Intlzr.RunL VTENgine deletes COMM server err=%d", err ) + __ASSERT_ALWAYS( err == KErrNone, + Panic( EVtEngPanicCommsDestructOnInvalidState ) ); + iComms = NULL; + } + else if ( !media->ProtoInitialized() && iSessionCommand ) + { + __VTPRINTEXIT( "Intlzr.RunL" ) + return; + } + } + break; + case EInitComplete: + break; + default: + Panic( EVtEngPanicInvalidInitializationState ); + break; + } + ContinueOrRetry( EContinue ); + __VTPRINTEXIT( "Intlzr.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::DoCancel +// Cancels initialization +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::DoCancel() + { + __VTPRINTENTER( "Intlzr.DoCancel" ) + if ( iStatus == KRequestPending ) + { + __VTPRINT2( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.DoCancel step=%d", iStep ) + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrCancel ); + } + iStep = EInitNone; + iCallback = NULL; + __VTPRINTEXIT( "Intlzr.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::RunError +// Handler error on initialization. +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngInitializer::RunError( TInt aError ) + { + __VTPRINTENTER( "Intlzr.RunError" ) + __VTPRINT2( DEBUG_GEN, "Intlzr.RunError %d", aError ) + if ( iRetrials ) + { + __VTPRINT2( DEBUG_GEN | DEBUG_DETAIL, "Intlzr.retrials %d", iRetrials ) + TCallBack callback( CVtEngInitializer::HandleTimer, this ); + iTimer->Start( + KVtEngInitializerRetrialTimeout, + KVtEngInitializerRetrialTimeout, + callback ); + } + else + { + Notify( aError ); + } + __VTPRINTEXIT( "Intlzr.RunError" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::HandleTimer +// Handler for retrial timer. +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngInitializer::HandleTimer( TAny* aAny ) + { + CVtEngInitializer* handler = + reinterpret_cast( aAny ); + handler->DoHandleTimer(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::DoHandleTimer +// Handler for retrial timer. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::DoHandleTimer() + { + iTimer->Cancel(); + ContinueOrRetry( ERetry ); + } + +TBool CVtEngInitializer::ActivateAndSignal( TInt aSignalValue ) + { + __VTPRINTENTER( "Intlzr.ActivateAndSignal" ) + TRequestStatus* status = &iStatus; + TBool signaled = EFalse; + if ( iStatus.Int() != KRequestPending && !IsActive() ) + { + iStatus = KRequestPending; + SetActive(); + User::RequestComplete( status, aSignalValue ); + signaled = ETrue; + } + __VTPRINTEXITR( "Intlzr.ActivateAndSignal signaled=%d", signaled ) + return signaled; + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::CreateDtmfHandlerL +// Creates handler for DTMF sending. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::CreateDtmfHandlerL( MVtH324ConfigCommand* aH324Config ) + { + iHandlers.CreateDtmfHandlerL( aH324Config ); + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::ContinueOrRetry +// Proceed to next step, retry on failure or notify observer. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::ContinueOrRetry( const TProcess aOperation ) + { + __VTPRINTENTER( "Intlzr.ContinueOrRetry" ) + __VTPRINT2( DEBUG_GEN, "Intlzr.CoR op=%d", aOperation ) + if ( aOperation == EContinue ) + { + const TBool resetComplete( iStep == EResetMediaPhase2 ); + // check if last step complete and notify observer + if ( iStep == EInitComplete || resetComplete ) + { + if ( resetComplete && + // resetComplete is true also when clearing state is entered + // while waiting for dataport. In that case Final Uninit must + // not be done because MediaHandler's state is not ready for + // it => need to wait for KVtEngResetEngine from UI + iCallback->Command() == KVtEngResetEngine ) + { + CVtEngMediaHandler* media = + static_cast( &iHandlers.Media() ); + media->FinalizeUninitialization(); + iStep = EInitNone; + } + Notify( KErrNone ); + __VTPRINT2( DEBUG_GEN, "Intlzr.CoR op=EContinue, branch=%d", 1 ) + return; + } + else if( iStep == EInitProto ) + { + __VTPRINT2( DEBUG_GEN, "Intlzr.CoR op=EContinue, branch=%d", 2 ) + return; + } + __VTPRINT2( DEBUG_GEN, "Intlzr.CoR op=EContinue, branch=%d", 3 ) + iStep++; + iRetrials = KVtEngInitializerRetrials; + } + else if ( aOperation == EReset ) + { + __VTPRINT( DEBUG_GEN, "Intlzr.CoR op=EReset") + iRetrials = KVtEngInitializerRetrials; + const TInt step( iStep ); + if ( step != EInitComplete && IsActive() ) + { + // Reset requested while init ongoing but + // Protocol InitL not yet issued + if ( CancelInit() == EFalse ) + { // AO still active, must return here because end of this method + __VTPRINT( DEBUG_GEN, " Initializer CoR 2") + __VTPRINTEXIT( "Intlzr.ContinueOrRetry" ) + return; + } + } + iStep = EResetMedia; + if ( ( step == EInitProto || + step == EInitSession ) && !IsActive() ) + { + // Protocol InitL is pending. Wait until it completes. + // GetSessionCommand is called and there we this is + // again called. + __VTPRINT( DEBUG_GEN, " Initializer reset while InitL") + __VTPRINTEXIT( "Intlzr.ContinueOrRetry" ) + return; + } + } + else + { + iRetrials--; + } + ActivateAndSignal( KErrNone ); + __VTPRINTEXIT( "Intlzr.ContinueOrRetry" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::Notify +// Notifies observer on completion or error. +// +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::Notify( const TInt aResult ) + { + __VTPRINTENTER( "Intlzr.Notify" ) + if ( iStep == EInitComplete ) + { + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update(); + } + + if ( iCallback ) + { + if ( aResult != KErrCancel ) + { // UI is not interested on cancel completion + iCallback->HandleOpComplete( aResult ); + } + iCallback = NULL; + __VTPRINT2( DEBUG_GEN, "Intlzr.Notify res=%d", aResult ) + } + __VTPRINTEXIT( "Intlzr.Notify" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::BitReversalUsed +// Checks if bit reversal should be used from locally variated information. +// ----------------------------------------------------------------------------- +// +TBool CVtEngInitializer::BitReversalUsed() + { + __VTPRINT( DEBUG_GEN, "Intlzr.BitReversalUsed" ) + return CVtEngUtility::Settings().CheckBits( + KVTLVFlagEnableBitReversal ); + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::HandleSettingChangedL +// Notification of received dataport name. +// ----------------------------------------------------------------------------- +// +void CVtEngInitializer::HandleSettingChangedL( + CVtEngSettings::TSettingId aId, + const TDesC& /*aValue*/ ) + { + __VTPRINTENTER( "Intlzr.HandleSettingChangedL" ) + if ( !( iDataportHandled & EDataportReceived ) && + aId == CVtEngSettings::EDataportInfo && + iStatus == KRequestPending ) + + { + iDataportHandled |= EDataportReceived; + //dataport will be fetched in runl, otherwise, cancelinit can not work + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + } + __VTPRINTEXIT( "Intlzr.HandleSettingChangedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::GetVtComms +// Return pointer to communication port. +// ----------------------------------------------------------------------------- +// +MCommServer* CVtEngInitializer::GetVtComms() + { + return iComms; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngModel.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2006 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: Video telephony engine class implementation. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngModel.h" +#include "CVtEngHandlerContainer.h" +#include "CVtEngCommandHandler.h" +#include "CVtEngEventManager.h" +#include "CVtEngStateManager.h" +#include "VtEngUtils.h" +#include "VtEngPanic.h" +#include +#include "CVtEngExtensions.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngModel::CVtEngModel +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngModel::CVtEngModel() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngModel::ConstructL( + MVtEngEventObserver& aEventObserver, + MVtEngCommandObserver& aCommandObserver ) + { + VTLOGINIT + __VTPRINTENTER( "Model.ConstructL" ) + + __VTPRINT( DEBUG_GEN | DEBUG_CONSTRUCT, "Model.ConL" ) + iUtils = CVtEngUtility::NewL( ); + iHandlers = CVtEngHandlerContainer::NewL( ); + + // Create extensions + iExtensions = CVtEngExtensions::NewL(); + + iUtils->PrepareL( + *iHandlers, + iStateManager, + iEventManager, + iExtensions ); + iCommandHandler = CVtEngCommandHandler::NewL( *iHandlers ); + iCommandHandler->AddObserverL( aCommandObserver ); + iEventManager = CVtEngEventManager::NewL( aEventObserver ); + iStateManager = CVtEngStateManager::NewL( *iHandlers, *iEventManager ); + __VTPRINTEXIT( "Model.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CVtEngModel* CVtEngModel::NewL( + MVtEngEventObserver& aEventObserver, + MVtEngCommandObserver& aCommandObserver) + { + CVtEngModel* self = new( ELeave ) CVtEngModel; + + CleanupStack::PushL( self ); + self->ConstructL( aEventObserver, aCommandObserver ); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CVtEngModel::~CVtEngModel() + { + __VTPRINTENTER( "Model.~" ) + delete iStateManager; + delete iCommandHandler; + delete iHandlers; + delete iUtils; + delete iEventManager; + delete iExtensions; + __VTPRINTEXIT( "Model.~" ) + VTLOGUNINIT + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::CommandHandler +// Returns command handler reference. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtEngCommandHandler& CVtEngModel::CommandHandler() const + { + return *iCommandHandler; + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::Session +// Returns session reference. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtEngSessionInfo& CVtEngModel::Session() const + { + return iHandlers->Session(); + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::Media +// Returns media reference. +// +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtEngMedia& CVtEngModel::Media() const + { + return iHandlers->Media(); + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::Audio +// Returns audio reference. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtEngAudio& CVtEngModel::Audio() const + { + return iHandlers->Audio(); + } + +// ----------------------------------------------------------------------------- +// CVtEngModel::Extension +// Returns extension pointer (currently none) +// ----------------------------------------------------------------------------- +// +EXPORT_C TAny* CVtEngModel::Extension( const TUid& aExtensionUid ) + { + __VTPRINTENTER( "Model.Extension" ) + + // init local variables + TInt error = KErrNone; + TAny* interfacePtr = NULL; + + // get mediahandler handle + MVtEngMedia& msession = iHandlers->Media(); + CVtEngMediaHandler& handler = static_cast( msession ); + + // get API IF from extension + error = iExtensions->GetClientInterface( &interfacePtr, aExtensionUid , + handler ); + + // in case of error + if ( error != KErrNone ) + { + __VTPRINTEXITR( "Model.Extension GetClientInterface failed %d", error) + return NULL; + } + + __VTPRINTEXIT( "Model.Extension" ) + return interfacePtr; + } + +// Engine's internal panic function +void Panic( TVtEngPanic aPanic ) + { + __VTPRINT2( DEBUG_GEN, "EnginePanic %d", aPanic) + User::Panic( KVtEngPanicCategory, aPanic ); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngPubSubsListener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngPubSubsListener.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2004-2006 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: Publish and subscribe settings listener. +* +*/ + + +// INCLUDE FILES +#include "CVTEngPubSubsListener.h" +#include "MVtEngSettingPSObserver.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::CVtEngPubSubsListener +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngPubSubsListener::CVtEngPubSubsListener( + const TUid aUid, const TInt aKey, MVtEngSettingPSObserver* aObserver ) : + CActive( CActive::EPriorityStandard ), + iUid( aUid ), iId( aKey ), iCallback( aObserver ) + { + __VTPRINT( DEBUG_CONSTRUCT, "CVtEngPubSubsListener C++" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::~CVtEngPubSubsListener +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngPubSubsListener::~CVtEngPubSubsListener() + { + __VTPRINTENTER( "PSLis.~" ) + Cancel(); + iProperty.Close(); + __VTPRINTEXIT( "PSLis.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::RunL +// From CActive. +// ----------------------------------------------------------------------------- +// +void CVtEngPubSubsListener::RunL() + { + __VTPRINTENTER( "PSLis.RunL" ) + const TRequestStatus status( iStatus ); + StartListening(); + iCallback->HandleNotifyPSL( iUid, iId, status ); + __VTPRINTEXIT( "PSLis.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::DoCancel +// From CActive. +// ----------------------------------------------------------------------------- +// +void CVtEngPubSubsListener::DoCancel() + { + __VTPRINTENTER( "PSLis.DoCancel" ) + iProperty.Cancel(); + __VTPRINTEXIT( "PSLis.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::RunError +// From CActive. +// ----------------------------------------------------------------------------- +// +TInt CVtEngPubSubsListener::RunError( TInt /*aError*/ ) + { + __VTPRINTENTER( "PSLis.RunError" ) + __VTPRINTEXIT( "PSLis.RunError" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::NewL +// ----------------------------------------------------------------------------- +// +CVtEngPubSubsListener* CVtEngPubSubsListener::NewL( const TUid aUid, + const TInt aKey, MVtEngSettingPSObserver* aObserver ) + { + __VTPRINTENTER( "PSLis.NewL" ) + CVtEngPubSubsListener* self = new( ELeave ) + CVtEngPubSubsListener( aUid, aKey, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "PSLis.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::StartListening +// ----------------------------------------------------------------------------- +// +void CVtEngPubSubsListener::StartListening() + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtEngPubSubsListener::ConstructL() + { + CActiveScheduler::Add( this ); + + User::LeaveIfError ( iProperty.Attach( iUid, iId, EOwnerThread ) ); + StartListening(); + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::Get +// Read integer value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngPubSubsListener::Get( TInt& aVal ) + { + return iProperty.Get( iUid, iId, aVal ); + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::Get +// Read binary value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngPubSubsListener::Get( TDes8& aVal ) + { + return iProperty.Get( iUid, iId, aVal ); + } + +// ----------------------------------------------------------------------------- +// CVtEngPubSubsListener::Get +// Read string value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngPubSubsListener::Get( TDes16& aVal ) + { + return iProperty.Get( iUid, iId, aVal ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngSATClient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngSATClient.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,118 @@ +/* +* Copyright (c) 2005 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: SAT listener. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngStateManager.h" +#include "CVtEngSATClient.h" +#include "VtEngUtils.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::CVtEngSATClient +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngSATClient::CVtEngSATClient() : + iSatSession(), + iSatRefresh( *this ) + { + __VTPRINT( DEBUG_GEN | DEBUG_CONSTRUCT, "CSATClient.C++" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngSATClient* CVtEngSATClient::NewL( ) + { + __VTPRINTENTER( "CSATClient.NewL" ) + CVtEngSATClient* self = new( ELeave ) CVtEngSATClient; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __VTPRINTEXIT( "CSATClient.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::~CVtEngSATClient +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngSATClient::~CVtEngSATClient() + { + __VTPRINTENTER( "CSATClient.~" ) + iSatRefresh.Close(); + iSatSession.Close(); + __VTPRINTEXIT( "CSATClient.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::ConstructL +// 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtEngSATClient::ConstructL() + { + iSatSession.ConnectL(); + iSatRefresh.OpenL( iSatSession ); + iSatRefresh.NotifyFileChangeL(); + } + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::AllowRefresh +// Callback from SAT. +// ----------------------------------------------------------------------------- +// +TBool CVtEngSATClient::AllowRefresh( + TSatRefreshType aType, + const TSatRefreshFiles& /*aFiles*/ ) + { + __VTPRINTENTER( "CSATClient.AllowRefresh" ) + TBool ret( EFalse ); + const MVtEngSessionInfo::TSessionState state( + CVtEngUtility::StateManager()->SessionState() ); + if ( state == MVtEngSessionInfo::EIdle || aType == EFileChangeNotification ) + { + __VTPRINT2( DEBUG_GEN, " TSatRefreshType aType=%d", aType ) + ret = ETrue; + } + __VTPRINTEXITR( "CSATClient.AllowRefresh ret=%d", ret ) + return ret; + } + +// ----------------------------------------------------------------------------- +// CVtEngSATClient::Refresh +// Callback from SAT. +// ----------------------------------------------------------------------------- +// +void CVtEngSATClient::Refresh( + TSatRefreshType /* aType */, + const TSatRefreshFiles& /* aFiles */ ) + { + // Not needed. + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "CSATClient.Refresh" ) + iSatRefresh.RefreshEFRead( EFalse ); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/CVtEngSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/CVtEngSettings.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,946 @@ +/* +* Copyright (c) 2004-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" +* 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: Video call setting data +* +*/ + + + +// INCLUDE FILES +#include "CVtEngSettings.h" +#include +#include "MVtEngSettingObserver.h" +#include "VtEngUtils.h" +#include "VtEngPanic.h" +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +// Granularity for observer array. +const TInt KVtEngObserverArrayGranularity = 2; + +// Volume default level. +const TInt KVtEngVolumeDefaultLevel = 4; + +// Video quality frame rate configuration buffer size +const TInt KVtEngVQFRBufferSize = 32; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngSettings::CVtEngSettings +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngSettings::CVtEngSettings() : + iVariantReadOnlyValues( KErrNotReady ) + { + iCLI.iValid = EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::ConstructL() + { + __VTPRINTENTER( "Settings.ConstructL" ) + iSelectVolumeIdle = CIdle::NewL( CActive::EPriorityHigh ); + iObserverItems = new ( ELeave ) + CArrayFixFlat( KVtEngObserverArrayGranularity ); + + // Ear volume CR listener. + iCRProxy = &CVtEngUtility::CRProxy(); + CreateDataObserverL( this, KCRUidInCallVolume, KTelIncallEarVolume, + CCenRepNotifyHandler::EIntKey ); + + // IHF volume listener. + CreateDataObserverL( + this, KCRUidInCallVolume, KTelIncallLoudspeakerVolume, + CCenRepNotifyHandler::EIntKey ); + + // Call duration listener. + CreateDataObserverL( this, KCRUidLogs, KLogsShowCallDuration, + CCenRepNotifyHandler::EIntKey ); + + // Still image listener. + CreateDataObserverL( this, KCRUidTelephonySettings, KSettingsVTStillImage, + CCenRepNotifyHandler::EIntKey ); + + // Still image path listener. + CreateDataObserverL( + this, KCRUidTelephonySettings, KSettingsVTStillImagePath, + CCenRepNotifyHandler::EStringKey ); + + ReadVariationsL(); + ResetAll(); + + + TInt validImage( 0 ); + TInt err = iCRProxy->Get( KCRUidTelephonySettings, + KSettingsVTStillImage, validImage ); + __VTPRINT3( DEBUG_DETAIL, "Settings.ConL: use image", err, validImage ) + if ( !err && validImage ) + { + __VTPRINT( DEBUG_DETAIL, "Settings.ConL: VALID" ) + iConfig.iVideo.iImageIsValid = ETrue; + } + + TInt value( 0 ); // not shown + err = iCRProxy->Get( KCRUidLogs, KLogsShowCallDuration, value ); + if ( err == KErrNone ) + { + iConfig.iCallTimerOn = ( value == 1 ) ? ETrue : EFalse; + } + + // Initialize the volume levels. + // If value retrieval fails, use defaults. + if ( iCRProxy->Get( KCRUidInCallVolume, + KTelIncallEarVolume, iConfig.iAudio.iVolume.iHandsetVolume ) + != KErrNone ) + { + iConfig.iAudio.iVolume.iHandsetVolume = KVtEngVolumeDefaultLevel; + } + + if ( iCRProxy->Get( KCRUidInCallVolume, KTelIncallLoudspeakerVolume, + iConfig.iAudio.iVolume.iHandsfreeVolume ) != KErrNone ) + { + iConfig.iAudio.iVolume.iHandsfreeVolume = KVtEngVolumeDefaultLevel; + } + + // Open connection to phone server + RPhCltServer phoneClient; + User::LeaveIfError( phoneClient.Connect() ); + CleanupClosePushL( phoneClient ); + + CPhCltImageHandler* stillH; + stillH = CPhCltImageHandler::NewL(); + CleanupStack::PushL( stillH ); + + // Load images + RFile file; + TInt res = stillH->OpenDefaultVtImage( file ); + file.Close(); + iDefaultStillImageDefined = ( res == KErrNone ) ? ETrue : EFalse; + // Cleanup + CleanupStack::PopAndDestroy( 2 ); // phoneClient, stillH, imageParams + + __VTPRINTEXIT( "Settings.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngSettings* CVtEngSettings::NewL() + { + CVtEngSettings* self = new( ELeave ) CVtEngSettings; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::~CVtEngSettings +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngSettings::~CVtEngSettings() + { + __VTPRINTENTER( "Settings.~" ) + delete iSelectVolumeIdle; + delete iObserverItems; + delete iDataportInfo; + __VTPRINTEXIT( "Settings.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::Config +// Returns configuration. +// ----------------------------------------------------------------------------- +// +const CVtEngSettings::TVtEngVideoCallConfig& CVtEngSettings::Config() const + { + return iConfig; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetCurrentVolume +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetCurrentVolume( TBool aVolume ) + { + TBool old = iConfig.iAudio.iCurrentVolume; + iConfig.iAudio.iCurrentVolume = aVolume; + + if ( iSelectVolumeObserver && ( !old && aVolume ) || ( old && !aVolume ) ) + { + iSelectVolumeIdle->Cancel(); + iSelectVolumeIdle->Start( + TCallBack( DoInformSelectVolumeObserver, this ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::CurrentVolume +// ----------------------------------------------------------------------------- +// +TBool CVtEngSettings::CurrentVolume() const + { + return iConfig.iAudio.iCurrentVolume; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetVolume +// Sets output volue setting. +// ----------------------------------------------------------------------------- +// +TInt CVtEngSettings::SetVolume( + const TInt aHandsetVolume, + const TInt aHandsfreeVolume, + const TBool aInternal ) + { + __VTPRINTENTER( "Settings.SetVolume" ) + __VTPRINT3( DEBUG_DETAIL, "Settings:SetVolume hs=%d, ihf=%d", + aHandsetVolume, aHandsfreeVolume ) + __VTPRINT2( DEBUG_DETAIL, "Settings:Internal=%d", aInternal ) + + TInt volume ( 0 ); + + TInt res( KErrNone ); + if ( aInternal ) + { + if ( iConfig.iAudio.iVolume.iHandsfreeVolume != aHandsfreeVolume ) + { + iConfig.iAudio.iVolume.iHandsfreeVolume = + ValidVolume( aHandsfreeVolume ); + } + if ( iConfig.iAudio.iVolume.iHandsetVolume != aHandsetVolume ) + { + iConfig.iAudio.iVolume.iHandsetVolume = + ValidVolume( aHandsetVolume ); + } + } + else + { + iCRProxy->Get( KCRUidInCallVolume, + KTelIncallEarVolume, volume ); + if ( volume != aHandsetVolume ) + { + iCRProxy->Set( KCRUidInCallVolume, + KTelIncallEarVolume, aHandsetVolume ); + } + + iCRProxy->Get( KCRUidInCallVolume, + KTelIncallLoudspeakerVolume, volume ); + if ( volume != aHandsfreeVolume ) + { + iCRProxy->Set( KCRUidInCallVolume, + KTelIncallLoudspeakerVolume, aHandsfreeVolume ); + } + } + __VTPRINTEXITR( "Settings.SetVolume res=%d", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::GetVolume +// Gets audio volume. +// ----------------------------------------------------------------------------- +// +TInt CVtEngSettings::GetVolume( + TInt& aVolume, + const TBool aHandsfree, + const TBool aInternal ) const + { + __VTPRINTEXIT( "Settings.GetVolume" ) + TInt res( KErrNone ); + if ( aInternal ) + { + if ( aHandsfree ) + { + aVolume = iConfig.iAudio.iVolume.iHandsfreeVolume; + } + else + { + aVolume = iConfig.iAudio.iVolume.iHandsetVolume; + } + } + else + { + if ( aHandsfree ) + { + res = iCRProxy->Get( KCRUidInCallVolume, + KTelIncallLoudspeakerVolume, aVolume ); + } + else + { + res = iCRProxy->Get( KCRUidInCallVolume, + KTelIncallEarVolume, aVolume ); + } + } + __VTPRINTEXITR( "Settings.GetVolume res=%d", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetRouting +// Sets audio routing setting. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetRouting( + const MVtEngAudio::TVtEngRoutingSetting& aState ) + { + iConfig.iAudio.iRouting = aState; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetVideoEnabled +// Sets video enabled setting. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetVideoEnabled( const TBool aEnabled ) + { + __VTPRINT2( DEBUG_GEN , "Settings.SVE",aEnabled ) + iConfig.iVideo.iVideoEnabled = aEnabled; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetConnectReady +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetConnectReady() + { + iConfig.iReadyForConnect = ETrue; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetDataportLoaned +// Sets dataport loaning status +// +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetDataportLoaned( TBool aLoaned ) + { + __VTPRINTENTER( "Settings.SetDataportLoaned" ) + iConfig.iIsDataportLoaned = aLoaned; + __VTPRINTEXIT( "Settings.SetDataportLoaned" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::ResetAll +// Reset all settings. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::ResetAll() + { + __VTPRINT( DEBUG_GEN , "Settings.RA" ) + iConfig.iAudio.iRouting = KVtEngDefaultAudioRouting; + iConfig.iVideo.iVideoEnabled = ETrue; + iConfig.iReadyForConnect = EFalse; + iConfig.iIsDataportLoaned = EFalse; + // call duration setting not cleared + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::NotifyChangeL +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::NotifyChangeL( + TSettingId aId, + MVtEngSettingObserver& aObserver ) + { + __VTPRINTENTER( "Settings.NotifyChangeL" ) + __VTPRINT2( DEBUG_GEN, "Settings.NC id %d", aId ) + switch ( aId ) + { + case ESelectVolume: + iSelectVolumeObserver = &aObserver; + break; + case EDataportInfo: + iDataportObserver = &aObserver; + break; + // others are CenRep items + default: + { + const TInt count( iObserverItems->Count() ); + for ( TInt index = 0; index < count; index++ ) + { + TObserverItem& item = iObserverItems->At( index ); + if ( item.iId == aId && item.iObserver == &aObserver ) + { + __VTPRINT( DEBUG_GEN, "Settings.NC.already" ) + __VTPRINTEXIT( "Settings.NotifyChangeL" ) + return; + } + } + + TObserverItem item; + item.iId = aId; + switch ( aId ) + { + case EStillImage: + item.iIntKey = KSettingsVTStillImage; + item.iUid = KCRUidTelephonySettings; + break; + case EStillImagePath: + item.iIntKey = KSettingsVTStillImagePath; + item.iUid = KCRUidTelephonySettings; + break; + case ECallTimer: + item.iIntKey = KLogsShowCallDuration; + item.iUid = KCRUidLogs; + break; + case EHandsetVolume: + item.iIntKey = KTelIncallEarVolume; + item.iUid = KCRUidInCallVolume; + break; + case EHandsfreeVolume: + item.iIntKey = KTelIncallLoudspeakerVolume; + item.iUid = KCRUidInCallVolume; + break; + default: + break; + } + item.iObserver = &aObserver; + iObserverItems->AppendL( item ); + } + } + __VTPRINTEXIT( "Settings.NotifyChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::CancelNotifyChange +// Cancels receiving change events. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::CancelNotifyChange( + TSettingId aId, const MVtEngSettingObserver& aObserver ) + { + __VTPRINTENTER( "Settings.CancelNotifyChange" ) + if ( aId == ESelectVolume ) + { + if ( &aObserver == iSelectVolumeObserver ) + { + iSelectVolumeObserver = NULL; + } + } + else if ( &aObserver == iDataportObserver ) + { + iDataportObserver = NULL; + // also free space used for dataport info + delete iDataportInfo; + iDataportInfo = NULL; + } + else + { + TInt count( iObserverItems->Count() ); + while ( count-- ) + { + const TObserverItem& item = iObserverItems->At( count ); + if ( item.iId == aId && + item.iObserver == &aObserver ) + { + iObserverItems->Delete( count ); + count = 0; // breaks loop + } + } + } + __VTPRINTEXIT( "Settings.CancelNotifyChange" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::HandleNotifyInt +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::HandleNotifyInt( const TUid aUid, + const TUint32 aId, TInt aNewValue ) + { + TBool informObserver = ETrue; + if ( aUid == KCRUidInCallVolume ) + { + switch ( aId ) + { + case KTelIncallLoudspeakerVolume: + { + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: HF volume" ) + if ( iConfig.iAudio.iVolume.iHandsfreeVolume == aNewValue ) + { + informObserver = EFalse; + } + else + { + iConfig.iAudio.iVolume.iHandsfreeVolume = aNewValue; + } + } + break; + case KTelIncallEarVolume: + { + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: HandsetVolume" ) + if ( iConfig.iAudio.iVolume.iHandsetVolume == aNewValue ) + { + informObserver = EFalse; + } + else + { + iConfig.iAudio.iVolume.iHandsetVolume = aNewValue; + } + } + break; + default: + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: Non-ordered" ); + break; + } + } + else if ( aUid == KCRUidLogs ) + { + switch ( aId ) + { + case KLogsShowCallDuration: + { + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: call duration" ) + iConfig.iCallTimerOn = aNewValue > 0 ? ETrue : EFalse; + } + break; + default: + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: Non-ordered" ); + break; + } + } + else if ( aUid == KCRUidTelephonySettings ) + { + switch ( aId ) + { + case KSettingsVTStillImage: + { + __VTPRINT( DEBUG_GEN, "HandleNotifyInt still" ) + if ( aNewValue == 0 ) + { + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt disabled") + // still image disabled in settings + iConfig.iVideo.iStillImageFile.Zero(); + iConfig.iVideo.iImageIsValid = EFalse; + } + else + { + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt enabled") + iConfig.iVideo.iImageIsValid = ETrue; + } + } + break; + default: + __VTPRINT( DEBUG_GEN, "Settings.HandleNotifyInt: Non-ordered" ); + break; + } + } + + TObserverItem* item = FindItem( aUid, aId ); + if ( informObserver && item && item->iObserver ) + { + // The observer does not need the new value + // Plain notification is all. + TRAP_IGNORE( item->iObserver->HandleSettingChangedL( item->iId, KNullDesC16 ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::HandleNotifyReal +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::HandleNotifyReal( const TUid /*aUid*/, + const TUint32 /*aId*/ , TReal /* aNewValue*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::HandleNotifyString +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::HandleNotifyString( const TUid aUid, const TUint32 aId, + const TDesC16& aNewValue ) + { + __VTPRINTENTER( "Settings.HN" ) + if ( aNewValue.Compare( iConfig.iVideo.iStillImageFile ) != 0 ) + { + if( aId == KSettingsVTStillImagePath ) + { + __VTPRINT( DEBUG_GEN, "Settings.HN KGSVTStillImagePath" ) + iConfig.iVideo.iStillImageFile.Copy( aNewValue ); + } + } + TObserverItem* item = FindItem( aUid, aId ); + if ( item && item->iObserver ) + { + TRAP_IGNORE( item->iObserver->HandleSettingChangedL( item->iId, aNewValue ) ); + } + __VTPRINTEXIT( "Settings.HN" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::FindItem +// Finds observer item. +// ----------------------------------------------------------------------------- +// +CVtEngSettings::TObserverItem* CVtEngSettings::FindItem( + const TUid& aUid, + const TDesC& aKey ) const + { + TInt count( iObserverItems->Count() ); + TObserverItem* item = NULL; + TBool found( EFalse ); + while ( count-- && !found ) + { + item = &iObserverItems->At( count ); + if ( item->iUid == aUid && + item->iKey.Compare( aKey ) == 0 ) + { + found = ETrue; + } + } + + // Just NULL the item if not found + if( !found ) + { + item = NULL; + } + return item; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::FindItem +// Finds observer item. +// ----------------------------------------------------------------------------- +// +CVtEngSettings::TObserverItem* CVtEngSettings::FindItem( + const TUid& aUid,const TInt& aKey ) const + { + TInt count( iObserverItems->Count() ); + TObserverItem* item = NULL; + TBool found( EFalse ); + while ( count-- && !found ) + { + item = &iObserverItems->At( count ); + if ( item->iUid == aUid && + item->iIntKey == aKey ) + { + found = ETrue; + } + } + + // Just NULL the item if not found + if( !found ) + { + item = NULL; + } + return item; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SettingAsTInt +// Returns setting as integer value. +// ----------------------------------------------------------------------------- +// +TInt CVtEngSettings::SettingAsTInt( const TDesC& aValue ) + { + TInt value( 0 ); + const TInt err = TLex( aValue ).Val( value ); + if ( err != KErrNone ) + { + value = err; + } + return value; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::DoInformSelectVolumeObserver +// ----------------------------------------------------------------------------- +// +TInt CVtEngSettings::DoInformSelectVolumeObserver( TAny* aAny ) + { + CVtEngSettings* self = static_cast< CVtEngSettings* >( aAny ); + + if ( self->iSelectVolumeObserver ) + { + TRAP_IGNORE( self->iSelectVolumeObserver->HandleSettingChangedL( + ESelectVolume, + KNullDesC ) ); + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::ReadVariationsL +// Reads local variations. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::ReadVariationsL() + { + __VTPRINTENTER( "Settings.ReadVariations" ) + User::LeaveIfError( iCRProxy->Get( KCRUidVTVariation, + KVTLocalVariationFlags, iVariantReadOnlyValues )); + TBuf< KVtEngVQFRBufferSize > buffer; + User::LeaveIfError( iCRProxy->Get( KCRUidVTConfiguration, + KVTVideoFrameRates, buffer )); + ParseFrameRates( iVQFRConfig, buffer ); + __VTPRINTEXIT( "Settings.ReadVariations" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::GetCameraOrientations +// Reads camera orientations from CR +// ----------------------------------------------------------------------------- +// + +void CVtEngSettings::GetCameraOrientations( + MVtEngMedia::TCameraOrientation& aPrimaryCameraOrientation, + MVtEngMedia::TCameraOrientation& aSecondaryCameraOrientation ) const + { + /* + * Defines layout (screen orientation) used by + * Video Telephone application per active camera. + * Each camera has one of the following values: + * 1) "LS" = Landscape + * 2) "PR" = Portrait + * 3) "OL" = Obey layout in specific device mode (normal operation) + * Camera values are: + * 1) "C1" = VT primary camera (inwards) + * 2) "C2" = VT secondary camera (outwards) + * Example value (portrait for cam1, landscape for cam2): + * C1:PR C2:LS + */ + + __VTPRINTENTER( "Settings.GetCameraOrientations" ) + const TInt KMaxKVTCameraLayoutValue = 11; + const TInt KAbbreviationLength = 2; + const TInt KSkipChars = 3; + + _LIT( KCameraOrientationLS, "LS" ); // landscape + _LIT( KCameraOrientationPR, "PR" ); // portrait + + TBuf< KMaxKVTCameraLayoutValue > cameraOrientations; + TInt err = iCRProxy->Get( KCRUidVTConfiguration, + KVTCameraLayout, cameraOrientations ); + + // parse cenrep value + if( cameraOrientations.Length() > 0 ) + { + TBuf abbreviation; + TLex lex( cameraOrientations ); + lex.SkipAndMark(KSkipChars); + abbreviation.Append( lex.Get() ); + abbreviation.Append( lex.Get() ); + + // primary camera value + if ( abbreviation.CompareF( KCameraOrientationLS ) == 0 ) + { + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.prim:LS" ); + aPrimaryCameraOrientation = MVtEngMedia::EOrientationLandscape; + } + else if ( abbreviation.CompareF( KCameraOrientationPR ) == 0 ) + { + aPrimaryCameraOrientation = MVtEngMedia::EOrientationPortrait; + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.prim:PR" ); + } + else + { + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.prim:OL" ); + aPrimaryCameraOrientation = MVtEngMedia::EOrientationObeyLayoutSwitch; + } + + abbreviation.Zero(); + lex.SkipSpace(); + lex.SkipAndMark(KSkipChars); + abbreviation.Append( lex.Get() ); + abbreviation.Append( lex.Get() ); + + //secondary camera value + if ( abbreviation.CompareF( KCameraOrientationLS ) == 0) + { + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.sec:LS" ); + aSecondaryCameraOrientation = MVtEngMedia::EOrientationLandscape; + } + else if ( abbreviation.CompareF( KCameraOrientationPR ) == 0) + { + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.sec:PR" ); + aSecondaryCameraOrientation = MVtEngMedia::EOrientationPortrait; + } + else + { + __VTPRINT( DEBUG_GEN, "Settings.GetCamOrient.sec:OL" ); + aSecondaryCameraOrientation = MVtEngMedia::EOrientationObeyLayoutSwitch; + } + } + else + { + // reading from cenrep failed + // set default values for camera orientation + aPrimaryCameraOrientation = MVtEngMedia::EOrientationObeyLayoutSwitch; + aSecondaryCameraOrientation = MVtEngMedia::EOrientationObeyLayoutSwitch; + } + __VTPRINTEXIT( "Settings.ReadVariations" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::CheckBit +// Checks if a certain bit is turned on in locally variated features. +// ----------------------------------------------------------------------------- +// +TBool CVtEngSettings::CheckBits( const TInt aBits ) + { + __VTPRINT2( DEBUG_GEN, "Settings.CheckBit: %d", aBits ) + __VTPRINT2( DEBUG_GEN, "Settings.CheckBit=%d", + iVariantReadOnlyValues & aBits ? 1 : 0 ) + return iVariantReadOnlyValues & aBits; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::VideoQualityFrameRateConfig +// Returns video quality frame rate configuration. +// ----------------------------------------------------------------------------- +// +const CVtEngSettings::TVtEngVideoQualityFrameRateConfig& + CVtEngSettings::VideoQualityFrameRateConfig() const + { + __VTPRINTENTER( "Settings.VideoQualityFrameRateConfig" ) + __VTPRINTEXIT( "Settings.VideoQualityFrameRateConfig" ) + return iVQFRConfig; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::CreateDataObserverL +// Creates a shared data observer. Ownership transferred. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::CreateDataObserverL( MVtEngCRSettingObserver* aObserver, + TUid aUid, TUint32 aKey, CCenRepNotifyHandler::TCenRepKeyType aType ) + { + CVtEngCRObserverItem* item = CVtEngCRObserverItem::NewL( + aObserver, aUid, aKey, aType ); + CleanupStack::PushL( item ); + iCRProxy->RegisterInterestedL( item ); + CleanupStack::Pop( item ); + } + + +// ----------------------------------------------------------------------------- +// CVtEngSettings::ParseFrameRates +// Parses VQ frame rates read from cenrep. +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::ParseFrameRates( TVtEngVideoQualityFrameRateConfig& aVQFR, + const TDesC& aBuffer ) + { + __VTPRINTENTER( "Settings.ParseFrameRates" ) + Mem::FillZ( &aVQFR, sizeof( aVQFR ) ); + if( aBuffer.Length() > 0 ) + { + TLex lex( aBuffer ); + lex.Val( aVQFR.iDetail ); + __VTPRINT2( DEBUG_GEN, "Settings.ParseFrameRates iDetail=%d", aVQFR.iDetail ); + lex.SkipSpace(); + lex.Val( aVQFR.iNormal ); + __VTPRINT2( DEBUG_GEN, "Settings.ParseFrameRates iNormal=%d", aVQFR.iNormal ); + lex.SkipSpace(); + lex.Val( aVQFR.iMotion ); + __VTPRINT2( DEBUG_GEN, "Settings.ParseFrameRates iMotion=%d", aVQFR.iMotion ); + } + __VTPRINTEXIT( "Settings.ParseFrameRates" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::IsDefaultStillImageDefined +// Checks if still image exists. +// ----------------------------------------------------------------------------- +// +TBool CVtEngSettings::IsDefaultStillImageDefined() + { + __VTPRINTENTER( "Settings.IsDefaultStillImageDefined" ) + __VTPRINTEXITR( "Settings.IsDefaultStillImageDefined%d",iDefaultStillImageDefined ) + return iDefaultStillImageDefined; + + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetCLI +// +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetCLI( const MVtEngSessionInfo::TCLI& aCLI ) + { + __VTPRINTENTER( "Settings.SetCLI" ) + iCLI.iCallId = aCLI.iCallId; + iCLI.iName = aCLI.iName; + iCLI.iVoiceCallPossible = aCLI.iVoiceCallPossible; + iCLI.iValid = ETrue; + __VTPRINT2( DEBUG_GEN, "iVoiceCallPossible=%d,", iCLI.iVoiceCallPossible ) + __VTPRINTEXIT( "Settings.SetCLI" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::GetCLI +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngSettings::GetCLI( MVtEngSessionInfo::TCLI& aCLI ) const + { + aCLI.iCallId = iCLI.iCallId; + aCLI.iVoiceCallPossible = iCLI.iVoiceCallPossible; + aCLI.iName = iCLI.iName; + return iCLI.iValid; + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::SetDataportInfoL +// +// ----------------------------------------------------------------------------- +// +void CVtEngSettings::SetDataportInfoL( const TDesC& aPortInfo ) + { + delete iDataportInfo; + iDataportInfo = NULL; + iDataportInfo = HBufC::NewL( aPortInfo.Length() ); + *iDataportInfo = aPortInfo; + SetConnectReady(); + if ( iDataportObserver ) + { + iDataportObserver->HandleSettingChangedL( EDataportInfo, + *iDataportInfo ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngSettings::DataportInfo +// +// ----------------------------------------------------------------------------- +// +const TDesC* CVtEngSettings::DataportInfo() const + { + return iDataportInfo; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/VtEngUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/VtEngUtils.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2004-2006 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: Video telephony engine TLS container. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngCRProxy.h" +#include "CVtEngAccessoryHandler.h" +#include "CVtEngSATClient.h" +#include "VtEngUtils.h" +#include "VtEngPanic.h" +#include "CVtEngInitializer.h" +#include "CVtEngSettings.h" +#include "CVtEngDeviceLockMonitor.h" + +#include "CVtEngExtensions.h" +#include "cvtengmdtrmessagelistener.h" +#include "cvtengmdtrcommandsender.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngUtility::CVtEngUtility +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngUtility::CVtEngUtility() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngUtility::ConstructL( ) + { + __ASSERT_DEBUG( Dll::Tls() == NULL, Panic( EVtEngPanicTlsPanic )); + Dll::SetTls( this ); + iCRProxy = CVtEngCRProxy::NewL(); + iAccessoryHandler = CVtEngAccessoryHandler::NewL(); + iSettings = CVtEngSettings::NewL(); + + iLockMonitor = CVtEngDeviceLockMonitor::NewL(); + iMdtrCommandSender = CVtEngMdtrCommandSender::NewL( *this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngUtility* CVtEngUtility::NewL() + { + CVtEngUtility* self = new( ELeave ) CVtEngUtility; + + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CVtEngUtility::~CVtEngUtility() + { + delete iMdtrMessageListener; + delete iMdtrCommandSender; + delete iCRProxy; + delete iAccessoryHandler; + delete iEngineInit; + delete iSettings; + delete iSATClient; + delete iLockMonitor; + Dll::SetTls( NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::EngineUtils +// Return pointer to Engine Utility. +// +// ----------------------------------------------------------------------------- +// +CVtEngUtility* CVtEngUtility::EngineUtils() + { + return reinterpret_cast( Dll::Tls() ); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::StateManager +// Returns state manager. +// +// ----------------------------------------------------------------------------- +// +CVtEngStateManager* CVtEngUtility::StateManager() + { + return *(CVtEngUtility::EngineUtils()->iStateManager); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::EventManager +// ----------------------------------------------------------------------------- +// +CVtEngEventManager& CVtEngUtility::EventManager() + { + return **CVtEngUtility::EngineUtils()->iEventManager; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::PrepareL +// ----------------------------------------------------------------------------- +// +void CVtEngUtility::PrepareL( + CVtEngHandlerContainer& aHandlers, + CVtEngStateManager*& aStateManagerPtr, + CVtEngEventManager*& aEventManagerPtr, + CVtEngExtensions* aExtensionPtr ) + { + iEngineInit = CVtEngInitializer::NewL( aHandlers ); + iStateManager = &aStateManagerPtr; + iEventManager = &aEventManagerPtr; + iExtensions = aExtensionPtr; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::StartMediatorListenerL +// Creates mediator message (event/command) listener. Cannot be done in +// constructor because session control may be unavailable when we would +// receive first mediator event => session state is still uninitialized. +// ----------------------------------------------------------------------------- +// +void CVtEngUtility::StartMediatorListenerL() + { + iMdtrMessageListener = CVtEngMdtrMessageListener::NewL( *this ); + } + + +// ----------------------------------------------------------------------------- +// CVtEngUtility::Settings +// ----------------------------------------------------------------------------- +// +CVtEngSettings& CVtEngUtility::Settings() + { + return *CVtEngUtility::EngineUtils()->iSettings; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::MediatorCommands +// ----------------------------------------------------------------------------- +// +CVtEngMdtrCommandSender& CVtEngUtility::MediatorCommands() + { + return *CVtEngUtility::EngineUtils()->iMdtrCommandSender; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::CRProxy +// ----------------------------------------------------------------------------- +// +CVtEngCRProxy& CVtEngUtility::CRProxy() + { + return *CVtEngUtility::EngineUtils()->iCRProxy; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::AccessoryHandler +// ----------------------------------------------------------------------------- +// +CVtEngAccessoryHandler& CVtEngUtility::AccessoryHandler() + { + return *CVtEngUtility::EngineUtils()->iAccessoryHandler; + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::StartSATListenL +// ----------------------------------------------------------------------------- +// +void CVtEngUtility::StartSATListenL() + { + iSATClient = CVtEngSATClient::NewL(); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::NotifyLockState +// ----------------------------------------------------------------------------- +// +void CVtEngUtility::NotifyLockState() + { + iLockMonitor->NotifyState(); + } + +// ----------------------------------------------------------------------------- +// CVtEngUtility::Extensions +// ----------------------------------------------------------------------------- +// +CVtEngExtensions* CVtEngUtility::Extensions() + { + return CVtEngUtility::EngineUtils()->iExtensions; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/cvtengincomingcallmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/cvtengincomingcallmonitor.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2006 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: Monitors device incoming call state +* +*/ + + +// INCLUDE FILES +#include "cvtengincomingcallmonitor.h" +#include "CVTEngPubSubsListener.h" +#include "CVtEngEventManager.h" +#include "cvtlogger.h" + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitor::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngIncomingCallMonitor* CVtEngIncomingCallMonitor::NewL() + { + CVtEngIncomingCallMonitor* self = new ( ELeave ) CVtEngIncomingCallMonitor(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitor::~ +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngIncomingCallMonitor::~CVtEngIncomingCallMonitor() + { + delete iIncomingCallListener; + } + +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitor::NotifyState +// Notifies UI about device incoming call state +// ----------------------------------------------------------------------------- +// +void CVtEngIncomingCallMonitor::NotifyState() const + { + __VTPRINTENTER( "IncomingCall.NotifyState" ) + + // Initialize state as first valuea of call state enum + TInt state = EPSCTsyCallStateUninitialized; + + // Get incomig call state and send event to UI + if ( iIncomingCallListener->Get( state ) == KErrNone ) + { + __VTPRINT2( DEBUG_SESSION, "IncomingCall.NotifyState=%d", state ) + const TInt event = ( state == EPSCTsyCallStateRinging ) ? + KVtEngSessionWaitingCallActive : KVtEngSessionWaitingCallInactive; + CVtEngEventManager::NotifyEvent( event ); + } + __VTPRINTEXIT( "IncomingCall.NotifyState" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitoronitor::HandleNotifyPSL +// Callback for incoming call state change +// ----------------------------------------------------------------------------- +// +void CVtEngIncomingCallMonitor::HandleNotifyPSL( + const TUid aUid, + const TInt& aKey, + const TRequestStatus& aStatus ) + { + if ( aStatus == KErrNone && + aUid == KPSUidCtsyCallInformation && + aKey == KCTsyCallState ) + { + NotifyState(); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitor::CVtEngIncomingCallMonitor +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngIncomingCallMonitor::CVtEngIncomingCallMonitor() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngIncomingCallMonitor::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngIncomingCallMonitor::ConstructL() + { + __VTPRINTENTER( "IncomingCall.ConstructL" ) + // Listener for incoming call state + iIncomingCallListener = CVtEngPubSubsListener::NewL( + KPSUidCtsyCallInformation, KCTsyCallState, this ); + __VTPRINTEXIT( "IncomingCall.ConstructL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/cvtengmdtrcommandsender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/cvtengmdtrcommandsender.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,460 @@ +/* +* 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" +* 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: Mediator command sender implementation +* +*/ + + + +// INCLUDE FILES +#include "cvtengmdtrcommandsender.h" +#include "CVtEngEventManager.h" +#include "VtEngUtils.h" +#include "CVtEngSettings.h" +#include "CVtEngOperation.h" +#include "vtengcommands.h" +#include "CVtEngStateManager.h" +#include "VtEngPanic.h" +#include +#include +#include +#include +#include +#include + + +/** +* Three state classes for handling audio mute/unmute commands towards mediator when mute state +* is changed locally faster than mediator gives response. + + + IDLE <-------------------------| + | | + NotifyOutgoingAudioState( x ) / mediator.Send( x ) | + | | + v | + |--------------------------------------> SENDING -- CommandResponseL ---| + | | + | NotifyOutgoingAudioState( y ) / saveCommand( y ) + | | + | v + |- CommandResponseL( x ) / Send( y ) ---- BUFFERED + + + + +*/ +NONSHARABLE_CLASS( TVtMdtrStateIdle ) : public CBase +{ + public: + TVtMdtrStateIdle( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ); + virtual void SendL( TUid aDomain, TUid aCategory, TInt aCommand ); + virtual void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus ); + + TInt DoSend( TUid aDomain, TUid aCategory, TInt aCommand ); + + CVtEngMdtrCommandSender& iSender; + CMediatorCommandInitiator& iMediator; +}; + +NONSHARABLE_CLASS( TVtMdtrStateSending ) : public TVtMdtrStateIdle +{ + public: + TVtMdtrStateSending( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ); + void SendL( TUid aDomain, TUid aCategory, TInt aCommand ); + void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus ); +}; + +NONSHARABLE_CLASS( TVtMdtrStateBuffered ) : public TVtMdtrStateIdle +{ + public: + TVtMdtrStateBuffered( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ); + void SendL( TUid aDomain, TUid aCategory, TInt aCommand ); + void CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus ); + + TUid iDomain; + TUid iCategory; + TInt iCommand; +}; + + +// CONSTANTS +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngMdtrCommandSender* CVtEngMdtrCommandSender::NewL( CVtEngUtility& aUtils ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.NewL" ) + CVtEngMdtrCommandSender* self = new ( ELeave ) + CVtEngMdtrCommandSender( aUtils ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + + __VTPRINTEXIT( "CVtEngMdtrCommandSender.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::~CVtEngMdtrCommandSender +// destructor +// ----------------------------------------------------------------------------- +// +CVtEngMdtrCommandSender::~CVtEngMdtrCommandSender() + { + iUtils.EventManager().RemoveObserver( this ); + delete iMediatorInitiator; + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::EndCall +// Sends end call command via Mediator +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::EndCall( ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.EndCall" ) + const TVersion KTelephonyCmdVersion( + KTelephonyCommandsVersionMajor, + KTelephonyCommandsVersionMinor, + KTelephonyCommandsVersionBuild ); + const TInt res = + iMediatorInitiator->IssueCommand( + KMediatorTelephonyDomain, + KCatCommandsToTelephony, + EPhoneCmdEndActiveCall, + KTelephonyCmdVersion, + KNullDesC8() ); + + __VTPRINTEXITR( "CVtEngMdtrCommandSender.EndCall res=%d", res ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::VoiceFallback +// Sends voice fallback command to telephony via Mediator +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::VoiceFallback() + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.VoiceFallback" ) + const TVersion KVtToPhoneCmdVersion( + KVideoTelToPhoneCmdVersionMajor, + KVideoTelToPhoneCmdVersionMinor, + KVideoTelToPhoneCmdVersionBuild ); +#ifdef _DEBUG + TInt err = +#endif + iMediatorInitiator->IssueCommand( + KMediatorTelephonyDomain, + KCatVideoTelToPhoneCommands, + EVtCmdFallback, + KVtToPhoneCmdVersion, + KNullDesC8() ); + // response is not awaited + __VTPRINTEXITR( "CVtEngMdtrCommandSender.VoiceFallback %d>", err ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::SwitchToVoiceL +// Sends switch to voice command to telephony via Mediator +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::SwitchToVoiceL( CVtEngOperation& aOperation ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.SwitchToVoiceL" ) + iOperation = &aOperation; + // add this as observer. Mediator command is sent when idle state + // is reached (i.e. Protocol has released dataport and it can be recovered + // by telephony) + iUtils.EventManager().AddObserverL( this ); + // let current state handle actual request + iUtils.StateManager()->HandleOperationL( aOperation ); + __VTPRINTEXIT( "CVtEngMdtrCommandSender.SwitchToVoiceL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::NotifyOutgoingAudioState +// Sends microphone state to telephony via Mediator +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::NotifyOutgoingAudioState( + const TBool aMicEnabled ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.NotifyOutgoingAudioState" ) + + const TInt command = ( aMicEnabled ) + ? EAudioCmdUnmute : EAudioCmdMute; +#ifdef _DEBUG + TRAPD( res, iSenderState->SendL( + KMediatorTelephonyDomain, + KCatAudioCommandsToTelephony, + command ) ); +#else + TRAP_IGNORE(iSenderState->SendL( + KMediatorTelephonyDomain, + KCatAudioCommandsToTelephony, + command ) ); +#endif + + __VTPRINTEXITR( "CVtEngMdtrCommandSender.NotifyOutgoingAudioState %d", res ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::SetSenderState +// sets new mediator sender state for audio command +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::SetSenderState( TVtMdtrStateIdle& aNewState ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.SetSenderState" ) + __VTPRINT2( DEBUG_GEN, " delete old state %x", (TInt) iSenderState ) + __ASSERT_DEBUG( iSenderState != &aNewState, + Panic( EVtEngPanicWrongMediatorSenderState ) ); + delete iSenderState; + iSenderState = &aNewState; + __VTPRINTEXITR( "CVtEngMdtrCommandSender.SetSenderState %x", (TInt) iSenderState ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::CommandResponseL +// Mediator framework callback +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::CommandResponseL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TInt aStatus, + const TDesC8& /*aData*/ ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.CommandResponseL" ) + switch ( aCommandId ) + { + case EAudioCmdUnmute: + case EAudioCmdMute: + iSenderState->CommandResponseL( aDomain, aCategory, aCommandId, aStatus ); + break; + default: + // ignored for other commands (so far) + break; + } + __VTPRINT2( DEBUG_GEN, " mediator command id=%d", aCommandId ) + __VTPRINTEXITR( "CVtEngMdtrCommandSender.CommandResponseL res=%d", aStatus ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::HandleVtEventL +// Handles state change event associated with "switch to voice" and "TerminateSession" command +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::HandleVtEventL( TInt aEvent ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.HandleVtEventL" ) +#ifdef _DEBUG + TInt err = KErrNone; +#endif + if ( aEvent == KVtEngSessionStateChanged && + iOperation && iOperation->Command() == KVtEngSwitchToVoice ) + { + const TVersion KVtToPhoneCmdVersion( + KVideoTelToPhoneCmdVersionMajor, + KVideoTelToPhoneCmdVersionMinor, + KVideoTelToPhoneCmdVersionBuild ); + + iUtils.EventManager().RemoveObserver( this ); + // send command (ignore possible error - no way to recover from it) +#ifdef _DEBUG + err = +#endif + iMediatorInitiator->IssueCommand( + //KMediatorVideoTelephonyDomain, + KMediatorTelephonyDomain, + KCatVideoTelToPhoneCommands, + EVtCmdSwitchToVoice, + KVtToPhoneCmdVersion, + KNullDesC8() ); + iOperation->HandleOpComplete( KErrNone ); + iOperation = NULL; + } + __VTPRINTEXITR( "CVtEngMdtrCommandSender.HandleVtEventL %d", err ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener:: +// c++ constructor +// ----------------------------------------------------------------------------- +// +CVtEngMdtrCommandSender::CVtEngMdtrCommandSender( CVtEngUtility& aUtils ) : + iUtils( aUtils ) + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.CVtEngMdtrCommandSender" ) + __VTPRINTEXIT( "CVtEngMdtrCommandSender.CVtEngMdtrCommandSender" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrCommandListener::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrCommandSender::ConstructL() + { + __VTPRINTENTER( "CVtEngMdtrCommandSender.ConstructL" ) + iMediatorInitiator = CMediatorCommandInitiator::NewL( this ); + + // set initial mediator command sender state + iSenderState = new ( ELeave ) TVtMdtrStateIdle( *this, *iMediatorInitiator ); + __VTPRINTEXIT( "CVtEngMdtrCommandSender.ConstructL" ) + } + +TVtMdtrStateIdle::TVtMdtrStateIdle( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ) +: iSender( aSender), iMediator( aMediator ) + { + __VTPRINTENTER( "TVtMdtrStateIdle.ctr" ) + __VTPRINTEXITR( "TVtMdtrStateIdle.ctr %x", (TInt) this ) + } + +void TVtMdtrStateIdle::SendL( TUid aDomain, TUid aCategory, TInt aCommand ) + { + __VTPRINTENTER( "TVtMdtrStateIdle.SendL" ) + TVtMdtrStateIdle* nextState = NULL; + const TInt res = DoSend( aDomain, aCategory, aCommand ); + if ( res == KErrInUse ) + { + nextState = new ( ELeave ) TVtMdtrStateBuffered( iSender, iMediator ); + CleanupStack::PushL( nextState ); + nextState->SendL( aDomain, aCategory, aCommand ); + CleanupStack::Pop( nextState ); + } + else + { + nextState = new ( ELeave ) TVtMdtrStateSending( iSender, iMediator ); + } + iSender.SetSenderState( *nextState ); + __VTPRINTEXIT( "TVtMdtrStateIdle.SendL" ) + } + +TInt TVtMdtrStateIdle::DoSend( TUid aDomain, TUid aCategory, TInt aCommand ) + { + __VTPRINTENTER( "TVtMdtrStateIdle.DoSend" ) + const TVersion KVtToPhoneCmdVersion( + KVideoTelToPhoneCmdVersionMajor, + KVideoTelToPhoneCmdVersionMinor, + KVideoTelToPhoneCmdVersionBuild ); + + TInt res = iMediator.IssueCommand( + aDomain, + aCategory, + aCommand, + KVtToPhoneCmdVersion, + KNullDesC8() ); + __VTPRINTEXITR( "TVtMdtrStateIdle.DoSend res=%d", res ) + return res; + } + +void TVtMdtrStateIdle::CommandResponseL( TUid /*aDomain*/, TUid /*aCategory*/, TInt /*aCommand*/, TInt /*aStatus*/ ) + { + __VTPRINTENTER( "TVtMdtrStateIdle.CommandResponseL" ) + // base class method should never be possible to call + __VTPRINTEXIT( "TVtMdtrStateIdle.CommandResponseL" ) + } + +TVtMdtrStateSending::TVtMdtrStateSending( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ) +: TVtMdtrStateIdle( aSender, aMediator ) + { + __VTPRINTENTER( "TVtMdtrStateSending.ctr" ) + __VTPRINTEXITR( "TVtMdtrStateSending.ctr %x", (TInt) this ) + } + +void TVtMdtrStateSending::SendL( TUid aDomain, TUid aCategory, TInt aCommand ) + { + __VTPRINTENTER( "TVtMdtrStateSending.SendL" ) + TVtMdtrStateIdle* buffered = new ( ELeave )TVtMdtrStateBuffered( iSender, iMediator ); + CleanupStack::PushL( buffered ); + buffered->SendL( aDomain, aCategory, aCommand ); + CleanupStack::Pop( buffered ); + iSender.SetSenderState( *buffered ); + __VTPRINTEXIT( "TVtMdtrStateSending.SendL" ) + } + +void TVtMdtrStateSending::CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus ) + { + __VTPRINTENTER( "TVtMdtrStateSending.CommandResponseL" ) + __VTPRINT2( DEBUG_GEN, " command=%d", aCommand ) + __VTPRINT2( DEBUG_GEN, " response=%d", aStatus ) + TVtMdtrStateIdle* idle = new ( ELeave ) TVtMdtrStateIdle( iSender, iMediator ); + iSender.SetSenderState( *idle ); + __VTPRINTEXIT( "TVtMdtrStateSending.CommandResponseL" ) + } + +TVtMdtrStateBuffered::TVtMdtrStateBuffered( CVtEngMdtrCommandSender& aSender, CMediatorCommandInitiator& aMediator ) +: TVtMdtrStateIdle( aSender, aMediator ) + { + __VTPRINTENTER( "TVtMdtrStateBuffered.ctr" ) + __VTPRINTEXITR( "TVtMdtrStateBuffered.ctr %x", (TInt) this ) + } + +void TVtMdtrStateBuffered::SendL( TUid aDomain, TUid aCategory, TInt aCommand ) + { + __VTPRINTENTER( "TVtMdtrStateBuffered.SendL" ) + + iDomain = aDomain; + iCategory = aCategory; + iCommand = aCommand; + // iCommand is sent in CommandResponseL + __VTPRINTEXIT( "TVtMdtrStateBuffered.SendL" ) + } + +void TVtMdtrStateBuffered::CommandResponseL( TUid aDomain, TUid aCategory, TInt aCommand, TInt aStatus ) + { + __VTPRINTENTER( "TVtMdtrStateBuffered.CommandResponseL" ) + const TVersion KVtToPhoneCmdVersion( + KVideoTelToPhoneCmdVersionMajor, + KVideoTelToPhoneCmdVersionMinor, + KVideoTelToPhoneCmdVersionBuild ); + TBool nextStateIdle = ETrue; + TInt res = KErrNone; + if ( aCommand != iCommand ) + { + res = iMediator.IssueCommand( + KMediatorTelephonyDomain, + KCatAudioCommandsToTelephony, + iCommand, + KVtToPhoneCmdVersion, + KNullDesC8() ); + if ( res == KErrNone ) + { + nextStateIdle = EFalse; + } + } + TVtMdtrStateIdle* nextState = NULL; + if ( nextStateIdle ) + { + __VTPRINT2( DEBUG_GEN, " failed to send buffered command with error=%d", res ) + nextState = new ( ELeave ) TVtMdtrStateIdle( iSender, iMediator ); + } + else + { + nextState = new ( ELeave ) TVtMdtrStateSending( iSender, iMediator ); + CleanupStack::PushL( nextState ); + nextState->SendL( iDomain, iCategory, iCommand ); + CleanupStack::Pop( nextState ); + } + iSender.SetSenderState( *nextState ); + __VTPRINTEXIT( "TVtMdtrStateBuffered.CommandResponseL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/cvtengmdtrmessagelistener.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/cvtengmdtrmessagelistener.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,321 @@ +/* +* 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" +* 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: Mediator event listener implementation +* +*/ + + + +// INCLUDE FILES +#include "cvtengmdtrmessagelistener.h" +#include "VtEngUtils.h" +#include "CVtEngSettings.h" +#include "CVtEngEventManager.h" +#include "cvtengmediatorservice.h" + +#include +#include +#include +#include +#include +#include + +// CONSTANTS + +// mediator command timeout +static const TInt KVtEngMdtrCmdTimeout = 500000; + +// array granularity is 2 (enable mic, disable mic commands) +static const TInt KVtEngMdtrCmdArrayGranularity = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngMdtrMessageListener* CVtEngMdtrMessageListener::NewL( + CVtEngUtility& aUtils ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.NewL" ) + CVtEngMdtrMessageListener* self = new( ELeave ) + CVtEngMdtrMessageListener( aUtils ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtEngMdtrMessageListener.NewL" ) + return self; + } + +// Destructor +CVtEngMdtrMessageListener::~CVtEngMdtrMessageListener() + { + // ignore error in unregistering + if ( iMediatorResponder ) + { + iMediatorResponder->UnregisterCommand( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + iCommandList ); + iCommandList.Close(); + iMediatorResponder->UnregisterCommand( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalCommands, + EVtMediatorReleaseDataport ); + + delete iMediatorResponder; + } + + + // ignore error in unregistering + if ( iMediatorEvents ) + { + iMediatorEvents->UnsubscribeEvent( KMediatorVideoTelephonyDomain, + KCatVideotelInternalEvents, + EVtMediatorEventVideoCallInformation ); + delete iMediatorEvents; + } + + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::MediatorCommandL +// Receives mediator command and passes it to service object +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrMessageListener::MediatorCommandL( + TUid /*aDomain*/, + TUid aCategory, + TInt aCommandId, + TVersion /*aVersion*/, + const TDesC8& /*aData*/ ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.MediatorCommandL" ) + // service object destroys itself after sending command response + CVtEngMediatorService::StartLD( *iMediatorResponder, iUtils, aCategory, aCommandId ); + __VTPRINTEXIT( "CVtEngMdtrMessageListener.MediatorCommandL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::CancelMediatorCommand +// Cancallation of mediator command. no-op, just returns response. +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrMessageListener::CancelMediatorCommand( + TUid /*aDomain*/, + TUid /*aCategory*/, + TInt /*aCommandId*/ ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.CancelMediatorCommand" ) + // No-op + __VTPRINTEXIT( "CVtEngMdtrMessageListener.CancelMediatorCommand" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrEventListener::MediatorEventL +// Receives mediator event from VT Mediator Plugin. The event +// contains CLI and/or Dataport name. +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrMessageListener::MediatorEventL( TUid /*aDomain*/, + TUid aCategory, + TInt aEventId, + const TDesC8& aData ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.MediatorEventL" ) + if ( aCategory == KCatVideotelInternalEvents && + aEventId == EVtMediatorEventVideoCallInformation ) + { + TVtMediatorInfoPackage package; + package.Copy( aData ); + TVtVideoTelephonyCallInformation data = package(); + __VTPRINT2( DEBUG_GEN, " VT call info data validity value=%d", + data.iEventDataValidity) + // if message contains dataport name save it + CVtEngSettings& settings = iUtils.Settings(); + if ( data.iEventDataValidity & + TVtVideoTelephonyCallInformation::EDataportValid ) + { + //__VTPRINT(DEBUG_GEN, " Dataport is ready") + settings.SetDataportInfoL( data.iDataport ); + } + // if message contains CLI info handle it (save and notify if state + // allows) + if ( data.iEventDataValidity & + TVtVideoTelephonyCallInformation::EDisplayTextValid ) + { + MVtEngSessionInfo::TCLI cli; + cli.iCallId = data.iCallId; + cli.iName = data.iDisplayText.Left( cli.iName.MaxLength() ); + cli.iVoiceCallPossible = data.iVoiceCallPossible; + settings.SetCLI( cli ); + + // ready == call is answered (allows setting app to foreground) + if ( IsReadyForCLIEvent() ) + { + // send event about CLI availability + CVtEngEventManager::NotifyEvent( KVtEngCLIAvailable ); + } + else + { + // Wait until connected state is reached (see HandleVtEventL) + __VTPRINT( DEBUG_GEN, + "CVtEngMdtrMessageListener defer CLI event" ) + iUtils.EventManager().AddObserverL( this ); + } + } + } + __VTPRINTEXIT( "CVtEngMdtrMessageListener.MediatorEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::HandleVtEventL +// +// Handles defered CLI event dispatching (to UI). CLI event was defered because +// engine state was not suitable in MediatorEventL which then started observing +// state changes. +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrMessageListener::HandleVtEventL( TInt aEvent ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.HandleVtEventL" ) + if ( aEvent == KVtEngSessionStateChanged && + IsReadyForCLIEvent() ) // <- ready == call is answered + { + iUtils.EventManager().RemoveObserver( this ); + __VTPRINT( DEBUG_GEN, + "CVtEngMdtrMessageListener dispatch defered CLI event" ) + CVtEngEventManager::NotifyEvent( KVtEngCLIAvailable ); + } + + __VTPRINTEXIT( "CVtEngMdtrMessageListener.HandleVtEventL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngMdtrMessageListener::ConstructL() + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.ConstructL" ) + + // for sending command responses + iMediatorResponder = CMediatorCommandResponder::NewL( this ); + + // for receiving events from VT Mediator Plugin (dataport/CLI info) + iMediatorEvents = CMediatorEventConsumer::NewL( this ); + + TCapabilitySet capSet; + capSet.SetEmpty(); + // for audio control + capSet.AddCapability( ECapabilityWriteDeviceData ); + + // define common attributes for all commands that engine is responsible for + MediatorService::TCommand command; + command.iCaps = capSet; + command.iVersion = TVersion( + KPhoneToVideotelCmdVersionMajor, + KPhoneToVideotelCmdVersionMinor, + KPhoneToVideotelCmdVersionBuild ); + command.iTimeout = KVtEngMdtrCmdTimeout; + + // enable microphone command + command.iCommandId = EVtCmdUnmute; + iCommandList.Append( command ); + + // disable microphone command + command.iCommandId = EVtCmdMute; + iCommandList.Append( command ); + + // register VT events that are raised by VT Mediator Plugin. + // !!! Note !!!! + // event subscription must be done before command registration because + // command registration triggers raising the event in the plugin. Different + // order would cause the engine to miss the event. + const TVersion commandVersion( + KVideotelMdtrCommandsVersionMajor, + KVideotelMdtrCommandsVersionMinor, + KVideotelMdtrCommandsVersionBuild ); + //capSet.SetEmpty(); + //capSet.AddCapability( ECapabilityPowerMgmt ); + + iMediatorResponder->RegisterCommand( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalCommands, + EVtMediatorReleaseDataport, + commandVersion, + capSet, + KVtEngMdtrCmdTimeout ); + + const TVersion eventVersion( + KTelephonyEventsVersionMajor, + KTelephonyEventsVersionMinor, + KTelephonyEventsVersionBuild ); + + TInt res = iMediatorEvents->SubscribeEvent( KMediatorVideoTelephonyDomain, + KCatVideotelInternalEvents, + EVtMediatorEventVideoCallInformation, + eventVersion ); + + if ( res == KErrNone ) + { + // register Mediator commands that we handle + res = iMediatorResponder->RegisterCommand( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + iCommandList ); + + } + __VTPRINTEXITR( "CVtEngMdtrMessageListener.ConstructL res=%d",res ) + // registering must not fail + User::LeaveIfError( res ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::CVtEngMdtrMessageListener +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngMdtrMessageListener::CVtEngMdtrMessageListener( CVtEngUtility& aUtils) + : iUtils( aUtils ), iCommandList( KVtEngMdtrCmdArrayGranularity ) + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.CVtEngMdtrMessageListener" ) + __VTPRINTEXIT( "CVtEngMdtrMessageListener.CVtEngMdtrMessageListener" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMdtrMessageListener::IsReadyForCLIEvent +// Checks if engine state is appropriate to send CLI event. +// ----------------------------------------------------------------------------- +// +TBool CVtEngMdtrMessageListener::IsReadyForCLIEvent() const + { + __VTPRINTENTER( "CVtEngMdtrMessageListener.IsReadyForCLIEvent" ) + const MVtEngSessionInfo::TSessionState state = + iUtils.StateManager()->SessionState(); + const TBool isReady = + ( state == MVtEngSessionInfo::EConnected || + state == MVtEngSessionInfo::ENegotiating || + state == MVtEngSessionInfo::EOpen ); + __VTPRINTEXITR( "CVtEngMdtrMessageListener.IsReadyForCLIEvent %d>", + isReady ) + return isReady; + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Base/cvtengmediatorservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Base/cvtengmediatorservice.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,301 @@ +/* +* 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" +* 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: Mediator service implementation +* +*/ + + + +// INCLUDE FILES +#include "cvtengmediatorservice.h" +#include "cvtenginternaloperation.h" +#include "CVtEngStateManager.h" +#include "CVtEngEventManager.h" +#include "VtEngUtils.h" +#include "CVtEngSettings.h" +#include +#include +#include +#include +#include +#include + +// CONSTANTS + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::StartLD +// Mediator service starter. +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::StartLD( + CMediatorCommandResponder& aResponder, + CVtEngUtility& aUtils, + const TUid aCategory, + const TInt aCommand ) + { + __VTPRINTENTER( "CVtEngMediatorService.StartLD" ) + CVtEngMediatorService* self = new ( ELeave ) CVtEngMediatorService( + aResponder, aUtils, aCategory, aCommand ); + CleanupStack::PushL( self ); + self->ConstructAndDoServiceL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtEngMediatorService.StartLD" ) + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CVtEngMediatorService::~CVtEngMediatorService() + { + // ensure this is removed + __VTPRINTENTER( "CVtEngMediatorService::~CVtEngMediatorService" ) + iUtils.EventManager().RemoveObserver( this ); + + // send response if destructed due to leave in ConstructAndDoServiceL + SendMediatorResponseD( EFalse ); + __VTPRINTEXIT( "CVtEngMediatorService::~CVtEngMediatorService" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::SetOperation +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::SetOperation( CVtEngOperation* /*aActiveOp*/ ) + { + __VTPRINTENTER( "CVtEngMediatorService.SetOperation" ) + // no-op + __VTPRINTEXIT( "CVtEngMediatorService.SetOperation" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::CommandCompleteL +// callback to internal operation. +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::CommandCompleteL( + const TVtEngCommandId /*aCommand*/, + const TInt aResult ) + { + __VTPRINTENTER( "CVtEngMediatorService.CommandCompleteL" ) + + iServiceStatus = aResult; + + // Sends response to Telephony if not already sent by + // HandleVtEventL -> SendMediatorResponseD + SendMediatorResponseD( ETrue ); + __VTPRINTEXITR( "CVtEngMediatorService.CommandCompleteL %d", aResult ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::HandleVtEventL +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::HandleVtEventL( TInt aEvent ) + { + __VTPRINTENTER( "CVtEngMediatorService.HandleVtEventL" ) + + // This is registered event observer when shutdown mediator command was + // received. Now send response if state precondition is met + if ( aEvent == KVtEngSessionStateChanged && + IsShuttingDown() ) + { + // no interest on events any more, task fulfilled + iUtils.EventManager().RemoveObserver( this ); + + // iServiceStatus used for mediator response + iServiceStatus = KErrNone; + + SendMediatorResponseD( EFalse ); + } + __VTPRINTEXIT( "CVtEngMediatorService.HandleVtEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::CVtEngMediatorService +// ----------------------------------------------------------------------------- +// +CVtEngMediatorService::CVtEngMediatorService( + CMediatorCommandResponder& aResponder, + CVtEngUtility& aUtils, + const TUid aCategory, + const TInt aCommandId ) : + iResponder( aResponder ), + iUtils( aUtils ), + iCategory( aCategory ), + iCommandId( aCommandId ), + iServiceStatus( KErrNotReady ) + { + __VTPRINTENTER( "CVtEngMediatorService.CVtEngMediatorService" ) + __VTPRINTEXIT( "CVtEngMediatorService.CVtEngMediatorService" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::ConstructAndDoServiceL +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::ConstructAndDoServiceL() + { + __VTPRINTENTER( "CVtEngMediatorService.ConstructAndDoServiceL" ) + __VTPRINT2( DEBUG_GEN, " CVtEngMediatorService.ConstructAndDoServiceL command id=%d", iCommandId ) + // if starting of any operation below fails (StartOperationL leaves), + // this object is deleted. Destructor sends mediator response. + // non-supported command leads to leave+destructor also (see default case) + if ( KCatVideotelInternalCommands == iCategory) + { + switch ( iCommandId ) + { + case EVtMediatorReleaseDataport: + if ( !IsShuttingDown() ) + { + // Mediator response is sent when state becomes appropriate, + // indicated by call to HandleVtEventL, or + // when operation callback CommandCompleteL is called, + // which ever comes first. However, this object is deleted + // only after operation callback is received. + iUtils.EventManager().AddObserverL( this ); + StartOperationL( KVtEngTerminateSession ); + } + // if already shutting down this is no op (and self destructed) + // if get this command because endactivecall from vt menu, do not do any op from here + else + { + SendMediatorResponseD(EFalse); + } + break; + default: + // requested command that is not supported, issue "failed" response + iServiceStatus = KErrNotSupported; + break; + } + } + else + { + switch ( iCommandId ) + { + case EVtCmdUnmute: + case EVtCmdMute: + { + TVtEngCommandId engineCmd = ( iCommandId == + EVtCmdUnmute ) ? KVtEngUnmuteOutgoingAudio : + KVtEngMuteOutgoingAudio; + if ( !IsShuttingDown() ) + { + StartOperationL( engineCmd ); + } + else + { + SendMediatorResponseD(EFalse); + } + } + break; + default: + // requested command that is not supported, issue "failed" response + iServiceStatus = KErrNotSupported; + break; + } + } + if ( iServiceStatus != KRequestPending && !IsShuttingDown() ) + { // results in destruction of this object and sending of mediator + // response with error + //__VTPRINT2( DEBUG_GEN, "CVtEngMediatorService.ConstructAndDoServiceL leave by iServiceStatus: %d", iServiceStatus ) + User::Leave( iServiceStatus ); + } + + __VTPRINTEXIT( "CVtEngMediatorService.ConstructAndDoServiceL" ) + } +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::IsShuttingDown +// Checks if shutdown is ongoing +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediatorService::IsShuttingDown() const + { + __VTPRINTENTER( "CVtEngMediatorService.IsShuttingDown" ) + const MVtEngSessionInfo::TSessionState state = + iUtils.StateManager()->SessionState(); + TBool isShuttingDown = EFalse; + + // consider shutdown true if clearing or idle + if ( state == MVtEngSessionInfo::EClearing || + state == MVtEngSessionInfo::EIdle ) + { + isShuttingDown = ETrue; + } + __VTPRINTEXITR( "CVtEngMediatorService.IsShuttingDown %d", + isShuttingDown ) + return isShuttingDown; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::StartOperationL +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::StartOperationL( const TVtEngCommandId aCommand ) + { + __VTPRINTENTER( "CVtEngMediatorService.StartOperationL" ) + iOperation = CVtEngInternalOperation::NewL( + aCommand, + iUtils.StateManager()->Handlers(), + *this ); + iOperation->ExecuteL(); + iServiceStatus = KRequestPending; + __VTPRINTEXIT( "CVtEngMediatorService.StartOperationL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediatorService::SendMediatorResponseD +// ----------------------------------------------------------------------------- +// +void CVtEngMediatorService::SendMediatorResponseD( const TBool aDeleteThis ) + { + __VTPRINTENTER( "CVtEngMediatorService.SendMediatorResponseD" ) + __VTPRINT2( DEBUG_GEN, "CVtEngMediatorService.SendMediatorResponseD command: %d", iCommandId ) + if ( iCommandId != KErrNotFound ) + { + if ( iCategory == KCatVideotelInternalCommands && iCommandId == EVtMediatorReleaseDataport ) + { + iResponder.IssueResponse( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalCommands, + iCommandId, + iServiceStatus, + KNullDesC8() ); + } + else + { + iResponder.IssueResponse( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + iCommandId, + iServiceStatus, + KNullDesC8() ); + } + + // prevents further response because destructor also calls this method + iCommandId = KErrNotFound; + } + if ( aDeleteThis ) + { + // note! check above is mandatory because this method is called + // also from destructor. + delete this; + } + __VTPRINTEXIT( "CVtEngMediatorService.SendMediatorResponseD" ) + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Commands/CVtEngCommandHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Commands/CVtEngCommandHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,549 @@ +/* +* Copyright (c) 2006 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: Handles commands from user interface. +* +*/ + + + +// INCLUDE FILES + +#include +#include "CVtEngCommandHandler.h" +#include "CVtEngHandlerContainer.h" +#include "MVtEngCommandObserver.h" +#include "CVtEngOperation.h" +#include +#include "CVtEngStateManager.h" +#include +#include "VtEngUtils.h" + +#include "CVtEngStateIdle.h" +#include "CVtEngStateInitializing.h" +#include "CVtEngStateConnected.h" +#include "CVtEngStateRinging.h" +#include "CVtEngStateOpen.h" +#include "CVtEngStateNegotiating.h" +#include "CVtEngStateClearing.h" +#include "CVtEngStateAlerting.h" + +// CONSTANTS +const TInt KVtEngCommandPoolCommands = 1; + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CVtEngCommandHandler +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngCommandHandler::CVtEngCommandHandler( + CVtEngHandlerContainer& aHandlers ) : + iObservers( 1 ), + iHandlers( aHandlers ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::ConstructL() + { + __VTPRINTENTER( "CmdHlr.ConstructL" ) + iCommandPool = new ( ELeave ) CVtEngCmdPool( KVtEngCommandPoolCommands ); + + // session termination + AddToPoolL( KVtEngInitializeEngine ); + AddToPoolL( KVtEngInitializeEngineDiag ); + AddToPoolL( KVtEngInitializeEngineTest ); + AddToPoolL( KVtEngPrepareViewFinder ); + AddToPoolL( KVtEngPrepareRemoteRenderDSA ); + AddToPoolL( KVtEngPrepareRemoteRenderDP ); + AddToPoolL( KVtEngPrepareRemoteRenderNGA ); + AddToPoolL( KVtEngResetEngine ); + __VTPRINTEXIT( "CmdHlr.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngCommandHandler* CVtEngCommandHandler::NewL( CVtEngHandlerContainer& aHandlers ) + { + __VTPRINT( DEBUG_GEN | DEBUG_CONSTRUCT, "CmdHlr.New") + CVtEngCommandHandler* self = new( ELeave ) CVtEngCommandHandler( aHandlers ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CVtEngCommandHandler::~CVtEngCommandHandler() + { + __VTPRINTENTER( "CmdHlr.~" ) + iObservers.Close(); + if ( iActiveOp ) + { + if ( iCommandPool->Get( iActiveOp->Command() ) == NULL ) + { + delete iActiveOp; + } + } + delete iCommandPool; + __VTPRINTEXIT( "CmdHlr.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::ExecuteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::ExecuteL( + const TVtEngCommandId aCommandId, + TDesC8* aParams ) + { + __VTPRINTENTER( "CmdHlr.ExecuteL" ) + + __VTPRINT2( DEBUG_GEN, "ComHlr:Exec cmdId=%d", aCommandId ) + ValidateL( aCommandId, aParams ); + CVtEngOperation* opFromPool = iCommandPool->Get( aCommandId ); + CVtEngOperation* op = opFromPool; + if ( op == NULL ) + { + op = CVtEngOperation::NewL( aCommandId, iHandlers, *this ); + CleanupStack::PushL( op ); + } + + switch ( aCommandId ) + { + case KVtEngInitializeEngine: + case KVtEngInitializeEngineTest: + case KVtEngInitializeEngineDiag: + case KVtEngResetEngine: + case KVtEngTerminateSession: + case KVtEngStartViewFinder: + case KVtEngStopViewFinder: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngPauseRenderRemote: + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + case KVtEngStopDtmfTone: + case KVtEngRequestLastRemoteFrame: + // Handling of different UIIs + case KVtEngSetUIIDtmfSupport: + case KVtEngSetUIIBasicStringSupport: + case KVtEngSetUIIIA5StringSupport: + case KVtEngSetUIIGeneralStringSupport: + case KVtEngFreeze: + case KVtEngUnfreeze: + case KVtEngHandleLayoutChange: + + // Media object sharing (no parameters ) + case KVtEngStartShareImage: + case KVtEngStopShareImage: + op->ExecuteL( NULL ); + break; + // Media + case KVtEngSetUIForeground: + case KVtEngPrepareCamera: + case KVtEngPrepareViewFinder: + case KVtEngPrepareViewFinderDSA: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareViewFinderDP: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngSetSource: + case KVtEngSetZoomStep: + case KVtEngSetAudioRouting: + case KVtEngSetAudioVolume: + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + case KVtEngSendDtmf: + case KVtEngStartDtmfTone: + case KVtEngSetVideoQuality: + case KVtEngSwitchToVoice: + // Extension commands + case KVtEngSetContrast: + case KVtEngSetBrightness: + case KVtEngSetWhiteBalance: + case KVtEngSetColorTone: +#if defined ( RD_VT_RTF ) + case KVtEngStartRecord: + case KVtEngStopRecord: +#endif + // Media object sharing (with parameters ) + case KVtEngInitializeShareImage: + // Flow through, ok to execute + op->ExecuteL( aParams ); + break; + default: + User::Leave( KErrNotSupported ); + } + if ( opFromPool == NULL ) + { + CleanupStack::Pop( ); // op (deletes itself) + } + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update(); + __VTPRINTEXIT( "CmdHlr.ExecuteL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CancelCommand +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngCommandHandler::CancelCommand( const TVtEngCommandId aCommandId ) + { + __VTPRINTENTER( "CmdHlr.CancelCommand" ) + + __VTPRINT2( DEBUG_GEN, "ComHlr.Cancel cmd=%d", aCommandId ) + TInt err( KErrGeneral ); + if ( iActiveOp && + iActiveOp->Command() == aCommandId && + aCommandId != KVtEngResetEngine && + aCommandId != KVtEngInitializeEngineTest && + aCommandId != KVtEngInitializeEngineDiag) + { + iActiveOp->Cancel(); + err = KErrNone; + } + __VTPRINT2( DEBUG_GEN | DEBUG_DETAIL, "ComHlr.Cancel res=%d",err ) + __VTPRINTEXIT( "CmdHlr.CancelCommand" ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::GetCommandCaps +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngCommandHandler::GetCommandCaps( + const TVtEngCommandId aCommand ) + { + TInt caps( 0 ); + CheckAsynchronity( aCommand, caps ); + CheckSupport( aCommand, caps ); + CheckState( aCommand, caps ); + return caps; + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::PendingCommand +// +// ----------------------------------------------------------------------------- +// +TVtEngCommandId CVtEngCommandHandler::PendingCommand() + { + if ( iActiveOp ) + { + return iActiveOp->Command(); + } + return KVtEngCommandNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::AddObserverL +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::AddObserverL( + MVtEngCommandObserver& aObserver ) + { + User::LeaveIfError( iObservers.Append( &aObserver ) ); + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::RemoveObserver +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::RemoveObserver( + MVtEngCommandObserver& aObserver ) + { + const TInt pos( iObservers.Find( &aObserver ) ); + if ( pos >= 0 ) + { + iObservers.Remove( pos ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CommandCompleteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::CommandCompleteL( + const TVtEngCommandId aCommand, + const TInt aResult ) + { + __VTPRINTENTER( "CmdHlr.CommandCompleteL" ) + __VTPRINT3( DEBUG_GEN, " completed cmd=%d,res=%d", aCommand, aResult ) + TInt count( iObservers.Count() ); + while ( count-- ) + { + MVtEngCommandObserver* observer = iObservers[ count ]; + observer->HandleVTCommandPerformedL( aCommand, aResult ); + } + __VTPRINTEXIT( "CmdHlr.CommandCompleteL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::SetOperation +// Sets active operation +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::SetOperation( CVtEngOperation* aActiveOp ) + { + iActiveOp = aActiveOp; + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::AddToPoolL +// Adds a command to command pool. Only commands without parameters and +// that don't delete themselfs can currently be added. +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::AddToPoolL( TVtEngCommandId aCommand ) + { + CVtEngOperation* op = CVtEngOperation::NewL( + aCommand, iHandlers, *this, EFalse ); + CleanupStack::PushL( op ); + iCommandPool->AppendL( op ); + CleanupStack::Pop(); // op + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::ValidateL +// Checks if command can be performed. +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::ValidateL( + const TVtEngCommandId aCommandId, + TDesC8* /*aParams*/ ) + { + // check if async command is already pending and new + // command is async + TInt caps( 0 ); + CheckState( aCommandId, caps ); + if ( !(caps & EAttribEnabled ) ) + { + User::Leave( KErrNotReady ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CheckAsynchronity +// Checks if command is async +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::CheckAsynchronity( + const TVtEngCommandId aCommandId, + TInt& aCaps ) + { + switch ( aCommandId ) + { + case KVtEngInitializeEngine: + case KVtEngInitializeEngineTest: + case KVtEngInitializeEngineDiag: + case KVtEngResetEngine: + case KVtEngTerminateSession: + case KVtEngSetSource: + case KVtEngPrepareCamera: + case KVtEngSetAudioRouting: + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + case KVtEngSetAudioVolume: + case KVtEngHandleLayoutChange: + case KVtEngUnfreeze: + + // Media object sharing + case KVtEngInitializeShareImage: + case KVtEngStartShareImage: + case KVtEngStopShareImage: + case KVtEngSwitchToVoice: + aCaps |= EAttribAsync; + break; + default: + aCaps &= (~EAttribAsync); + break; + } + __VTPRINT3( DEBUG_GEN | DEBUG_RETURN, "ComHlr:capsA cmd=%d,caps=%d", aCommandId, aCaps ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CheckSupport +// Checks if command is supported +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::CheckSupport( + const TVtEngCommandId aCommandId, + TInt& aCaps ) + { + switch ( aCommandId ) + { + case KVtEngInitializeEngine: + case KVtEngInitializeEngineTest: + case KVtEngInitializeEngineDiag: + case KVtEngResetEngine: + case KVtEngTerminateSession: + case KVtEngStartViewFinder: + case KVtEngStopViewFinder: + case KVtEngPrepareViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngSetAudioRouting: + case KVtEngSetAudioVolume: + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + case KVtEngPauseRenderRemote: + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + case KVtEngSetSource: + case KVtEngPrepareCamera: + case KVtEngStartDtmfTone: + case KVtEngStopDtmfTone: + case KVtEngFreeze: + case KVtEngUnfreeze: + case KVtEngSetVideoQuality: + case KVtEngHandleLayoutChange: + // Handling of different UIIs, support is there + case KVtEngSetUIIDtmfSupport: + case KVtEngSetUIIBasicStringSupport: + case KVtEngSetUIIIA5StringSupport: + case KVtEngSetUIIGeneralStringSupport: + case KVtEngSetUIForeground: + case KVtEngRequestLastRemoteFrame: + + // Media object sharing + case KVtEngInitializeShareImage: + case KVtEngStartShareImage: + case KVtEngStopShareImage: + case KVtEngSwitchToVoice: + aCaps |= EAttribSupported; + break; + + // Extension commands + case KVtEngSetContrast: + case KVtEngSetBrightness: + case KVtEngSetWhiteBalance: + case KVtEngSetColorTone: +#if defined ( RD_VT_RTF ) + case KVtEngStartRecord: + case KVtEngStopRecord: +#endif + aCaps |= EAttribSupported; + break; + + default: + aCaps &= (~EAttribSupported); + __VTPRINT( DEBUG_GEN, "ComHlr.NOT SUPPORTED" ) + break; + } + __VTPRINT3( DEBUG_GEN | DEBUG_DETAIL, " capsSupport cmd=%d,caps=%d", aCommandId, aCaps ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CheckState +// Checks if command is possible in current state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngCommandHandler::CheckState( + const TVtEngCommandId aCommandId, + TInt& aCaps ) + { + aCaps &= (~EAttribEnabled); + if ( !(iActiveOp && ( aCaps & EAttribAsync ) ) ) + { + const CVtEngStateManager* states = CVtEngUtility::StateManager(); + if ( states->IsCommandPossible( aCommandId ) ) + { + aCaps |= EAttribEnabled; + } +#ifdef VTDEBUG + else + { + __VTPRINT( DEBUG_GEN, "ComHlr.ChkState INVALID" ) + } +#endif // VTDEBUG + } + __VTPRINT3( DEBUG_GEN | DEBUG_DETAIL, " capsState cmd=%d,caps=%d", aCommandId, aCaps ) + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CVtEngCmdPool::CVtEngCmdPool +// C++ constructor +// +// ----------------------------------------------------------------------------- +// +CVtEngCommandHandler::CVtEngCmdPool::CVtEngCmdPool( TInt aGranularity ) : + CArrayPtrFlat( aGranularity ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CVtEngCmdPool::CVtEngCmdPool +// Destructor - deletes operations in the pool. +// +// ----------------------------------------------------------------------------- +// +CVtEngCommandHandler::CVtEngCmdPool::~CVtEngCmdPool( ) + { + ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CVtEngCommandHandler::CVtEngCmdPool::Get +// Returns pointer to an operation in the pool. +// +// ----------------------------------------------------------------------------- +// +CVtEngOperation* CVtEngCommandHandler::CVtEngCmdPool::Get( + const TVtEngCommandId aId ) + { + TInt count( Count() ); + CVtEngOperation* ret = NULL; + while ( count-- ) + { + CVtEngOperation* op = At( count ); + if ( op->Command() == aId ) + { + ret = op; + count = 0; // break + } + } + return ret; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Commands/CVtEngOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Commands/CVtEngOperation.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,333 @@ +/* +* Copyright (c) 2006 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: Operation base class implementation. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngOperation.h" +#include "CVtEngCommandHandler.h" +#include "TVtEngOperationUtils.h" +#include "VtEngUtils.h" +#include "cvtengmdtrcommandsender.h" +#include "cvtlogger.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngOperation::NewL +// Symbian two-phase constructor +// +// ----------------------------------------------------------------------------- +// +CVtEngOperation* CVtEngOperation::NewL( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete ) + { + CVtEngOperation* self = new ( ELeave ) + CVtEngOperation( aCommandId, aHandlers, aObserver, aDelete ); + + CleanupStack::PushL( self ); + self->iAsyncCallback = new ( ELeave ) + CAsyncCallBack( CActive::EPriorityStandard ); + self->iAsyncCallback->Set( TCallBack( ASyncHandleOpComplete, self ) ); + + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::CVtEngOperation +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngOperation::CVtEngOperation( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete ) : + iCommand( aCommandId ), + iHandlers( aHandlers ), + iObserver( aObserver ), + iDelete( aDelete ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::~CVtEngOperation +// Destructor +// +// ----------------------------------------------------------------------------- +// +CVtEngOperation::~CVtEngOperation() + { + Cancel(); + delete iAsyncCallback; + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::HandleOpCompleteL +// Destructor +// +// ----------------------------------------------------------------------------- +// +void CVtEngOperation::HandleOpComplete( const TInt aResult ) + { + __VTPRINTENTER( "EngOp.HandleOpComplete" ) + iObserver.SetOperation( NULL ); + CVtEngMdtrCommandSender& mediatorSender = + CVtEngUtility::EngineUtils()->MediatorCommands(); + switch( iCommand ) + { + case KVtEngTerminateSession: + // send mediator command to telephony for call release + mediatorSender.EndCall(); + break; + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + // notify telephony subsystems about new microphone state + mediatorSender.NotifyOutgoingAudioState( + iCommand == KVtEngUnmuteOutgoingAudio ); + break; + default: + break; + } +#ifdef VTDEBUG + TRAPD( err, iObserver.CommandCompleteL( iCommand, aResult ) ); + __VTPRINT2( DEBUG_GEN, "EngOp.Complete err=", err ) +#else + TRAP_IGNORE( iObserver.CommandCompleteL( iCommand, aResult ) ); +#endif // VTDEBUG + if ( iDelete ) + { + delete this; + } + __VTPRINTEXITR( "EngOp.HandleOpComplete %d", aResult ) + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::ASyncHandleOpComplete +// Destructor +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngOperation::ASyncHandleOpComplete( TAny* aPtr ) + { + __VTPRINTENTER( "EngOp.ASyncHandleOpComplete" ) + CVtEngOperation* self = reinterpret_cast< CVtEngOperation* >( aPtr ); + TInt error( self->iAsyncErr ); + self->iAsyncErr = KErrNone; + self->HandleOpComplete( error ); + __VTPRINTEXIT( "EngOp.ASyncHandleOpComplete" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::ExecuteL +// Destructor +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngOperation::ExecuteL( TDesC8* aParams ) + { + __VTPRINTENTER( "EngOp.ExecuteL" ) + TBool complete( EFalse ); + + // Offer for synchronous handling. + TRAPD( err, complete = OfferExecuteSyncL( aParams ) ); +#ifdef VTDEBUG + if ( err < KErrNone ) + { + __VTPRINT2( DEBUG_GEN, "EngOp.ExecuteL LEAVE = %d", err ) + } +#endif + User::LeaveIfError( err ); + if ( !complete ) + { + // async request + switch ( iCommand ) + { + case KVtEngResetEngine: + case KVtEngInitializeEngine: + case KVtEngInitializeEngineTest: + case KVtEngInitializeEngineDiag: + case KVtEngTerminateSession: + case KVtEngSwitchToVoice: + TVtEngEngineInitUtil::HandleL( *this, iHandlers ); + break; + + case KVtEngSetSource: + case KVtEngPrepareCamera: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngStopViewFinder: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngHandleLayoutChange: + case KVtEngUnfreeze: + + // Media object sharing + case KVtEngStopShareImage: + TVtEngRenderUtil::HandleL( *this, iHandlers ); + break; + + // Media object sharing + // These two commands must be trapped and completed without leave + // because Application UI has to be able to act according to error. + case KVtEngInitializeShareImage: + case KVtEngStartShareImage: + TRAP( err, TVtEngRenderUtil::HandleL( *this, iHandlers ) ); + break; + + case KVtEngSetAudioRouting: + TVtEngAudioRoutingUtil::HandleL( *this ); + break; + + case KVtEngSetAudioVolume: + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + TVtEngAudioPlaybackUtil::HandleL( *this, iHandlers ); + break; + default: + __VTPRINT( DEBUG_GEN, "EngOp.ExecuteL not handled" ) + break; + } + + iObserver.SetOperation( this ); + + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_GEN, "EngOp.ExecuteL completing command %d", err ) + iAsyncErr = err; + iAsyncCallback->CallBack(); + } + } + else if ( iDelete ) + { + delete this; + } + __VTPRINTEXITR( "EngOp.ExecuteL %d", complete ) + return complete; + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::Cancel +// Cancels operation. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngOperation::Cancel() + { + __VTPRINTENTER( "EngOp.Cancel") + __VTPRINT2( DEBUG_GEN, "Command id = %d", iCommand) + switch ( iCommand ) + { + case KVtEngInitializeEngine: + //TVtEngEngineInitUtil::Cancel( *this ); + break; + case KVtEngInitializeShareImage: + TVtEngRenderUtil::Cancel( *this ,iHandlers); + break; + default: + break; + } + __VTPRINTEXIT( "EngOp.Cancel" ) + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CVtEngOperation::OfferExecuteSyncL +// +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngOperation::OfferExecuteSyncL( TDesC8* aParams ) + { + __VTPRINTENTER( "EngOp.OfferExecuteSyncL" ) + TBool complete( EFalse ); + iParams = aParams; // reset back to null in ExecuteL + // test + + switch ( iCommand ) + { + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + TVtEngAudioPlaybackUtil::HandleL( *this, iHandlers ); + complete = ETrue; + break; + case KVtEngPrepareViewFinder: + case KVtEngPrepareViewFinderDSA: + case KVtEngPrepareViewFinderDP: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngStopViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngPauseRenderRemote: + case KVtEngSetZoomStep: + case KVtEngFreeze: + TVtEngViewFinderConfigureUtil::HandleL( *this, iHandlers ); + complete = ETrue; + break; + case KVtEngPrepareRemoteRender: + break; + case KVtEngStartDtmfTone: + case KVtEngStopDtmfTone: + // Handling of different UIIs, support is there + case KVtEngSetUIIDtmfSupport: + case KVtEngSetUIIBasicStringSupport: + case KVtEngSetUIIIA5StringSupport: + case KVtEngSetUIIGeneralStringSupport: + + TVtEngMediaTransportUtil::HandleL( *this, iHandlers ); + complete = ETrue; + break; + + case KVtEngSetUIForeground: + case KVtEngSetVideoQuality: + case KVtEngRequestLastRemoteFrame: + TVtEngRenderUtil::HandleL( *this, iHandlers ); + complete = ETrue; + break; + + // Extension commands + case KVtEngSetContrast: + case KVtEngSetBrightness: + case KVtEngSetWhiteBalance: + case KVtEngSetColorTone: +#if defined ( RD_VT_RTF ) + case KVtEngStartRecord: + case KVtEngStopRecord: +#endif + TVtEngExtensionUtil::HandleL( *this ); + complete = ETrue; + break; + + default: + __VTPRINT( DEBUG_GEN, "EngOp.ExecuteL not handled sync" ) + break; + } + __VTPRINTEXITR( "EngOp.OfferExecuteSyncL %d", complete ) + return complete; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Commands/TVtEngOperationUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Commands/TVtEngOperationUtils.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,236 @@ +/* +* Copyright (c) 2006 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: Handler utilities implementation. +* +*/ + + + +// INCLUDE FILES +#include "TVtEngOperationUtils.h" +#include "VtEngPanic.h" +#include "CVtEngInitializer.h" +#include "VtEngUtils.h" +#include "CVtEngOperation.h" +#include "CVtEngHandlerContainer.h" +#include "CVtEngMediaHandler.h" +#include "CVtEngAudioHandler.h" +#include "CVtEngSessionHandler.h" +#include "CVtEngStateManager.h" +#include "CVtEngSettings.h" +#include "cvtengmdtrcommandsender.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtEngRenderUtil::HandleL +// unpacks and handles a rendering command +// +// ----------------------------------------------------------------------------- +// +void TVtEngRenderUtil::HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ) + { + CVtEngMediaHandler& media = + static_cast( aHandlers.Media() ); + + media.HandleL( aOperation ); + } + +// ----------------------------------------------------------------------------- +// TVtEngRenderUtil::Cancel +// cancel the specify pending command +// +// ----------------------------------------------------------------------------- +// + +void TVtEngRenderUtil::Cancel( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ) + { + const TVtEngCommandId id = aOperation.Command(); + __VTPRINTENTER( "TVtEngRenderUtil.Cancel") + __VTPRINT2( DEBUG_GEN, "Command id = %d", id) + if ( id == KVtEngInitializeShareImage ) + { + CVtEngMediaHandler& media = + static_cast( aHandlers.Media() ); + + media.CancelInitializeShareImage(); + } + __VTPRINTEXIT( "TVtEngRenderUtil.Cancel") + } +// ----------------------------------------------------------------------------- +// TVtEngAudioRoutingUtil::HandleL +// unpacks and handles audio routing command. +// +// ----------------------------------------------------------------------------- +// + +void TVtEngAudioRoutingUtil::HandleL( + CVtEngOperation& aOperation ) + { + CVtEngUtility::StateManager()->HandleOperationL( aOperation ); + } + +// ----------------------------------------------------------------------------- +// TVtEngAudioPlaybackUtil::HandleL +// unpacks and handles audio playback command. +// +// ----------------------------------------------------------------------------- +// +void TVtEngAudioPlaybackUtil::HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ) + { + __VTPRINTENTER( "AudioPlaybackUtil.HandleL" ) + if ( aOperation.Command() == KVtEngSetAudioVolume ) + { + CVtEngSettings& settings = CVtEngUtility::Settings(); + const TPckgC& pckg = + static_cast&> + ( *aOperation.Parameters() ); + + settings.SetVolume( pckg().iHandsetVolume, pckg().iHandsfreeVolume, + ETrue ); + } + + // All the commands are though passed to handler + CVtEngMediaHandler& media = + static_cast( aHandlers.Media() ); + __VTPRINT( DEBUG_DETAIL, "TVtEngAudioPlaybackUtil::HandleL:Handler fetched") + + media.HandleL( aOperation ); + __VTPRINTEXIT( "AudioPlaybackUtil.HandleL" ) + } + +// ----------------------------------------------------------------------------- +// TVtEngMediaTransportUtil::HandleL +// unpacks and handles media transport command. +// +// ----------------------------------------------------------------------------- +// +void TVtEngMediaTransportUtil::HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ) + { + __VTPRINTENTER( "MediaTransportUtil.HandleL" ) + const TVtEngCommandId command( aOperation.Command() ); + if ( command == KVtEngStopDtmfTone || + command == KVtEngStartDtmfTone || + // DTMF commands + command == KVtEngSetUIIDtmfSupport || + command == KVtEngSetUIIBasicStringSupport || + command == KVtEngSetUIIIA5StringSupport || + command == KVtEngSetUIIGeneralStringSupport ) + { + aHandlers.Dtmf().HandleL( aOperation ); + } + + __VTPRINTEXIT( "MediaTransportUtil.HandleL" ) + } + +// ----------------------------------------------------------------------------- +// TVtEngViewFinderConfigureUtil::HandleL +// unpacks and handles +// +// ----------------------------------------------------------------------------- +// +void TVtEngViewFinderConfigureUtil::HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& aHandlers ) + { + CVtEngMediaHandler& media = + static_cast( aHandlers.Media() ); + + media.HandleL( aOperation ); + } + +// ----------------------------------------------------------------------------- +// TVtEngCameraConfigUtil::HandleL +// unpacks and handles +// +// ----------------------------------------------------------------------------- +// +void TVtEngCameraConfigUtil::HandleL( + CVtEngOperation& /*aOperation*/, + CVtEngHandlerContainer& /*aHandlers*/ ) + { + } + +// ----------------------------------------------------------------------------- +// TVtEngEngineInitUtil::HandleL +// Handles engine initialization and uninitialization command. +// +// ----------------------------------------------------------------------------- +// +void TVtEngEngineInitUtil::HandleL( + CVtEngOperation& aOperation, + CVtEngHandlerContainer& /* aHandlers */ ) + { + __VTPRINTENTER( "EngineInitUtil.HandleL" ) + const TVtEngCommandId id = aOperation.Command(); + + CVtEngInitializer& initializer = + CVtEngUtility::EngineUtils()->Initializer(); + + switch ( id ) + { + case KVtEngInitializeEngine: + case KVtEngInitializeEngineDiag: + case KVtEngInitializeEngineTest: + initializer.InitializeL( aOperation ); + break; + case KVtEngResetEngine: + initializer.Uninitialize( aOperation ); + break; + case KVtEngTerminateSession: + CVtEngUtility::StateManager()->HandleOperationL( aOperation ); + break; + case KVtEngSwitchToVoice: + CVtEngUtility::MediatorCommands().SwitchToVoiceL( aOperation ); + break; + default: + Panic( EVtEngPanicIncorrectUtility ); + break; + } + __VTPRINTEXIT( "EngineInitUtil.HandleL" ) + } + +void TVtEngEngineInitUtil::Cancel( CVtEngOperation& aOperation ) + { + const TVtEngCommandId id = aOperation.Command(); + if ( id == KVtEngInitializeEngine ) + { + CVtEngInitializer& initializer = + CVtEngUtility::EngineUtils()->Initializer(); + initializer.CancelInit(); + } + } + +// ----------------------------------------------------------------------------- +// TVtEngExtensionUtil::HandleL +// handles extension operations. +// +// ----------------------------------------------------------------------------- +// +void TVtEngExtensionUtil::HandleL( + CVtEngOperation& aOperation ) + { + CVtEngUtility::StateManager()->HandleOperationL( aOperation ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Commands/cvtenginternaloperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Commands/cvtenginternaloperation.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,136 @@ +/* +* 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" +* 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: Internal operation class implementation +* +*/ + + +// INCLUDE FILES +#include "cvtenginternaloperation.h" +#include "mvtengoperationobserver.h" +#include "CVtEngStateManager.h" +#include "TVtEngOperationUtils.h" +#include "VtEngUtils.h" +#include "cvtlogger.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngOperation::NewL +// Symbian two-phase constructor +// +// ----------------------------------------------------------------------------- +// +CVtEngInternalOperation* CVtEngInternalOperation::NewL( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete ) + { + __VTPRINTENTER( "CVtEngInternalOperation.NewL<" ) + CVtEngInternalOperation* self = new ( ELeave ) + CVtEngInternalOperation( aCommandId, aHandlers, aObserver, aDelete ); + __VTPRINTEXIT( "CVtEngInternalOperation.NewL>" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngInternalOperation::CVtEngInternalOperation +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngInternalOperation::CVtEngInternalOperation( + TVtEngCommandId aCommandId, + CVtEngHandlerContainer& aHandlers, + MVtEngOperationObserver& aObserver, + TBool aDelete ) : CVtEngOperation( aCommandId, aHandlers, aObserver, + aDelete ) + { + __VTPRINTENTER( "CVtEngInternalOperation.CVtEngInternalOperation" ) + __VTPRINTEXIT( "CVtEngInternalOperation.CVtEngInternalOperation" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInternalOperation::~CVtEngInternalOperation +// Destructor +// +// ----------------------------------------------------------------------------- +// +CVtEngInternalOperation::~CVtEngInternalOperation() + { + __VTPRINTENTER( "CVtEngInternalOperation.~" ) + __VTPRINTEXIT( "CVtEngInternalOperation.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngInternalOperation::HandleOpCompleteL +// Destructor +// +// ----------------------------------------------------------------------------- +// +void CVtEngInternalOperation::HandleOpComplete( const TInt aResult ) + { + __VTPRINTENTER( "CVtEngInternalOperation.HandleOpComplete" ) + #ifdef VTDEBUG + TRAPD( err, iObserver.CommandCompleteL( iCommand, aResult ) ); + __VTPRINT2( DEBUG_GEN, "EngOp.Complete err=", err ) +#else + TRAP_IGNORE( iObserver.CommandCompleteL( iCommand, aResult ) ); +#endif // VTDEBUG + if ( iDelete ) + { + delete this; + } + __VTPRINTEXITR( "CVtEngInternalOperation.HandleOpComplete %d>", aResult ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// CVtEngInternalOperation::ExecuteL +// Destructor +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngInternalOperation::ExecuteL() + { + __VTPRINTENTER( "CVtEngInternalOperation.ExecuteL" ) + const CVtEngStateManager* states = CVtEngUtility::StateManager(); + TInt err( KErrNotReady ); + if ( states->IsCommandPossible( iCommand ) ) + { + err = KErrNone; + switch ( iCommand ) + { + case KVtEngTerminateSession: + TVtEngEngineInitUtil::HandleL( *this, iHandlers ); + break; + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + TVtEngAudioPlaybackUtil::HandleL( *this, iHandlers ); + break; + default: + __VTPRINT( DEBUG_GEN, "EngOp.ExecuteL not handled" ) + err = KErrNotSupported; + break; + } + } + User::LeaveIfError( err ); + __VTPRINTEXIT( "CVtEngInternalOperation.ExecuteL" ) + return EFalse; + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Extensions/CVtEngCameraPreferences.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Extensions/CVtEngCameraPreferences.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,437 @@ +/* +* Copyright (c) 2006 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: Videoteleng Camera Preferences extension +* +*/ + + +// INCLUDE FILES +#include "CVtEngCameraPreferences.h" +#include "VtEngPanic.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "mvtengcamerapreferencesobserver.h" + +#include +#include + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::CVtEngCameraPreferences +// C++ constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CVtEngCameraPreferences::CVtEngCameraPreferences(): + CVtEngExtensionBase( + KVtEngExtensionCameraPreferences ) + { + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::ConstructL +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CVtEngCameraPreferences::ConstructL() + { + __VTPRINTENTER( "CVtEngCameraPreferences.ConstructL" ) + __VTPRINTEXIT( "CVtEngCameraPreferences.ConstructL" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CVtEngCameraPreferences* CVtEngCameraPreferences::NewL() + { + CVtEngCameraPreferences* self = new( ELeave ) CVtEngCameraPreferences; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::~CVtEngCameraPreferences +// Destructor. Cannot leave. +// ---------------------------------------------------------------------------- +// +CVtEngCameraPreferences::~CVtEngCameraPreferences() + { + __VTPRINTENTER( "CameraPreferences.~" ) + if ( iObserver ) + { + iObserver->Detach( *this ); + } + __VTPRINTEXIT( "CameraPreferences.~" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetInterface +// +// ---------------------------------------------------------------------------- +// +TAny* CVtEngCameraPreferences::GetInterface() + { + __VTPRINTENTER( "CameraPreferences.GetInterface") + // Cast first as API MVtEngCameraPreferences* class + // and after that to TAny* + __VTPRINTEXIT( "CameraPreferences.GetInterface" ) + return reinterpret_cast< TAny* >( ( MVtEngCameraPreferences* ) this ); + + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::HandleL +// +// ---------------------------------------------------------------------------- +// +TBool CVtEngCameraPreferences::HandleL( CVtEngOperation* aOp ) + { + __VTPRINTENTER( "CameraPreferences.HandleL" ) + const TVtEngCommandId id( aOp->Command() ); + __VTPRINT2( DEBUG_GEN, "CVtEngCameraPreferences.HandleL CMD ID[%d] ", id ) + + // Check provider + if ( iProvider == NULL ) + { + __VTPRINTEXITR( "CVtEngCameraPreferences.HandleL iProvider [%d]", + ( TInt )iProvider ) + User::Leave( KErrNotReady ); + } + // Check which command and call + // active provider with operation params + switch ( id ) + { + case KVtEngSetContrast: + { + TInt contrast = 0; + TVtEngOpParamUtil< TInt >::Set( contrast, *aOp ); + iProvider->SetContrastL( contrast ); + if ( iObserver ) + { + iObserver->ContrastUpdated( contrast ); + } + break; + } + case KVtEngSetBrightness: + { + TInt brightness = 0; + TVtEngOpParamUtil< TInt >::Set( brightness, *aOp ); + iProvider->SetBrightnessL( brightness ); + if ( iObserver ) + { + iObserver->BrightnessUpdated( brightness ); + } + break; + } + case KVtEngSetWhiteBalance: + { + CCamera::TWhiteBalance whitebalance = CCamera::EWBAuto; + TVtEngOpParamUtil< CCamera::TWhiteBalance >::Set( whitebalance, + *aOp ); + iProvider->SetWhiteBalanceL( whitebalance ); + if ( iObserver ) + { + iObserver->WhiteBalanceUpdated( TWhiteBalance( whitebalance ) ); + } + break; + } + case KVtEngSetColorTone: + { + CCamera::CCameraImageProcessing::TEffect colortone = + CCamera::CCameraImageProcessing::EEffectNone; + TVtEngOpParamUtil< CCamera::CCameraImageProcessing::TEffect >::Set( + colortone, *aOp ); + iProvider->SetColorToneL( colortone ); + if ( iObserver ) + { + iObserver->ColorToneUpdated( TColorTone( colortone ) ); + } + break; + } + //Not supported command + default: + __VTPRINTEXITR( + "CVtEngCameraPreferences.HandleL NOT SUPPORTED CMD[%d]", id ) + return EFalse; + } + __VTPRINTEXIT( "CameraPreferences.HandleL" ) + return ETrue; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::ValidateCommand +// +// ---------------------------------------------------------------------------- + +TBool CVtEngCameraPreferences::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINTENTER( "CameraPreferences.ValidateCommand" ) + // Check provider + if ( iProvider == NULL ) + { + __VTPRINTEXITR( + "CVtEngCameraPreferences.ValidateCommand iProvider [%d]", + ( TInt ) iProvider) + return EFalse; + } + // Take provider info is needed down below + TVSDataProviderInfo info; + iProvider->ProviderInfo( info ); + + // local or hw support + // set as False + TBool hworlocalsupport = EFalse; + + // Check which command and check if + // if provider and local variation supports + __VTPRINT2( DEBUG_GEN, + "CVtEngCameraPreferences.ValidateCommand CMD ID[%d] ", aCommandId ) + switch ( aCommandId ) + { + case KVtEngSetContrast: + { + if ( info.iOptionsSupported & TCameraInfo::EContrastSupported ) + { + hworlocalsupport = ETrue; + } + break; + } + case KVtEngSetBrightness: + { + if ( info.iOptionsSupported & TCameraInfo::EBrightnessSupported ) + { + hworlocalsupport = ETrue; + } + break; + } + case KVtEngSetWhiteBalance: + { + if ( info.iWhiteBalanceModesSupported != CCamera::EWBAuto ) + { + hworlocalsupport = ETrue; + } + break; + } + case KVtEngSetColorTone: + { + if ( info.iSupportedColorTones != + CCamera::CCameraImageProcessing::EEffectNone ) + { + hworlocalsupport = ETrue; + } + break; + } + // Not supported command + default: + { + __VTPRINT2( DEBUG_GEN, + "CVtEngCameraPreferences.ValidateCommand NOT SUPPORTED CMD[%d]", + aCommandId) + hworlocalsupport = EFalse; + } + } + __VTPRINTEXITR( "CVtEngCameraPreferences.ValidateCommand return value[%d]", + hworlocalsupport) + return hworlocalsupport; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetColorTone +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetColorTone( + MVtEngCameraPreferences::TColorTone& aColortone ) const + { + __VTPRINTENTER( "CameraPreferences.GetColorTone" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( "CVtEngCameraPreferences.GetColorTone iProvider[%d]", + ( TInt )iProvider) + return KErrNotReady; + } + TInt error; + CCamera::CCameraImageProcessing::TEffect colortone; + error = iProvider->GetColorTone( colortone ); + aColortone = ( MVtEngCameraPreferences::TColorTone ) colortone; + __VTPRINTEXITR( "CameraPreferences.GetColorTone error [%d]",error ) + return error; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetSupportedColorTones +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetSupportedColorTones( + TUint32& aSupportedColorTones ) const + { + __VTPRINTENTER( "CameraPreferences.GetSupportedColorTones" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( + "CVtEngCameraPreferences.GetSupportedColorTones iProvider[%d]", + ( TInt )iProvider) + return KErrNotReady; + } + + TVSDataProviderInfo info; + iProvider->ProviderInfo( info ); + aSupportedColorTones = info.iSupportedColorTones; + __VTPRINTEXITR( "CameraPreferences.GetSupportedColorTones [%b]", + info.iSupportedColorTones) + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetWhiteBalance +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetWhiteBalance( + MVtEngCameraPreferences::TWhiteBalance& aWhiteBalance ) const + { + __VTPRINTENTER( "CameraPreferences.GetWhiteBalance" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( + "CVtEngCameraPreferences.GetWhiteBalance iProvider [%d]", + ( TInt )iProvider ) + return KErrNotReady; + } + TInt error; + CCamera::TWhiteBalance whitebalance; + error = iProvider->GetWhiteBalance( whitebalance ); + aWhiteBalance = (MVtEngCameraPreferences::TWhiteBalance) whitebalance; + __VTPRINTEXITR( "CameraPreferences.GetWhiteBalance error [%d]",error ) + return error; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetSupportedWhiteBalanceModes +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetSupportedWhiteBalanceModes( + TUint32& aWhiteBalance ) const + { + __VTPRINTENTER( "CameraPreferences.GetSupportedWhiteBalanceModes" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( + "CVtEngCameraPreferences.GetSupportedWhiteBalanceModes iProvider [%d]", + ( TInt )iProvider) + return KErrNotReady; + } + + TVSDataProviderInfo info; + iProvider->ProviderInfo( info ); + aWhiteBalance = info.iWhiteBalanceModesSupported; + __VTPRINTEXITR( "CameraPreferences.GetSupportedWhiteBalanceModes [%b]", + info.iWhiteBalanceModesSupported) + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetBrightness +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetBrightness( TInt& aBrightness ) const + { + __VTPRINTENTER( "CameraPreferences.GetBrightness" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( "CVtEngCameraPreferences.GetBrightness iProvider [%d]", + ( TInt )iProvider) + + return KErrNotReady; + } + TInt error; + error = iProvider->GetBrightness( aBrightness ); + __VTPRINTEXITR( "CameraPreferences.GetBrightness error [%d]",error ) + return error; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::GetContrast +// +// ---------------------------------------------------------------------------- +// +TInt CVtEngCameraPreferences::GetContrast( TInt& aContrast ) const + { + __VTPRINTENTER( "CameraPreferences.GetContrast" ) + if ( iProvider == NULL ) + { + __VTPRINTEXITR( "CVtEngCameraPreferences.GetContrast iProvider [%d]", + ( TInt )iProvider) + return KErrNotReady; + } + TInt error; + error = iProvider->GetContrast( aContrast ); + __VTPRINTEXITR( "CameraPreferences.GetContrast error [%d]",error ) + + return error; + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::SetProvider +// +// ---------------------------------------------------------------------------- +// +void CVtEngCameraPreferences::SetProvider( CVSDataProvider* aProvider, + MVtEngCameraPreferencesObserver& aObserver ) + { + __VTPRINTENTER( "CameraPreferences.SetProvider" ) + if ( iObserver ) + { + iObserver->Detach( *this ); + iObserver = NULL; + } + iProvider = aProvider; + iObserver = &aObserver; + if ( iObserver ) + { + iObserver->Attach( *this ); + } + __VTPRINTEXIT( "CameraPreferences.SetProvider" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngCameraPreferences::Detach +// +// ---------------------------------------------------------------------------- +// +void CVtEngCameraPreferences::Detach( MVtEngCameraPreferencesObserver& + aObserver ) + { + __VTPRINTENTER( "CameraPreferences.Detach" ) + if ( iObserver == &aObserver ) + { + iObserver = NULL; + } + __VTPRINTEXITR( "CameraPreferences.Detach $%x", TInt( iObserver ) ) + } + + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Extensions/CVtEngExtensionBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Extensions/CVtEngExtensionBase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006 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: Videoteleng extension base class +* +*/ + + +// INCLUDE FILES +#include "CVtEngExtensionBase.h" + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CVtEngExtensionBase::CVtEngExtensionBase +// C++ constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CVtEngExtensionBase::CVtEngExtensionBase( TUid aExtensionUid ): + iExtensionUid( aExtensionUid ) + { + } +// ---------------------------------------------------------------------------- +// CVtEngExtensionBase::Uid +// +// +// ---------------------------------------------------------------------------- +// +const TUid& CVtEngExtensionBase::Uid() const + { + return iExtensionUid; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Extensions/CVtEngExtensions.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Extensions/CVtEngExtensions.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,267 @@ +/* +* Copyright (c) 2006 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: Videoteleng API extension configuration +* +*/ + + +// INCLUDE FILES +#include "CVtEngExtensions.h" +#include "VtEngPanic.h" +#include "VtEngUtils.h" + +#include "CVtEngOperation.h" +#include "CVtEngMediaHandler.h" +#include "CVtEngCameraPreferences.h" +#include "cvtengrecord2file.h" + +#include + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::CVtEngExtensions +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngExtensions::CVtEngExtensions(): + iExtensionArray( KExtensionGranularity ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngExtensions::ConstructL() + { + __VTPRINTENTER( "Extensions.ConstructL" ) + __VTPRINTEXIT( "Extensions.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngExtensions* CVtEngExtensions::NewL() + { + CVtEngExtensions* self = new( ELeave ) CVtEngExtensions; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::~CVtEngExtensions +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngExtensions::~CVtEngExtensions() + { + __VTPRINTENTER( "Extensions.~" ) + // Clean and destroy pointer array + iExtensionArray.ResetAndDestroy(); + __VTPRINTEXIT( "Extensions.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::CreateExtensions +// +// ----------------------------------------------------------------------------- +// +CVtEngExtensionBase* CVtEngExtensions::CreateExtensionsL( const TUid& aUid, + CVtEngMediaHandler& aHandler) + { + __VTPRINTENTER( "Extensions.CreateExtensions" ) + + // init local variables + TInt error = KErrNotSupported; + CVtEngExtensionBase* extension = NULL; + + // Check if supported UID + if ( aUid == KVtEngExtensionCameraPreferences || + aUid == KVtEngExtensionRecord2File ) + { + // Create extension + extension = aHandler.CreateExtensionsL( aUid ); + + // Push it to clean up stack because + // it needs to be append in to + // array and it can be failed + CleanupStack::PushL( extension ); + + // append extension in to array + error = iExtensionArray.Append(extension); + if ( error != KErrNone ) + { + // if append fails + // clear clean up stack and leave + __VTPRINTEXITR( + "Extensions.CreateExtensions iExtension.Append failed %d", + error ) + CleanupStack::PopAndDestroy(); + User::Leave( error ); + } + // append succesful + // pop extension from clena up stack and return + __VTPRINTEXITR( + "Extensions.CreateExtensions iExtension UID[%d] succesfully Appended", + aUid.iUid) + CleanupStack::Pop(); + return extension; + } + // not supported UID + // leave with error + else + { + __VTPRINTEXITR( + "Extensions.CreateExtensions Extension NOTSUPPORTED UID%d", + aUid.iUid ) + User::Leave( error ); + return extension; + } + + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::GetClientInterface +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngExtensions::GetClientInterface( TAny** aInterfacePtr, + const TUid& aUid , CVtEngMediaHandler& aHandler) + { + __VTPRINTENTER( "Extensions.GetClientInterface" ) + // if aInterfacePtr pointer is NULL -> panic + __ASSERT_ALWAYS( aInterfacePtr,Panic( EVtEngPanicInvalidPointer ) ); + + // init local variables + CVtEngExtensionBase* extension = NULL; + TInt error = KErrGeneral; + + // initialize IF pointer to be NULL + // if correct extension API IF is found + // then changed to valid pointer + *aInterfacePtr = NULL; + + // Check if extension is allready in pointer array + TInt index = LookupExtensions( aUid ); + if ( index != KErrNotFound ) + { + *aInterfacePtr = iExtensionArray[index]->GetInterface(); + __VTPRINTEXITR( "Extensions.GetClientInterface error [%d]", KErrNone ) + return KErrNone; + } + // Create extension + else + { + TRAP( error, extension = CreateExtensionsL( aUid, aHandler ) ); + if ( extension && error == KErrNone ) + { + *aInterfacePtr = extension->GetInterface(); + error = KErrNone; + } + __VTPRINTEXITR( "Extensions.GetClientInterface error [%d]", error ) + return error; + } + } +// ----------------------------------------------------------------------------- +// CVtEngExtensions::LookupExtensions +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngExtensions::LookupExtensions( const TUid& aUid) const + { + __VTPRINTENTER( "Extensions.LookupExtensions" ) + TInt index( iExtensionArray.Count() ); + + // Loop whole extension array + while( index-- ) + { + // If matches in one of arrays UIDs + if( aUid == iExtensionArray[index]->Uid() ) + { + __VTPRINTEXITR( "Extensions.LookupExtensions index [%d]", index) + return index; + } + } + __VTPRINTEXITR("Extensions.LookupExtensions Not Found index [%d]", + KErrNotFound) + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::OfferOperationL +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngExtensions::OfferOperationL( CVtEngOperation* aOp ) + { + __VTPRINTENTER( "Extensions.OfferOperationL" ) + + TInt index( iExtensionArray.Count() ); + + // Format cmdComleted as false + TBool cmdCompleted = EFalse; + // Offer operation to all extension in array + while( index-- ) + { + // If valid extension found + if ( iExtensionArray[index]->HandleL( aOp ) ) + { + cmdCompleted = ETrue; + break; + } + } + __VTPRINTEXITR( "Extensions.OfferOperationL cmdCompleted [%d]", + cmdCompleted) + return cmdCompleted; + } + +// ----------------------------------------------------------------------------- +// CVtEngExtensions::ValidateCommand +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngExtensions::ValidateCommand( const TVtEngCommandId aCommandId ) + { + __VTPRINTENTER( "Extensions.ValidateCommand" ) + TInt index( iExtensionArray.Count() ); + + // Format oKToPerform as false + TBool oKToPerform = EFalse; + // Try validate command in all extensions in array + while( index-- ) + { + // If valid extension found + if ( iExtensionArray[index]->ValidateCommand( aCommandId ) ) + { + oKToPerform = ETrue; + break; + } + } + __VTPRINTEXITR( "Extensions.ValidateCommand oKToPerform [%d]", + oKToPerform) + return oKToPerform; + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Extensions/cvtengr2ftoneplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Extensions/cvtengr2ftoneplayer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2003, 2004, 2006 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: Plays snap, self-timer and video start/stop sounds. +* +*/ + + +// INCLUDES +#include + +#include + +#include +#include + +#include + +#include "cvtengr2ftoneplayer.h" + +// CONSTANTS + +// FORWARD DECLARATIONS + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------- +// CVtEngR2FTonePlayer::CVtEngR2FTonePlayer +// C++ constructor +// ---------------------------------------------------------- +// +CVtEngR2FTonePlayer::CVtEngR2FTonePlayer() + { + } + + +// --------------------------------------------------------------------------- +// CVtEngR2FTonePlayer::NewL +// Symbian OS two-phased constructor +// --------------------------------------------------------------------------- +// +CVtEngR2FTonePlayer* CVtEngR2FTonePlayer::NewL() + { + CVtEngR2FTonePlayer* self = new ( ELeave ) CVtEngR2FTonePlayer(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + + +// ---------------------------------------------------------- +// CVtEngR2FTonePlayer::ConstructL +// Symbian OS 2nd phase constructor +// ---------------------------------------------------------- +// +void CVtEngR2FTonePlayer::ConstructL() + { + __VTPRINTENTER( "CVtEngR2FTonePlayer.ConstructL" ) + iAudioPlayer = CMdaAudioPlayerUtility::NewL( *this, + KAudioPriorityVideoRecording, + TMdaPriorityPreference( KAudioPrefCamera ) ); + + iVideoStartSound = StringLoader::LoadL( R_VIDEOTELUI_VIDEO_RECORD_START_SOUND_PATH ); + iVideoStopSound = StringLoader::LoadL( R_VIDEOTELUI_VIDEO_RECORD_STOP_SOUND_PATH ); + iSoundInProgress = EFalse; + iOpenFileInProgress = EFalse; + __VTPRINTEXIT( "CVtEngR2FTonePlayer.ConstructL" ) + } + + +// Destructor. +CVtEngR2FTonePlayer::~CVtEngR2FTonePlayer() + { + if ( iAudioPlayer ) + { + iAudioPlayer->Close(); + delete iAudioPlayer; + } + + delete iVideoStartSound; + delete iVideoStopSound; + } + + +// --------------------------------------------------------------------------- +// CVtEngR2FTonePlayer::PlaySound +// Play a sound with given id. +// --------------------------------------------------------------------------- +// +TInt CVtEngR2FTonePlayer::PlaySound( TInt aSound ) + { + __VTPRINTENTER( "CVtEngR2FTonePlayer.PlaySound" ) + TInt err = KErrNone; + iAudioPlayer->Stop(); + iAudioPlayer->Close(); + + switch ( aSound ) + { + case EVtR2FVideoStartSoundId: + case EVtR2FVideoStopSoundId: + { + __VTPRINT( DEBUG_GEN,"CVtEngR2FTonePlayer.PlaySound() user sound" ) + + // Set correct sound file + TPtrC soundFile = *iVideoStartSound; + if ( aSound == EVtR2FVideoStopSoundId ) + { + soundFile.Set( *iVideoStopSound ); + } + + // Video recording start sound using MMF + if ( !iOpenFileInProgress && !iSoundInProgress ) + { + TRAP( err, iAudioPlayer->OpenFileL( soundFile ) ); + if ( !err ) + { + __VTPRINT( DEBUG_GEN,"CVtEngR2FTonePlayer.PlaySound() open now in progress" ) + iOpenFileInProgress = ETrue; + } + } + else + { + __VTPRINT( DEBUG_GEN, "CVtEngR2FTonePlayer.PlaySound() err, in use" ) + // The last OpenFileL call still hasnt completed. + // Cannot start playing a new file. + err = KErrInUse; + } + break; + } + + default: + { + // Other sounds are not supported + err = KErrArgument; + break; + } + } + __VTPRINTEXIT( "CVtEngR2FTonePlayer.PlaySound" ) + return err; + } + +// --------------------------------------------------------------------------- +// CVtEngR2FTonePlayer::Stop +// Stop any ongoing sound. +// --------------------------------------------------------------------------- +// +void CVtEngR2FTonePlayer::StopSound() + { + __VTPRINTENTER( "CVtEngR2FTonePlayer.StopSound" ) + + iAudioPlayer->Stop(); + iAudioPlayer->Close(); + + __VTPRINTEXIT( "CVtEngR2FTonePlayer.StopSound" ) + } + +// --------------------------------------------------------------------------- +// CVtEngR2FTonePlayer::MapcInitComplete +// CMdaAudioPlayerUtility initialization complete +// --------------------------------------------------------------------------- +// +void CVtEngR2FTonePlayer::MapcInitComplete( + TInt aError, const TTimeIntervalMicroSeconds& aDuration ) + { + __VTPRINTENTER( "CVtEngR2FTonePlayer.MapcInitComplete" ) + __VTPRINT3( DEBUG_GEN, "CVtEngR2FTonePlayer.MapcInitComplete(%d, %d) ", + aError, I64INT( aDuration.Int64()) ) + + (void) aDuration; + + iOpenFileInProgress = EFalse; + + // If tone can be played + if ( !aError ) + { + __VTPRINT( DEBUG_GEN, "CVtEngR2FTonePlayer.MapcInitComplete() play" ) + iSoundInProgress = ETrue; + iAudioPlayer->Play(); + } + // error occured during tone player init + else + { + __VTPRINT( DEBUG_GEN,"CVtEngR2FTonePlayer.MapcInitComplete() error" ) + } + __VTPRINTEXIT( "CVtEngR2FTonePlayer.MapcInitComplete" ) + } + + +// --------------------------------------------------------------------------- +// CVtEngR2FTonePlayer::MapcPlayComplete +// Playback complete, notify observer +// --------------------------------------------------------------------------- +// +void CVtEngR2FTonePlayer::MapcPlayComplete( TInt aError ) + { + __VTPRINTENTER( "CVtEngR2FTonePlayer.MapcPlayComplete" ) + __VTPRINT2( DEBUG_GEN, "CVtEngR2FTonePlayer.MapcPlayComplete(%d)", aError) + + (void) aError; + + iSoundInProgress = EFalse; + __VTPRINTEXIT( "CVtEngR2FTonePlayer.MapcPlayComplete" ) + } + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Extensions/cvtengrecord2file.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Extensions/cvtengrecord2file.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,203 @@ +/* +* Copyright (c) 2006 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: Videoteleng Record to file extension +* +*/ + + +// INCLUDE FILES +#include "cvtengrecord2file.h" +#include "VtEngPanic.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "cvtengr2ftoneplayer.h" + +#include + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::CVtEngRecord2File +// C++ constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +CVtEngRecord2File::CVtEngRecord2File(): + CVtEngExtensionBase( + KVtEngExtensionRecord2File ) + { + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::ConstructL +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CVtEngRecord2File::ConstructL() + { + __VTPRINTENTER( "CVtEngRecord2File.ConstructL" ) + + iTonePlayer = CVtEngR2FTonePlayer::NewL(); + __VTPRINTEXIT( "CVtEngRecord2File.ConstructL" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CVtEngRecord2File* CVtEngRecord2File::NewL() + { + CVtEngRecord2File* self = new( ELeave ) CVtEngRecord2File; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::~CVtEngRecord2File +// Destructor. Cannot leave. +// ---------------------------------------------------------------------------- +// +CVtEngRecord2File::~CVtEngRecord2File() + { + + __VTPRINTENTER( "CVtEngRecord2File.~" ) + if ( iTonePlayer ) + { + iTonePlayer->StopSound(); + delete iTonePlayer; + } + __VTPRINTEXIT( "CVtEngRecord2File.~" ) + } +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::GetInterface +// +// ---------------------------------------------------------------------------- +// +TAny* CVtEngRecord2File::GetInterface() + { + __VTPRINTENTER( "CVtEngRecord2File.GetInterface") + // Cast first as API MVtEngRecord2File* class + // and after that to TAny* + __VTPRINTEXIT( "CVtEngRecord2File.GetInterface" ) + return reinterpret_cast< TAny* >( ( MVtEngRecord2File* ) this ); + + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::HandleL +// +// ---------------------------------------------------------------------------- +// +TBool CVtEngRecord2File::HandleL( CVtEngOperation* aOp ) + { + __VTPRINTENTER( "CVtEngRecord2File.HandleL" ) + const TVtEngCommandId id( aOp->Command() ); + __VTPRINT2( DEBUG_GEN, "CVtEngRecord2File.HandleL CMD ID[%d] ", id ) + + // Check which command and call + // active provider with operation params + switch ( id ) + { + case KVtEngStartRecord: + { + + iTonePlayer->PlaySound( CVtEngR2FTonePlayer::EVtR2FVideoStartSoundId ); + break; + } + case KVtEngStopRecord: + { + + iTonePlayer->PlaySound( CVtEngR2FTonePlayer::EVtR2FVideoStopSoundId ); + break; + } + //Not supported command + default: + __VTPRINTEXITR( + "CVtEngRecord2File.HandleL NOT SUPPORTED CMD[%d]", id ) + return EFalse; + } + __VTPRINTEXIT( "CVtEngRecord2File.HandleL" ) + return ETrue; + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::ValidateCommand +// +// ---------------------------------------------------------------------------- + +TBool CVtEngRecord2File::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINTENTER( "CVtEngRecord2File.ValidateCommand" ) + + // local or hw support + // set as False + TBool support = EFalse; + + // Check which command and check if + // if provider and local variation supports + __VTPRINT2( DEBUG_GEN, + "CVtEngRecord2File.ValidateCommand CMD ID[%d] ", aCommandId ) + switch ( aCommandId ) + { + case KVtEngStartRecord: + { + support = ETrue; + break; + } + + case KVtEngStopRecord: + { + support = ETrue; + break; + } + // Not supported command + default: + { + __VTPRINT2( DEBUG_GEN, + "CVtEngRecord2File.ValidateCommand NOT SUPPORTED CMD[%d]", + aCommandId) + support = EFalse; + } + } + __VTPRINTEXITR( "CVtEngRecord2File.ValidateCommand return value[%d]", + support) + return support; + } + +// ---------------------------------------------------------------------------- +// CVtEngRecord2File::IsTonePlaySupported +// FOR TESTING PURPOSES REMOVE! +// ---------------------------------------------------------------------------- + +TInt CVtEngRecord2File::IsTonePlaySupported( TBool& aSupported) const + { + if (iTonePlayer) + { + aSupported = ETrue; + } + else + { + aSupported = EFalse; + } + __VTPRINT2( DEBUG_GEN, "CVtEngRecord2File.IsTonePlaySupported bool[%d] ", (TInt)aSupported ) + return KErrNone; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngDrawDP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngDrawDP.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,2026 @@ +/* +* Copyright (c) 2004-2006 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: Remote video handler. +* +*/ + + +// INCLUDE FILES + +#include "CVtEngDrawDP.h" +#include "CVtEngEventManager.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "MVtEngFrameObserver.h" +#include +#include +#include +#include + +#include + +// LOCAL CONSTANTS AND MACROS + +// YCbCr conversion constants + +// Luma +static const TUint32 KYLut[ 256 ] = + { + 0x00000000, 0x00400801, 0x00801002, 0x00C01803, + 0x01002004, 0x01402805, 0x01803006, 0x01C03807, + 0x02004008, 0x02404809, 0x0280500A, 0x02C0580B, + 0x0300600C, 0x0340680D, 0x0380700E, 0x03C0780F, + 0x04008010, 0x04408811, 0x04809012, 0x04C09813, + 0x0500A014, 0x0540A815, 0x0580B016, 0x05C0B817, + 0x0600C018, 0x0640C819, 0x0680D01A, 0x06C0D81B, + 0x0700E01C, 0x0740E81D, 0x0780F01E, 0x07C0F81F, + 0x08010020, 0x08410821, 0x08811022, 0x08C11823, + 0x09012024, 0x09412825, 0x09813026, 0x09C13827, + 0x0A014028, 0x0A414829, 0x0A81502A, 0x0AC1582B, + 0x0B01602C, 0x0B41682D, 0x0B81702E, 0x0BC1782F, + 0x0C018030, 0x0C418831, 0x0C819032, 0x0CC19833, + 0x0D01A034, 0x0D41A835, 0x0D81B036, 0x0DC1B837, + 0x0E01C038, 0x0E41C839, 0x0E81D03A, 0x0EC1D83B, + 0x0F01E03C, 0x0F41E83D, 0x0F81F03E, 0x0FC1F83F, + 0x10020040, 0x10420841, 0x10821042, 0x10C21843, + 0x11022044, 0x11422845, 0x11823046, 0x11C23847, + 0x12024048, 0x12424849, 0x1282504A, 0x12C2584B, + 0x1302604C, 0x1342684D, 0x1382704E, 0x13C2784F, + 0x14028050, 0x14428851, 0x14829052, 0x14C29853, + 0x1502A054, 0x1542A855, 0x1582B056, 0x15C2B857, + 0x1602C058, 0x1642C859, 0x1682D05A, 0x16C2D85B, + 0x1702E05C, 0x1742E85D, 0x1782F05E, 0x17C2F85F, + 0x18030060, 0x18430861, 0x18831062, 0x18C31863, + 0x19032064, 0x19432865, 0x19833066, 0x19C33867, + 0x1A034068, 0x1A434869, 0x1A83506A, 0x1AC3586B, + 0x1B03606C, 0x1B43686D, 0x1B83706E, 0x1BC3786F, + 0x1C038070, 0x1C438871, 0x1C839072, 0x1CC39873, + 0x1D03A074, 0x1D43A875, 0x1D83B076, 0x1DC3B877, + 0x1E03C078, 0x1E43C879, 0x1E83D07A, 0x1EC3D87B, + 0x1F03E07C, 0x1F43E87D, 0x1F83F07E, 0x1FC3F87F, + 0x20040080, 0x20440881, 0x20841082, 0x20C41883, + 0x21042084, 0x21442885, 0x21843086, 0x21C43887, + 0x22044088, 0x22444889, 0x2284508A, 0x22C4588B, + 0x2304608C, 0x2344688D, 0x2384708E, 0x23C4788F, + 0x24048090, 0x24448891, 0x24849092, 0x24C49893, + 0x2504A094, 0x2544A895, 0x2584B096, 0x25C4B897, + 0x2604C098, 0x2644C899, 0x2684D09A, 0x26C4D89B, + 0x2704E09C, 0x2744E89D, 0x2784F09E, 0x27C4F89F, + 0x280500A0, 0x284508A1, 0x288510A2, 0x28C518A3, + 0x290520A4, 0x294528A5, 0x298530A6, 0x29C538A7, + 0x2A0540A8, 0x2A4548A9, 0x2A8550AA, 0x2AC558AB, + 0x2B0560AC, 0x2B4568AD, 0x2B8570AE, 0x2BC578AF, + 0x2C0580B0, 0x2C4588B1, 0x2C8590B2, 0x2CC598B3, + 0x2D05A0B4, 0x2D45A8B5, 0x2D85B0B6, 0x2DC5B8B7, + 0x2E05C0B8, 0x2E45C8B9, 0x2E85D0BA, 0x2EC5D8BB, + 0x2F05E0BC, 0x2F45E8BD, 0x2F85F0BE, 0x2FC5F8BF, + 0x300600C0, 0x304608C1, 0x308610C2, 0x30C618C3, + 0x310620C4, 0x314628C5, 0x318630C6, 0x31C638C7, + 0x320640C8, 0x324648C9, 0x328650CA, 0x32C658CB, + 0x330660CC, 0x334668CD, 0x338670CE, 0x33C678CF, + 0x340680D0, 0x344688D1, 0x348690D2, 0x34C698D3, + 0x3506A0D4, 0x3546A8D5, 0x3586B0D6, 0x35C6B8D7, + 0x3606C0D8, 0x3646C8D9, 0x3686D0DA, 0x36C6D8DB, + 0x3706E0DC, 0x3746E8DD, 0x3786F0DE, 0x37C6F8DF, + 0x380700E0, 0x384708E1, 0x388710E2, 0x38C718E3, + 0x390720E4, 0x394728E5, 0x398730E6, 0x39C738E7, + 0x3A0740E8, 0x3A4748E9, 0x3A8750EA, 0x3AC758EB, + 0x3B0760EC, 0x3B4768ED, 0x3B8770EE, 0x3BC778EF, + 0x3C0780F0, 0x3C4788F1, 0x3C8790F2, 0x3CC798F3, + 0x3D07A0F4, 0x3D47A8F5, 0x3D87B0F6, 0x3DC7B8F7, + 0x3E07C0F8, 0x3E47C8F9, 0x3E87D0FA, 0x3EC7D8FB, + 0x3F07E0FC, 0x3F47E8FD, 0x3F87F0FE, 0x3FC7F8FF + }; + +// Chroma1 (Cb) +static const TUint32 KCbLut[ 256 ] = + { + 0x0001531C, 0x00014B1E, 0x00014B20, 0x00014B22, + 0x00014324, 0x00014325, 0x00014327, 0x00013B29, + 0x00013B2B, 0x00013B2D, 0x0001332E, 0x00013330, + 0x00013332, 0x00012B34, 0x00012B35, 0x00012B37, + 0x00012339, 0x0001233B, 0x0001233D, 0x00011B3E, + 0x00011B40, 0x00011B42, 0x00011344, 0x00011345, + 0x00011347, 0x00010B49, 0x00010B4B, 0x00010B4D, + 0x0001034E, 0x00010350, 0x00010352, 0x0000FB54, + 0x0000FB55, 0x0000FB57, 0x0000F359, 0x0000F35B, + 0x0000F35D, 0x0000EB5E, 0x0000EB60, 0x0000EB62, + 0x0000E364, 0x0000E366, 0x0000E367, 0x0000DB69, + 0x0000DB6B, 0x0000DB6D, 0x0000D36E, 0x0000D370, + 0x0000D372, 0x0000CB74, 0x0000CB76, 0x0000CB77, + 0x0000C379, 0x0000C37B, 0x0000C37D, 0x0000BB7E, + 0x0000BB80, 0x0000BB82, 0x0000B384, 0x0000B386, + 0x0000B387, 0x0000AB89, 0x0000AB8B, 0x0000AB8D, + 0x0000AB8E, 0x0000A390, 0x0000A392, 0x0000A394, + 0x00009B96, 0x00009B97, 0x00009B99, 0x0000939B, + 0x0000939D, 0x0000939F, 0x00008BA0, 0x00008BA2, + 0x00008BA4, 0x000083A6, 0x000083A7, 0x000083A9, + 0x00007BAB, 0x00007BAD, 0x00007BAF, 0x000073B0, + 0x000073B2, 0x000073B4, 0x00006BB6, 0x00006BB7, + 0x00006BB9, 0x000063BB, 0x000063BD, 0x000063BF, + 0x00005BC0, 0x00005BC2, 0x00005BC4, 0x000053C6, + 0x000053C7, 0x000053C9, 0x00004BCB, 0x00004BCD, + 0x00004BCF, 0x000043D0, 0x000043D2, 0x000043D4, + 0x00003BD6, 0x00003BD8, 0x00003BD9, 0x000033DB, + 0x000033DD, 0x000033DF, 0x00002BE0, 0x00002BE2, + 0x00002BE4, 0x000023E6, 0x000023E8, 0x000023E9, + 0x00001BEB, 0x00001BED, 0x00001BEF, 0x000013F0, + 0x000013F2, 0x000013F4, 0x00000BF6, 0x00000BF8, + 0x00000BF9, 0x000003FB, 0x000003FD, 0x000003FF, + 0x00000000, 0x00000001, 0x00000003, 0x00000005, + 0x001FF807, 0x001FF808, 0x001FF80A, 0x001FF00C, + 0x001FF00E, 0x001FF010, 0x001FE811, 0x001FE813, + 0x001FE815, 0x001FE017, 0x001FE018, 0x001FE01A, + 0x001FD81C, 0x001FD81E, 0x001FD820, 0x001FD021, + 0x001FD023, 0x001FD025, 0x001FC827, 0x001FC828, + 0x001FC82A, 0x001FC02C, 0x001FC02E, 0x001FC030, + 0x001FB831, 0x001FB833, 0x001FB835, 0x001FB037, + 0x001FB039, 0x001FB03A, 0x001FA83C, 0x001FA83E, + 0x001FA840, 0x001FA041, 0x001FA043, 0x001FA045, + 0x001F9847, 0x001F9849, 0x001F984A, 0x001F904C, + 0x001F904E, 0x001F9050, 0x001F8851, 0x001F8853, + 0x001F8855, 0x001F8057, 0x001F8059, 0x001F805A, + 0x001F785C, 0x001F785E, 0x001F7860, 0x001F7061, + 0x001F7063, 0x001F7065, 0x001F6867, 0x001F6869, + 0x001F686A, 0x001F606C, 0x001F606E, 0x001F6070, + 0x001F5872, 0x001F5873, 0x001F5875, 0x001F5877, + 0x001F5079, 0x001F507A, 0x001F507C, 0x001F487E, + 0x001F4880, 0x001F4882, 0x001F4083, 0x001F4085, + 0x001F4087, 0x001F3889, 0x001F388A, 0x001F388C, + 0x001F308E, 0x001F3090, 0x001F3092, 0x001F2893, + 0x001F2895, 0x001F2897, 0x001F2099, 0x001F209A, + 0x001F209C, 0x001F189E, 0x001F18A0, 0x001F18A2, + 0x001F10A3, 0x001F10A5, 0x001F10A7, 0x001F08A9, + 0x001F08AB, 0x001F08AC, 0x001F00AE, 0x001F00B0, + 0x001F00B2, 0x001EF8B3, 0x001EF8B5, 0x001EF8B7, + 0x001EF0B9, 0x001EF0BB, 0x001EF0BC, 0x001EE8BE, + 0x001EE8C0, 0x001EE8C2, 0x001EE0C3, 0x001EE0C5, + 0x001EE0C7, 0x001ED8C9, 0x001ED8CB, 0x001ED8CC, + 0x001ED0CE, 0x001ED0D0, 0x001ED0D2, 0x001EC8D3, + 0x001EC8D5, 0x001EC8D7, 0x001EC0D9, 0x001EC0DB, + 0x001EC0DC, 0x001EB8DE, 0x001EB8E0, 0x001EB8E2 + }; + +// Chroma1 (Cr) +static const TUint32 KCrLut[ 256 ] = + { + 0xD302D000, 0xD382C800, 0xD3C2C000, 0xD442B800, + 0xD482B800, 0xD502B000, 0xD542A800, 0xD582A800, + 0xD602A000, 0xD6429800, 0xD6C29000, 0xD7029000, + 0xD7428800, 0xD7C28000, 0xD8028000, 0xD8827800, + 0xD8C27000, 0xD9027000, 0xD9826800, 0xD9C26000, + 0xDA425800, 0xDA825800, 0xDAC25000, 0xDB424800, + 0xDB824800, 0xDC024000, 0xDC423800, 0xDC823800, + 0xDD023000, 0xDD422800, 0xDDC22000, 0xDE022000, + 0xDE421800, 0xDEC21000, 0xDF021000, 0xDF820800, + 0xDFC20000, 0xE041F800, 0xE081F800, 0xE0C1F000, + 0xE141E800, 0xE181E800, 0xE201E000, 0xE241D800, + 0xE281D800, 0xE301D000, 0xE341C800, 0xE3C1C000, + 0xE401C000, 0xE441B800, 0xE4C1B000, 0xE501B000, + 0xE581A800, 0xE5C1A000, 0xE601A000, 0xE6819800, + 0xE6C19000, 0xE7418800, 0xE7818800, 0xE7C18000, + 0xE8417800, 0xE8817800, 0xE9017000, 0xE9416800, + 0xE9816800, 0xEA016000, 0xEA415800, 0xEAC15000, + 0xEB015000, 0xEB814800, 0xEBC14000, 0xEC014000, + 0xEC813800, 0xECC13000, 0xED412800, 0xED812800, + 0xEDC12000, 0xEE411800, 0xEE811800, 0xEF011000, + 0xEF410800, 0xEF810800, 0xF0010000, 0xF040F800, + 0xF0C0F000, 0xF100F000, 0xF140E800, 0xF1C0E000, + 0xF200E000, 0xF280D800, 0xF2C0D000, 0xF300D000, + 0xF380C800, 0xF3C0C000, 0xF440B800, 0xF480B800, + 0xF4C0B000, 0xF540A800, 0xF580A800, 0xF600A000, + 0xF6409800, 0xF6C09000, 0xF7009000, 0xF7408800, + 0xF7C08000, 0xF8008000, 0xF8807800, 0xF8C07000, + 0xF9007000, 0xF9806800, 0xF9C06000, 0xFA405800, + 0xFA805800, 0xFAC05000, 0xFB404800, 0xFB804800, + 0xFC004000, 0xFC403800, 0xFC803800, 0xFD003000, + 0xFD402800, 0xFDC02000, 0xFE002000, 0xFE401800, + 0xFEC01000, 0xFF001000, 0xFF800800, 0xFFC00000, + 0x00000000, 0x00400000, 0x009FF800, 0x011FF000, + 0x015FF000, 0x01DFE800, 0x021FE000, 0x025FE000, + 0x02DFD800, 0x031FD000, 0x039FC800, 0x03DFC800, + 0x041FC000, 0x049FB800, 0x04DFB800, 0x055FB000, + 0x059FA800, 0x05DFA800, 0x065FA000, 0x069F9800, + 0x071F9000, 0x075F9000, 0x079F8800, 0x081F8000, + 0x085F8000, 0x08DF7800, 0x091F7000, 0x095F7000, + 0x09DF6800, 0x0A1F6000, 0x0A9F5800, 0x0ADF5800, + 0x0B5F5000, 0x0B9F4800, 0x0BDF4800, 0x0C5F4000, + 0x0C9F3800, 0x0D1F3000, 0x0D5F3000, 0x0D9F2800, + 0x0E1F2000, 0x0E5F2000, 0x0EDF1800, 0x0F1F1000, + 0x0F5F1000, 0x0FDF0800, 0x101F0000, 0x109EF800, + 0x10DEF800, 0x111EF000, 0x119EE800, 0x11DEE800, + 0x125EE000, 0x129ED800, 0x12DED800, 0x135ED000, + 0x139EC800, 0x141EC000, 0x145EC000, 0x149EB800, + 0x151EB000, 0x155EB000, 0x15DEA800, 0x161EA000, + 0x169E9800, 0x16DE9800, 0x171E9000, 0x179E8800, + 0x17DE8800, 0x185E8000, 0x189E7800, 0x18DE7800, + 0x195E7000, 0x199E6800, 0x1A1E6000, 0x1A5E6000, + 0x1A9E5800, 0x1B1E5000, 0x1B5E5000, 0x1BDE4800, + 0x1C1E4000, 0x1C5E4000, 0x1CDE3800, 0x1D1E3000, + 0x1D9E2800, 0x1DDE2800, 0x1E1E2000, 0x1E9E1800, + 0x1EDE1800, 0x1F5E1000, 0x1F9E0800, 0x1FDE0800, + 0x205E0000, 0x209DF800, 0x211DF000, 0x215DF000, + 0x21DDE800, 0x221DE000, 0x225DE000, 0x22DDD800, + 0x231DD000, 0x239DC800, 0x23DDC800, 0x241DC000, + 0x249DB800, 0x24DDB800, 0x255DB000, 0x259DA800, + 0x25DDA800, 0x265DA000, 0x269D9800, 0x271D9000, + 0x275D9000, 0x279D8800, 0x281D8000, 0x285D8000, + 0x28DD7800, 0x291D7000, 0x295D7000, 0x29DD6800, + 0x2A1D6000, 0x2A9D5800, 0x2ADD5800, 0x2B1D5000, + 0x2B9D4800, 0x2BDD4800, 0x2C5D4000, 0x2C9D3800 + }; + + +// Posting surface factory DLL's name +_LIT( KDPAPIDLLName, "PostingSurfaceFactory.dll" ); + +// Reversed enumeration for the bitmaps. +static const MDisplaySink::TBitmapNo KVtEngBitmapNoReversed[] = + { + MDisplaySink::ESecondBitmap, + MDisplaySink::EFirstBitmap + }; + +// Default posting format (if this or KDefaultPostingFormat420 is not +// supported, BaseConstructL() will leave with KErrNotSupported) +const CPostingSurface::TPostingFormat KDefaultPostingFormat422 = + CPostingSurface::EYuv422LeBt601Range0; + +// Default posting format (if this or KDefaultPostingFormat422 is not +// supported, BaseConstructL() will leave with KErrNotSupported) +const CPostingSurface::TPostingFormat KDefaultPostingFormat420 = + CPostingSurface::EYuv420PlanarBt601Range0; + +// Default posting buffering flags. +const TUint KDefaultPostingBufferingFlags = + // Double buffering + CPostingSurface::EDoubleBuffering | + // Progressive frames (no interlacing) + CPostingSurface::EProgressiveFrames | + // Do not allow frameskip + CPostingSurface::EDisAllowFrameSkip | + // Use internal buffers (allocated by DP) + CPostingSurface::EInternalBuffers; + +// Default pixel aspect ratio num. Aspect ratio = Num/Denom. +const TUint16 KDefaultPixelAspectRatioNum = 1; + +// Default pixel aspect ratio denom. Aspect ratio = Num/Denom. +const TUint16 KDefaultPixelAspectRatioDenom = 1; + +// LOCAL METHODS + +// ----------------------------------------------------------------------------- +// DoConvertYuv420toXRGB0888 +// ----------------------------------------------------------------------------- +// +inline void DoConvertYuv420toXRGB0888( + TInt aWidth, // width in pixels + const TUint8*& aSourceDataPtrY1, // pointer to Y data row 1 + const TUint8*& aSourceDataPtrY2, // pointer to Y data row 2 + const TUint8*& aSourceDataPtrU, // pointer to U data row + const TUint8*& aSourceDataPtrV, // pointer to V data row + TUint8* aDestDataPtr1, // pointer to destination row 1 + TUint8* aDestDataPtr2 // pointer to destination row 2 + ) + { + TUint32* destDataPtr1 = reinterpret_cast< TUint32* >( aDestDataPtr1 ); + TUint32* destDataPtr2 = reinterpret_cast< TUint32* >( aDestDataPtr2 ); + // width assumed to be even + TInt pixelsLeft = aWidth / 2; + + TUint32 r, g, b; + TUint32 LutY0, LutY1, LutC; + TUint32 pixel; + TUint32 OverflowMask = 0xC0180300U; + + // One scanline at the time + while ( pixelsLeft-- ) + { + + // row 1, 2 pixels + + LutY0 = KYLut[*aSourceDataPtrY1++]; + LutY1 = KYLut[*aSourceDataPtrY1++]; + LutC = KCbLut[*aSourceDataPtrU++]; + LutC += KCrLut[*aSourceDataPtrV++]; + + pixel = LutY0 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr1++ = 0xFF000000 | r | g | b; + + pixel = LutY1 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr1++ = 0xFF000000 | r | g | b; + + // row, 2 pixels + + LutY0 = KYLut[*aSourceDataPtrY2++]; + LutY1 = KYLut[*aSourceDataPtrY2++]; + + pixel = LutY0 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr2++ = 0xFF000000 | r | g | b; + + pixel = LutY1 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr2++ = 0xFF000000 | r | g | b; + + } + } + +// ----------------------------------------------------------------------------- +// DoConvertYuv422toXRGB0888 +// ----------------------------------------------------------------------------- +// +inline void DoConvertYuv422toXRGB0888( + TInt aWidth, // width in pixels + const TUint8*& aSourceDataPtr, // pointer to source row + TUint8* aDestDataPtr // pointer to destination row + ) + { + TUint32* destDataPtr = reinterpret_cast< TUint32* >( aDestDataPtr ); + // width assumed to be even + TInt pixelsLeft = aWidth / 2; + + TUint32 r, g, b; + TUint32 LutY0, LutY1, LutC; + TUint32 pixel; + TUint32 OverflowMask = 0xC0180300U; + + // One scanline at the time + while ( pixelsLeft-- ) + { + + LutC = KCbLut[*aSourceDataPtr++]; + LutY0 = KYLut[*aSourceDataPtr++]; + LutC += KCrLut[*aSourceDataPtr++]; + LutY1 = KYLut[*aSourceDataPtr++]; + + pixel = LutY0 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr++ = 0xFF000000 | r | g | b; + + pixel = LutY1 + LutC; + + if (pixel & OverflowMask) + { + if (pixel & 0xC0000000U) + { + if (pixel & 0x80000000U) + { + pixel &= ~0x3FC00000U; + } + else + { + pixel |= 0x3FC00000U; + } + } + if (pixel & 0x00180000U) + { + if (pixel & 0x00100000U) + { + pixel &= ~0x0007F800U; + } + else + { + pixel |= 0x0007F800U; + } + } + if (pixel & 0x00000300U) + { + if (pixel & 0x00000200U) + { + pixel &= ~0x000000FFU; + } + else + { + pixel |= 0x000000FFU; + } + } + } + + r = (pixel >> 6) & 0xFF0000; + g = (pixel >> 3) & 0x00FF00; + b = pixel & 0x0000FF; + + *destDataPtr++ = 0xFF000000 | r | g | b; + } + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::NewL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP* CVtEngDrawDP::NewL( + MDisplaySinkObserver* aObserver ) + { + __VTPRINTENTER( "RVD(DP).NewL" ) + CVtEngDrawDP* self = new ( ELeave ) CVtEngDrawDP( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + __VTPRINTEXIT( "RVD(DP).NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::~CVtEngDrawDP +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP::~CVtEngDrawDP() + { + __VTPRINTENTER( "RVD(DP).~" ) + Cancel(); + delete iFrameBuffer; + delete iBufferWaiter; + delete iPostingSurface; + __VTPRINT( DEBUG_MEDIA , "RVD(DP).~ RRegion::Close()" ) + iClipRegion.Close(); + CloseDPLibrary(); + + delete iTarget; + delete iSource; + delete iImageScaler; + __VTPRINTEXIT( "RVD(DP).~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngDraw +// C++ constructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP::CVtEngDrawDP( MDisplaySinkObserver* aObserver ) : + CVtEngDraw( aObserver ), iClipRegion( 1 ), + iPostingFormat( KDefaultPostingFormat422 ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseConstructL +// Base construction. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseConstructL() + { + __VTPRINTENTER( "RVD(DP).BaseConstructL" ) + if ( IsFlag( EFlagUIForeground ) ) + { + DoBaseConstructL(); + } + else + { + SetFlag( EBaseConstructCalled ); + } + __VTPRINTEXIT( "RVD(DP).BaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CreateSinkL +// Instantiates display sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink* CVtEngDrawDP::CreateSinkL() + { + __VTPRINTENTER( "RVD(DP).CreateSinkL" ) + TDisplaySinkParamsDP params; + GetSinkParams( params ); + MDisplaySink* sink = ::CreateSinkL( params, KNullDesC8 ); + if ( IsFlag( EBaseConstructCalled ) ) + { + sink->Pause(); + SetFlag( ESinkParamUpdateRequired | ESinkResumeRequired ); + } + __VTPRINTEXIT( "RVD(DP).CreateSinkL" ) + return sink; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::BaseRefreshL +// Draw a frame. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseRefreshL() + { + __VTPRINTENTER( "RVD(DP).BaseRefreshL" ) + __VTPRINTEXIT( "RVD(DP).BaseRefreshL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseRefreshBitmapsL +// Refreshes bitmaps sizes and display mode if needed. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseRefreshBitmapsL() + { + __VTPRINTENTER( "RVD(DP).BaseRefreshBitmapsL" ) + BaseConstructL(); + InitializePostingSurfaceL(); + // set the params for DS + UpdateSinkParamsL(); + ClearFlag( EFirstFrameReceived ); + __VTPRINTEXIT( "RVD(DP).BaseRefreshBitmapsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseDoCancel +// DoCancel for derived class. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseDoCancel() + { + __VTPRINTENTER( "RVD(DP).BaseDoCancel" ) + __VTPRINTEXIT( "RVD(DP).BaseDoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseVerifyConfigL +// Checks current configuration against DP implementation. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseVerifyConfigL() + { + __VTPRINTENTER( "RVD(DP).BaseVerifyConfigL" ) + // Check support for requested size + if ( !SupportsSize( iSourceSize ) ) + { + __VTPRINT( DEBUG_MEDIA , + "RVD(DP).BaseVerifyConfigL Size NOT supported" ) + User::Leave( KErrNotSupported ); + } + RecalculateClipRegionL(); + __VTPRINTEXIT( "RVD(DP).BaseVerifyConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseRestartL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseRestartL() + { + __VTPRINTENTER( "RVD(DP).BaseRestartL" ) + if ( IsFlag( EFlagUIForeground ) ) + { + RecalculateClipRegionL(); + iBufferWaiter->FetchBuffer(); + } + __VTPRINTEXIT( "RVD(DP).BaseRestartL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseAbortNow +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseAbortNow() + { + __VTPRINTENTER( "RVD(DP).BaseAbortNow" ) + UpdateVtFrame(); + __VTPRINTEXIT( "RVD(DP).BaseAbortNow" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::StartDrawL +// Starts the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseStartDrawL() + { + __VTPRINTENTER( "RVD(DP).BaseStartDrawL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EBaseBaseStartDrawCalled ); + } + else + { + DoBaseStartDrawL(); + } + __VTPRINTEXIT( "RVD(DP).BaseStartDrawL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseStopDraw +// Stop the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseStopDraw() + { + // Cancel the timer in any case. + __VTPRINTENTER( "RVD(DP).BaseStopDraw" ) + ClearFlag( EBaseBaseStartDrawCalled ); + iWatcher->Cancel(); + if ( iDSA ) + { + ClearFlag( ERemoteVideoDrawing | EStarted ); + iDSA->Cancel(); + } + iBufferWaiter->Cancel(); + Cancel(); + __VTPRINTEXIT( "RVD(DP).BaseStopDraw" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseSetConfigL +// Sets new configuration. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseSetConfigL( const TVtEngRenderConfig& aConfig ) + { + __VTPRINTENTER( "RVD(DP).BaseSetConfigL" ) + Mem::FillZ( &iConfig, sizeof( TVtEngRenderConfigDP ) ); + iConfig = aConfig; + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EBaseSetConfigCalled ); + } + else + { + ConfigUpdatedL(); + } + __VTPRINTEXIT( "RVD(DP).BaseSetConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseSetUIForegroundL +// Sets UI foreground status. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseSetUIForegroundL( TBool aForeground ) + { + __VTPRINTENTER( "RVD(DP).BaseSetUIForegroundL" ) + if( aForeground ) + { + TBool wasSentToBackground( IsFlag( ESentToBackground ) ); + SetFlag( EFlagUIForeground ); + ClearFlag( ESentToBackground ); + if( IsFlag( EDelayedCallsMask ) ) + { + HandleDelayedCallsL(); + } + if ( wasSentToBackground ) + { + BaseRefreshBitmapsL(); + Restart( RDirectScreenAccess::ETerminateCancel ); + BaseStartDrawL(); + } + } + else + { + if ( !IsFlag( EBaseConstructCalled ) ) + { + BaseStopDraw(); + delete iPostingSurface; + iPostingSurface = 0; + for ( TInt i = MDisplaySink::EFirstBitmap; + i < MDisplaySink::EFirstBitmap + KVtEngMaxBuffers; i++ ) + { + iBuffers[ i ].UnSet(); + } + SetFlag( ESentToBackground ); + } + ClearFlag( EFlagUIForeground ); + } + __VTPRINTEXIT( "RVD(DP).BaseSetUIForegroundL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseRequestLastFrame +// Request update last remote video frame through MVtEngFrameObserver::vtSetFrame +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseRequestLastFrame() + { + __VTPRINTENTER( "RVD(DP).BaseRequestLastFrame" ) + UpdateVtFrame(); + __VTPRINTEXIT( "RVD(DP).BaseRequestLastFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BaseVideoFrameSizeChangedL +// Called when incoming frame buffer size changes. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BaseVideoFrameSizeChangedL( const TSize& aTo ) + { + __VTPRINTENTER( "RVD(DP).BaseVideoFrameSizeChangedL" ) + CreateFrameBufferL( aTo ); + __VTPRINTEXIT( "RVD(DP).BaseVideoFrameSizeChangedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::Config +// Returns current configuration. +// ----------------------------------------------------------------------------- +// +TVtEngRenderConfig& CVtEngDrawDP::Config() + { + return iConfig; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::RunL +// CActive heir execution method. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::RunL() + { + __VTPRINTENTER( "RVD(DP).RunL" ) + + TInt bitmapNo( iStatus.Int() ); + + if ( bitmapNo < KErrNone ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DP).RunL notify rvd problem" ) + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + return; + } + + TVtEngBuffer& buffer = iBuffers[ bitmapNo ]; + + if ( !iDSUpdated ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DP).RunL !Updated" ) + __VTPRINTEXIT( "RVD(DP).RunL" ) + return; + } + else if ( !IsFlag( EFlagUIForeground ) ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DP).RunL !Flag( EFlagUIForeground )" ) + __VTPRINTEXIT( "RVD(DP).RunL" ) + if ( iPostingSurface ) + { + iPostingSurface->PostBuffer( buffer.Buffer() ); + buffer.UnSet(); + iBufferWaiter->FetchBuffer(); + } + return; + } + else if ( buffer.Buffer() == NULL ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DP).RunL signalled with NULL buffer" ) + TInt result( iBufferWaiter->FetchBuffer() ); + __VTPRINT2( DEBUG_MEDIA, + "RVD(DP).RunL FetchBuffer %d", result ) + User::LeaveIfError( result ); + __VTPRINTEXIT( "RVD(DP).RunL" ) + return; + } + + // Image received, reset counter. + iCheckpoint = KVtEngWatcherThreshold; + + StoreFrameBuffer( buffer.Buffer() ); + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).RunL flags=%d", iFlags ) + TBool firstFrame( !IsFlag ( EFirstFrameReceived ) ); + SetFlag( EFirstFrameReceived ); + // Remote video is about to start? + if ( !IsFlag( EStarted ) && IsFlag( EReadyInternal ) ) + { + if ( !iDSA->IsActive() ) + { + iDSA->StartL(); + } + SetFlag( EStarted ); + if ( !iConfig.iClipRect.IsEmpty() ) + { + SetFlag( EReadyForeground ); + iDSA->Gc()->SetClippingRect( iConfig.iClipRect ); + RecalculateClipRegionL(); + } + __VTPRINT( DEBUG_MEDIA, "RVD(DP).RunL notify rvd start" ) + //CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted ); + } + if ( firstFrame ) + { + CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted ); + } + TRAPD( setClipRegResult, SetClipRegionL() ); + if ( setClipRegResult ) + { + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).RunL SetClipRegionL failed %d", + setClipRegResult ); + } + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).RunL received buffer %d $%x", + bitmapNo, + reinterpret_cast< TUint >( buffer.Buffer() ) ) + TInt result + ( iPostingSurface->PostBuffer( buffer.Buffer() ) ); + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).RunL PostBuffer %d", result ) + buffer.UnSet(); + if ( iBuffers[ KVtEngBitmapNoReversed[ bitmapNo ] ].IsSet() ) + { + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).RunL reactivating for buffer %d", + KVtEngBitmapNoReversed[ bitmapNo ] ) + Activate(); + DisplaySink().NextFrame(); + } + + if ( result == KErrNotReady ) + { + BaseRefreshBitmapsL(); + result = KErrNone; + } + + User::LeaveIfError( result ); + result = iBufferWaiter->FetchBuffer(); + __VTPRINT2( DEBUG_MEDIA, + "RVD(DP).RunL FetchBuffer %d", result ) + User::LeaveIfError( result ); + + __VTPRINTEXIT( "RVD(DP).RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::BufferReady +// BufferReady +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::BufferReady( CPostingSurface::TPostingBuff* aBuffer ) + { + __VTPRINTENTER( "RVD(DP).BufferReady" ) + SetAvailableToSink( aBuffer ); + __VTPRINTEXIT( "RVD(DP).BufferReady" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::FetchError +// Buffer fetching error +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::FetchError( TInt ) + { + __VTPRINTENTER( "RVD(DP).FetchError" ) + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + __VTPRINTEXIT( "RVD(DP).FetchError" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::HandleDelayedCallsL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::HandleDelayedCallsL() + { + __VTPRINTENTER( "RVD(DP).HandleDelayedCallsL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + DoBaseConstructL(); + } + if ( IsFlag( EBaseSetConfigCalled ) ) + { + ConfigUpdatedL(); + ClearFlag( EBaseSetConfigCalled ); + } + if ( IsFlag( EInitializePostingSurfaceCalled ) ) + { + DoInitializePostingSurfaceL(); + } + if ( IsFlag( ESinkParamUpdateRequired ) ) + { + DoUpdateSinkParamsL(); + } + if ( IsFlag( EBaseBaseStartDrawCalled ) ) + { + DoBaseStartDrawL(); + } + __VTPRINTEXIT( "RVD(DP).HandleDelayedCallsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::DoBaseConstructL +// Base construction implementation +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::DoBaseConstructL() + { + __VTPRINTENTER( "RVD(DP).DoBaseConstructL" ) + + if ( !iImageScaler ) + { + iImageScaler = + CVtImageScaler::NewL( *this, CVtImageScaler::EBilinear ); + } + delete iBufferWaiter; + iBufferWaiter = NULL; + delete iPostingSurface; + iPostingSurface = NULL; + + // Load DP API library + LoadDPLibraryL(); + + // Create posting surface instance + iPostingSurface = CreatePostingSurfaceL(); + + CPostingSurface::TPostingFormat previousPostingFormat( iPostingFormat ); + + // Check support for format + if ( !SupportsFormat( KDefaultPostingFormat420 ) ) + { + if ( !SupportsFormat( KDefaultPostingFormat422 ) ) + { + __VTPRINT( DEBUG_MEDIA , + "RVD(DP).BaseConstructL Format NOT supported" ) + User::Leave( KErrNotSupported ); + } + else + { + __VTPRINT( DEBUG_MEDIA , "RVD(DP).BaseConstructL using 422" ) + iPostingFormat = KDefaultPostingFormat422; + } + } + else + { + __VTPRINT( DEBUG_MEDIA , "RVD(DP).BaseConstructL using 420" ) + iPostingFormat = KDefaultPostingFormat420; + } + iPostingSurface->GetCapabilities( iPostingCaps ); + iBufferWaiter = + new ( ELeave ) CVtEngBufferWaiter( *iPostingSurface, *this ); + for ( TInt i = MDisplaySink::EFirstBitmap; + i < MDisplaySink::EFirstBitmap + KVtEngMaxBuffers; i++ ) + { + iBuffers[ i ].UnSet(); + } + + // If posting for is different from previous, then free frame buffer + if ( ( previousPostingFormat != iPostingFormat ) || !iFrameBuffer ) + { + CreateFrameBufferL( iSourceSize ); + } + ClearFlag( EBaseConstructCalled ); + __VTPRINTEXIT( "RVD(DP).DoBaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::UpdateSinkParamsL +// Updates sink params +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::UpdateSinkParamsL() + { + __VTPRINTENTER( "RVD(DP).UpdateSinkParamsL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( ESinkParamUpdateRequired ); + } + else + { + DoUpdateSinkParamsL(); + } + __VTPRINTEXIT( "RVD(DP).UpdateSinkParamsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::DoBaseStartDrawL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::DoBaseStartDrawL() + { + __VTPRINTENTER( "RVD(DP).DoBaseStartDrawL" ) + UpdateVtFrame(); + if ( iDSA ) + { + SetFlag( EReadyInternal ); + if ( !iWatcher->IsActive() ) + { + iWatcher->Start( KVtEngWatcherTimeout, KVtEngWatcherTimeout, + iCallback ); + } + User::LeaveIfError( iBufferWaiter->FetchBuffer() ); + SetFlag( ERemoteVideoDrawing ); + } + else + { + User::Leave( KErrNotReady ); + } + ClearFlag( EBaseBaseStartDrawCalled ); + __VTPRINTEXIT( "RVD(DP).DoBaseStartDrawL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::DoInitializePostingSurfaceL +// Initializes posting surface. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::DoInitializePostingSurfaceL() + { + __VTPRINTENTER( "RVD(DP).DoInitializePostingSurfaceL" ) + CPostingSurface::TPostingSourceParams postingSourceParams; + GetPostingSourceParams( postingSourceParams ); + CPostingSurface::TPostingParams postingParams; + GetPostingParams( postingParams ); + // Create and start DSA for getting access to DP + CreateAndStartDSAL(); + + /*S60 Display Posting API has a limitation that only one surface instance can be + created at a time. Unfortunately there's no way to check when posting is really + free. PostingSurface initialization maybe returns KErrInUse. + Please refer to TSW error EAKC-7R3TME. + The transition effect between landscape and portrait uses ATID to achieve smooth + transition. ATID and PostingSurface share the same buffers and cannot be used + simultaneously. PostingSurface initialization maybe returns KErrNotReady. + Please refer to TSW error EWXO-7P4DV3. + So it probably requires some kind of timer based retry to bypass these cases.*/ + TInt err; + while (1) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DP).DoInitializePostingSurfaceL Initialize PostingSurface" ); + TRAP( err, iPostingSurface->InitializeL(postingSourceParams, postingParams) ); + if ( err == KErrNone) + { + break; + } + else + { + //time interval for each PostingSurface initialization is 0.2 second. + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).DoInitializePostingSurfaceL InitPS error = %d", err ) + User::After(200000); + } + } + + delete iTarget; iTarget = NULL; + iTarget = CVtImageBitmap::NewL( + postingParams.iDisplayedRect.Size(), EColor16MU ); + if ( iSource ) + { + if ( IsFlag( EFrameBufferFilled ) && + !IsFlag( EFrameBufferNeedsConvertAndScale ) ) + { + iImageScaler->ScaleNowL( *iSource, *iTarget ); + Config().iObserver->vtSetFrame( + MVtEngFrameObserver::ERemoteVideoFrame, + &iTarget->Bitmap() ); + } + else + { + Config().iObserver->vtSetFrame( + MVtEngFrameObserver::ERemoteVideoFrame, NULL ); + } + } + else + { + //delete iSource; iSource = NULL; + iSource = CVtImageBitmap::NewL( iSourceSize, EColor16MU ); + Config().iObserver->vtSetFrame( MVtEngFrameObserver::ERemoteVideoFrame, + NULL ); + } + RecalculateClipRegionL(); + ClearFlag( EInitializePostingSurfaceCalled ); + __VTPRINTEXIT( "RVD(DP).DoInitializePostingSurfaceL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::DoUpdateSinkParamsL +// Updates sink params +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::DoUpdateSinkParamsL() + { + __VTPRINTENTER( "RVD(DP).DoUpdateSinkParamsL" ) + TDisplaySinkParamsDP params; + GetSinkParams( params ); + DisplaySink().UpdateSinkParamsL( params, iDSUpdated ); + ClearFlag( ESinkParamUpdateRequired ); + if ( IsFlag( ESinkResumeRequired ) ) + { + DisplaySink().Resume(); + ClearFlag( ESinkResumeRequired ); + } + __VTPRINTEXIT( "RVD(DP).DoUpdateSinkParamsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::IsAlphaTrashed +// Checks if the alpha has been trashed on screen buffer. +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::IsAlphaTrashed() const + { + __VTPRINTENTER( "RVD(DP).IsAlphaTrashed" ) + TBool isTrashed( EFalse ); + const CFbsScreenDevice& sdev( *iDSA->ScreenDevice() ); + if ( sdev.DisplayMode() == EColor16MA ) + { + TRgb color; + TPoint point( iClipRegion.BoundingRect().Center() ); + sdev.GetPixel( color, point ); + isTrashed = ( color.Alpha() != 0 ); + } + __VTPRINTEXITR( "RVD(DP).IsAlphaTrashed %d", isTrashed ) + return isTrashed; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SetClipRegionL +// Sets clipping region for DP. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::SetClipRegionL() + { + __VTPRINTENTER( "RVD(DP).SetClipRegionL" ) + if ( iClipRegionUpdated || IsAlphaTrashed() ) + { + iClipRegionUpdated = EFalse; + CFbsBitGc* gc = iDSA->Gc(); + gc->SetClippingRegion( iDSA->DrawingRegion() ); + gc->SetDrawMode( CGraphicsContext::EDrawModeAND ); + gc->SetBrushColor( TRgb( 255, 255, 255, 0 ) ); + gc->Clear(); + iDSA->ScreenDevice()->Update(); + User::LeaveIfError( + iPostingSurface->SetClipRegion( iClipRegion ) ); + } + __VTPRINTEXIT( "RVD(DP).SetClipRegionL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::InitializePostingSurfaceL +// Initializes posting surface. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::InitializePostingSurfaceL() + { + __VTPRINTENTER( "RVD(DP).InitializePostingSurfaceL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EInitializePostingSurfaceCalled ); + } + else + { + DoInitializePostingSurfaceL(); + } + __VTPRINTEXIT( "RVD(DP).InitializePostingSurfaceL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::GetPostingSourceParams +// Fills posting source params structure. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::GetPostingSourceParams( + CPostingSurface::TPostingSourceParams& aParams ) const + { + __VTPRINTENTER( "RVD(DP).GetPostingSourceParams" ) + Mem::FillZ( &aParams, sizeof( CPostingSurface::TPostingSourceParams ) ); + aParams.iPostingBuffering = KDefaultPostingBufferingFlags; + aParams.iBufferType = CPostingSurface::EStandardBuffer; + aParams.iPostingUsage = CPostingSurface::EVideoCapture; + aParams.iSourceImageSize = iSourceSize; + aParams.iPostingFormat = iPostingFormat; + aParams.iPixelAspectRatioNum = KDefaultPixelAspectRatioNum; + aParams.iPixelAspectRatioDenom = KDefaultPixelAspectRatioDenom; + aParams.iContentCopyRestricted = EFalse; + __VTPRINTEXIT( "RVD(DP).GetPostingSourceParams" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::GetPostingParams +// Fills posting params structure. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::GetPostingParams( + CPostingSurface::TPostingParams& aParams ) const + { + __VTPRINTENTER( "RVD(DP).GetPostingParams" ) + Mem::FillZ( &aParams, sizeof( CPostingSurface::TPostingParams ) ); + + aParams.iDisplayedRect = iConfig.iClipRect; + + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams DRect.iTl (%d, %d)", + aParams.iDisplayedRect.iTl.iX, aParams.iDisplayedRect.iTl.iY ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams DRect.iBr (%d, %d)", + aParams.iDisplayedRect.iBr.iX, aParams.iDisplayedRect.iBr.iY ); + + TRect& dispRect( aParams.iDisplayedRect ); + dispRect.Move( iConfig.iOffset ); + FixRectForDP( dispRect ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams OffsDRect.iTl (%d, %d)", + dispRect.iTl.iX, dispRect.iTl.iY ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams OffsDRect.iBr (%d, %d)", + dispRect.iBr.iX, dispRect.iBr.iY ); + + aParams.iScaleToRect = TRect( aParams.iDisplayedRect.Size() ); + + aParams.iInputCrop = iSourceSize; + + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams InputCrop.iTl (%d, %d)", + aParams.iInputCrop.iTl.iX, aParams.iInputCrop.iTl.iY ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).GetPostingParams InputCrop.iBr (%d, %d)", + aParams.iInputCrop.iBr.iX, aParams.iInputCrop.iBr.iY ); + + aParams.iBackGround = iConfig.iBackGround; + __VTPRINTEXIT( "RVD(DP).GetPostingParams" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsFormat +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsFormat( + const CPostingSurface::TPostingFormat& aFormat ) const + { + return iPostingSurface->FormatSupported( aFormat ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsSize +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsSize( const TSize& aSize ) const + { + return ( iPostingCaps.iMaxPixelSize.iWidth >= aSize.iWidth ) && + ( iPostingCaps.iMaxPixelSize.iHeight >= aSize.iHeight ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsRotation +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsRotation( + CPostingSurface::TRotationType aRotation ) const + { + return ( ( aRotation & iPostingCaps.iSupportedRotations ) == aRotation ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsMirroring +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsMirroring() const + { + return iPostingCaps.iSupportsMirroring; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsScaling +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsScaling() const + { + return iPostingCaps.iSupportsScaling; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsBrightness +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsBrightness() const + { + return iPostingCaps.iSupportsBrightnessControl; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SupportsContrast +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::SupportsContrast() const + { + return iPostingCaps.iSupportsContrastControl; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::GetFrameBufferSize +// Returns size of frame buffer in bytes for given pixel size and current +// posting format. +// ----------------------------------------------------------------------------- +// +TInt CVtEngDrawDP::GetFrameBufferSize( const TSize& aSize ) const + { + TInt size( -1 ); + __VTPRINTENTER( "RVD(DP).GetFrameBufferSize" ) + switch( iPostingFormat ) + { + case KDefaultPostingFormat420: + size = ( aSize.iWidth * aSize.iHeight * 3 ) >> 1; + break; + + case KDefaultPostingFormat422: + size = ( aSize.iWidth * aSize.iHeight ) * 2; + break; + + default: + break; + } + __VTPRINTEXITR( "RVD(DP).GetFrameBufferSize %d", size ) + return size; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::RecalculateClipRegionL +// Updates clipregion. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::RecalculateClipRegionL() + { + __VTPRINTENTER( "RVD(DP).RecalculateClipRegionL" ) + // Clip region needs to be updated + iClipRegionUpdated = ETrue; + iClipRegion.Clear(); + TRect clippingRect( iConfig.iClipRect ); + clippingRect.Move( iConfig.iOffset ); + FixRectForDP( clippingRect ); + iClipRegion.AddRect( clippingRect ); + if ( iClipRegion.CheckError() ) + { + __VTPRINT( DEBUG_MEDIA , + "RVD(DP).RecalculateClipRegionL failed to add cliprect" ) + User::Leave( KErrNoMemory ); + } + + if ( IsFlag( EStarted ) && iDSA && iDSA->DrawingRegion() ) + { + iClipRegion.Intersect( *iDSA->DrawingRegion() ); + if ( iClipRegion.CheckError() ) + { + __VTPRINT( DEBUG_MEDIA , + "RVD(DP).RecalculateClipRegionL failed to intersect" ) + User::Leave( KErrNoMemory ); + } + +#ifdef VTDEBUG + + TRect bRect( iClipRegion.BoundingRect() ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).RecalculateClipRegionL BRect.iTl (%d, %d)", + bRect.iTl.iX, bRect.iTl.iY ); + __VTPRINT3( DEBUG_MEDIA, "RVD(DP).RecalculateClipRegionL BRect.iBr (%d, %d)", + bRect.iBr.iX, bRect.iBr.iY ); +#endif // VTDEBUG + } + __VTPRINTEXIT( "RVD(DP).RecalculateClipRegionL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::FixRectForDP +// Fixes rect for DP (i.e. width is made even and starting X coordinate is made +// even as well) +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::FixRectForDP( TRect& aRect ) const + { + __VTPRINTENTER( "RVD(DP).FixRectForDP" ) + if ( aRect.iTl.iX & 1 ) + { + aRect.Move( 1, 0 ); + aRect.SetWidth( Max( 0, aRect.Width() - 1 ) ); + } + if ( aRect.Width() & 1 ) + { + aRect.SetWidth( aRect.Width() - 1 ); + } + __VTPRINTEXIT( "RVD(DP).FixRectForDP" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::RecalculateClipRegionL +// Fills sink params. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::GetSinkParams( TDisplaySinkParamsDP& aSinkParams ) + { + __VTPRINTENTER( "RVD(DP).GetSinkParams" ) + Mem::FillZ( &aSinkParams, sizeof( TDisplaySinkParamsDP ) ); + aSinkParams.iThreadId = RThread().Id(); + aSinkParams.iRequestStatusPtr = &iStatus; + aSinkParams.iObserver = iObserver; + aSinkParams.iPostingBuffer1 = &iBuffers[ 0 ].Buffer(); + aSinkParams.iPostingBuffer2 = &iBuffers[ 1 ].Buffer(); + aSinkParams.iFrameSize = iSourceSize; + aSinkParams.iPostingFormat = iPostingFormat; + aSinkParams.iFlags = TDisplaySinkParams::EDisplaySinkDP; + __VTPRINTEXITR( "RVD(DP).GetSinkParams flags=%d", + (TInt) aSinkParams.iFlags ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::DisplaySink +// Returns reference to sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink& CVtEngDrawDP::DisplaySink() + { + return *iDisplaySink; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::StoreFrameBuffer +// Stores given frame buffer. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::StoreFrameBuffer( + CPostingSurface::TPostingBuff* aPostingBuffer ) + { + __VTPRINTENTER( "RVD(DP).StoreFrameBuffer" ) + if ( iPostingFormat == KDefaultPostingFormat422 ) + { + const TInt height( iSourceSize.iHeight ); + const TInt srcStride( aPostingBuffer->GetStride() ); + const TInt dstStride( iSourceSize.iWidth * 2 ); + TUint8* dst = + const_cast< TUint8* >( iFrameBuffer->Des().Ptr() ); + const TUint8* src = + reinterpret_cast< const TUint8* >( aPostingBuffer->GetBuffer() ); + for ( TInt y = height - 1; y >= 0; y-- ) + { + dst = Mem::Copy( dst, src, dstStride ); + src += srcStride; + } + } + else + { + TInt frameBufferSizeInBytes( GetFrameBufferSize( iSourceSize ) ); + TPtrC8 postingBufferDesC( + reinterpret_cast< const TUint8* >( aPostingBuffer->GetBuffer() ), + frameBufferSizeInBytes ); + *iFrameBuffer = postingBufferDesC; + } + SetFlag( EFrameBufferFilled | EFrameBufferNeedsConvertAndScale ); + __VTPRINTEXIT( "RVD(DP).StoreFrameBuffer" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CreateFrameBufferL +// Creates frame buffer. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::CreateFrameBufferL( const TSize& aSize ) + { + __VTPRINTENTER( "RVD(DP).CreateFrameBufferL" ) + delete iFrameBuffer; iFrameBuffer = NULL; + iFrameBuffer = HBufC8::NewL( GetFrameBufferSize( aSize ) ); + ClearFlag( EFrameBufferFilled | EFrameBufferNeedsConvertAndScale ); + __VTPRINTEXIT( "RVD(DP).CreateFrameBufferL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SetAvailableToSink +// Sets posting buffer available to sink. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::SetAvailableToSink( CPostingSurface::TPostingBuff* aBuffer ) + { + __VTPRINTENTER( "RVD(DP).SetAvailableToSink" ) + for ( TInt i = MDisplaySink::EFirstBitmap; + i < MDisplaySink::EFirstBitmap + KVtEngMaxBuffers; i++ ) + { + if ( !iBuffers[ i ].IsSet() ) + { + __VTPRINT3( DEBUG_MEDIA, + "RVD(DP).SetAvailableToSink buffer %d: $%x", + i, reinterpret_cast< TUint >( aBuffer->GetBuffer() ) ); + iBuffers[ i ].Set( aBuffer ); + Activate(); + DisplaySink().SetBitmapAvailable( + static_cast< MDisplaySink::TBitmapNo >( i ) ); + break; + } + } + __VTPRINTEXIT( "RVD(DP).SetAvailableToSink" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::SetAvailableToSink +// Sets posting buffer available to sink. +// ----------------------------------------------------------------------------- +// +CPostingSurface* CVtEngDrawDP::CreatePostingSurfaceL() + { + __VTPRINTENTER( "RVD(DP).CreatePostingSurfaceL" ) + CPostingSurface* postingSurface = NULL; + CPostingSurfaceFactory* ( *createFactoryL )() = + reinterpret_cast< CPostingSurfaceFactory*(*)() >( iDPLib->Lookup( 1 ) ); + if ( createFactoryL ) + { + CPostingSurfaceFactory* factory = createFactoryL(); + CleanupStack::PushL( factory ); + postingSurface = factory->NewPostingSurfaceL( EMainDisplay ); + CleanupStack::PopAndDestroy(); // factory + } + __VTPRINTEXIT( "RVD(DP).CreatePostingSurfaceL" ) + return postingSurface; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CloseDPLibrary +// Close the DP API library and free the allocated instance. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::CloseDPLibrary() + { + if ( iDPLib ) + { + iDPLib->Close(); + delete iDPLib; + iDPLib = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::LoadDPLibraryL +// Loads DP API library. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::LoadDPLibraryL() + { + CloseDPLibrary(); + iDPLib = new ( ELeave ) RLibrary(); + TInt error( iDPLib->Load( KDPAPIDLLName() ) ); + if ( error ) + { + delete iDPLib; + iDPLib = NULL; + User::Leave( error ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::Convert420ToVtImg +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::Convert420ToVtImg( HBufC8* aSource, + CVtImageBitmap& aTarget ) + { + __VTPRINTENTER( "RVD(DP).Convert420ToVtImg" ) + + CFbsBitmap& bitmap( aTarget.Bitmap() ); + TSize size( bitmap.SizeInPixels() ); + TInt height( size.iHeight ); + TInt width( size.iWidth ); + TInt bytes( bitmap.ScanLineLength( width, bitmap.DisplayMode() ) ); + + const TUint8* y1ptr = aSource->Ptr(); + const TUint8* y2ptr = y1ptr + width; + const TUint8* uptr = y1ptr + ( width * height ); + const TUint8* vptr = uptr + ( width * height ) / 4; + + bitmap.LockHeap(); + + TUint8* d1ptr = reinterpret_cast< TUint8* >( bitmap.DataAddress() ); + TUint8* d2ptr = d1ptr + bytes; + + height /= 2; // divide by 2 because we process to rows at time + bytes *= 2; // multiply by 2 so we don't need to do it in loop + + while ( height-- ) + { + DoConvertYuv420toXRGB0888( width, y1ptr, y2ptr, uptr, vptr, d1ptr, + d2ptr ); + y1ptr = y2ptr; + y2ptr += width; + d1ptr += bytes; + d2ptr += bytes; + } + + bitmap.UnlockHeap(); + + __VTPRINTEXIT( "RVD(DP).Convert420ToVtImg" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::Convert422ToVtImg +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::Convert422ToVtImg( HBufC8* aSource, CVtImageBitmap& aTarget ) + { + __VTPRINTENTER( "RVD(DP).Convert422ToVtImg" ) + CFbsBitmap& bitmap( aTarget.Bitmap() ); + TSize size( bitmap.SizeInPixels() ); + TInt height( size.iHeight ); + TInt width( size.iWidth ); + TInt bytes( bitmap.ScanLineLength( width, bitmap.DisplayMode() ) ); + + const TUint8* sptr = aSource->Ptr(); + + bitmap.LockHeap(); + + TUint8* dptr = reinterpret_cast< TUint8* >( bitmap.DataAddress() ); + while ( height-- ) + { + DoConvertYuv422toXRGB0888( width, sptr, dptr ); + dptr += bytes; + } + + bitmap.UnlockHeap(); + + __VTPRINTEXIT( "RVD(DP).Convert422ToVtImg" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::UpdateVtFrame +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::UpdateVtFrame() + { + __VTPRINTENTER( "RVD(DP).UpdateVtFrame" ) + if ( IsFlag( EFrameBufferFilled ) ) + { + CFbsBitmap* bitmap = NULL; + if ( IsFlag( EFrameBufferNeedsConvertAndScale ) ) + { + if ( iPostingFormat == KDefaultPostingFormat422 ) + { + Convert422ToVtImg( iFrameBuffer, *iSource ); + } + else + { + Convert420ToVtImg( iFrameBuffer, *iSource ); + } + TRAPD( error, iImageScaler->ScaleNowL( *iSource, *iTarget ) ); + if ( !error ) + { + bitmap = &iTarget->Bitmap(); + } + ClearFlag( EFrameBufferNeedsConvertAndScale ); + } + else + { + bitmap = &iTarget->Bitmap(); + } + Config().iObserver->vtSetFrame( MVtEngFrameObserver::ERemoteVideoFrame, + bitmap ); + } + __VTPRINTEXIT( "RVD(DP).UpdateVtFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::ScalingFinished +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::ScalingFinished( TInt ) + { + } + +// Implementation for CVtEngDrawDP::TVtEngBuffer + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::TVtEngBuffer::TVtEngBuffer +// +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP::TVtEngBuffer::TVtEngBuffer() + : iBuffer( 0 ) + { + __VTPRINTENTER( "RVD(DP).Buffer.Ctor" ) + __VTPRINTEXIT( "RVD(DP).Buffer.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::TVtEngBuffer::Set +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::TVtEngBuffer::Set( CPostingSurface::TPostingBuff* aBuffer ) + { + __VTPRINTENTER( "RVD(DP).Buffer.Set" ) + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).Buffer.Set $%x", + reinterpret_cast< TUint >( aBuffer->GetBuffer() ) ) + iBuffer = aBuffer; + __VTPRINTEXIT( "RVD(DP).Buffer.Set" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::TVtEngBuffer::UnSet +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::TVtEngBuffer::UnSet() + { + __VTPRINTENTER( "RVD(DP).Buffer.UnSet" ) + iBuffer = 0; + __VTPRINTEXIT( "RVD(DP).Buffer.UnSet" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::TVtEngBuffer::IsSet +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawDP::TVtEngBuffer::IsSet() const + { + return ( iBuffer != 0 ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::TVtEngBuffer::Buffer +// +// ----------------------------------------------------------------------------- +// +CPostingSurface::TPostingBuff*& CVtEngDrawDP::TVtEngBuffer::Buffer() + { + return iBuffer; + } + +// Implementation for CVtEngDrawDP::CVtEngBufferWaiter + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::CVtEngBufferWaiter +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP::CVtEngBufferWaiter::CVtEngBufferWaiter + ( CPostingSurface& aPostingSurface, MVtEngBufferWaiterObserver& aObserver ) + : CActive( CActive::EPriorityStandard ), + iPostingSurface( &aPostingSurface ), iObserver( &aObserver ) + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.Ctor" ) + CActiveScheduler::Add( this ); + __VTPRINTEXIT( "RVD(DP).BufferWaiter.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::~CVtEngBufferWaiter +// ----------------------------------------------------------------------------- +// +CVtEngDrawDP::CVtEngBufferWaiter::~CVtEngBufferWaiter() + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.~" ) + Cancel(); + __VTPRINTEXIT( "RVD(DP).BufferWaiter.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::Activate +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::CVtEngBufferWaiter::Activate() + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.Activate" ) + iStatus = KRequestPending; + SetActive(); + __VTPRINTEXIT( "RVD(DP).BufferWaiter.Activate" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::FetchBuffer +// ----------------------------------------------------------------------------- +// +TInt CVtEngDrawDP::CVtEngBufferWaiter::FetchBuffer() + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.FetchBuffer" ) + // do nothing if we're already active + if ( IsActive() ) + { + __VTPRINTEXIT( "RVD(DP).BufferWaiter.FetchBuffer" ) + return KErrNone; + } + // else start fetching + Activate(); + __VTPRINTEXIT( "RVD(DP).BufferWaiter.FetchBuffer" ) + return iPostingSurface->WaitForNextBuffer( iStatus ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::RunL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::CVtEngBufferWaiter::RunL() + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.RunL" ) + __VTPRINT2( DEBUG_MEDIA, "RVD(DP).BufferWaiter.RunL %d", iStatus.Int() ); + TInt result( iStatus.Int() ); + if ( result == KErrNone ) + { + iObserver->BufferReady( iPostingSurface->NextBuffer() ); + } + else + { + iObserver->FetchError( result ); + } + __VTPRINTEXIT( "RVD(DP).BufferWaiter.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDP::CVtEngBufferWaiter::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDP::CVtEngBufferWaiter::DoCancel() + { + __VTPRINTENTER( "RVD(DP).BufferWaiter.DoCancel" ) + iPostingSurface->CancelBuffer(); + __VTPRINTEXIT( "RVD(DP).BufferWaiter.DoCancel" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngDrawDSA.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngDrawDSA.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,586 @@ +/* +* Copyright (c) 2006 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: Remote video handler. +* +*/ + + +// INCLUDE FILES + +#include "CVtEngDrawDSA.h" +#include "CVtEngEventManager.h" +#include "VtEngPanic.h" +#include "MVtEngFrameObserver.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include +#include +#include + +// LOCAL CONSTANTS + +// Default display mode. +const TDisplayMode KVtEngDefaultDisplayMode( EColor64K ); + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::NewL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDSA* CVtEngDrawDSA::NewL( + MDisplaySinkObserver* aObserver ) + { + CVtEngDrawDSA* self = new ( ELeave ) CVtEngDrawDSA( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::~CVtEngDrawDSA +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDSA::~CVtEngDrawDSA() + { + __VTPRINTENTER( "RVD(DSA).~" ) + Cancel(); + delete iBitmap1; + delete iBitmap2; + if ( iImageScaler ) + { + iImageScaler->Release(); + } + __VTPRINTEXIT( "RVD(DSA).~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::CVtEngDrawDSA +// C++ constructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawDSA::CVtEngDrawDSA( MDisplaySinkObserver* aObserver ) : + CVtEngDraw( aObserver ), iBitmapSetAvail( ETrue ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseConstructL +// Base construction. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseConstructL( ) + { + __VTPRINTENTER( "RVD(DSA).BaseConstructL" ) + TSize vtEngRemoteVideoDefaultSize( KVtEngRemoteVideoDefaultWidth, + KVtEngRemoteVideoDefaultHeight ); + + iBitmap1 = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap1->Create( + vtEngRemoteVideoDefaultSize, KVtEngDefaultDisplayMode ) ); + iBitmap2 = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap2->Create( + vtEngRemoteVideoDefaultSize, KVtEngDefaultDisplayMode ) ); + iImageScaler = VtEngScalerFactory::CreateScalerL( *this ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, + "RVD.ConL scaler ok %d", iImageScaler != NULL ) + __VTPRINTEXIT( "RVD(DSA).BaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::CreateSinkL +// Instantiates display sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink* CVtEngDrawDSA::CreateSinkL() + { + __VTPRINTENTER( "RVD(DSA).CreateSinkL" ) + TDisplaySinkParamsDSA params; + GetSinkParams( params ); + MDisplaySink* sink = ::CreateSinkL( params, KNullDesC8 ); + __VTPRINTEXITR( "RVD(DSA).CreateSinkL flags=%d", params.iFlags ) + return sink; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseDoCancel +// DoCancel for derived class. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseDoCancel() + { + __VTPRINTENTER( "RVD(DSA).BaseDoCancel" ) + __VTPRINTEXIT( "RVD(DSA).BaseDoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseVerifyConfigL +// Checks current configuration against DSA implementation. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseVerifyConfigL() + { + __VTPRINTENTER( "RVD(DSA).BaseVerifyConfigL" ) + __VTPRINTEXIT( "RVD(DSA).BaseVerifyConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseRestartL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseRestartL() + { + __VTPRINTENTER( "RVD(DSA).BaseRestartL" ) + __VTPRINTEXIT( "RVD(DSA).BaseRestartL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseAbortNow +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseAbortNow() + { + __VTPRINTENTER( "RVD(DSA).BaseAbortNow" ) + __VTPRINTEXIT( "RVD(DSA).BaseAbortNow" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseStartDrawL +// Starts the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseStartDrawL() + { + __VTPRINTENTER( "RVD(DSA).BaseStartDrawL" ) + if ( iDSA ) + { + SetFlag( EReadyInternal ); + if ( !IsActive() ) + { + Activate(); + iDisplaySink->SetBitmapAvailable( MDisplaySink::EFirstBitmap ); + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseStartDrawL bmp avail done" ) + iWatcher->Start( KVtEngWatcherTimeout, KVtEngWatcherTimeout, + iCallback ); + } + SetFlag( ERemoteVideoDrawing ); + } + else + { + User::Leave( KErrNotReady ); + } + __VTPRINTEXIT( "RVD(DSA).BaseStartDrawL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseStopDraw +// Stop the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseStopDraw() + { + // Cancel the timer in any case. + __VTPRINTENTER( "RVD(DSA).BaseStopDraw" ) + iWatcher->Cancel(); + if ( iDSA ) + { + ClearFlag( ERemoteVideoDrawing | EStarted ); + iDSA->Cancel(); + } + + // Stop also scaling + if ( iImageScaler ) + { + iImageScaler->Cancel(); + } + + Cancel(); + __VTPRINTEXIT( "RVD(DSA).BaseStopDraw" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseSetConfigL +// Sets new configuration. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseSetConfigL( const TVtEngRenderConfig& aConfig ) + { + __VTPRINTENTER( "RVD(DSA).BaseSetConfigL" ) + Mem::FillZ( &iConfig, sizeof( TVtEngRenderConfigDSA ) ); + iConfig = aConfig; + ConfigUpdatedL(); + __VTPRINTEXIT( "RVD(DSA).BaseSetConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseSetUIForegroundL +// Sets UI foreground status. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseSetUIForegroundL( TBool aForeground ) + { + __VTPRINTENTER( "RVD(DSA).BaseSetUIForegroundL" ) + if ( aForeground ) + { + TBool wasSentToBackground( IsFlag( ESentToBackground ) ); + SetFlag( EFlagUIForeground ); + ClearFlag( ESentToBackground ); + if ( wasSentToBackground ) + { + BaseRefreshBitmapsL(); + Restart( RDirectScreenAccess::ETerminateCancel ); + BaseStartDrawL(); + } + } + else + { + BaseStopDraw(); + ClearFlag( EFlagUIForeground ); + SetFlag( ESentToBackground ); + } + __VTPRINTEXIT( "RVD(DSA).BaseSetUIForegroundL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseVideoFrameSizeChangedL +// Called when incoming frame buffer size changes. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseVideoFrameSizeChangedL( const TSize& /*aTo*/ ) + { + __VTPRINTENTER( "RVD(DSA).BaseVideoFrameSizeChangedL" ) + __VTPRINTEXIT( "RVD(DSA).BaseVideoFrameSizeChangedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseRequestLastFrame +// Request update last remote video frame through MVtEngFrameObserver::vtSetFrame +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseRequestLastFrame() + { + __VTPRINTENTER( "RVD(DSA).BaseRequestLastFrame" ) + __VTPRINTEXIT( "RVD(DSA).BaseRequestLastFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::Config +// Returns current configuration. +// ----------------------------------------------------------------------------- +// +TVtEngRenderConfig& CVtEngDrawDSA::Config() + { + return iConfig; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::RunL +// CActive heir execution method. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::RunL() + { + __VTPRINTENTER( "RVD(DSA).RunL" ) + __VTPRINT2( DEBUG_MEDIA, " bmpNo=%d", iBitmapNo ) + iBitmapNo = iStatus.Int() == 0 ? + MDisplaySink::ESecondBitmap : + MDisplaySink::EFirstBitmap ; + + iBitmapSetAvail = EFalse; + + TBool dropFrame( EFalse ); + + if ( !iDSUpdated ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL !Updated" ) + dropFrame = ETrue; + } + else if ( !IsFlag( EFlagUIForeground ) ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL !Flag( EFlagUIForeground )" ) + dropFrame = ETrue; + } + + if ( dropFrame ) + { + iBitmapSetAvail = ETrue; + Activate(); + iDisplaySink->SetBitmapAvailable( iBitmapNo ); + __VTPRINTEXIT( "RVD(DSA).RunL" ) + return; + } + + // Image received, reset counter. + iCheckpoint = KVtEngWatcherThreshold; + + __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).RunL iStatus=%d", iStatus.Int() ) + if ( iStatus >= KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).RunL flags=%d", iFlags ) + TBool firstFrame( !IsFlag ( EFirstFrameReceived ) ); + SetFlag( EFirstFrameReceived ); + + // Remote video is about to start? + if ( !IsFlag( EStarted ) && IsFlag( EReadyInternal ) ) + { + SetFlag( EStarted ); + iDSA->StartL(); + if ( !iConfig.iClipRect.IsEmpty() ) + { + SetFlag( EReadyForeground ); + iDSA->Gc()->SetClippingRect( iConfig.iClipRect ); + } + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL notify rvd start" ) + //CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted ); + } + if ( firstFrame ) + { + CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted ); + } + if ( IsFlag( EStarted ) ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL refresh" ) + BaseRefreshL(); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, "RVD.RunL notify rvd problem" ) + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + __VTPRINTEXIT( "RVD(DSA).RunL" ) + return; + } + + __VTPRINT( DEBUG_MEDIA, "RVD.RunL setting active" ) + Activate(); + + // Set bitmap only if not to be scaled + if( !iImageScaler ) + { + if ( !iBitmapSetAvail ) + { + iDisplaySink->SetBitmapAvailable( iBitmapNo ); + iBitmapSetAvail = ETrue; + } + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted set bmp available" ) + } + + __VTPRINTEXIT( "RVD(DSA).RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::ScalingCompleted +// Callback to receive scaled images. +// Draws received image. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::ScalingCompleted( + CFbsBitmap* aBitmap, + TInt aError ) + { + __VTPRINTENTER( "RVD(DSA).ScalingCompleted" ) + __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).ScalingReady %d", aError ) + __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).ScalingReady image %d", aBitmap ? 1 : 0 ) + if ( aError == KErrNone && + aBitmap != NULL ) + { + DrawBitmap( *aBitmap ); + if ( !iBitmapSetAvail ) + { + // Set bitmap available if not already set + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted set bmp available" ) + Activate(); + iDisplaySink->SetBitmapAvailable( iBitmapNo ); + iBitmapSetAvail = ETrue; + } + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted available?" ) + } + else if ( aError != KErrCancel ) + { + // Notification of failed scaling. + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingReady problems" ) + } + __VTPRINTEXITR( "RVD(DSA).ScalingCompleted err=%d", aError ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseRefreshL +// If using scaler, start the scaling otherwise draw a bitmap. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseRefreshL() + { + __VTPRINTENTER( "RVD(DSA).BaseRefreshL" ) + if ( iConfig.iWindow ) + { + if ( IsFlag( EReady ) && IsFlag( EFirstFrameReceived ) && + IsFlag( EFlagUIForeground ) ) + { + CFbsBitmap* current = iBitmapNo != 0 ? iBitmap1 : iBitmap2; + if ( current ) + { + if ( iImageScaler ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseRefreshL scaling" ) + TInt index = 0; + if ( current == iBitmap2 ) + { + index = 1; + } + iImageScaler->Cancel(); + iImageScaler->ScaleL( index ); + } + else + { + DrawBitmap( *current ); + } + } + } + } + __VTPRINTEXIT( "RVD(DSA).BaseRefreshL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::BaseRefreshBitmapsL +// Refreshes bitmaps sizes and display mode if needed. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::BaseRefreshBitmapsL() + { + __VTPRINTENTER( "RVD(DSA).BaseRefreshBitmapsL" ) + const TDisplayMode currentMode( iConfig.iWsSreenDevice->DisplayMode() ); + TBool refreshDisplayMode = EFalse; + TSize newSize( KVtEngRemoteVideoDefaultWidth, + KVtEngRemoteVideoDefaultHeight ); + + // Use new size if supplied + if ( iSourceSize.iHeight > 0 && iSourceSize.iWidth > 0 ) + { + newSize = iSourceSize; + iSourceSize.iHeight = 0; + iSourceSize.iWidth = 0; + } + + __VTPRINT( DEBUG_MEDIA , "================== RVD.RFBM ==================" ) + __VTPRINT2( DEBUG_MEDIA , " newSize.iWidth: %d", newSize.iWidth) + __VTPRINT2( DEBUG_MEDIA , " newSize.iHeight: %d ", newSize.iHeight ) + __VTPRINT( DEBUG_MEDIA , "================== RVD.RFBM ==================" ) + + TBool refreshSize = EFalse; + if ( iBitmap1 ) + { + refreshDisplayMode = ( iBitmap1->DisplayMode() != currentMode ); + refreshSize = ( newSize != iBitmap1->SizeInPixels() ); + } + + // Delete and create the bitmaps + if ( refreshDisplayMode || refreshSize || !iBitmap1 || !iBitmap2 ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseRefreshBitmapsL bmp create" ) + if ( iImageScaler ) + { + iImageScaler->Cancel(); + } + + iConfig.iObserver->vtSetFrame( + MVtEngFrameObserver::ERemoteVideoFrame, 0 ); + delete iBitmap1; + iBitmap1 = NULL; + delete iBitmap2; + iBitmap2 = NULL; + + iBitmap1 = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap1->Create( + newSize, currentMode ) ); + iBitmap2 = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap2->Create( + newSize, currentMode ) ); + ClearFlag( EFirstFrameReceived ); + } + + // set the params for DS + TDisplaySinkParamsDSA params; + GetSinkParams( params ); + + // Update the scaler + if ( iImageScaler ) + { + // Try to configure first, if returns true + // configure again + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseRefreshBitmapsL cnfg" ) + + iImageScaler->ConfigureL( currentMode, + iConfig.iRect.Size(), params.iBitmap1Handle, + params.iBitmap2Handle ); + + if ( IsFlag( EFirstFrameReceived ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "CVtEngDrawDSA::RefreshBitmapsL RFR" ) + BaseRefreshL(); + } + + } + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseRefreshBitmapsL USP" ) + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "RVD(DSA).BaseRefreshBitmapsL USP flag" ) + iDisplaySink->UpdateSinkParamsL( params, iDSUpdated ); + Activate(); + iDisplaySink->SetBitmapAvailable( MDisplaySink::EFirstBitmap ); + __VTPRINTEXIT( "RVD(DSA).BaseRefreshBitmapsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::DrawBitmap +// Draws bitmap +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::DrawBitmap( CFbsBitmap& aBitmap ) + { + __VTPRINTENTER( "RVD(DSA).DrawBitmap" ) + __ASSERT_ALWAYS( aBitmap.Handle(), + Panic( EVtEngPanicInvalidBitmapHandle ) ); + __ASSERT_ALWAYS( iDSA, Panic( EVtEngPanicInvalidPointer ) ); + iDSA->Gc()->SetFaded( iConfig.iWindow->IsFaded() ); + iDSA->Gc()->BitBlt( iConfig.iRect.iTl, &aBitmap ); + iDSA->ScreenDevice()->Update(); + iConfig.iObserver->vtSetFrame( MVtEngFrameObserver::ERemoteVideoFrame, + &aBitmap ); + __VTPRINTEXITR( "RVD(DSA).DrawBitmap h=%d", aBitmap.Handle() ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::GetSinkParams +// ----------------------------------------------------------------------------- +// +void CVtEngDrawDSA::GetSinkParams( TDisplaySinkParamsDSA& aSinkParams ) + { + __VTPRINTENTER( "RVD(DSA).GetSinkParams" ) + aSinkParams.iThreadId = RThread().Id(); + aSinkParams.iRequestStatusPtr = &iStatus; + aSinkParams.iObserver = iObserver; + aSinkParams.iBitmap1Handle = iBitmap1->Handle(); + aSinkParams.iBitmap2Handle = iBitmap2->Handle(); + aSinkParams.iFlags = TDisplaySinkParams::EDisplaySinkDSA; + __VTPRINTEXIT( "RVD(DSA).GetSinkParams" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngDrawNGA.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngDrawNGA.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1025 @@ +/* +* Copyright (c) 2004-2006 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: Class for NGA Drawer. +* +*/ + +// INCLUDE FILES + +#include "CVtEngDrawNGA.h" +#include "CVtEngEventManager.h" +#include "VtEngPanic.h" +#include "MVtEngFrameObserver.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include +#include +#include +#include + +// Reversed enumeration for the bitmaps. +static const MDisplaySink::TBitmapNo KVtEngBitmapNoReversed[] = + { + MDisplaySink::ESecondBitmap, + MDisplaySink::EFirstBitmap + }; + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVTSurfaceBuffer::TVTSurfaceBuffer +// +// ----------------------------------------------------------------------------- +// +TVTSurfaceBuffer::TVTSurfaceBuffer( TUint8* aBuffer, TInt aSurfaceNo ) + : iBuffer( aBuffer ), iSurfaceBufferNo(aSurfaceNo) + { + __VTPRINTENTER( "RVD(NGA).TVTSurfaceBuffer.Ctor" ) + __VTPRINTEXIT( "RVD(NGA).TVTSurfaceBuffer.Ctor" ) + } +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVTSurfaceBuffer::Buffer +// +// ----------------------------------------------------------------------------- +// +TUint8*& TVTSurfaceBuffer::Buffer() + { + return iBuffer; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVTSurfaceBuffer::SurfaceNo +// +// ----------------------------------------------------------------------------- +// +TInt TVTSurfaceBuffer::SurfaceNo() + { + return iSurfaceBufferNo; + } + +void TVTSurfaceBuffer::Set( TUint8* aBuffer, TInt aSurfaceNo ) + { + iBuffer = aBuffer; + iSurfaceBufferNo = aSurfaceNo; + } + +void TVTSurfaceBuffer::UnSet() + { + iBuffer = NULL; + iSurfaceBufferNo = KErrNotFound; + } +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::NewL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA* CVtEngDrawNGA::NewL( + MDisplaySinkObserver* aObserver ) + { + CVtEngDrawNGA* self = new ( ELeave ) CVtEngDrawNGA( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::~CVtEngDrawNGA +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA::~CVtEngDrawNGA() + { + __VTPRINTENTER( "RVD(NGA).~" ) + Cancel(); + + if(iSurfaceCreated) + { + + if (iSurfaceManager) + { + iConfig.iRemoteWindow->RemoveBackgroundSurface(ETrue); + iConfig.iWsSession->UnregisterSurface(0, iSurfaceId); + iSurfaceChunk->Close(); + delete iSurfaceChunk; + iSurfaceChunk = NULL; + iSurfaceManager->CloseSurface(iSurfaceId); + iSurfaceUpdateSession.CancelAllUpdateNotifications(); + iSurfaceUpdateSession.Close(); + + /* Close the surface manager handle */ + iSurfaceManager->Close(); + + delete iSurfaceManager; + iSurfaceManager = 0; + } + + for ( TInt i = KVtEngMaxSurfaceBuffers-1; i >= 0 ; i-- ) + { + if (iCallBackTable[i]) + { + iCallBackTable[i]->Cancel(); + delete iCallBackTable[i]; + iCallBackTable[i] = NULL; + } + } + + iSurfaceBuffers[ 0 ].UnSet(); + iSurfaceBuffers[ 1 ].UnSet(); + iSurfaceBuffer0.UnSet(); + iSurfaceBuffer1.UnSet(); + } + delete iBufferWaiter; + iWaitingBuffers.Reset(); + + __VTPRINTEXIT( "RVD(NGA).~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngDrawNGA +// C++ constructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA::CVtEngDrawNGA( MDisplaySinkObserver* aObserver ) : + CVtEngDraw( aObserver ), + iSurfaceFormat( EUidPixelFormatYUV_420Planar ) + + { + iConfig.iRemoteWindow = NULL; + iConfig.iWsSession = NULL; + iSurfaceCreated = EFalse; + iWaitingBuffers.Reset(); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseConstructL +// Base construction. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseConstructL( ) + { + __VTPRINTENTER( "RVD(NGA).BaseConstructL" ) + DoBaseConstructL(); + __VTPRINTEXIT( "RVD(NGA).BaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CreateSinkL +// Instantiates display sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink* CVtEngDrawNGA::CreateSinkL() + { + __VTPRINTENTER( "RVD(NGA).CreateSinkL" ) + TDisplaySinkParamsNGA params; + GetSinkParams( params ); + MDisplaySink* sink = ::CreateSinkL( params, KNullDesC8 ); + if ( IsFlag( EBaseConstructCalled ) ) + { + sink->Pause(); + SetFlag( ESinkParamUpdateRequired | ESinkResumeRequired ); + } + __VTPRINTEXITR( "RVD(NGA).CreateSinkL flags=%d", params.iFlags ) + return sink; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseRefreshL +// If using scaler, start the scaling otherwise draw a bitmap. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseRefreshL() + { + __VTPRINTENTER( "RVD(NGA).BaseRefreshL" ) + __VTPRINTEXIT( "RVD(NGA).BaseRefreshL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseRefreshBitmapsL +// Refreshes bitmaps sizes and display mode if needed. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseRefreshBitmapsL() + { + __VTPRINTENTER( "RVD(NGA).BaseRefreshBitmapsL" ) + BaseConstructL(); + CreateSurfaceL(); + // set the params for DS + UpdateSinkParamsL(); + ClearFlag( EFirstFrameReceived ); + __VTPRINTEXIT( "RVD(NGA).BaseRefreshBitmapsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseDoCancel +// DoCancel for derived class. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseDoCancel() + { + __VTPRINTENTER( "RVD(NGA).BaseDoCancel" ) + __VTPRINTEXIT( "RVD(NGA).BaseDoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseVerifyConfigL +// Checks current configuration against DSA implementation. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseVerifyConfigL() + { + __VTPRINTENTER( "RVD(NGA).BaseVerifyConfigL" ) + __VTPRINTEXIT( "RVD(NGA).BaseVerifyConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseRestartL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseRestartL() + { + __VTPRINTENTER( "RVD(NGA).BaseRestartL" ) + __VTPRINTEXIT( "RVD(NGA).BaseRestartL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseAbortNow +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseAbortNow() + { + __VTPRINTENTER( "RVD(NGA).BaseAbortNow" ) + __VTPRINTEXIT( "RVD(NGA).BaseAbortNow" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseStartDrawL +// Starts the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseStartDrawL() + { + __VTPRINTENTER( "RVD(NGA).BaseStartDrawL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EBaseBaseStartDrawCalled ); + } + else + { + DoBaseStartDrawL(); + } + __VTPRINTEXIT( "RVD(NGA).BaseStartDrawL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseStopDraw +// Stop the drawing. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseStopDraw() + { + // Cancel the timer in any case. + __VTPRINTENTER( "RVD(NGA).BaseStopDraw" ) + ClearFlag( EBaseBaseStartDrawCalled ); + iWatcher->Cancel(); + iBufferWaiter->Cancel(); + ClearFlag( ERemoteVideoDrawing | EStarted ); + for ( TInt i = KVtEngMaxSurfaceBuffers-1; i >= 0 ; i-- ) + { + if (iCallBackTable[i]) + { + iCallBackTable[i]->Cancel(); + } + } + Cancel(); + + __VTPRINTEXIT( "RVD(NGA).BaseStopDraw" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseSetConfigL +// Sets new configuration. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseSetConfigL( const TVtEngRenderConfig& aConfig ) + { + __VTPRINTENTER( "RVD(NGA).BaseSetConfigL" ) + Mem::FillZ( &iConfig, sizeof( TVtEngRenderConfigNGA ) ); + iConfig = aConfig; + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EBaseSetConfigCalled ); + } + else + { + ConfigUpdatedL(); + } + __VTPRINTEXIT( "RVD(NGA).BaseSetConfigL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseSetUIForegroundL +// Sets UI foreground status. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseSetUIForegroundL( TBool aForeground ) + { + __VTPRINTENTER( "RVD(NGA).BaseSetUIForegroundL" ) + __VTPRINTEXIT( "RVD(NGA).BaseSetUIForegroundL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseRequestLastFrame +// Request update last remote video frame through MVtEngFrameObserver::vtSetFrame +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseRequestLastFrame() + { + __VTPRINTENTER( "RVD(NGA).BaseRequestLastFrame" ) + __VTPRINTEXIT( "RVD(NGA).BaseRequestLastFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BaseVideoFrameSizeChangedL +// Called when incoming frame buffer size changes. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BaseVideoFrameSizeChangedL( const TSize& /*aTo*/ ) + { + __VTPRINTENTER( "RVD(NGA).BaseVideoFrameSizeChangedL" ) + __VTPRINTEXIT( "RVD(NGA).BaseVideoFrameSizeChangedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawDSA::Config +// Returns current configuration. +// ----------------------------------------------------------------------------- +// +TVtEngRenderConfig& CVtEngDrawNGA::Config() + { + return iConfig; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::RunL +// CActive heir execution method. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::RunL() + { + __VTPRINTENTER( "RVD(NGA).RunL" ) + + TInt bitmapNo( iStatus.Int() ); + + if ( bitmapNo < KErrNone ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(NGA).RunL notify rvd problem" ) + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + return; + } + + TVtEngBuffer& buffer = iSurfaceBuffers[ bitmapNo ]; + + if ( !iDSUpdated ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(NGA).RunL !Updated" ) + __VTPRINTEXIT( "RVD(NGA).RunL" ) + return; + } + else if ( buffer.SurfaceBuffer() == NULL ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(NGA).RunL signalled with NULL buffer" ) + TInt result( iBufferWaiter->FetchBuffer() ); + User::LeaveIfError( result ); + __VTPRINTEXIT( "RVD(NGA).RunL" ) + return; + } + + // Image received, reset counter. + iCheckpoint = KVtEngWatcherThreshold; + + __VTPRINT2( DEBUG_MEDIA, "RVD(NGA).RunL flags=%d", iFlags ) + TBool firstFrame( !IsFlag ( EFirstFrameReceived ) ); + SetFlag( EFirstFrameReceived ); + if ( firstFrame ) + { + CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted ); + } + + TInt surfaceno = buffer.SurfaceBuffer()->SurfaceNo(); + __VTPRINT2( DEBUG_MEDIA, "RVD(NGA).RunL received buffer surface id %d", surfaceno ) + if ( iSubmitPending ) + { + __VTPRINT( DEBUG_MEDIA, "RVD(NGA).RunL submit pending") + iWaitingBuffers.AddLast(buffer); + } + else + { + iCallBackTable[surfaceno]->iStatus = KRequestPending; + iCallBackTable[surfaceno]->SetActive(); + TTimeStamp timeStamp; + iSurfaceUpdateSession.NotifyWhenDisplayed(iCallBackTable[surfaceno]->iStatus, timeStamp); + iSubmitPending = ETrue; + iSurfaceUpdateSession.SubmitUpdate(0, iSurfaceId, surfaceno, NULL); + buffer.UnSet(); + } + if ( iSurfaceBuffers[ KVtEngBitmapNoReversed[ bitmapNo ] ].IsSet() ) + { + __VTPRINT2( DEBUG_MEDIA, "RVD(NGA).RunL reactivating for buffer %d", + KVtEngBitmapNoReversed[ bitmapNo ] ) + Activate(); + DisplaySink().NextFrame(); + } + TInt result = iBufferWaiter->FetchBuffer(); + User::LeaveIfError( result ); + + __VTPRINTEXIT( "RVD(NGA).RunL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::BufferReadyL +// BufferReadyL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::BufferReadyL( TVTSurfaceBuffer* aBuffer ) + { + __VTPRINTENTER( "RVD(NGA).BufferReadyL" ) + SetAvailableToSink( aBuffer ); + __VTPRINTEXIT( "RVD(NGA).BufferReadyL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::FetchError +// Buffer fetching error +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::FetchError( TInt ) + { + __VTPRINTENTER( "RVD(NGA).FetchError" ) + CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem ); + __VTPRINTEXIT( "RVD(NGA).FetchError" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::DoBaseConstructL +// Base construction implementation +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::DoBaseConstructL() + { + __VTPRINTENTER( "RVD(NGA).DoBaseConstructL" ) + delete iBufferWaiter; + iBufferWaiter = NULL; + + iBufferWaiter = + new ( ELeave ) CVtEngBufferWaiter( *this ); + + for ( TInt i = MDisplaySink::EFirstBitmap; + i < MDisplaySink::EFirstBitmap + KVtEngMaxSurfaceBuffers; i++ ) + { + iSurfaceBuffers[ i ].UnSet(); + } + ClearFlag( EBaseConstructCalled ); + __VTPRINTEXIT( "RVD(NGA).DoBaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::UpdateSinkParamsL +// Updates sink params +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::UpdateSinkParamsL() + { + __VTPRINTENTER( "RVD(NGA).UpdateSinkParamsL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( ESinkParamUpdateRequired ); + } + else + { + DoUpdateSinkParamsL(); + } + __VTPRINTEXIT( "RVD(NGA).UpdateSinkParamsL" ) + } + + + // ----------------------------------------------------------------------------- +// CVtEngDrawNGA::DoBaseStartDrawL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::DoBaseStartDrawL() + { + __VTPRINTENTER( "RVD(NGA).DoBaseStartDrawL" ) + SetFlag( EReadyInternal ); + if ( !iWatcher->IsActive() ) + { + iWatcher->Start( KVtEngWatcherTimeout, KVtEngWatcherTimeout, + iCallback ); + } + + DoSurfaceBuffer0Ready(); + DoSurfaceBuffer1Ready(); + + User::LeaveIfError( iBufferWaiter->FetchBuffer() ); + + + SetFlag( ERemoteVideoDrawing ); + ClearFlag( EBaseBaseStartDrawCalled ); + __VTPRINTEXIT( "RVD(NGA).DoBaseStartDrawL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::DoCreateSurfaceL +// Create surface implementation. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::DoCreateSurfaceL() + { + __VTPRINTENTER( "RVD(NGA).DoCreateSurfaceL" ) + TInt err; + + if(iSurfaceCreated) + { + + if (iSurfaceManager) + { + return; + + // Last return statement is for fixing an error causes + // green screen of remote video when swapping image after + // remote peer disabled video. + // So we return here to prevent recreate the surface object + // at this moment, codes below should NOT be removed due to + // potential future uses. + iConfig.iRemoteWindow->RemoveBackgroundSurface(ETrue); + iConfig.iWsSession->UnregisterSurface(0, iSurfaceId); + iSurfaceChunk->Close(); + delete iSurfaceChunk; + iSurfaceChunk = NULL; + iSurfaceManager->CloseSurface(iSurfaceId); + iSurfaceUpdateSession.CancelAllUpdateNotifications(); + iSurfaceUpdateSession.Close(); + + /* Close the surface manager handle */ + iSurfaceManager->Close(); + delete iSurfaceManager; + iSurfaceManager = 0; + } + for ( TInt i = KVtEngMaxSurfaceBuffers-1; i >= 0 ; i-- ) + { + if (iCallBackTable[i]) + { + iCallBackTable[i]->Cancel(); + delete iCallBackTable[i]; + iCallBackTable[i] = NULL; + } + } + iSurfaceBuffers[ 0 ].UnSet(); + iSurfaceBuffers[ 1 ].UnSet(); + iSurfaceBuffer0.UnSet(); + iSurfaceBuffer1.UnSet(); + iWaitingBuffers.Reset(); + } + + err = iSurfaceUpdateSession.Connect(); + User::LeaveIfError(err); + + iSurfaceManager = new RSurfaceManager(); + + User::LeaveIfNull(iSurfaceManager); + err = iSurfaceManager->Open(); + User::LeaveIfError(err); + + RSurfaceManager::TSurfaceCreationAttributesBuf attributes; + attributes().iPixelFormat = iSurfaceFormat; + attributes().iSize = iSourceSize; + attributes().iBuffers = KVtEngMaxSurfaceBuffers; + + //attributes().iStride = iSourceSize.iWidth*2; + attributes().iStride = iSourceSize.iWidth*3/2; + + attributes().iOffsetToFirstBuffer = 0; + attributes().iAlignment = 4; + attributes().iContiguous = EFalse; + attributes().iMappable = ETrue; + + err = iSurfaceManager->CreateSurface(attributes, iSurfaceId); + User::LeaveIfError(err); + + // Map to chunk + iSurfaceChunk = new RChunk(); + User::LeaveIfNull(iSurfaceChunk); + err = iSurfaceManager->MapSurface(iSurfaceId, *iSurfaceChunk); + User::LeaveIfError(err); + + // Get the info from the surfaceManager + RSurfaceManager::TInfoBuf info; + err = iSurfaceManager->SurfaceInfo(iSurfaceId, info); + User::LeaveIfError(err); + + TInt offset; + iSurfaceManager->GetBufferOffset(iSurfaceId, 0, offset); + iSurfaceBuffer0.Set(iSurfaceChunk->Base() + offset, 0 ); + iSurfaceManager->GetBufferOffset(iSurfaceId, 1, offset); + iSurfaceBuffer1.Set(iSurfaceChunk->Base() + offset, 1 ); + + iConfig.iWsSession->RegisterSurface(0, iSurfaceId); + iConfig.iRemoteWindow->SetBackgroundSurface(iSurfaceId); + + iCallBackTable[0] = new(ELeave) CActiveCallBack(TCallBack(SurfaceBuffer0Ready, this), CActive::EPriorityStandard-1); + CActiveScheduler::Add(iCallBackTable[0]); + iCallBackTable[1] = new(ELeave) CActiveCallBack(TCallBack(SurfaceBuffer1Ready, this), CActive::EPriorityStandard-1); + CActiveScheduler::Add(iCallBackTable[1]); + + iSurfaceCreated = ETrue; + + ClearFlag( EInitializePostingSurfaceCalled ); + __VTPRINTEXIT( "RVD(NGA).DoCreateSurfaceL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::DoUpdateSinkParamsL +// Updates sink params +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::DoUpdateSinkParamsL() + { + __VTPRINTENTER( "RVD(NGA).DoUpdateSinkParamsL" ) + TDisplaySinkParamsNGA params; + GetSinkParams( params ); + DisplaySink().UpdateSinkParamsL( params, iDSUpdated ); + ClearFlag( ESinkParamUpdateRequired ); + if ( IsFlag( ESinkResumeRequired ) ) + { + DisplaySink().Resume(); + ClearFlag( ESinkResumeRequired ); + } + __VTPRINTEXIT( "RVD(DP).DoUpdateSinkParamsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CreateSurfaceL +// Create surface. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::CreateSurfaceL() + { + __VTPRINTENTER( "RVD(NGA).CreateSurfaceL" ) + if ( IsFlag( EBaseConstructCalled ) ) + { + SetFlag( EInitializePostingSurfaceCalled ); + } + else + { + DoCreateSurfaceL(); + } + __VTPRINTEXIT( "RVD(NGA).CreateSurfaceL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::GetSinkParams +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::GetSinkParams( TDisplaySinkParamsNGA& aSinkParams ) + { + __VTPRINTENTER( "RVD(NGA).GetSinkParams" ) + Mem::FillZ( &aSinkParams, sizeof( TDisplaySinkParamsNGA ) ); + aSinkParams.iThreadId = RThread().Id(); + aSinkParams.iRequestStatusPtr = &iStatus; + aSinkParams.iObserver = iObserver; + aSinkParams.iSurfaceBuffer1 = &iSurfaceBuffers[ 0 ].Buffer(); + aSinkParams.iSurfaceBuffer2 = &iSurfaceBuffers[ 1 ].Buffer(); + aSinkParams.iFrameSize = iSourceSize; + aSinkParams.iSurfaceFormat = iSurfaceFormat; + aSinkParams.iFlags = TDisplaySinkParams::EDisplaySinkNGA; + __VTPRINTEXITR( "RVD(NGA).GetSinkParams flags=%d", + (TInt) aSinkParams.iFlags ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::DisplaySink +// Returns reference to sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink& CVtEngDrawNGA::DisplaySink() + { + return *iDisplaySink; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::SetToSink +// Sets posting buffer to sink. +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::SetAvailableToSink( TVTSurfaceBuffer* aBuffer ) + { + __VTPRINTENTER( "RVD(NGA).SetAvailableToSink" ) + for ( TInt i = MDisplaySink::EFirstBitmap; + i < MDisplaySink::EFirstBitmap + KVtEngMaxSurfaceBuffers; i++ ) + { + if ( !iSurfaceBuffers[ i ].IsSet() ) + { + iSurfaceBuffers[ i ].Set( aBuffer ); + Activate(); + DisplaySink().SetBitmapAvailable( + static_cast< MDisplaySink::TBitmapNo >( i ) ); + break; + } + } + __VTPRINTEXIT( "RVD(NGA).SetAvailableToSink" ) + } + +TInt CVtEngDrawNGA::SurfaceBuffer0Ready( TAny* aAny ) + { + __VTPRINTENTER( "RVD(NGA).SurfaceBuffer0Ready" ) + __VTPRINTEXIT( "RVD(NGA).SurfaceBuffer0Ready" ) + return ((CVtEngDrawNGA*)aAny)->DoSurfaceBuffer0Ready(); + } + +TBool CVtEngDrawNGA::DoSurfaceBuffer0Ready() + { + __VTPRINTENTER( "RVD(NGA).DoSurfaceBuffer0Ready" ) + if ( iSubmitPending ) + { + iSubmitPending = EFalse; + } + if (!iWaitingBuffers.IsEmpty()) + { + TVtEngBuffer* buffer = iWaitingBuffers.First(); + TInt surfaceno = buffer->SurfaceBuffer()->SurfaceNo(); + __VTPRINT2( DEBUG_MEDIA, "RVD(NGA).DoSurfaceBuffer0Ready, surface buffer %d is in waitingqueue", surfaceno ) + iCallBackTable[surfaceno]->iStatus = KRequestPending; + iCallBackTable[surfaceno]->SetActive(); + TTimeStamp timeStamp; + iSurfaceUpdateSession.NotifyWhenDisplayed(iCallBackTable[surfaceno]->iStatus, timeStamp); + iSubmitPending = ETrue; + iSurfaceUpdateSession.SubmitUpdate(0, iSurfaceId, surfaceno, NULL); + iWaitingBuffers.Remove(*buffer); + buffer->UnSet(); + } + iBufferWaiter->BufferAvailable(iSurfaceBuffer0); + __VTPRINTEXIT( "RVD(NGA).DoSurfaceBuffer0Ready" ) + return ETrue; + } + +TInt CVtEngDrawNGA::SurfaceBuffer1Ready( TAny* aAny ) + { + __VTPRINTENTER( "RVD(NGA).SurfaceBuffer1Ready" ) + __VTPRINTEXIT( "RVD(NGA).SurfaceBuffer1Ready" ) + return ((CVtEngDrawNGA*)aAny)->DoSurfaceBuffer1Ready(); + } + +TBool CVtEngDrawNGA::DoSurfaceBuffer1Ready() + { + __VTPRINTENTER( "RVD(NGA).DoSurfaceBuffer1Ready" ) + if ( iSubmitPending ) + { + iSubmitPending = EFalse; + } + + if (!iWaitingBuffers.IsEmpty()) + { + TVtEngBuffer* buffer = iWaitingBuffers.First(); + TInt surfaceno = buffer->SurfaceBuffer()->SurfaceNo(); + __VTPRINT2( DEBUG_MEDIA, "RVD(NGA).DoSurfaceBuffer0Ready, surface buffer %d is in waitingqueue", surfaceno ) + iCallBackTable[surfaceno]->iStatus = KRequestPending; + iCallBackTable[surfaceno]->SetActive(); + TTimeStamp timeStamp; + iSurfaceUpdateSession.NotifyWhenDisplayed(iCallBackTable[surfaceno]->iStatus, timeStamp); + iSubmitPending = ETrue; + iSurfaceUpdateSession.SubmitUpdate(0, iSurfaceId, surfaceno, NULL); + iWaitingBuffers.Remove(*buffer); + buffer->UnSet(); + } + iBufferWaiter->BufferAvailable(iSurfaceBuffer1); + __VTPRINTEXIT( "RVD(NGA).DoSurfaceBuffer1Ready" ) + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::TVtEngBuffer +// +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA::TVtEngBuffer::TVtEngBuffer() + : iBuffer( 0 ), iSurfaceBuffer(0) + { + __VTPRINTENTER( "RVD(NGA).Buffer.Ctor" ) + __VTPRINTEXIT( "RVD(NGA).Buffer.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::Set +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::TVtEngBuffer::Set( TVTSurfaceBuffer* aBuffer ) + { + __VTPRINTENTER( "RVD(NGA).Buffer.Set" ) + iSurfaceBuffer = aBuffer; + iBuffer = aBuffer->Buffer(); + __VTPRINTEXIT( "RVD(NGA).Buffer.Set" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::UnSet +// +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::TVtEngBuffer::UnSet() + { + __VTPRINTENTER( "RVD(NGA).Buffer.UnSet" ) + iSurfaceBuffer = 0; + iBuffer = 0; + __VTPRINTEXIT( "RVD(NGA).Buffer.UnSet" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::IsSet +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngDrawNGA::TVtEngBuffer::IsSet() const + { + return ( iSurfaceBuffer != NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::Buffer +// +// ----------------------------------------------------------------------------- +// +TVTSurfaceBuffer* &CVtEngDrawNGA::TVtEngBuffer::SurfaceBuffer() + { + return iSurfaceBuffer; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::TVtEngBuffer::Buffer +// +// ----------------------------------------------------------------------------- +// +TUint8* &CVtEngDrawNGA::TVtEngBuffer::Buffer() + { + return iBuffer; + } +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::CVtEngBufferWaiter +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA::CVtEngBufferWaiter::CVtEngBufferWaiter + //( CVideoRenderer& aVideoRenderer, MVtEngNGABufferWaiterObserver& aObserver ) + ( MVtEngNGABufferWaiterObserver& aObserver ) + : CActive( CActive::EPriorityStandard ), + iObserver( &aObserver ) + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.Ctor" ) + for ( TInt i = 0; i < KVtEngMaxSurfaceBuffers; i++ ) + { + this->iBuffers[ i ] = NULL; + } + CActiveScheduler::Add( this ); + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::~CVtEngBufferWaiter +// ----------------------------------------------------------------------------- +// +CVtEngDrawNGA::CVtEngBufferWaiter::~CVtEngBufferWaiter() + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.~" ) + Cancel(); + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::Activate +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::CVtEngBufferWaiter::Activate() + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.Activate" ) + iStatus = KRequestPending; + SetActive(); + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.Activate" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::FetchBuffer +// ----------------------------------------------------------------------------- +// +TInt CVtEngDrawNGA::CVtEngBufferWaiter::FetchBuffer() + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.FetchBuffer" ) + if ( IsActive() ) + { + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.FetchBuffer 1" ) + return KErrNone; + } + + Activate(); + if (iStatus == KRequestPending) + { + for ( TInt i = 0; i < KVtEngMaxSurfaceBuffers; i++ ) + { + if(this->iBuffers[ i ] != NULL) + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + break; + } + } + } + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.FetchBuffer 2" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::BufferAvailable +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::CVtEngBufferWaiter::BufferAvailable(TVTSurfaceBuffer& aBuffer) +{ + __VTPRINTENTER( "RVD(NGA).BufferWaiter.BufferAvailable" ) + for ( TInt i = 0; i < KVtEngMaxSurfaceBuffers; i++ ) + { + if(this->iBuffers[ i ] == NULL ) + { + this->iBuffers[ i ]= &aBuffer; + break; + } + } + + if(iStatus == KRequestPending ) + { + for ( TInt i = 0; i < KVtEngMaxSurfaceBuffers; i++ ) + { + if(this->iBuffers[ i ] != NULL) + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + break; + } + } + } + + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.BufferAvailable" ) +} + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::RunL +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::CVtEngBufferWaiter::RunL() + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.RunL" ) + TInt result( iStatus.Int() ); + if ( result == KErrNone ) + { + for ( TInt i = 0; i < KVtEngMaxSurfaceBuffers; i++ ) + { + if(this->iBuffers[ i ] != NULL) + { + TRAP_IGNORE( iObserver->BufferReadyL( this->iBuffers[ i ] ) ); + this->iBuffers[ i ] = NULL; + break; + } + } + } + else + { + iObserver->FetchError( result ); + } + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDrawNGA::CVtEngBufferWaiter::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtEngDrawNGA::CVtEngBufferWaiter::DoCancel() + { + __VTPRINTENTER( "RVD(NGA).BufferWaiter.DoCancel" ) + + if ( iStatus == KRequestPending ) + { + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrCancel); + } + + __VTPRINTEXIT( "RVD(NGA).BufferWaiter.DoCancel" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngDtmfHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngDtmfHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,363 @@ +/* +* Copyright (c) 2004 - 2006 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: Handler for DTMF sending. +* +*/ + + +// INCLUDE FILES +#include "CVtEngDtmfHandler.h" +#include "CVtEngMediaHandler.h" +#include "VtEngPanic.h" +#include "cvtlogger.h" + +// LOCAL MACROS +#define DTMF_STATES_COUNT 3 +const TInt KProtoDtmfCommandId = -1; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::NewL +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfHandler* CVtEngDtmfHandler::NewL( MVtH324ConfigCommand& aH324Config ) + { + __VTPRINTENTER( "DTMF.New" ) + CVtEngDtmfHandler* self = new ( ELeave ) CVtEngDtmfHandler( aH324Config ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "DTMF.New" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::~CVtEngDtmfHandler +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfHandler::~CVtEngDtmfHandler() + { + __VTPRINTENTER( "DTMF.~" ) + if ( iDtmfStates ) + { + iDtmfStates->ResetAndDestroy(); + } + delete iDtmfStates; + if( iProtoDtmf ) + { + VTProtocolFactory::DeleteUserInputIndication(iProtoDtmf); + } + iProtoDtmf = NULL; + __VTPRINTEXIT( "DTMF.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::HandleL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::HandleL( CVtEngOperation& aOp ) + { + __VTPRINTENTER( "DTMF.HandleL" ) + + const TVtEngCommandId cmdId( aOp.Command() ); + switch ( cmdId ) + { + case KVtEngStartDtmfTone: + { + __VTPRINT( DEBUG_MEDIA , "DTMF. start tone" ) + TChar tone; + TVtEngOpParamUtil::Set( tone, aOp ); + CVtEngDtmfState* state = (*iDtmfStates)[iCurrentState]; + if ( state ) + { + TVtEngDtmfTone dtmfTone( tone ); + state->SendDtmfL( dtmfTone ); + } + } + break; + case KVtEngStopDtmfTone: + __VTPRINT( DEBUG_MEDIA , "DTMF. stop tone (no op)" ) + break; + // Handling of different UIIs + case KVtEngSetUIIDtmfSupport: + SetUIISupport( EDTMFString ); + __VTPRINT( DEBUG_MEDIA , "DTMF Support enabled" ) + break; + case KVtEngSetUIIBasicStringSupport: + SetUIISupport( EBasicString ); + __VTPRINT( DEBUG_MEDIA , "Basic string Support enabled" ) + break; + case KVtEngSetUIIIA5StringSupport: + SetUIISupport( EIA5String ); + __VTPRINT( DEBUG_MEDIA , "IA5 String Support enabled" ) + break; + case KVtEngSetUIIGeneralStringSupport: + SetUIISupport( EGeneralString ); + __VTPRINT( DEBUG_MEDIA , "General String Support enabled" ) + break; + default: + __VTPRINT( DEBUG_MEDIA , "DTMF.Handle cmd not supported" ) + User::Leave( KErrNotSupported ); + } + __VTPRINTEXIT( "DTMF.HandleL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::ActivateState +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfState& CVtEngDtmfHandler::ActivateState( TVtEngDtmfState aNewState ) + { + __VTPRINTENTER( "DTMF.ActivateState" ) + __VTPRINT2( DEBUG_MEDIA , " new state=%d", aNewState ) + __ASSERT_ALWAYS( aNewState >= EVtDtmfStateIdle && + aNewState <= EVtDtmfStateBuffered, + Panic( EVtEngPanicInvalidDtmfState) ); + iCurrentState = aNewState; + __VTPRINTEXIT( "DTMF.ActivateState" ) + return *(*iDtmfStates)[iCurrentState]; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::SendComplete +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::SendComplete( TInt aError ) + { + __VTPRINTENTER( "DTMF.SendComplete" ) +#ifdef VTDEBUG + TRAPD( ignore, HandleSendCompleteL( aError ) ); + __VTPRINT2( DEBUG_MEDIA , "DTMF.SendComplete err=%d", ignore ) +#else + TRAP_IGNORE( HandleSendCompleteL( aError ) ); +#endif // VTDEBUG + __VTPRINTEXIT( "DTMF.SendComplete" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::ProtoDtmf +// +// ----------------------------------------------------------------------------- +// +MVTUserInput& CVtEngDtmfHandler::ReserveProtoDtmfL( + const TVtEngDtmfTone& aTone ) + { + __VTPRINTENTER( "DTMF.ReserveProtoDtmfL" ) + if ( iProtoDtmf != NULL ) + { + __VTPRINT( DEBUG_MEDIA , "DTMF.ReserveProtoDtmfL IN USE" ) + User::Leave( KErrInUse ); + } + TUint8 val = (TUint8) aTone.iTone; + +#ifdef VTDEBUG + if ( CVtLogger::Flags() & CVtLogger::ELogMedia ) + { + const TChar ch( val ); + _LIT( KVtDtmfBufferTrace, "VT: DTMF. tone value=" ); + TBuf<25> buffer( KVtDtmfBufferTrace() ); + buffer.Append( ch ); + RDebug::Print( buffer ); + } +#endif + + + + // NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // IT MUST BE CHECKED IS GIVEN LETTER SUPPORTED BY + // USED ENCODING SCHEME. NOW WE PASS ONLY NUMBERS AND * AND # + // AND THEY ARE SAFE TO USE BUT USING POWERFULL UIIs GIVE POSSIBILITY + // TO SEND ALL DIGITS AND NUMBERS. IN THAT CASE SET OF CHARS MUST BE CHECKED + // IN VTENGINE. (THAT IS THE REASON WHY THERE IS SEPARATE IF ELSEs) + // NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + __VTPRINT2( DEBUG_MEDIA , "DTMF. Proto USERINPUT %d", iUIISupport ) + switch ( iUIISupport ) + { + case EBasicString: + case EIA5String: + case EGeneralString: + __VTPRINT( DEBUG_MEDIA , "DTMF. Proto USERINPUT alphanumeric" ) + iProtoDtmf = VTProtocolFactory::CreateUserInputIndication( EVtUiiDTFM, val ); + break; + case EDTMFString: + __VTPRINT( DEBUG_MEDIA , "DTMF. Proto USERINPUT iDTMFString" ) + iProtoDtmf = VTProtocolFactory::CreateUserInputIndication( EVtUiiAlphaNumeric, val); + break; + default: + __VTPRINT( DEBUG_MEDIA , "DTMF. Proto USERINPUT unsupported" ) + break; + } + __VTPRINTEXIT( "DTMF.ReserveProtoDtmfL" ) + return *iProtoDtmf; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::ReleaseProtoDtmf +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::ReleaseProtoDtmf() + { + __VTPRINTENTER( "DTMF.ReleaseProtoDtmf" ) + if( iProtoDtmf ) + { + VTProtocolFactory::DeleteUserInputIndication(iProtoDtmf); + } + iProtoDtmf = NULL; + __VTPRINTEXIT( "DTMF.ReleaseProtoDtmf" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::CVtEngDtmfHandler +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfHandler::CVtEngDtmfHandler( MVtH324ConfigCommand& aH324Config ) : + iCurrentState( EVtDtmfStateIdle ), iH324Config( aH324Config ), + iUIISupport( EIA5String ), iIssuedDtmfCommandId(KProtoDtmfCommandId) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::ConstructL() + { + __VTPRINTENTER( "DTMF.ConstructL" ) + iDtmfStates = new ( ELeave ) + CArrayPtrFlat( DTMF_STATES_COUNT ); + + for ( TInt state = EVtDtmfStateIdle; + state <= EVtDtmfStateBuffered; + state++ ) + { + CreateStateL( state ); + } + __VTPRINTEXIT( "DTMF.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::HandleSendCompleteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::HandleSendCompleteL( TInt aError ) + { + __VTPRINTENTER( "DTMF.HandleSendCompleteL" ) + + __VTPRINT2( DEBUG_MEDIA , " HandleSendCompleteL err=%d", aError ) + if ( iDtmfStates ) + { + CVtEngDtmfState* state = (*iDtmfStates)[iCurrentState]; + if ( state ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "DTMF. complete on state %d", iCurrentState ) + state->DtmfSendCompleteL( aError ); + } + } + __VTPRINTEXIT( "DTMF.HandleSendCompleteL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::CreateState +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::CreateStateL( TInt aState ) + { + __VTPRINTENTER( "DTMF.CreateStateL" ) + CVtEngDtmfState* dtmfState = NULL; + switch ( aState ) + { + case EVtDtmfStateIdle: + dtmfState = CVtEngDtmfIdle::NewL( *this, iH324Config ); + break; + case EVtDtmfStateSending: + dtmfState = CVtEngDtmfSending::NewL( *this, iH324Config ); + break; + case EVtDtmfStateBuffered: + dtmfState = CVtEngDtmfBuffered::NewL( *this, iH324Config ); + break; + default: + Panic( EVtEngPanicInvalidDtmfState ); + break; + } + CleanupStack::PushL( dtmfState ); + iDtmfStates->AppendL( dtmfState ); + CleanupStack::Pop(); + __VTPRINTEXIT( "DTMF.CreateStateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::GetUIISupport +// returns the current UII support +// ----------------------------------------------------------------------------- +// +CVtEngDtmfHandler::TUIISupport CVtEngDtmfHandler::GetUIISupport() const + { + __VTPRINT2( DEBUG_MEDIA , "DTMF. GETUSERINPUT support=%d", iUIISupport ) + return iUIISupport; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::SetUIISupport +// Sets the UII support mode +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::SetUIISupport( CVtEngDtmfHandler::TUIISupport aValue ) + { + __VTPRINT2( DEBUG_MEDIA , "DTMF. SETUSERINPUT support=%d", aValue ) + iUIISupport = aValue; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::CheckCommandId +// Compares last issued DTMF command ID to parameter given command ID +// ----------------------------------------------------------------------------- +// +TBool CVtEngDtmfHandler::CheckCommandId( TInt aCheckCommandId ) const + { + __VTPRINT3( DEBUG_MEDIA , "DTMF. CHKCMID aCheckCommandId=%d iIssuedDtmfCommandId=%d",\ + aCheckCommandId, iIssuedDtmfCommandId ) + + if( iIssuedDtmfCommandId == aCheckCommandId ) + { + return ETrue; + } + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfHandler::StoreCommandId +// Stores given command ID +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfHandler::StoreCommandId( TInt aStoreCommandId ) + { + __VTPRINT2( DEBUG_MEDIA , "DTMF. STORECOMMANDID aStoreCommandId=%d", aStoreCommandId ) + + iIssuedDtmfCommandId = aStoreCommandId; + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngImageScaler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngImageScaler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,314 @@ +/* +* Copyright (c) 2004 - 2006 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: Image scaler +* +*/ + + + +// INCLUDE FILES +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngImageScaler.h" +#include +#include +#include +#include + +// CONSTANTS +// The number of used bitmaps as scaling targets. +const TInt KVtEngTargetBitmapCount = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +MVtEngImageScaler* CVtEngImageScaler::NewL( + MVtEngScalerObserver& aObserver ) + { + __VTPRINTENTER( "Scaler.NewL" ) + CVtEngImageScaler* scaler = new ( ELeave ) CVtEngImageScaler( aObserver ); + CleanupStack::PushL( scaler ); + scaler->ConstructL(); + CleanupStack::Pop( scaler ); + __VTPRINTEXIT( "Scaler.NewL" ) + return scaler; + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngImageScaler::ConstructL() + { + iVtScaler = CVtImageScaler::NewL( *this ); + GetScalingMethodL(); + iVtScaler->SetQualityL( iScalingMethod ); + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::ScaleL +// Scaling method. +// ----------------------------------------------------------------------------- +// +void CVtEngImageScaler::ScaleL( + TInt aSourceIndex ) + { + __VTPRINTENTER( "Scaler.ScaleL" ) + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ScaleL index=%d", + aSourceIndex ) + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ScaleL target index=%d", + iTargetBitmapInUse ) + if ( iVtScaler->IsActive() ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ScaleL NActive" ) + User::Leave( KErrInUse ); + } + + // If there is no bitmaps done, do leave. + // The caller should call ConfigureL. + if ( iSources.Count() <= 0 || iTargets.Count() <= 0 ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ScaleL: not conf" ) + User::Leave( KErrNotReady ); + } + iVtScaler->ScaleL( *iSources[ aSourceIndex ] , + *iTargets[iTargetBitmapInUse] ); + __VTPRINTEXIT( "Scaler.ScaleL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::Configure +// Configure scaling. +// ----------------------------------------------------------------------------- +// +TBool CVtEngImageScaler::ConfigureL( + TDisplayMode aDisplayMode, + TSize aSize, + TInt aSourceHandle1, + TInt aSourceHandle2 ) + { + __VTPRINTENTER( "Scaler.ConfigureL" ) + __VTPRINT( DEBUG_MEDIA , "================== Scaler.Config ==================" ) + __VTPRINT2( DEBUG_MEDIA, " aSize.iWidth:%d ", aSize.iWidth) + __VTPRINT2( DEBUG_MEDIA, " aSize.iHeight:%d ", aSize.iHeight ) + __VTPRINT2( DEBUG_MEDIA, " aDisplayMode:%d", aDisplayMode ) + __VTPRINT( DEBUG_MEDIA , "================== Scaler.Config ==================" ) + + TInt sourceHandle1( 0 ); + if ( iSources.Count() > 0 ) + { + CVtImageBitmap* bmp = iSources[ EFirstBitmap ]; + if ( bmp ) + { + sourceHandle1 = bmp->Bitmap().Handle(); + } + } + TInt sourceHandle2( 0 ); + if ( iSources.Count() > 1 ) + { + CVtImageBitmap* bmp = iSources[ ESecondBitmap ]; + if ( bmp ) + { + sourceHandle2 = bmp->Bitmap().Handle(); + } + } + + // Do we have to cancel scaling first? + TBool cancelled( iVtScaler->IsActive() ); + + if ( aSourceHandle1 != sourceHandle1 || aSourceHandle2 != sourceHandle2 + || aSize != iSize || iMode != aDisplayMode ) + { + if ( cancelled ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:Config cancel" ) + Cancel(); + } + } + else + { + // Do we need the update => NO + __VTPRINTEXITR( "Scaler.ConfigureL %d", EFalse ) + return EFalse; + } + + // Store new mode and size. + iMode = aDisplayMode; + iSize = aSize; + + // The RVD source images have changed. + if ( aSourceHandle1 != sourceHandle1 || aSourceHandle2 != sourceHandle2 ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "Scaler:ConfigureL create bitmaps" ) + CVtImageBitmap* vtBitmap = CVtImageBitmap::NewL( aSourceHandle1 ); + CleanupStack::PushL( vtBitmap ); + CVtImageBitmap* vtBitmap2 = CVtImageBitmap::NewL( aSourceHandle2 ); + CleanupStack::PushL( vtBitmap2 ); + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ConfigureL source reset" ) + iSources.ResetAndDestroy(); + iSources.AppendL( vtBitmap ); + iSources.AppendL( vtBitmap2 ); + CleanupStack::Pop( KVtEngTargetBitmapCount ); // vtBitMaps + } + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ConfigureL create targets" ) + CVtImageBitmap* vtBitmapT = CVtImageBitmap::NewL( aSize, aDisplayMode ); + CleanupStack::PushL( vtBitmapT ); + CVtImageBitmap* vtBitmapT2 = CVtImageBitmap::NewL( aSize, aDisplayMode ); + CleanupStack::PushL( vtBitmapT2 ); + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ConfigureL target reset" ) + iTargets.ResetAndDestroy(); + iTargets.AppendL( vtBitmapT ); + iTargets.AppendL( vtBitmapT2 ); + CleanupStack::Pop( KVtEngTargetBitmapCount ); // vtBitMapTs + + __VTPRINTEXITR( "Scaler.ConfigureL %d", cancelled ) + return cancelled; + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::ScalingFinished +// Callback telling that scaling is done. +// ----------------------------------------------------------------------------- +// +void CVtEngImageScaler::ScalingFinished( TInt aError ) + { + __VTPRINTENTER( "Scaler.ScalingFinished" ) + + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:ScaleFin ", aError ) + + if ( aError == KErrNone ) + { + CFbsBitmap& bitmap = iTargets [ iTargetBitmapInUse ]->Bitmap(); + __VTPRINT2( DEBUG_MEDIA, "Scaler.ScalingFin index", iTargetBitmapInUse ) + + if ( iTargetBitmapInUse == EFirstBitmap ) + { + iTargetBitmapInUse = ESecondBitmap; + } + else + { + iTargetBitmapInUse = EFirstBitmap; + } + // Notify client of done scaling + iObserver.ScalingCompleted( &bitmap, aError ); + } + else + { + iObserver.ScalingCompleted( NULL, aError ); + } + __VTPRINTEXIT( "Scaler.ScalingFinished" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::~CVtEngImageScaler +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtEngImageScaler::~CVtEngImageScaler() + { + __VTPRINTENTER( "Scaler.~" ) + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Scaler:Dtor" ) + iTargets.ResetAndDestroy(); + iTargets.Close(); + iSources.ResetAndDestroy(); + iSources.Close(); + delete iVtScaler; + __VTPRINTEXIT( "Scaler.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::CVtEngImageScaler +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CVtEngImageScaler::CVtEngImageScaler( + MVtEngScalerObserver& aObserver ) : + iObserver( aObserver ), iTargetBitmapInUse ( EFirstBitmap ), + iScalingMethod( CVtImageScaler::EWeightedAverage ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::Release +// Interface function implementation to delete the implementation. +// ----------------------------------------------------------------------------- +// +void CVtEngImageScaler::Release() + { + // Delete myself + __VTPRINTENTER( "Scaler.Release" ) + delete this; + __VTPRINTEXIT( "Scaler.Release" ) + } + +// ----------------------------------------------------------------------------- +// VtEngScalerFactory::CreateScalerL +// Creates the image scaler. +// ----------------------------------------------------------------------------- +// +MVtEngImageScaler* VtEngScalerFactory::CreateScalerL( + MVtEngScalerObserver& aObserver ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "VtEngScalerFactory::CreateScalerL" ) + return CVtEngImageScaler::NewL( aObserver ); + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::Cancel +// Cancels the conversion. +// ----------------------------------------------------------------------------- +// +TInt CVtEngImageScaler::Cancel() + { + __VTPRINTENTER( "Scaler.Cancel" ) + iVtScaler->Cancel(); + __VTPRINTEXIT( "Scaler.Cancel" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngImageScaler::GetScalingMethodL +// Gets the used scaling method from local variation. +// ----------------------------------------------------------------------------- +// +void CVtEngImageScaler::GetScalingMethodL() + { + __VTPRINTENTER( "Scaler.GetScalingMethodL" ) + // Check if the scaling method is non-default + CVtEngSettings& settings = CVtEngUtility::Settings(); + if( settings.CheckBits( + KVTLVFlagScalingMethodENearest ) ) + { + iScalingMethod = CVtImageScaler::ENearest; + } + else if ( settings.CheckBits( + KVTLVFlagScalingMethodEBilinear ) ) + { + iScalingMethod = CVtImageScaler::EBilinear; + } + __VTPRINTEXITR( "Scaler.GetScalingMethodL %d", (TInt) iScalingMethod ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngLocalVideo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngLocalVideo.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,4532 @@ +/* +* Copyright (c) 2004-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: Local video configuration +* +*/ + + + +// INCLUDE FILES +#include "CVtEngLocalVideo.h" +#include "CVtEngMediaHandler.h" +#include "VtEngPanic.h" +#include "MVtEngFrameObserver.h" +#include "CVtEngStateManager.h" +#include "CVtEngEventManager.h" +#include "MVtEngMedia.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "VtEngEvents.h" +#include +#include +#include +#include +#include + +#include "CVtEngCameraPreferences.h" + +// LOCAL CONSTANTS AND MACROS + +// Maximum count of providers stored (cameras, still, blank) +const TInt KVtEngProviderCountMax = 4; + +// Max zoom step count. +const TInt KVtMaxZoomStep = 10; + +// If prepare camera is called when provider is ready signal +// immediately back with positive value. +const TInt KVtEngAlreadySelected = 1; + +// If source is already active signal with this. +const TInt KVtEngAlreadyActive = 2; + +// Number of providers buffered in image sharer +const TInt KVtEngNumProvidersBuffered = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngLocalVideo +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::CVtEngLocalVideo( + CVtEngMediaHandler& aObserver ) + + /** priority is high to ensure that this AO gets scheduled as soon as + * possible after signaling. If local video is requested a service, e.g. + * source switch while its signaled but not yet scheduled, local video's + * internal state may be compromised (signal AO => start selecting new source + * => RunL [this would break ongoing source selection] + */ + : CActive( EPriorityHigh ), + iRenderingMethod( EUnspecified ), + iObserver( aObserver ), + iCurrentCamera( MVtEngMedia::ESecondaryCamera ), + iLayoutChangeHandler( *this ) + { + ResetIndices(); + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.c++") + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ConstructL() + { + __VTPRINTENTER( "LocVideo.ConstructL" ) + + iAsyncCallBack = new ( ELeave ) CAsyncCallBack( + TCallBack( CallBackFunc, this ), EPriorityStandard ); + + TInt indexMobile( KErrNotFound ); + iShareImage = CVtEngShareImage::NewL( *this ); + iSourceController = CVSController::NewL( this ); + iVideoProviders = + new ( ELeave ) CArrayFixFlat( KVtEngProviderCountMax ); + iSource = iSourceController->CreateDataSourceL( this ); + PauseVideoSending(); + TInt providers( iSourceController->ProvidersAvailable() ); + iNumSupportedCameras = providers - 1; + ResetIndices(); + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.providers=%d",providers) + // Get the device specified default camera. + TInt cameraId( iCurrentCamera ); + TInt err( SetCameraTrackingL( cameraId ) ); + if ( err == KErrNone && cameraId != EPSPreferredCameraUnknown ) + { + // Only if valid camera. + iCurrentCamera = MapCameraInternally( cameraId ); + err = KErrAlreadyExists; + } + + while ( providers-- ) + { + CVSDataProvider* provider = NULL; + TRAP_IGNORE( provider = + iSourceController->CreateDataProviderL( providers, this, iSource ) ); + if ( provider ) + { + CleanupStack::PushL( provider ); + TProviderItem item; + TVSDataProviderInfo info; + provider->ProviderInfo( info ); + TBool destroy( ETrue ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Orient=%d", + info.iOrientation ) + switch ( info.iOrientation ) + { + case TCameraInfo::EOrientationInwards: + SetFlag( EFlagCamera1Available ); + item.iType = KVtEngProviderCam1; + if ( err != KErrAlreadyExists ) + { + // Set only if value not obtained from PubSub + iCurrentCamera = MVtEngMedia::EPrimaryCamera; + } + iProviderInfoIndexCam1 = providers; + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL ID C1=%d", + iProviderInfoIndexCam1 ) + break; + case TCameraInfo::EOrientationOutwards: + // Configures outwards camera, it is treated as camera 1 + // if there is only one camera in the device. + ConfigureOutwardsCameraItem( item, providers ); + break; + case TCameraInfo::EOrientationMobile: + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Mobile") + item.iType = KVtEngProviderTempImage; + indexMobile = providers; + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Mobile ID=%d", + indexMobile ) + break; + case TCameraInfo::EOrientationUnknown: + { + item.iType = KVtEngProviderImage; + item.iProvider = provider; + item.iProviderState = EPermanent; + destroy = EFalse; // don't delete still provider + CreateBlankProviderL( providers ); + + if ( CVtEngUtility::Settings(). + IsDefaultStillImageDefined() ) + { + CreateDefaultStillImageProviderL( providers ); + } + + iProviderInfoIndexStill = providers; + __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, + "LocVideo.ConL ID Still=%d",iProviderInfoIndexStill ) + } + break; + default: + break; + } + iVideoProviders->AppendL( item ); + CleanupStack::Pop(); + if ( destroy ) + { + delete provider; + provider = NULL; + } + } + } + iObserver.SetSelectedCameraId( iCurrentCamera ); + // Check if mobile is there, and either 1 or 2 is not. + + if ( indexMobile != KErrNotFound ) + { + TProviderItem* item = NULL; + const TInt err = GetProviderByType( KVtEngProviderTempImage, item ); + __ASSERT_ALWAYS( err != KErrNotFound, + Panic( EVtEngPanicInvalidInitializationState ) ); + if ( iProviderInfoIndexCam1 == KErrNotFound ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL Switch 1" ) + item->iType = KVtEngProviderCam1; + iProviderInfoIndexCam1 = indexMobile; + SetFlag( EFlagCamera1Available ); + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL Switch 2" ) + DeleteProvider( KVtEngProviderCam2 ); + item->iType = KVtEngProviderCam2; + iProviderInfoIndexCam2 = indexMobile; + SetFlag( EFlagCamera2Available ); + } + } + __VTPRINTEXIT( "LocVideo.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ConfigureOutwardsCameraItem +// Creates providers item for outwards camera type. It is treated as +// a) primary camera in single camera configurations +// b) secondary camera in two camera configurations +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ConfigureOutwardsCameraItem( + TProviderItem& aItem, + const TInt aCurrentIndex ) + { + __VTPRINTENTER( "LocVideo.ConfigureOutwardsCameraItem" ) + if ( iNumSupportedCameras == 1 ) + { + SetFlag( EFlagCamera1Available ); + aItem.iType = KVtEngProviderCam1; + iProviderInfoIndexCam1 = aCurrentIndex; + iCurrentCamera = MVtEngMedia::EPrimaryCamera; + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.ConL ID C1=%d", iProviderInfoIndexCam1 ) + } + else + { + SetFlag( EFlagCamera2Available ); + aItem.iType = KVtEngProviderCam2; + iProviderInfoIndexCam2 = aCurrentIndex; + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.ConL ID C2=%d", iProviderInfoIndexCam2 ) + } + __VTPRINTEXITR( "LocVideo.ConfigureOutwardsCameraItem iCurrentCamera=%d", + iCurrentCamera ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CallBackFunc +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CompleteOperation( const TInt aResult ) + { + __VTPRINTENTER( "LocVideo.CompleteOperation" ) + SetResult( aResult ); + iAsyncCallBack->CallBack(); + __VTPRINTEXITR( "LocVideo.CompleteOperation %d", aResult ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::VideoChannelOpenedL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::VideoChannelOpenedL() + { + __VTPRINTENTER( "LocVideo.VideoChannelOpenedL" ) + if ( iDelayedSelect.IsDelayedSelectPending() ) + { + SelectSourceL( iDelayedSelect.DelayedSelectTarget() ); + } + __VTPRINTEXIT( "LocVideo.VideoChannelOpenedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CallBackFunc +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::CallBackFunc( TAny* aPtr ) + { + __VTPRINTENTER( "LocVideo.CallBackFunc" ) + CVtEngLocalVideo* self = reinterpret_cast< CVtEngLocalVideo* >( aPtr ); + TInt result( KErrNone ); + TRAP( result, + self->iObserver.HandleLocalVideoOperationCompleteL( + self->Result() ) ); + __VTPRINTEXITR( "LocVideo.CallBackFunc %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::Result +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::Result() const + { + __VTPRINTENTER( "LocVideo.Result" ) + __VTPRINTEXITR( "LocVideo.Result %d", iResult ) + return iResult; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetResult +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetResult( const TInt aResult ) + { + __VTPRINTENTER( "LocVideo.SetResult" ) + iResult = aResult; + __VTPRINTEXITR( "LocVideo.SetResult %d", iResult ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo* CVtEngLocalVideo::NewL( + CVtEngMediaHandler& aObserver ) + { + __VTPRINTENTER( "LocVid.NewL" ) + CVtEngLocalVideo* self = new( ELeave ) + CVtEngLocalVideo( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop(); + __VTPRINTEXIT( "LocVid.NewL" ) + return self; + } + + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::~CVtEngLocalVideo +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::~CVtEngLocalVideo() + { + __VTPRINTENTER( "LocVid.~" ) + // Cancel the object + if ( iActiveProvider ) + { + iActiveProvider->DetachFromCameraPreferences(); + } + if ( iAsyncCallBack ) + { + iAsyncCallBack->Cancel(); + delete iAsyncCallBack; + } + Cancel(); + if ( iVideoProviders ) + { + while ( iVideoProviders->Count() ) + { + TProviderItem& item = (*iVideoProviders)[0]; + CVSDataProvider* provider = item.iProvider; + delete provider; + iVideoProviders->Delete( 0 ); + } + delete iVideoProviders; + } + + delete iCameraListener; + iCameraListener = NULL; + + delete iSource; + delete iSourceController; + DeleteAudioSource(); + delete iShareImage; + __VTPRINTEXIT( "LocVid.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::vsProviderError +// Handles error in provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::vsProviderError( TInt aError ) + { + if( aError == KErrCancel ) + { + vsProviderReady(); + return; + } + __VTPRINTENTER( "LocVid.vsProviderError" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.ProviderError=%d", aError ) + iInitializingProvider = NULL; + if ( aError != KErrNone ) + { + iShareImage->Error( aError ); + if ( !iLayoutChangeHandler.ProviderError( aError ) ) + { + const TState previousState = iState; + iState = ELocNone; + __VTPRINT( DEBUG_MEDIA, " STATE TO NONE" ) + + // If the error indicates that camera is in use + if ( aError == KErrInUse && previousState == ELocInitializing ) + { + // Store the error to be used later + if( iSelectedProvider ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError in use") + iSelectedProvider->iErrorCode = aError; + if ( iSelectedProvider->iType == KVtEngProviderCam1 ) + { + ClearFlag( EFlagCamera1Available ); + } + else if ( iSelectedProvider->iType == KVtEngProviderCam2 ) + { + ClearFlag( EFlagCamera2Available ); + } + } + } + // Camera has been lost + if ( aError == KVsErrCameraNoLongerReserved ) + { + if ( !IsActive() ) + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, aError ); + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError AO start" ) + __VTPRINTEXITR( + "LocVid.vsProviderError err=%d", aError ) + + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError iSelectedProvider NULL" ) + if ( iSelectedProvider ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError iSelectedProvider NULL" ) + iSelectedProvider->iInitialized = EFalse; + iSelectedProvider->iProviderState = + (CVtEngLocalVideo::TProviderState) aError; + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError iSelectedProvider NULL" ) + } + return; + } + } + if ( iSelectedProvider ) + { + // Try to select the last known to function camera + if ( iSelectedProvider->iType == KVtEngProviderCam1 || + iSelectedProvider->iType == KVtEngProviderCam2 ) + { + if ( !IsActive() ) + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, aError ); + __VTPRINT( DEBUG_MEDIA, + "LocVideo.ProviderError AO start" ) + __VTPRINTEXITR( + "LocVid.vsProviderError err=%d", aError ) + return; + } + } + //Error code needed later + iSelectedProvider->iInitialized = EFalse; + iSelectedProvider->iProviderState = + (CVtEngLocalVideo::TProviderState) aError; + iSelectedProvider = NULL; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + " selected provider nulled" ) + } + else if ( iActiveProvider && + !IsFlag( EFlagInitializeOnly ) && + previousState == ELocSwichingProvider ) + { + iActiveProvider = iFadingProvider; + iFadingProvider = NULL; + } + if ( IsFlag( EFlagSignalSourceSelection ) ) + { + ClearFlag( EFlagSignalSourceSelection ); + TRAP_IGNORE( + iObserver.HandleLocalVideoOperationCompleteL( aError ) ); + } + } + } + __VTPRINTEXIT( "LocVid.vsProviderError" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::vsProviderReady +// Provider is ready to be taken into use. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::vsProviderReady() + { + __VTPRINTENTER( "LocVid.vsProviderReady" ) + + __VTPRINT3( DEBUG_MEDIA, "LocVideo.ProviderReady state=%d, initOnly=%d", + iState, IsFlag( EFlagInitializeOnly ) ) + const TState prevState( iState ); + + if ( iInitializingProvider ) + { + iInitializingProvider->iInitialized = ETrue; + + // Set camera flags in order to recover + // error situation (error occured during init) + if ( iInitializingProvider->iType == KVtEngProviderCam1 ) + { + __VTPRINT( DEBUG_MEDIA, " LocVid.vsProviderReady KVtEngProviderCam1" ) + SetFlag( EFlagCamera1Available ); + } + else if ( iInitializingProvider->iType == KVtEngProviderCam2 ) + { + __VTPRINT( DEBUG_MEDIA, " LocVid.vsProviderReady KVtEngProviderCam2" ) + SetFlag( EFlagCamera2Available ); + } + + iInitializingProvider = NULL; + } + + iState = ELocReady; + __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) + + if ( iLayoutChangeHandler.ProviderReady() ) + { + __VTPRINTEXIT( "LocVid.vsProviderReady" ) + return; + } + + if ( prevState == ELocInitializing && !IsFlag( EFlagInitializeOnly ) ) + { + TProviderItem* switchTo = iActiveProvider; + if ( iSelectedProvider ) + { + iSelectedProvider->iErrorCode = KErrNone; + switchTo = iSelectedProvider; + iSelectedProvider = NULL; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider nulled" ) + } + __VTPRINT( DEBUG_MEDIA, "LocVideo.ProviderReady switching") + SwitchProvider( switchTo ); + __VTPRINTEXIT( "LocVid.vsProviderReady" ) + return; + } + else + { + iSelectedProvider = NULL; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Selected provider nulled, UDS" ) + UpdateState(); + __VTPRINT( DEBUG_MEDIA, + "LocVideo.vsProviderReady KVtEngSourceCapsChanged") + CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); + } + + if ( IsFlag( EFlagSignalSourceSelection ) ) + { + ClearFlag( EFlagSignalSourceSelection ); + TRAP_IGNORE( iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); + } + __VTPRINTEXIT( "LocVid.vsProviderReady" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::vsProviderSwitchDone +// Provider switched. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::vsProviderSwitchDone( CVSDataProvider* aOldProvider ) + { + __VTPRINTENTER( "LocVid.vsProviderSwitchDone" ) + iState = ELocReady; + __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) + + iFadingProvider = NULL; + + if ( iActiveProvider && iActiveProvider->iProvider ) + { + iActiveProvider->iProvider->ProviderInfo( iProviderInfo ); + TInt error( iActiveProvider->RestoreZoomFactor() ); + if ( error ) + { + __VTPRINT2( DEBUG_MEDIA, + "LocVid.vsProviderSwitchDone restoring stored zoom FAILED %d", + error ) + } + } + + iShareImage->ProviderSwitchDone( aOldProvider ); + + if ( iActiveProvider && iActiveProvider->iType == KVtEngProviderCam1 ) + { + iCurrentCamera = MVtEngMedia::EPrimaryCamera; + iObserver.SetSelectedCameraId( iCurrentCamera ); + } + else if ( iActiveProvider && iActiveProvider->iType == KVtEngProviderCam2 ) + { + iCurrentCamera = MVtEngMedia::ESecondaryCamera; + iObserver.SetSelectedCameraId( iCurrentCamera ); + } + + // Let layout change handler handle providerswitch + if ( iLayoutChangeHandler.ProviderSwitchDone( aOldProvider ) ) + { + CVtEngEventManager::NotifyEvent( KVtEngLCHProviderSwitchDone ); + __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) + return; + } + + ClearFlag( EFlagFrozen ); + + // If initilization of the waiting provider fails fall back to the last one. + TVtEngProviderType backupProviderType( KVtEngProviderNone ); + + // Delete non-permanent old provider + const TInt indexI( ProviderIndexByInstance( aOldProvider ) ); + + // delete provider that became unavailable + if ( indexI != KErrNotFound ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.providerSwitchDone indexInstance=%d", indexI ) + TProviderItem& item( ( *iVideoProviders )[ indexI ] ); + if ( item.iProviderState != EPermanent && + item.iProviderState != ERefreshing ) + { + DeleteProvider( item ); + TRAP_IGNORE( item.iProvider = CreateDataProviderL( item.iType ) ); + } + } + + // Uninitialize fading provider + const TInt indexF = ProviderIndexByState( EFading ); + if ( indexF != KErrNotFound ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.providerSwitchDone fading indexFading=%d", indexF ) + TProviderItem& item = (*iVideoProviders)[indexF]; + + // Mark up type of the last provider. + backupProviderType = item.iType; + + DeleteProvider( item ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.providerSwitchDone fading=%d", item.iType ) + TRAP_IGNORE( item.iProvider = CreateDataProviderL( item.iType ) ); + } + + // Initialize waiting provider + TInt err( KErrNone ); + const TInt indexW( ProviderIndexByState( EWaiting ) ); + if ( indexW != KErrNotFound ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.providerSwitchDone waiting=%d", indexW ) + TProviderItem& item = (*iVideoProviders)[indexW]; + item.iProviderState = EUndefined; + TRAP( err, InitializeProviderL( item ) ); + if ( err == KErrNone) + { + iSelectedProvider = &item; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) + backupProviderType = KVtEngProviderNone; + } + else + { + iState = ELocNone; + __VTPRINT( DEBUG_MEDIA, " STATE TO NONE" ) + __VTPRINT2( DEBUG_MEDIA, "failed initializing provider=%d", err ) + // If initialization failed indicate that provider is not available + if ( item.iType == KVtEngProviderCam1 ) + { + ClearFlag( EFlagCamera1Available ); + } + else if ( item.iType == KVtEngProviderCam2 ) + { + ClearFlag( EFlagCamera2Available ); + } + else if( item.iType == KVtEngProviderShareImage ) + { + iShareImage->Error( err ); + } + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + } + + // Reconstruct refreshing (new still image) provider. + const TInt indexR( ProviderIndexByState( ERefreshing ) ); + if ( indexR != KErrNotFound ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.providerSwitchDone refreshing") + TProviderItem& item = (*iVideoProviders)[indexR]; + DeleteProvider( item ); + + // If still image disabled in settings. + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + const TBool stillImageValid( config.iVideo.iImageIsValid ); + TRAP( err, + { + item.iProvider = CreateDataProviderL( item.iType ); + if ( stillImageValid ) + { + InitializeProviderL( item ); + } + else + { + item.iProviderState = EPermanent; // change back to original + } + } ); + if ( err == KErrNone && stillImageValid ) + { + iSelectedProvider = &item; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) + } + else + { + iState = ELocNone; + __VTPRINT2( DEBUG_MEDIA, " STATE TO NONE initerr=%d", err ) + } + } + + // If we have delayed select pending -> initiate new switch and return + if ( iDelayedSelect.IsDelayedSelectPending() ) + { + ClearFlag( EFlagCheckRevertToPrevious ); + TVtEngProviderType pending = iDelayedSelect.DelayedSelectTarget(); + __VTPRINT2( DEBUG_MEDIA, " delayed select pending type = %d", pending ) + if( iActiveProvider && iActiveProvider->iType == pending ) + { + // clear the iDelayedSelect to KVtEngProviderUndefined + // and no need to select again,continue complete this vsProviderSwitchDone + iDelayedSelect.DelayedSelectTarget(); + } + else + { + TRAP_IGNORE( SelectSourceL( pending ) ); + __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) + return; + } + } + + if ( IsFlag( EFlagSignalSourceSelection ) && + iState != ELocInitializing && // Set in InitializeProviderL if called + err == KErrNone && // but not if init (or create provider in + // there) failed. + !IsFlag( EFlagCheckRevertToPrevious ) ) + { + // Signal only if we're in final state (i.e. not if blank provider + // was switched and just started initializing a camera). + ClearFlag( EFlagSignalSourceSelection ); + TRAP_IGNORE( iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); + } + else if ( IsFlag( EFlagCheckRevertToPrevious ) && + ( iState == ELocReady || iState == ELocNone ) ) + { + ClearFlag( EFlagCheckRevertToPrevious ); + MVtEngMedia::TCameraId currentCam( MVtEngMedia::EPrimaryCamera ); + iObserver.GetCurrentCameraId( currentCam ); + backupProviderType = + ( currentCam==MVtEngMedia::EPrimaryCamera ) ? + KVtEngProviderCam1 : KVtEngProviderCam2; + } + + __VTPRINT2( DEBUG_MEDIA, " switch done iState=%d", iState ) + + //Inform camera preferences that valid provider is set + // Check that valid provider exist + // and set it as provider to camera + // preferences + if ( iActiveProvider ) + { + __VTPRINT2( DEBUG_MEDIA, "switch done prov.state=%d", + iActiveProvider->iProviderState ) + // Set provider to camera preferences + // only if camera preferences exist + if ( iCameraPref) + { + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.providerSwitchDone iCameraPref->SetProvider type=%d", + iActiveProvider->iType ) + iCameraPref->SetProvider( iActiveProvider->iProvider, + *iActiveProvider ); + + TInt error( iActiveProvider->RestorePreferences() ); + if ( error ) + { + __VTPRINT2( DEBUG_MEDIA, " restoring preferences FAILED %d", + error ) + } + } + else + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.providerSwitchDone camera pref not created" ) + } + } + + if ( IsFlag( EFlagInitialized ) && iState != ELocInitializing ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.providerSwitchDone KVtEngSourceCapsChanged" ) + CVtEngEventManager::NotifyEvent( KVtEngSourceChanged ); + } + + TRAP( err, StartViewFinderIfWasStartedL() ); // err is ignored + + if ( backupProviderType != KVtEngProviderNone ) + { + // Initialization of new provider failed, + // try reverting back to last one. + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.providerSwitchDone revert to %d", backupProviderType ) + TRAP( err, SelectSourceL( backupProviderType ) ); + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + } + + __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::vsViewFinderFrameReady +// View finder image can be set. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::vsViewFinderFrameReady( CFbsBitmap& aFrame ) + { + __VTPRINTENTER( "LocVid.vsViewFinderFrameReady" ) + if ( iActiveProvider && + iActiveProvider->iType != KVtEngProviderNone ) + { + TRAP_IGNORE( iOptions.iObserver->vtHandleFrameL( + MVtEngFrameObserver::ELocalVideoFrame, &aFrame ) ); + } + __VTPRINTEXIT( "LocVid.vsViewFinderFrameReady" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::vsProvidersChanged +// Provider state has changed. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::vsProvidersChanged( TBool aAttached ) + { + __VTPRINTENTER( "LocVid.vsProvidersChanged" ) + + __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged attached=%d", aAttached ) + __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged state=%d",iState ) + if ( iAudioSource == NULL ) + { + // If this is called from ConstructL (indirectly) return immediately + if ( aAttached || iCurrentCamera == MVtEngMedia::EPrimaryCamera ) + { + SetFlag( EFlagCamera1Available ); + iObserver.SetSelectedCameraId( MVtEngMedia::EPrimaryCamera, ETrue ); + } + else + { + ClearFlag( EFlagCamera1Available ); + iObserver.SetSelectedCameraId( + MVtEngMedia::ESecondaryCamera, ETrue ); + } + __VTPRINTEXIT( "LocVid.vsProvidersChanged" ) + return; + } + + // If primary camera was not available and state is not "open" + // UI should be requested for answer. Precondition is also that + // primary camera is now available. + TBool notifyAnswer( EFalse ); + TInt activeMedia( 0 ); + + const MVtEngSessionInfo::TSessionState state( + CVtEngUtility::StateManager()->SessionState() ); + + __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged, call state=%d", state ) + if ( state == MVtEngSessionInfo::EReceiving ) + { + __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged attached=%d", aAttached ) + if ( !IsFlag( EFlagCamera1Available ) && aAttached ) + { + notifyAnswer = ETrue; + } + } + + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged answer=%d", notifyAnswer ) + CVtEngLocalVideo::TVtEngProviderType providerToSelect( KVtEngProviderNone ); + TRAPD( err, providerToSelect = UpdateAvailableProvidersL() ); + if ( err == KErrNone ) + { + // Now get the state to check if video has been disabled + GetMediaState( activeMedia ); + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged mediastate=%d", activeMedia ) + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged iState=%d", iState ) + + // values for checking if switch is allowed + TBool activeIsStillOrBlank ( EFalse ); + TBool activeIsBlankAndNewCam1( EFalse ); + if ( iActiveProvider ) + { + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged iActivePType=%d", iActiveProvider->iType ) + if ( iActiveProvider->iType == KVtEngProviderImage || + iActiveProvider->iType == KVtEngProviderNone ) + { + activeIsStillOrBlank = ETrue; + if ( providerToSelect == KVtEngProviderCam1 && + iActiveProvider->iType == KVtEngProviderNone ) + { + activeIsBlankAndNewCam1 = ETrue; + } + } + } + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged blank active new cam1=%d", + activeIsBlankAndNewCam1 ) + + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged provider=%d", providerToSelect ) + + if ( providerToSelect == KVtEngProviderCam1 ) + { + iObserver.SetSelectedCameraId( MVtEngMedia::EPrimaryCamera ); + } + else if ( providerToSelect == KVtEngProviderCam2 ) + { + // delete provider that became unavailable + iObserver.SetSelectedCameraId( MVtEngMedia::ESecondaryCamera ); + } + + // Check if SelectSource should be called + if ( !notifyAnswer && // for incoming calls automatic switch not allowed + ( iState == ELocNone || iState == ELocReady ) && + IsFlag( EFlagInitialized ) ) + { + __VTPRINT( DEBUG_MEDIA, " vsProvidersChanged ok to select" ) + // Allow switch if video disabled (still/blank active) + // and cam1 available. + ClearFlag( EFlagInitializeOnly ); + ClearFlag( EFlagCheckRevertToPrevious ); + if ( activeIsStillOrBlank && + providerToSelect == KVtEngProviderCam2 ) + { + SetFlag( EFlagInitializeOnly ); + } + else if ( activeIsBlankAndNewCam1 ) + { + iObserver.AutoEnableVideo(); + } + else if ( providerToSelect == KVtEngProviderNone ) + { + iObserver.AutoEnableVideo( EFalse ); + } + SetFlag( EFlagAutomaticSwitchCallback ); + TRAP( err, SelectSourceL( providerToSelect ) ); + ClearFlag( EFlagAutomaticSwitchCallback ); + + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA, + " vsProvidersChanged,select failed=%d", err ) + if ( providerToSelect == KVtEngProviderCam1 && + iNumSupportedCameras > 1 ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.vsProvidersChanged 2 2" ) + SetFlag( EFlagCamera2Available ); + ClearFlag( EFlagCamera1Available ); + TRAP( err, SelectSourceL( KVtEngProviderCam2 ) ); + } + else if ( providerToSelect == KVtEngProviderCam2 ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.vsProvidersChanged 2 still") + ClearFlag( EFlagCamera2Available ); + TRAP( err, SelectSourceL( KVtEngProviderImage ) ); + } + } + } + else + { + __VTPRINT( DEBUG_MEDIA, " vsProvidersChanged Not Changed" ) + if ( iState == ELocInitializing && + iSelectedProvider && + iSelectedProvider->iType != providerToSelect ) + { + SetFlag( EFlagCheckRevertToPrevious ); + } + } + + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update(); + + if ( IsFlag( EFlagCamera1Available ) || + IsFlag( EFlagCamera2Available ) ) + { + if ( notifyAnswer ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.vsProvidersChanged KVtEngSessionAnswerPossible") + CVtEngEventManager::NotifyEvent( KVtEngSessionAnswerPossible ); + } + else if ( !notifyAnswer && + // Don't notify before selection is done. + ( iState == ELocReady || + iState == ELocNone ) ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.vsProvidersChanged KVtEngSourceCapsChanged" ) + CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); + } + } + else if ( !IsFlag( EFlagCamera1Available ) && + !IsFlag( EFlagCamera2Available ) ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.vsProvidersChanged NO CAMS" ) + CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.vsProvidersChanged KVtEngResourceMemAllocFailure" ) + CVtEngEventManager::NotifyEvent( KVtEngResourceMemAllocFailure ); + } + __VTPRINTEXITR( "LocVid.vsProvidersChanged err=%d", err ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetViewFinderParameters +// Configures parameters for rendering via window server. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetViewFinderParameters( + const TVtEngRenderingOptions& aParams ) + { + __VTPRINTENTER( "LocVid.SetViewFinderParameters" ) + + // Before setting the params, stop VF + if( ViewFinderStarted() ) + { + StopViewFinder(); + } + + iOptions.iSize = aParams.iSize; + __VTPRINT2( DEBUG_MEDIA, + " width = %d", iOptions.iSize.iWidth ); + __VTPRINT2( DEBUG_MEDIA, + " height = %d", iOptions.iSize.iHeight ); + + iOptions.iObserver = aParams.iObserver; + iRenderingMethod = EWindowServer; + __VTPRINTEXIT( "LocVid.SetViewFinderParameters" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetViewFinderParameters +// Configures parameters for rendering with direct screen access. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetViewFinderParameters( + const TVtEngRenderingOptionsDSA& aDSA ) + { + __VTPRINTENTER( "LocVid.SetVFParamsDSA" ) + + // Before setting the params, stop VF + if( ViewFinderStarted() ) + { + StopViewFinder(); + } + + iRenderingMethod = EDSA; + iDsaOptions.iClipRect = aDSA.iClipRect; + iDsaOptions.iRect = aDSA.iRect; + iDsaOptions.iWindow = &aDSA.iWindow; + iDsaOptions.iWs = &aDSA.iWs; + iDsaOptions.iWsSD = &aDSA.iWsSD; + __VTPRINTEXIT( "LocVid.SetVFParamsDSA" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetViewFinderParameters +// Configures parameters for rendering with display posting. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetViewFinderParameters( + const TVtEngRenderingOptionsDP& aDP ) + { + __VTPRINTENTER( "LocVid.SetVFParamsDP" ) + + // Before setting the params, stop VF + if( ViewFinderStarted() ) + { + StopViewFinder(); + } + + iRenderingMethod = EDP; + iDsaOptions.iClipRect = aDP.iClipRect; + iDsaOptions.iRect = aDP.iRect; + iDsaOptions.iWindow = &aDP.iWindow; + iDsaOptions.iWs = &aDP.iWs; + iDsaOptions.iWsSD = &aDP.iWsSD; + __VTPRINTEXIT( "LocVid.SetVFParamsDP" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetDefaultStillImageL +// Sets default still image. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetDefaultStillImageL() + { + __VTPRINTENTER( "LocVid.SetDefaultStillImageL" ) + + TProviderItem* item = NULL; + GetProviderByType( KVtEngProviderDefaultStillImage, item ); + if ( item ) + { + CVSDataProvider* provider = item->iProvider; + + if ( provider && item->iType == KVtEngProviderDefaultStillImage ) + { + if ( item->iInitialized ) + { + StopViewFinder(); + + TInt providerIndex = + ProviderIndex( KVtEngProviderDefaultStillImage ); + + TProviderItem* defaultStillProviderItem = + &( *iVideoProviders )[providerIndex]; + SwitchProvider( defaultStillProviderItem ); + } + else + { + InitializeProviderL( *item ); + iSelectedProvider = item; + } + } + } + __VTPRINTEXIT( "LocVid.SetDefaultStillImageL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetStillImageL +// Sets still image. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetStillImageL( TBool aSetAsActive ) + { + __VTPRINTENTER( "LocVid.SetStillImageL" ) + + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + const TBool stillImageValid( config.iVideo.iImageIsValid ); + if ( iState == ELocInitializing && stillImageValid ) + { + __VTPRINT( DEBUG_MEDIA, " setStill failed" ) + User::Leave( KErrNotReady ); + } + + TInt count( iVideoProviders->Count() ); + TBool done( EFalse ); + while ( count-- ) + { + TProviderItem& item = ( *iVideoProviders )[count]; + CVSDataProvider* provider = item.iProvider; + + if ( item.iType == KVtEngProviderImage ) + { + if ( provider && item.iInitialized ) + { + // If still image provider is active change to temp provider + if ( iActiveProvider && + ( iActiveProvider->iType == KVtEngProviderImage ) ) + { + __VTPRINT( DEBUG_MEDIA, "Act.prov. must be deleted" ) + StopViewFinder(); + iActiveProvider->iProviderState = ERefreshing; + TInt providerIndex = ProviderIndex( KVtEngProviderNone ); + TProviderItem* blankProviderItem = + &( *iVideoProviders )[providerIndex]; + SwitchProvider( blankProviderItem ); + __VTPRINTEXIT( "LocVideo.SetStillImageL" ) + return; + } + + //Only way to change image is first delete the provider + delete provider; + item.iProvider = NULL; + + // Create it again. + // If there is a provider info for still. + if ( iProviderInfoIndexStill != KErrNotFound ) + { + item.iProvider = iSourceController->CreateDataProviderL( + iProviderInfoIndexStill, + this, iSource ); + item.iType = KVtEngProviderImage; + item.iInitialized = EFalse; + } + } + // Do initialization only if valid image (still not + // cleared in settings). + if ( stillImageValid ) + { + InitializeProviderL( item ); + if ( aSetAsActive ) + { + iSelectedProvider = &item; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + " selected provider set" ) + } + } + done = ETrue; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.SetStillImageL ok" ) + } + } + if ( !done ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.SetStillImageL fail") + User::Leave( KErrGeneral ); + } + __VTPRINTEXIT( "LocVid.SetStillImageL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeL +// Initializes default blank provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeL() + { + __VTPRINTENTER( "LocVid.InitializeL" ) + const TInt index( ProviderIndex( KVtEngProviderNone ) ); + TProviderItem* item = &(*iVideoProviders)[index]; + if ( iActiveProvider && + iActiveProvider->iType == KVtEngProviderImage ) + { + // Blank provider is set to active only + // if there is not valid still image. + SetFlag( EFlagInitializeOnly ); + iSelectedProvider = item; + } + else + { + iActiveProvider = item; + } + InitializeProviderL( *item ); + SetFlag( EFlagSignalSourceSelection ); + SetFlag( EFlagInitialized ); + __VTPRINTEXIT( "LocVid.InitializeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SelectSourceL +// Selects source. +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::SelectSourceL( TVtEngProviderType aSource ) + { + __VTPRINTENTER( "LocVid.SelectSourceL" ) + + __VTPRINT2( DEBUG_MEDIA, " source=%d", aSource ) + + if ( iDelayedSelect.IsDelayedSelectPending() && + ( aSource != KVtEngProviderShareImage ) && + ( aSource == KVtEngProviderCam1 || + aSource == KVtEngProviderCam2 || + aSource == KVtEngProviderImage ) ) + { + aSource = iDelayedSelect.DelayedSelectTarget(); + } + + if( IsProviderWaiting( aSource ) ) + { + // If waiting for provide switch and a provider initialization + // don't allow selection. + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSourceL already waiting" ) + User::Leave( KErrNotReady ); + } + + // To be selected source is already active + if ( IsActiveProvider( aSource ) ) + { + Cancel(); + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete( status, KVtEngAlreadyActive ); + SetFlag( EFlagSignalSourceSelection ); + __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSourceL start AO=%d", + KVtEngAlreadyActive ) + if ( iActiveProvider ) + { + __VTPRINT2( DEBUG_MEDIA, "LocVideo. activeProv type=%d", + iActiveProvider->iType ) + } + // In case there were errors, NULL the selected provider + // to be able to initialize it when needed + if( iSelectedProvider ) + { + if( iSelectedProvider->iErrorCode ) + { + iSelectedProvider->iInitialized = EFalse; + iSelectedProvider->iProviderState = + (CVtEngLocalVideo::TProviderState) + iSelectedProvider->iErrorCode; + iSelectedProvider = NULL; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selprovider nulled" ) + } + } + // Not actually switching but virtually doing it because + // async callback will be made. + __VTPRINTEXITR( "LocVid.SelectSourceL %d", ETrue ) + return ETrue; + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.Selectsource iState=%d", iState ) + if ( iState == ELocInitializing && + aSource == KVtEngProviderImage && + iActiveProvider && + iActiveProvider->iType != KVtEngProviderNone ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.SelectSource initialization pending" ) + User::Leave( KErrNotReady ); + } + // We have switch pending + else if ( iState == ELocSwichingProvider ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.SelectSource switching -> set delayed select" ) + iDelayedSelect.NotifyDelayedSelect( aSource ); + __VTPRINTEXITR( "LocVid.SelectSourceL %d", ETrue ) + return ETrue; + } + + TBool initialized( EFalse ); + TProviderItem item; + TInt providerIndex( GetProviderByType( aSource, item ) ); + + if ( providerIndex != KErrNotFound ) + { + // requested provider found, set initialization status + __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSource index=%d", providerIndex ) + initialized = item.iInitialized; + } + else + { // requested provider not found + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource create provider" ) + // Try to create provider + TInt index = KErrNotFound; + switch ( aSource ) + { + case KVtEngProviderCam2: + index = iProviderInfoIndexCam2; + break; + case KVtEngProviderNone: + case KVtEngProviderImage: + case KVtEngProviderDefaultStillImage: + // Image sharing + case KVtEngProviderShareImage: + index = iProviderInfoIndexStill; + break; + case KVtEngProviderCam1: + index = iProviderInfoIndexCam1; + default: + break; + } + + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.SelectSource create provider ID=%d", index ) + if ( index != KErrNotFound ) + { + TProviderItem newItem; + newItem.iProvider = + iSourceController->CreateDataProviderL( + index, this, iSource ); + newItem.iType = aSource; + CleanupStack::PushL( newItem.iProvider ); + iVideoProviders->AppendL( newItem ); + CleanupStack::Pop(); + providerIndex = iVideoProviders->Count() - 1; + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.SelectSource create provider ok=%d", + newItem.iProvider != NULL ) + } + } + + TBool initOrSwitch = EFalse; + + // Initialize provider + if ( providerIndex != KErrNotFound && !initialized ) + { + if ( iActiveProvider->iProviderState != EPermanent ) + { + // Active provider must be destroyed and new one initialized + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource del Act.prov" ) + (*iVideoProviders)[providerIndex].iProviderState = EWaiting; + iActiveProvider->iProviderState = EFading; + StopViewFinder(); + providerIndex = ProviderIndex( KVtEngProviderNone ); + __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSource index for none=%d", + providerIndex ) + } + else + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource do init" ) + UninitializeProviderL(); + TProviderItem& initItem = ( *iVideoProviders )[providerIndex]; + InitializeProviderL( initItem ); + // This item is stored, make it initialized only when callback + // received. + iSelectedProvider = &initItem; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) + initOrSwitch = InitializingOrSwitching(); + __VTPRINTEXITR( "LocVid.SelectSourceL %d", initOrSwitch ) + return initOrSwitch; + } + } + + // Switch provider + if ( providerIndex != KErrNotFound ) + { + if ( !IsFlag( EFlagInitializeOnly ) ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource ready for switch") + StopViewFinder(); + TProviderItem* switchItem = &(*iVideoProviders)[providerIndex]; + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.SelectSource switchItem %d", switchItem->iType ) + SwitchProvider( switchItem ); + } + else if ( initialized && IsFlag( EFlagInitializeOnly ) ) + { + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.SelectSource already initialized start AO %d", + KVtEngAlreadySelected ) + TProviderItem* switchItem = &( *iVideoProviders )[providerIndex]; + iActiveProvider = switchItem; + Cancel(); + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete( status, KVtEngAlreadySelected ); + } + else + { + __VTPRINT3( DEBUG_MEDIA, " initialized=%d,flags=%d", + initialized, iFlags ) + } + } + + // Error + if ( iActiveProvider == NULL ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource leave" ) + User::Leave( KErrNotFound ); + } + + initOrSwitch = InitializingOrSwitching(); + __VTPRINTEXITR( "LocVid.SelectSourceL %d", initOrSwitch ) + return initOrSwitch; + } + +// ---------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeProviderL +// Initializes a provider. +// ---------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeProviderL( + TProviderItem& aProviderItem ) + { + __VTPRINTENTER( "LocVid.InitializeProviderL" ) + + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", aProviderItem.iType ) + + if ( iInitializingProvider ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.InitProv ERROR, already initializing" ) + User::Leave( KErrNotReady ); + } + + iInitializingProvider = &aProviderItem; + + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + TPckgBuf< TVSStillImageDataProviderParams > pckg; + + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", aProviderItem.iType ) + CVSDataProvider* provider = aProviderItem.iProvider; + if ( provider == NULL ) + { + aProviderItem.iInitialized = EFalse; + aProviderItem.iProvider = CreateDataProviderL( aProviderItem.iType ); + provider = aProviderItem.iProvider; + } + else if ( aProviderItem.iInitialized ) + { + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv AO start %d", KErrNone ) + Cancel(); + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete( status, KErrNone ); + __VTPRINTEXIT( "LocVid.InitializeProviderL" ) + return; + } + User::LeaveIfNull( provider ); + switch ( aProviderItem.iType ) + { + case KVtEngProviderCam1: + case KVtEngProviderCam2: + provider->InitializeL( KNullDesC8 ); + iState = ELocInitializing; + __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", + aProviderItem.iType ) + break; + case KVtEngProviderNone: + // Blank provider. + pckg().iInitialize = + TVSStillImageDataProviderParams::EInitializeAsBlankImage; + provider->InitializeL( pckg ); + iState = ELocInitializing; + __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", + aProviderItem.iType ) + break; + case KVtEngProviderImage: + { + if ( config.iVideo.iImageIsValid ) + { + pckg().iInitialize = + TVSStillImageDataProviderParams::EInitializeFromGeneralSettings; + provider->InitializeL( pckg ); + iState = ELocInitializing; + __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) + __VTPRINT( DEBUG_MEDIA, "LocVideo.InitProv Still image") + } + else + { + User::Leave( KErrPathNotFound ); + } + } + break; + case KVtEngProviderDefaultStillImage: + pckg().iInitialize = + TVSStillImageDataProviderParams::EInitializeAsDefaultStillImage; + + provider->InitializeL( pckg ); + iState = ELocInitializing; + __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", + aProviderItem.iType ) + break; + default: + Panic( EVtEngPanicNoVideoProvider ); + break; + } + //aProviderItem.iInitialized = ETrue; + __VTPRINTEXIT( "LocVid.InitializeProviderL" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeShareProviderL +// Initializes a provider that is used for sharing. +// ---------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeShareProviderL( + TProviderItem& aProviderItem, const TDesC8& aParams ) + { + __VTPRINTENTER( "LocVid.InitializeShareProviderL" ) + aProviderItem.iProvider->InitializeL( aParams ); + aProviderItem.iInitialized = ETrue; + iState = ELocInitializing; + SetFlag( EFlagSignalSourceSelection | EFlagInitializeOnly ); + __VTPRINTEXIT( "LocVid.InitializeShareProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ReCreateProviderL +// ----------------------------------------------------------------------------- +void CVtEngLocalVideo::ReCreateProviderL( + TProviderItem& aProviderItem, const TVtEngProviderType aType ) + { + __VTPRINTENTER( "LocVid.ReCreateProviderL" ) + + TInt index( KErrNotFound ); + + switch ( aType ) + { + case KVtEngProviderShareImage: + index = iProviderInfoIndexStill; + break; + + default: + User::Leave( KErrNotSupported ); + } + + // Delete old instance + DeleteProvider( aProviderItem ); + + // Create new instance + aProviderItem.iProvider = iSourceController->CreateDataProviderL( + index, this, iSource ); + aProviderItem.iType = aType; + + __VTPRINTEXIT( "LocVid.ReCreateProviderL" ) + } + +// ---------------------------------------------------------------------------- +// CVtEngLocalVideo::CameraIdToType +// Camera ID to type mapping. +// ---------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::CameraIdToType( + MVtEngMedia::TCameraId aId ) + { + TVtEngProviderType type( KVtEngProviderCam2 ); + switch ( aId ) + { + case MVtEngMedia::EPrimaryCamera: + type = KVtEngProviderCam1; + break; + case MVtEngMedia::ESecondaryCamera: + type = KVtEngProviderCam2; + break; + default: + type = KVtEngProviderNone; + break; + } + return type; + } + +// ---------------------------------------------------------------------------- +// CVtEngLocalVideo::RunL +// CActive heir, acts according to status. +// ---------------------------------------------------------------------------- +// +void CVtEngLocalVideo::RunL() + { + __VTPRINTENTER( "LocVid.RunL" ) + + const TInt status( iStatus.Int() ); + TVtEngProviderType providerType = KVtEngProviderNone; + __VTPRINT2( DEBUG_MEDIA, "LocVideo.RunL %d", status ) + switch ( status ) + { + case KVtEngAlreadySelected: + SetFlag( EFlagSignalSourceSelection ); + vsProviderReady(); + break; + case KVtEngAlreadyActive: + TRAP_IGNORE( + iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); + break; + case KErrNone: + vsProviderSwitchDone( NULL ); + UpdateState(); + break; + // Camera has been lost during VT + case KVsErrCameraNoLongerReserved: + __VTPRINT2( DEBUG_MEDIA, "LocVideo.status =%d", + status ) + //delete provider here and null pointer + if ( iSelectedProvider ) + { + DeleteProvider( *iSelectedProvider ); + iSelectedProvider = NULL; + } + + // Check if still is in use + providerType = KVtEngProviderImage; + GetHighestSelectableProvider( providerType ); + + __VTPRINT2( DEBUG_MEDIA, "LocVideo.providerType=%d", + providerType ) + + iObserver.AutoEnableVideo( EFalse ); + SetFlag( EFlagAutomaticSwitchCallback ); + TRAPD( err, SelectSourceL( providerType ) ); + ClearFlag( EFlagAutomaticSwitchCallback ); + + if ( err != KErrNone ) + { + TRAP( err, iObserver.HandleLocalVideoOperationCompleteL( err) ); + } + break; + default: + // error + { + switch( iSelectedProvider->iType ) + { + case KVtEngProviderCam1: + ClearFlag( EFlagCamera1Available ); + break; + case KVtEngProviderCam2: + ClearFlag( EFlagCamera2Available ); + break; + default: + break; + } + DeleteProvider( *iSelectedProvider ); + iSelectedProvider = NULL; + MVtEngMedia::TCameraId currentCam( MVtEngMedia::EPrimaryCamera ); + iObserver.GetCurrentCameraId( currentCam ); + TVtEngProviderType providerType( CameraIdToType( currentCam ) ); + GetHighestSelectableProvider( providerType ); + TRAPD( err, SelectSourceL( providerType ) ); + if ( err != KErrNone ) + { + TRAP( err, iObserver.HandleLocalVideoOperationCompleteL( err) ); + } + } + } + __VTPRINTEXIT( "LocVid.RunL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsActiveProvider +// Returns ETrue if given provider is already active. +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsActiveProvider( TVtEngProviderType aType ) const + { + __VTPRINTENTER( "LocVid.IsActiveProvider" ) + const TBool active( + ( iActiveProvider && iActiveProvider->iType == aType ) || + ( iSelectedProvider && iSelectedProvider->iType == aType ) ); + __VTPRINTEXITR( "LocVid.IsActiveProvider %d", active ) + return active; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::DoCancel +// Does nothing. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::DoCancel() + { + __VTPRINTENTER( "LocVid.DoCancel" ) + __VTPRINTEXIT( "LocVid.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ActiveProvider +// Returns active provider. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::ActiveProvider() const + { + if ( iActiveProvider ) + { + return iActiveProvider->iType; + } + return KVtEngProviderNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::StartViewFinderIfWasStartedL +// View finder image can be set. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::StartViewFinderIfWasStartedL() + { + __VTPRINTENTER( "LocVid.StartViewFinderIfWasStartedL" ) + if ( IsFlag( EFlagUIForeground ) && IsFlag( EFlagVFEnabled ) && + iState == ELocReady ) + { + StartViewFinderL(); + } + __VTPRINTEXIT( "LocVid.StartViewFinderIfWasStartedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::StartViewFinderL +// Starts view finder. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::StartViewFinderL( TBool aClientRequest ) + { + __VTPRINTENTER( "LocVid.StartViewFinderL" ) + __ASSERT_ALWAYS( iVideoProviders->Count(), + Panic ( EVtEngPanicNoVideoProvider ) ); + + if ( aClientRequest ) + { + SetFlag( EFlagVFEnabled ); + } + if ( iRenderingMethod == EUnspecified || !iActiveProvider ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF error") + User::Leave( KErrNotReady ); + } + CVSDataProvider* provider = iActiveProvider->iProvider; + if ( !provider ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF error no provider") + User::Leave( KErrNotReady ); + } + else if ( provider->ViewFinderActive() ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF already started") + iViewFinderState = ( iRenderingMethod == EWindowServer ) ? + EVFReceivingBitmaps : EVFRenderingDsa; + __VTPRINTEXIT( "LocVid.StartViewFinderL" ) + return; + } + else if ( !IsFlag( EFlagInitialized ) ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.startVF not initialized") + __VTPRINTEXIT( "LocVid.StartViewFinderL" ) + return; + } + else if ( iState != ELocReady ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, + "LocVideo.startVF incorrect iState=%d", iState ) + } + else + { + // Lint requires this one + __VTPRINT( DEBUG_MEDIA, + "LocVideo.startVF unsupported clause" ) + } + + CheckOthersStopped( *provider ); + if ( iRenderingMethod == EWindowServer ) + { + TSize size( iOptions.iSize ); + provider->StartViewFinderBitmapsL( size ); + iViewFinderState = EVFReceivingBitmaps; + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, " started" ) + } + else + { + provider->StartViewFinderDirectL( + *(iDsaOptions.iWs), + *(iDsaOptions.iWsSD), + *(iDsaOptions.iWindow), + iDsaOptions.iRect, + iDsaOptions.iClipRect ); + iViewFinderState = EVFRenderingDsa; + } + + if( iActiveProvider->iType == CVtEngLocalVideo::KVtEngProviderCam1 && + !provider->ViewFinderMirror() ) + { + provider->SetViewFinderMirrorL( ETrue ); + } + + __VTPRINTEXIT( "LocVid.StartViewFinderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::StopViewFinder +// Stops view finder. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::StopViewFinder( TBool aClientRequest ) + { + __VTPRINTENTER( "LocVid.StopViewFinder" ) + if ( aClientRequest ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF clearing EFlagVFEnabled" ) + ClearFlag( EFlagVFEnabled ); + } + if ( iActiveProvider && + iViewFinderState != EVFNone && + iActiveProvider->iProvider && + iActiveProvider->iProvider->ViewFinderActive() ) + { + TRAP_IGNORE( iOptions.iObserver->vtHandleFrameL( + MVtEngFrameObserver::ELocalVideoFrame, NULL ) ); + iActiveProvider->iProvider->StopViewFinder(); + __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF Stopped" ) + if ( IsFlag( EFlagAutomaticSwitchCallback ) || + IsFlag( EFlagUIBackground ) ) + { + // UI needs to be notified if stop done due to automatic + // source switch (from vsProvidersChanged). + ClearFlag( EFlagAutomaticSwitchCallback ); + CVtEngEventManager::NotifyEvent( KVtEngViewFinderStopped ); + __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF Notified" ) + } + } + iViewFinderState = EVFNone; + __VTPRINTEXIT( "LocVid.StopViewFinder" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::FreezeL +// Freezes provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::FreezeL() + { + __VTPRINTENTER( "LocVid.FreezeL" ) + if( OkToFreeze() ) + { + iActiveProvider->iProvider->FreezeL(); + SetFlag( EFlagFrozen ); + } + __VTPRINTEXIT( "LocVid.FreezeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::UnfreezeL +// Unfreezes provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::UnfreezeL() + { + __VTPRINTENTER( "LocVid.UnfreezeL" ) + if( OkToUnfreeze() ) + { + if ( !iLayoutChangeHandler.UnfreezeL() ) + { + iActiveProvider->iProvider->UnfreezeL(); + if ( iDelayedSelect.IsDelayedSelectPending() ) + { + TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.UnfreezeL delayed switch to %d", type ) + SelectSourceL( type ); + } + else + { + CompleteOperation( KErrNone ); + } + } + ClearFlag( EFlagFrozen ); + } + __VTPRINTEXIT( "LocVid.UnfreezeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CheckOthersStopped +// Stops view finder of other providers than the one given as parameter. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CheckOthersStopped( const CVSDataProvider& aProvider ) + { + __VTPRINTENTER( "LocVid.CheckOthersStopped" ) + TInt count( iVideoProviders->Count() ); + while ( count-- ) + { + TProviderItem& item = ( *iVideoProviders )[count]; + if ( item.iProvider && + item.iProvider != &aProvider && + item.iProvider->ViewFinderActive() ) + { + item.iProvider->StopViewFinder(); + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "LocVideo.OtherStop" ) + } + } + __VTPRINTEXIT( "LocVid.CheckOthersStopped" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::Source +// Returns video source. +// ----------------------------------------------------------------------------- +// +MVTVideoSource* CVtEngLocalVideo::Source() const + { + return iSource; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::AudioSource +// Returns audio source. +// ----------------------------------------------------------------------------- +// +MVTAudioSource* CVtEngLocalVideo::AudioSource() const + { + return iAudioSource; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetMediaState +// Returns media state. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetMediaState( TInt& aActiveMedia ) + { + aActiveMedia = 0; + if ( !IsFlag( EFlagAudioMuted ) ) + { + aActiveMedia |= MVtEngMedia::EMediaAudio; + // Check if the thing is muted + } + + if ( iActiveProvider ) + { + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetMediaState provider type=%d", + iActiveProvider->iType ) + switch ( iActiveProvider->iType ) + { + case KVtEngProviderCam1: + case KVtEngProviderCam2: + case KVtEngProviderImage: + case KVtEngProviderShareImage: + aActiveMedia |= MVtEngMedia::EMediaVideo; + break; + default: + break; + } + } + __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, + "LocVideo.GetMediaState media state=%d", aActiveMedia ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetMediaSource +// Returns media source. +// ----------------------------------------------------------------------------- +// +MVtEngMedia::TMediaSource CVtEngLocalVideo::GetMediaSource() + { + MVtEngMedia::TMediaSource source( MVtEngMedia::EMediaNone ); + if ( iActiveProvider ) + { + switch ( iActiveProvider->iType ) + { + case KVtEngProviderCam1: + case KVtEngProviderCam2: + source = MVtEngMedia::EMediaCamera; + break; + case KVtEngProviderShareImage: + source = MVtEngMedia::EMediaShare; + break; + case KVtEngProviderImage: + case KVtEngProviderDefaultStillImage: + source = MVtEngMedia::EMediaStillImage; + break; + default: + source = MVtEngMedia::EMediaNone; + break; + } + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetMediaSource src=%d", (TInt) source ) + return source; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetSourceCaps +// Returns capability of providers . +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetSourceCaps( TInt& aCaps ) + { + aCaps = 0; + TInt count( iVideoProviders->Count() ); + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetSourceCaps count=%d", count ) + while ( count-- ) + { + switch ( iVideoProviders->At(count).iType ) + { + case KVtEngProviderCam1: + __VTPRINT( DEBUG_MEDIA, + "LocVideo.GetSourceCaps cam1" ) + if ( IsFlag( EFlagCamera1Available ) ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.GetSourceCaps cam1 flagged" ) + aCaps |= MVtEngMedia::ESourceCapsPrimaryCamera; + } + break; + case KVtEngProviderCam2: + __VTPRINT( DEBUG_MEDIA, "LocVideo.GetSourceCaps cam2" ) + if ( IsFlag( EFlagCamera2Available ) ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.GetSourceCaps cam2 flagged" ) + aCaps |= MVtEngMedia::ESourceCapsSecondaryCamera; + } + break; + case KVtEngProviderImage: + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.GetSourceCaps image" ) + // Make sure that image is valid + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + if( config.iVideo.iImageIsValid ) + { + aCaps |= MVtEngMedia::ESourceCapsStillImage; + } + } + break; + default: + break; + } + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetSourceCaps caps=%d", aCaps ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeOnly +// Sets boolean to indicate if the provider is to be initialized only. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeOnly( TBool aInitOnly ) + { + InitializeOnlyEx( GetMediaSource() != MVtEngMedia::EMediaCamera && + aInitOnly ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeOnlyEx +// Sets boolean to indicate if the provider is to be initialized only. Does +// not check current media source. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeOnlyEx( TBool aInitOnly ) + { + SetFlag( EFlagSignalSourceSelection ); + ClearFlag( EFlagInitializeOnly ); + if ( aInitOnly ) + { + SetFlag( EFlagInitializeOnly ); + } +#ifdef VTDEBUG + if ( IsFlag( EFlagInitializeOnly ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " initOnly SET" ) + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " initOnly CLEARED" ) + } +#endif + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetProviderByType +// Return provider of particular type. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetProviderByType( + TVtEngProviderType aType, + TProviderItem& aItem ) + { + TInt ret( KErrNotFound ); + TInt count( iVideoProviders->Count() ); + while ( count-- ) + { + if ( ( *iVideoProviders )[count].iType == aType ) + { + aItem = ( *iVideoProviders )[count]; + ret = count; + count = 0; + } + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType idx=%d", ret ) + return ret; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetProviderByType +// Return provider of particular type. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetProviderByType( + TVtEngProviderType aType, + TProviderItem*& aItem ) + { + TInt ret( KErrNotFound ); + TInt count( iVideoProviders->Count() ); + while ( count-- ) + { + if ( ( *iVideoProviders )[count].iType == aType ) + { + aItem = &( *iVideoProviders )[count]; + ret = count; + count = 0; + } + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType* idx=%d", ret ) + return ret; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetProviderByInstance +// Return provider with particular provider instance. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetProviderByInstance( + const CVSDataProvider* aInstance, + TProviderItem*& aItem ) const + { + TInt indexI( ProviderIndexByInstance( aInstance ) ); + if ( indexI != KErrNotFound ) + { + aItem = &( *iVideoProviders )[ indexI ]; + } + else + { + aItem = NULL; + } + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType* idx=%d", indexI ) + return indexI; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ProviderIndex +// Returns provider index by type. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::ProviderIndex( TVtEngProviderType aType ) const + { + for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) + { + if ( ( *iVideoProviders )[ count ].iType == aType ) + { + return count; + } + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ProviderIndexByState +// Gets a provider index by state. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::ProviderIndexByState( TProviderState aState ) const + { + for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) + { + if ( ( *iVideoProviders )[ count ].iProviderState == aState ) + { + return count; + } + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ProviderIndexByInstance +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::ProviderIndexByInstance( + const CVSDataProvider* aInstance) const + { + for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) + { + if ( ( *iVideoProviders )[ count ].iProvider == aInstance ) + { + return count; + } + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CreateDataProviderL +// Creates VideoSource provider by type. +// ----------------------------------------------------------------------------- +// +CVSDataProvider* CVtEngLocalVideo::CreateDataProviderL( + TVtEngProviderType aType ) + { + __VTPRINTENTER( "LocVid.CreateDataProviderL" ) + __VTPRINT2( DEBUG_MEDIA, " provider type=%d", aType ) + TInt index = KErrNotFound; + switch ( aType ) + { + case KVtEngProviderNone: + case KVtEngProviderImage: + case KVtEngProviderShareImage: + case KVtEngProviderDefaultStillImage: + __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Still" ) + index = iProviderInfoIndexStill; + break; + case KVtEngProviderCam1: + __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Cam1" ) + index = iProviderInfoIndexCam1; + break; + case KVtEngProviderCam2: + __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Cam2" ) + index = iProviderInfoIndexCam2; + break; + default: + __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Mobile" ) + break; + } + + CVSDataProvider* provider = NULL; + if ( index != KErrNotFound ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL provider is" ) + provider = + iSourceController->CreateDataProviderL( + index, this, iSource ); + } + + __VTPRINT2( DEBUG_MEDIA, " provider created=%d", + ( TInt ) ( provider != NULL ) ) + __VTPRINTEXIT( "LocVid.CreateDataProviderL" ) + return provider; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CreateBlankProvider +// Creates blank provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CreateBlankProviderL( const TInt aIndex ) + { + __VTPRINTENTER( "LocVid.CreateBlankProviderL" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.CreateBlankProviderL idx=%d", aIndex ) + CVSDataProvider* provider = NULL; + TRAP_IGNORE( provider = iSourceController->CreateDataProviderL( + aIndex, this, iSource ) ); + CleanupStack::PushL( provider ); + TProviderItem item; + item.iProvider = provider; + item.iType = KVtEngProviderNone; + item.iInitialized = EFalse; + item.iProviderState = EPermanent; + iVideoProviders->AppendL( item ); + CleanupStack::Pop(); + __VTPRINTEXIT( "LocVid.CreateBlankProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CreateDefaultStillImageProviderL +// Creates default still image provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CreateDefaultStillImageProviderL( const TInt aIndex ) + { + __VTPRINTENTER( "LocVid.CreateDefaultStillImageProviderL" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.CreateDefaultStillImageProviderL idx=%d", aIndex ) + CVSDataProvider* provider = NULL; + TRAP_IGNORE( provider = iSourceController->CreateDataProviderL( + aIndex, this, iSource ) ); + CleanupStack::PushL( provider ); + TProviderItem item; + item.iProvider = provider; + item.iType = KVtEngProviderDefaultStillImage; + item.iInitialized = EFalse; + item.iProviderState = EPermanent; + iVideoProviders->AppendL( item ); + CleanupStack::Pop(); + __VTPRINTEXIT( "LocVid.CreateDefaultStillImageProviderL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::UpdateAvailableProvidersL +// Updates current providers and their information. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType + CVtEngLocalVideo::UpdateAvailableProvidersL() + { + __VTPRINTENTER( "LocVid.UpdateAvailableProvidersL" ) + TVtEngProviderType type( KVtEngProviderNone ); + TInt count( iSourceController->ProvidersAvailable() ); + iNumSupportedCameras = count - 1; + TVSDataProviderInfo providerInfo; + TBool primaryAvailable( EFalse ); + TBool secondaryAvailable( EFalse ); + TBool mobileAvailable( EFalse ); + TInt indexMobile( KErrNotFound ); + ClearFlag( EFlagCamera1Available ); + ClearFlag( EFlagCamera2Available ); + ResetIndices(); + while ( count-- ) + { + iSourceController->ProviderInfoL( count, providerInfo ); + if ( providerInfo.iOrientation == TCameraInfo::EOrientationInwards || + // treat outwards camera as primary when only 1 cam in the system + ( providerInfo.iOrientation == TCameraInfo::EOrientationOutwards && + iNumSupportedCameras == 1 ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP inw" ) + type = KVtEngProviderCam1; + primaryAvailable = ETrue; + SetFlag( EFlagCamera1Available ); + iProviderInfoIndexCam1 = count; + } + else if ( + providerInfo.iOrientation == TCameraInfo::EOrientationOutwards ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP outw" ) + secondaryAvailable = ETrue; + SetFlag( EFlagCamera2Available ); + iProviderInfoIndexCam2 = count; + } + else if ( providerInfo.iOrientation == TCameraInfo::EOrientationMobile ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP mobile" ) + mobileAvailable = ETrue; + indexMobile = count; + } + else if ( providerInfo.iOrientation == TCameraInfo::EOrientationUnknown ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP still" ) + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + if ( config.iVideo.iImageIsValid ) + { + iProviderInfoIndexStill = count; + } + } + } + if ( !primaryAvailable && mobileAvailable ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP 1 upd" ) + type = KVtEngProviderCam1; + iProviderInfoIndexCam1 = indexMobile; + primaryAvailable = ETrue; + SetFlag( EFlagCamera1Available ); + } + else if ( primaryAvailable && mobileAvailable ) + { + // No 1, 2 and mobile. + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP 2 upd" ) + DeleteProvider( KVtEngProviderCam2 ); + secondaryAvailable = ETrue; + iProviderInfoIndexCam2 = indexMobile; + SetFlag( EFlagCamera2Available ); + } + else if ( !primaryAvailable && secondaryAvailable ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP !1 & 2" ) + type = KVtEngProviderCam2; + } + else if ( type == KVtEngProviderNone ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP none" ) + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + if ( config.iVideo.iImageIsValid ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP valid image" ) + type = KVtEngProviderImage; + } + } + + __VTPRINTEXITR( "LocVid.UpdateAvailableProvidersL %d", type ) + return type; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SwitchProvider +// Switches to active provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SwitchProvider( TProviderItem* aSwitchToItem ) + { + __VTPRINTENTER( "LocVid.SwitchProvider" ) + + iState = ELocSwichingProvider; + __VTPRINT( DEBUG_MEDIA, " STATE TO SWITCHING" ) + iFadingProvider = iActiveProvider; + iActiveProvider = aSwitchToItem; + TRAPD( err, iSource->SwitchDataProviderL( iActiveProvider->iProvider ) ); + if ( err != KErrNone ) + { + iState = ELocReady; // go to AO + __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) + } + switch ( iState ) + { + case ELocReady: // Switch done. Sync. + { + // Entered here if SwitchDataProviderL causes direct call to + // vsProviderSwitchDone. Since provider switch should be async + // from client point of view now start AO and signal in RunL. + Cancel(); + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete( status, err ); + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.SwitchProvider AO start %d", err ) + } + // fall through + case ELocSwichingProvider: // Async. + case ELocNone: + SetFlag( EFlagSignalSourceSelection ); + break; + default: + break; + } + __VTPRINTEXIT( "LocVid.SwitchProvider" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SwitchProvider +// Overloaded method that takes new active provider as a parameter. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SwitchProvider( TProviderItem& aProviderItem ) + { + __VTPRINTENTER( "LocVid.SwitchProvider by aProviderItem" ) + StopViewFinder( EFalse ); + SwitchProvider( &aProviderItem ); + __VTPRINTEXIT( "LocVid.SwitchProvider by aProviderItem" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsInitialized +// Checks if a provider with given id is initialized. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::IsInitialized( + MVtEngMedia::TCameraId aId, + TBool& aInitialized ) + { + __VTPRINT2( DEBUG_MEDIA, "LocVideo.IsInitialized ID:%d", aId ) + TInt count( iVideoProviders->Count() ); + TVtEngProviderType type = CameraIdToType( aId ); + aInitialized = EFalse; + TInt err( KErrNotFound ); + while ( count-- ) + { + TProviderItem& item = ( *iVideoProviders )[count]; + if ( item.iType == type ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.IsInitialized found" ) + aInitialized = item.iInitialized; + if ( ( !aInitialized && item.iProviderState < KErrNone ) || + item.iErrorCode < KErrNone ) + { + __VTPRINT( DEBUG_MEDIA, "LocVideo.IsInitialized problems" ) + err = item.iErrorCode; + } + else + { + err = KErrNone; + } + count = 0; // break + } + } + __VTPRINT3( DEBUG_MEDIA | DEBUG_RETURN, + "LocVideo.IsInitialized isInitialized=%d,err=%d", aInitialized, err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::UpdateState +// Updates view finder state. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::UpdateState() + { + __VTPRINTENTER( "LocVid.UpdateState" ) + + if ( iActiveProvider ) + { + CVSDataProvider* provider = iActiveProvider->iProvider; + __VTPRINT2 ( DEBUG_MEDIA, "LocVideo.UpdateState, provider active", + provider->ViewFinderActive() ) + if ( provider && provider->ViewFinderActive()) + { + iViewFinderState = ( iRenderingMethod == EWindowServer ) ? + EVFReceivingBitmaps : EVFRenderingDsa; + } + } + ClearFlag( EFlagInitializeOnly ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, + "LocVideo.UpdateState iViewFinderState %d", iViewFinderState ) + __VTPRINTEXIT( "LocVid.UpdateState" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializingOrSwitching +// Is either initializing or doing a provider switch. +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::InitializingOrSwitching() const + { + return ( iState == ELocInitializing || + iState == ELocSwichingProvider ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::UninitializeProviderL +// Uninitializes initialized non-permanent provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::UninitializeProviderL() + { + __VTPRINTENTER( "LocVid.UninitializeProviderL" ) + TInt count( iVideoProviders->Count() ); + while ( count-- ) + { + TProviderItem& item = ( *iVideoProviders )[count]; + if ( item.iProviderState == EUndefined && item.iInitialized ) + { + DeleteProvider( item ); + item.iProvider = CreateDataProviderL( item.iType ); + } + } + __VTPRINTEXIT( "LocVid.UninitializeProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetCameraInfo +// Gets camera info. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetCameraInfo( MVtEngMedia::TCameraId aId, + MVtEngMedia::TCameraInfo& aInfo ) + { + TBool initialized( EFalse ); + TInt err( IsInitialized( aId, initialized ) ); + TVSDataProviderInfo info; + if ( initialized && err == KErrNone ) + { + TVtEngProviderType type = CameraIdToType( aId ); + TProviderItem item; + GetProviderByType( type, item ); + item.iProvider->ProviderInfo( info ); + aInfo.iMaxDigitalZoom = info.iMaxDigitalZoom; + aInfo.iMaxZoom = info.iMaxZoom; + aInfo.iMinZoom = info.iMinZoom; + aInfo.iMajorZoomStepCount = + CalculateMajorDigitalZoomStepCount( item.iProvider ); + } + return initialized ? err : KErrNotReady; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetDigitalZoomFactor +// Gets current zoom step. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetDigitalZoomFactor( TInt& aCurrentStep ) + { + if ( !iActiveProvider || + !iActiveProvider->iProvider ) + { + return KErrNotReady; + } + aCurrentStep = iActiveProvider->iProvider->DigitalZoomFactor(); + __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetZ %d", aCurrentStep ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetMaxDigitalZoomStep +// Gets max. digital zoom step. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetMaxDigitalZoomStep( TInt& aMaxZoomStep ) + { + if ( !iActiveProvider || + !iActiveProvider->iProvider ) + { + return KErrNotReady; + } + aMaxZoomStep = iProviderInfo.iMaxDigitalZoom; + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.MaxZStep %d", aMaxZoomStep ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetMajorDigitalZoomStepCount +// Gets number of major zoom level leaps. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo:: + GetMajorDigitalZoomStepCount( TInt& aCount, TBool /*aProviderSupplied*/ ) + { + /*__VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.GetMajZStepCount %d", aProviderSupplied )*/ + if ( !iActiveProvider || !iActiveProvider->iProvider ) + { + return KErrNotReady; + } + aCount = CalculateMajorDigitalZoomStepCount( iProviderInfo ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.GetMajZStepCount %d", aCount ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetMajorDigitalZoomStep +// Maps major step to zoom step. Note: aIndex is given in range +// [0 .. CalculateMajorDigitalZoomStepCount() - 1] +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::GetMajorDigitalZoomStep( const TInt aIndex, TInt& aStep ) + { + if ( !iActiveProvider || !iActiveProvider->iProvider ) + { + // No active provider. + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.GetMajZStep NO active") + return; + } + if ( iProviderInfo.iMaxDigitalZoom > KVtMaxZoomStep ) + { + aStep = iProviderInfo.iMaxDigitalZoom * + Min( KVtMaxZoomStep, Max( 0, aIndex ) ) / KVtMaxZoomStep; + } + else + { + aStep = Min( iProviderInfo.iMaxDigitalZoom, Max( 0, aIndex ) ); + } + __VTPRINT3( DEBUG_MEDIA | DEBUG_DETAIL, + "LocVideo.GetMajZStep idx=%d,step=%d", aIndex, aStep ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetFreezeSupported +// Gets freeze supported value from provider. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::GetFreezeSupported( TBool& aFreezeSupported ) const + { + __VTPRINTENTER( "LocVideo.GetFreezeSupported" ) + if ( !iActiveProvider || + !iActiveProvider->iProvider ) + { + __VTPRINTEXIT( "LocVideo.GetFreezeSupported KErrNotReady") + return KErrNotReady; + } + aFreezeSupported = iProviderInfo.iFreezeSupported; + __VTPRINTEXITR( "LocVideo.GetFreezeSupported %d", aFreezeSupported ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::OkToFreeze +// Returns ETrue if it is ok to freeze provider (i.e. freeze is supported AND +// provider is not currently frozen) +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::OkToFreeze() const + { + __VTPRINTENTER( "LocVideo.OkToFreeze" ) + TBool isOk( EFalse ); + if ( iActiveProvider && + iActiveProvider->iProvider ) + { + isOk = ( iProviderInfo.iFreezeSupported && !IsFlag( EFlagFrozen ) ); + } + __VTPRINTEXITR( "LocVideo.OkToFreeze %d", isOk ) + return isOk; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::OkToUnfreeze +// Returns ETrue if it is ok to unfreeze provider (i.e. freeze is supported AND +// provider is currently frozen) +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::OkToUnfreeze() const + { + __VTPRINTENTER( "LocVideo.OkToUnfreeze" ) + TBool isOk( EFalse ); + if ( iActiveProvider && + iActiveProvider->iProvider ) + { + isOk = ( iProviderInfo.iFreezeSupported && IsFlag( EFlagFrozen ) ); + } + __VTPRINTEXITR( "LocVideo.OkToUnfreeze %d", isOk ) + return isOk; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::Mute +// Sets the audio state as muted. +// ----------------------------------------------------------------------------- +void CVtEngLocalVideo::Mute() + { + SetFlag( EFlagAudioMuted ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::UnMute +// Sets the audio state on again. +// ----------------------------------------------------------------------------- +void CVtEngLocalVideo::UnMute() + { + ClearFlag( EFlagAudioMuted ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetUIForeground +// Sets UI foreground state. +// ----------------------------------------------------------------------------- +void CVtEngLocalVideo::SetUIForeground( TBool aForeground ) + { + __VTPRINTENTER( "LocVideo.SetUIForeground" ) + __VTPRINT2( DEBUG_GEN, " foreground=%d", aForeground ) + + //Error indicator + TInt err = KErrNone; + if ( aForeground ) + { + if ( iDelayedSelect.IsDelayedSelectPending() ) + { + TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); + __VTPRINT2( DEBUG_MEDIA, + "LocVideo.SetUIForeground delayed switch to %d", type ) + SelectSourceL( type ); + } + + SetFlag( EFlagUIForeground ); + ClearFlag( EFlagUIBackground ); + if ( IsFlag( EFlagVFEnabled ) ) + { + //Ignore error + TRAP (err, StartViewFinderL( EFalse )); + } + else + { + MVtEngMedia::TShareObjectState sharingState; + GetObjectSharingState( sharingState ); + if ( sharingState == MVtEngMedia::ESharingImage ) + { + //Ignore error + TRAP (err, StartViewFinderL( ETrue )); + } + } + } + else + { + ClearFlag( EFlagUIForeground ); + SetFlag( EFlagUIBackground ); + StopViewFinder( EFalse ); + ClearFlag( EFlagUIBackground ); + } + __VTPRINTEXIT( "LocVideo.SetUIForeground" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetObjectSharingState +// Get current media object sharing state. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::GetObjectSharingState( + MVtEngMedia::TShareObjectState& aObjectSharingState ) const + { + __VTPRINTENTER( "LocVid.GetObjectSharingState" ) + if( iActiveProvider && iActiveProvider->iProvider ) + { + iShareImage->GetObjectSharingState( aObjectSharingState ); + } + else + { + aObjectSharingState = MVtEngMedia::ENotAbleToShare; + } + __VTPRINTEXITR( "LocVid.GetObjectSharingState %d", aObjectSharingState ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::InitializeShareImageL +// Start Image sharing initialization. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::InitializeShareImageL( + const MVtEngMedia::TShareObjectImageParameters& aParameters, + TBool& aFirstTime ) + { + __VTPRINTENTER( "LocVid.InitializeShareImageL" ) + + iShareImage->InitializeL( aParameters, + iActiveProvider->iType, aFirstTime ); + + __VTPRINTEXIT( "LocVid.InitializeShareImageL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::StartShareImageL +// Stop sharing Image. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::StartShareImageL() + { + __VTPRINTENTER( "LocVid.StartShareImageL" ) + const TBool delayed( iDelayedSelect.IsDelayedSelectPending() ); + const TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); + iShareImage->ShareL(); + if ( delayed ) + { + __VTPRINT2( DEBUG_MEDIA, + "LocVid.StartShareImageL IsDelayedSelectPending type = %d", + type ) + iShareImage->NotifyCameraChanged( type ); + } + __VTPRINTEXIT( "LocVid.StartShareImageL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::StopShareImageL +// Stop sharing Image. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::StopShareImageL() + { + __VTPRINTENTER( "LocVid.StopShareImageL" ) + iShareImage->StopL(); + __VTPRINTEXIT( "LocVid.StopShareImageL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ShareError +// Report error to image sharer. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ShareError( TInt aError ) + { + __VTPRINTENTER( "LocVid.ShareError" ) + iShareImage->Error( aError ); + __VTPRINTEXIT( "LocVid.ShareError" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ShareStoredSource +// +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::ShareStoredSource() const + { + __VTPRINTENTER( "LocVid.ShareStoredSource" ) + const TVtEngProviderType stored( iShareImage->StoredSource() ); + __VTPRINTEXITR( "LocVid.ShareStoredSource = %d", stored ) + return stored; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SettingsChanged +// Called when GS settings changed. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SettingsChanged() + { + __VTPRINTENTER( "LocVid.SettingsChanged" ) + iShareImage->SettingsChanged(); + __VTPRINTEXIT( "LocVid.SettingsChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetIsPrepareCameraCalled +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetIsPrepareCameraCalled( TBool aCalled ) + { + __VTPRINTENTER( "LocVid.SetIsPrepareCameraCalled" ) + iPrepareCameraCalled = aCalled; + __VTPRINTEXITR( "LocVid.SetIsPrepareCameraCalled %d", iPrepareCameraCalled ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsPrepareCameraCalled +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsPrepareCameraCalled() const + { + __VTPRINTENTER( "LocVid.IsPrepareCameraCalled" ) + __VTPRINTEXITR( "LocVid.IsPrepareCameraCalled %d", iPrepareCameraCalled ) + return iPrepareCameraCalled; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::HandleLayoutChangeL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::HandleLayoutChangeL() + { + __VTPRINTENTER( "LocVid.HandleLayoutChangeL" ) + iLayoutChangeHandler.HandleLayoutChangeL(); + __VTPRINTEXIT( "LocVid.HandleLayoutChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsDelayedSelectPending +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsDelayedSelectPending() const + { + return iDelayedSelect.IsDelayedSelectPending(); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::DeleteProvider +// Deletes provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::DeleteProvider( + TProviderItem& aItem ) + { + __VTPRINTENTER( "LocVid.DeleteProvider" ) + aItem.iProviderState = EUndefined; + if ( aItem.iProvider && + aItem.iInitialized && + aItem.iProvider->ViewFinderActive() ) + { + aItem.iProvider->StopViewFinder(); + } + delete aItem.iProvider; + aItem.iInitialized = EFalse; + aItem.iProvider = NULL; + __VTPRINTEXIT( "LocVid.DeleteProvider" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::DeleteProvider +// Deletes provider. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::DeleteProvider( const TVtEngProviderType aType ) + { + TProviderItem dummy; + const TInt pos( GetProviderByType( aType, dummy ) ); + if ( pos >= 0 ) // valid index + { + TProviderItem& item = ( *iVideoProviders )[pos]; + DeleteProvider( item ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::Reset +// Resets local video handler. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::Reset() + { + __VTPRINTENTER( "LocVid.Reset" ) + + __VTPRINT( DEBUG_MEDIA, "LocVideo.Reset" ) + DeleteProvider( KVtEngProviderCam1 ); + DeleteProvider( KVtEngProviderCam2 ); + DeleteAudioSource(); + + ClearFlag( EFlagAudioMuted | + EFlagSignalSourceSelection | + EFlagInitialized | + EFlagVFEnabled | + EFlagFrozen ); + + __VTPRINT( DEBUG_MEDIA, "LocVideo.Reset clearing EFlagVFEnabled and other" ) + + StopViewFinder(); + __VTPRINTEXIT( "LocVid.Reset" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetDigitalZoomFactorL +// Sets video provider's digital zoom step. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetDigitalZoomFactorL( TInt aDigitalZoomFactor ) + { + __VTPRINTENTER( "LocVid.SetDigitalZoomFactorL" ) + __VTPRINT2( DEBUG_MEDIA, "LocVideo.SetZoom %d", aDigitalZoomFactor ) + if ( !iActiveProvider || + !iActiveProvider->iProvider ) + { + User::Leave( KErrNotReady ); + } + CVSDataProvider* provider( iActiveProvider->iProvider ); + provider->SetDigitalZoomFactorL( aDigitalZoomFactor ); + iActiveProvider->iStoredZoomFactor = provider->DigitalZoomFactor(); + __VTPRINTEXIT( "LocVid.SetDigitalZoomFactorL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetFlag +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetFlag( const TInt aFlag ) + { + iFlags |= aFlag; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ClearFlag +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ClearFlag( const TInt aFlag ) + { + iFlags &= ~aFlag; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsFlag +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsFlag( const TInt aFlag ) const + { + return ( ( iFlags & aFlag ) != 0 ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount +// Utility function to calculate amount of major zoom steps. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount( + CVSDataProvider* aProvider ) + { + TVSDataProviderInfo info; + aProvider->ProviderInfo( info ); + return CalculateMajorDigitalZoomStepCount( info ); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount +// Utility function to calculate amount of major zoom steps. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount( + const TVSDataProviderInfo& aInfo ) const + { + TInt zStepCount( aInfo.iMaxDigitalZoom ? + aInfo.iMaxDigitalZoom + 1 : 0 ); + TInt maxZStepCount( KVtMaxZoomStep + 1 ); + return zStepCount > maxZStepCount ? maxZStepCount : zStepCount; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::TProviderItem +// Constructor. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TProviderItem::TProviderItem() : + iProvider( NULL ), + iType( KVtEngProviderUndefined ), + iInitialized( EFalse ), + iErrorCode( 0 ), + iProviderState( EUndefined ), + iStoredZoomFactor( 0 ), + iZFErr( KErrNone ), + iCamPrefs( NULL ), + iFirstTime( ETrue ) + { + __VTPRINTENTER( "LocVid.TProviderItem.ctor" ) + ResetStoredValues(); + __VTPRINTEXITR( "LocVid.TProviderItem.ctor $%x", TInt( this ) ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::~TProviderItem +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TProviderItem::~TProviderItem() + { + __VTPRINTENTER( "LocVid.TProviderItem.~" ) + DetachFromCameraPreferences(); + __VTPRINTEXITR( "LocVid.TProviderItem.~ $%x", TInt( this ) ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::ResetStoredValues +// Resets stored values. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::ResetStoredValues() + { + __VTPRINTENTER( "LocVid.ResetStoredValues" ) + DetachFromCameraPreferences(); + __VTPRINTEXIT( "LocVid.ResetStoredValues" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::RestoreZoomFactor +// Tries to restore zoom factor. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::TProviderItem::RestoreZoomFactor() + { + __VTPRINTENTER( "LocVid.RestoreZoomFactor" ) + TRAP( iZFErr, + { + if ( iProvider && !iZFErr ) + { + iProvider->SetDigitalZoomFactorL( iStoredZoomFactor ); + iStoredZoomFactor = iProvider->DigitalZoomFactor(); + __VTPRINT2( DEBUG_GEN, "LocVideo.RestoreZoomFactor ZF now = %d", + iStoredZoomFactor ) + } + } ); + __VTPRINTEXITR( "LocVid.RestoreZoomFactor %d", iZFErr ) + return iZFErr; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::RestorePreferences +// Tries to restore preferences. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::TProviderItem::RestorePreferences() + { + __VTPRINTENTER( "LocVid.RestorePreferences" ) + TRAPD( error, + { + if ( iCamPrefs && iProvider && !iFirstTime ) + { + if ( !iCtErr ) + { + iProvider->SetColorToneL( + CCamera::CCameraImageProcessing::TEffect( iColorTone ) ); + } + if ( !iWbErr ) + { + iProvider->SetWhiteBalanceL( + CCamera::TWhiteBalance( iWhiteBalance ) ); + } + if ( !iBrErr ) + { + iProvider->SetBrightnessL( iBrightness ); + } + if ( !iCrErr ) + { + iProvider->SetContrastL( iContrast ); + } + } + } ); + __VTPRINTEXITR( "LocVid.RestorePreferences %d", error ) + return error; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::Attach +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::Attach( MVtEngCameraPreferences& + aCamPrefs ) + { + __VTPRINTENTER( "LocVid.Attach" ) + iCamPrefs = &aCamPrefs; + if ( iFirstTime ) + { + iCtErr = iCamPrefs->GetColorTone( iColorTone ); + iWbErr = iCamPrefs->GetWhiteBalance( iWhiteBalance ); + iBrErr = iCamPrefs->GetBrightness( iBrightness ); + iCrErr = iCamPrefs->GetContrast( iContrast ); + iFirstTime = EFalse; + } + __VTPRINTEXITR( "LocVid.Attach $%x", TInt( iCamPrefs ) ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::ColorToneUpdated +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::ColorToneUpdated( + MVtEngCameraPreferences::TColorTone aColorTone ) + { + __VTPRINTENTER( "LocVid.ColorToneUpdated" ) + iCtErr = KErrNone; + iColorTone = aColorTone; + __VTPRINTEXITR( "LocVid.ColorToneUpdated %d", aColorTone ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::WhiteBalanceUpdated +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::WhiteBalanceUpdated( + MVtEngCameraPreferences::TWhiteBalance aWhiteBalance ) + { + __VTPRINTENTER( "LocVid.WhiteBalanceUpdated" ) + iWbErr = KErrNone; + iWhiteBalance = aWhiteBalance; + __VTPRINTEXITR( "LocVid.WhiteBalanceUpdated %d", aWhiteBalance ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::BrightnessUpdated +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::BrightnessUpdated( TInt aBrightness ) + { + __VTPRINTENTER( "LocVid.BrightnessUpdated" ) + iBrErr = KErrNone; + iBrightness = aBrightness; + __VTPRINTEXITR( "LocVid.BrightnessUpdated %d", aBrightness ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::ContrastUpdated +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::ContrastUpdated( TInt aContrast ) + { + __VTPRINTENTER( "LocVid.ContrastUpdated" ) + iCrErr = KErrNone; + iContrast = aContrast; + __VTPRINTEXITR( "LocVid.ContrastUpdated %d", aContrast ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::Detach +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::Detach( MVtEngCameraPreferences& ) + { + __VTPRINTENTER( "LocVid.Detach" ) + iCamPrefs = NULL; + __VTPRINTEXIT( "LocVid.Detach" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TProviderItem::DetachFromCameraPreferences +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TProviderItem::DetachFromCameraPreferences() + { + __VTPRINTENTER( "LocVid.DetachFromCameraPreferences" ) + if ( iCamPrefs ) + { + static_cast< CVtEngCameraPreferences* >( iCamPrefs )->Detach( *this ); + iCamPrefs = NULL; + } + __VTPRINTEXIT( "LocVid.DetachFromCameraPreferences" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CreateAudioSource +// Creates audio source. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::CreateAudioSource() + { + __VTPRINTENTER( "LocVid.CreateAudioSource" ) + TInt err = KErrNone; + // Check if this really a target compilation +#if !defined( __WINS__ ) + iAudioSource = VTProtocolFactory::CreateAudioSource(); + if ( !iAudioSource ) + { + err = KErrNoMemory; + } +#endif // !(__WINS__) + __VTPRINTEXITR( "LocVid.CreateAudioSource %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::DeleteAudioSource +// Deletes audio source. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::DeleteAudioSource() + { + __VTPRINTENTER( "LocVid.DeleteAudioSource" ) + if( iAudioSource ) + { + VTProtocolFactory::DeletAudioSource(iAudioSource); + iAudioSource = NULL; + } + __VTPRINTEXIT( "LocVid.DeleteAudioSource" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::PauseVideoSending +// Pause video sending. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::PauseVideoSending() + { + __VTPRINTENTER( "LocVid.PauseVideoSending" ) + if ( iSource ) + { + iSource->PauseSending(); + } + __VTPRINTEXIT( "LocVid.PauseVideoSending" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ResumeVideoSending +// Resume video sending. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ResumeVideoSending() + { + __VTPRINTENTER( "LocVid.ResumeVideoSending" ) + if ( iSource ) + { + iSource->ResumeSending(); + } + __VTPRINTEXIT( "LocVid.ResumeVideoSending" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ViewFinderStarted +// Is view finder started. +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::ViewFinderStarted() const + { + CVSDataProvider* provider = NULL; + if( iActiveProvider ) + { + provider = iActiveProvider->iProvider; + } + if ( !provider ) + { + return EFalse; + } + return provider->ViewFinderActive(); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ViewFinderStarted +// Is view finder started. +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsFrozen() const + { + TBool result = IsFlag( EFlagFrozen ); + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::ResetIndices +// Resets the provider info indices. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::ResetIndices() + { + iProviderInfoIndexCam1 = KErrNotFound; + iProviderInfoIndexCam2 = KErrNotFound; + iProviderInfoIndexStill = KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetCameraTracking +// Sets a listener for camera P & S data. +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::SetCameraTrackingL( TInt& aProviderIndex ) + { + __VTPRINTENTER( "LocVideo.SetCameraTracking" ) + iCameraListener = CVtEngPubSubsListener::NewL( KPSUidVTMediaConfiguration, + KPSPreferredCamera, this ); + + __VTPRINTEXIT( "LocVideo.SetCameraTracking" ) + return iCameraListener->Get( aProviderIndex ); + } + +// ----------------------------------------------------------------------------- +// CVtEngInitializer::HandleNotifyPSL +// Notification of changed port value. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::HandleNotifyPSL( + const TUid /*aUid */, const TInt& /* aKey */, + const TRequestStatus& aStatus ) + { + __VTPRINTENTER( "LocVideo.handleNotifyPSL " ) + if ( aStatus.Int() == KErrNone ) + { + // Get the new camera value. + TInt cameraId( EPSPreferredCameraUnknown ); + iCameraListener->Get( cameraId ); + // No need to check error, since MapCameraInternally will return + // current camera, and no actions will be taken. + MVtEngMedia::TCameraId camId( MapCameraInternally( cameraId ) ); + + TVtEngProviderType providerType( KVtEngProviderUndefined ); + TInt result( KErrNone ); + switch( camId ) + { + case MVtEngMedia::EPrimaryCamera: + if( IsFlag( EFlagCamera1Available ) ) + { + providerType = KVtEngProviderCam1; + } + else + { + result = KErrNotFound; + } + break; + + case MVtEngMedia::ESecondaryCamera: + if( IsFlag( EFlagCamera2Available ) ) + { + providerType = KVtEngProviderCam2; + } + else + { + result = KErrNotFound; + } + break; + + default: + result = KErrNotSupported; + break; + } + + User::LeaveIfError( result ); + + // If we're sharing, then notify camera change to image sharer + if ( GetMediaSource() == MVtEngMedia::EMediaShare || + iShareImage->IsInitializingShare() ) + { + iShareImage->NotifyCameraChanged( providerType ); + } + // If current provider is camera + else if ( GetMediaSource() == MVtEngMedia::EMediaCamera ) + { + // If current camera is different than new + if ( iCurrentCamera != camId ) + { + // If VT is in the foreground and Provider is unfrozen + if ( IsFlag( EFlagUIForeground ) && !IsFrozen() && !iObserver.IsVideoChannelClosed() ) + { + // select camera.. + SelectSourceL( providerType ); + } + else + { + iObserver.SetSelectedCameraId( camId ); + // ..else notify delayed select + iLayoutChangeHandler.CancelHandleLayoutChange(); + iDelayedSelect.NotifyDelayedSelect( providerType ); + } + } + else + { + // else ignore + } + } + // Else store camera type and on next SelectSourceL() use this instead + else + { + iObserver.SetSelectedCameraId( camId ); + // If prepare camera has not been called, then just + // update preferred camera + if ( GetMediaSource()!= MVtEngMedia::EMediaNone && + ( IsPrepareCameraCalled() || iObserver.IsVideoChannelClosed() ) ) + { + iLayoutChangeHandler.CancelHandleLayoutChange(); + iDelayedSelect.NotifyDelayedSelect( providerType ); + } + else + { + iCurrentCamera = camId; + } + } + } + __VTPRINTEXIT( "LocVideo.HandleNotifyPSL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::SetCurrentCameraId +// +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::SetCurrentCameraId( MVtEngMedia::TCameraId aCamId ) + { + __VTPRINTENTER( "LocVideo.SetCurrentCameraId" ) + iCurrentCamera = aCamId; + iObserver.SetSelectedCameraId( aCamId ); + __VTPRINTEXITR( "LocVideo.SetCurrentCameraId camId = %d", aCamId ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::MapCameraInternally +// Maps camera id to internal data structures. +// ----------------------------------------------------------------------------- +// +MVtEngMedia::TCameraId CVtEngLocalVideo::MapCameraInternally( TInt aCameraId ) + { + __VTPRINT2( DEBUG_GEN, "LocVideo.MapCameraInternally cameraId=%d", + aCameraId ) + if ( aCameraId == EPSPreferredCameraInwards || + iNumSupportedCameras == 1 ) + { + return MVtEngMedia::EPrimaryCamera; + } + else if ( aCameraId == EPSPreferredCameraOutwards ) + { + return MVtEngMedia::ESecondaryCamera; + } + __VTPRINT2( DEBUG_GEN, "LocVideo.MapCameraInternally curCam=%d", iCurrentCamera ) + return iCurrentCamera; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CameraAvailable +// Checks camera availabitility. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo:: + CameraAvailable( CVtEngLocalVideo::TVtEngProviderType &aType ) + { + __VTPRINT2( DEBUG_GEN, "LocVideo.CameraAvailable In.type=%d ", aType ) + if ( iCurrentCamera == MVtEngMedia::EPrimaryCamera ) + { + if ( IsFlag( EFlagCamera1Available ) ) + { + aType = KVtEngProviderCam1; + } + } + else if ( iCurrentCamera == MVtEngMedia::ESecondaryCamera ) + { + if ( IsFlag( EFlagCamera2Available ) ) + { + aType = KVtEngProviderCam2; + } + } + __VTPRINT2( DEBUG_GEN, "LocVideo.CameraAvailable Out.type=%d", aType ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::IsProviderWaiting +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::IsProviderWaiting( TVtEngProviderType aType ) const + { + __VTPRINTENTER( "LocVid.IsProviderWaiting" ) + TBool isWaiting( EFalse ); + TInt indexWaiting( ProviderIndexByState( EWaiting ) ); + if ( indexWaiting != KErrNotFound ) + { + TProviderItem& item = ( *iVideoProviders )[ indexWaiting ]; + isWaiting = ( item.iType == aType ); + } + __VTPRINTEXITR( "LocVid.IsProviderWaiting %d", isWaiting ) + return isWaiting; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::GetHighestSelectableProvider +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::GetHighestSelectableProvider( + CVtEngLocalVideo::TVtEngProviderType& aPreferred ) const + { + __VTPRINTENTER( "LocVid.GetHighestSelectableProvider" ) + const TVtEngProviderType preferred = aPreferred; + switch ( preferred ) + { + case KVtEngProviderCam1: + if ( IsFlag( EFlagCamera1Available ) ) + { + // cam1 is selectable, jump out + break; + } + // othwerwise fall through to next in priority order + case KVtEngProviderCam2: + if ( IsFlag( EFlagCamera2Available ) && + // Do not allow change to another camera without user permission, + // i.e. test preferred was cam1 but it wasn't available. + preferred != KVtEngProviderCam1 ) + { + // cam2 is selectable + aPreferred = KVtEngProviderCam2; + break; + } + // othwerwise fall through to next in priority order + case KVtEngProviderImage: + if ( CVtEngUtility::Settings().Config().iVideo.iImageIsValid ) + { + aPreferred = KVtEngProviderImage; + break; + } + // othwerwise fall through to next in priority order + case KVtEngProviderNone: + default: + // always available + aPreferred = KVtEngProviderNone; + break; + } + __VTPRINTEXITR( "LocVid.GetHighestSelectableProvider %d", aPreferred ) + return ( preferred == aPreferred ); + } + +// Implementation of CVtEngLocalVideo::CVtEngShareImage + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::NewL +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::CVtEngShareImage* CVtEngLocalVideo::CVtEngShareImage::NewL( + CVtEngLocalVideo& aLocalVideo ) + { + CVtEngShareImage* self = new ( ELeave ) CVtEngShareImage( aLocalVideo ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::~CVtEngShareImage +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::CVtEngShareImage::~CVtEngShareImage() + { + DeleteProviders(); + iBuffered.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::InitializeL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::InitializeL( + const MVtEngMedia::TShareObjectImageParameters& aParameters, + TVtEngProviderType aCurrent, + TBool& aFirstTime ) + { + __VTPRINTENTER( "LocVid.ShareImage.InitializeL" ) + if ( IsInitializing() ) + { + // Already initializing. + User::Leave( KErrNotReady ); + } + + + CVtEngLocalVideo::TProviderItem* freeProviderItem = FetchProviderItem(); + if ( !freeProviderItem ) + { + User::Leave( KErrInUse ); + } + + iParameters = aParameters; + CreateProviderL( *freeProviderItem ); + InitializeProviderL( *freeProviderItem ); + + // Only set stored type when sharing is started, if resharing (i.e. sharing + // new image when already sharing other image), then don't change stored + // type. + if ( iStoredType == KVtEngProviderUndefined ) + { + iSettingsChanged = EFalse; + iOriginalStoredType = iStoredType = aCurrent; + aFirstTime = ETrue; + } + else + { + aFirstTime = EFalse; + } + iInitializingProvider = freeProviderItem; + SetState( EInitializing ); + __VTPRINTEXIT( "LocVid.ShareImage.InitializeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::ShareL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::ShareL() + { + __VTPRINTENTER( "LocVid.ShareImage.ShareL" ) + if ( !IsInitializing() && iInitializingProvider ) + { + User::Leave( KErrNotReady ); + } + iActiveProvider = iInitializingProvider; + iInitializingProvider = NULL; + iLocalVideo->SwitchProvider( *iActiveProvider ); + SetState( ESharing ); + __VTPRINTEXIT( "LocVid.ShareImage.ShareL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::StopL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::StopL() + { + __VTPRINTENTER( "LocVid.ShareImage.StopL" ) + iLocalVideo->InitializeOnly( EFalse ); + + CVtEngLocalVideo::TVtEngProviderType target( StoredSource() ); + if ( iOriginalStoredType != target ) + { + TProviderItem* item = NULL; + if ( iLocalVideo->GetProviderByType( iOriginalStoredType, item ) + != KErrNotFound ) + { + if ( item->iProviderState != EPermanent ) + { + iLocalVideo->DeleteProvider( *item ); + } + } + } + + if ( iSettingsChanged ) + { + if ( target == KVtEngProviderDefaultStillImage ) + { + DeleteProvider( target ); + } + DeleteProvider( KVtEngProviderImage ); + } + + __VTPRINT2( DEBUG_MEDIA, "LocVid.ShareImage.StopL select %d", + target ) + iLocalVideo->SelectSourceL( target ); + + if ( iStoredType == KVtEngProviderCam1 || + iStoredType == KVtEngProviderCam2 ) + { + MVtEngMedia::TCameraId camId( + iStoredType == KVtEngProviderCam1 ? + MVtEngMedia::EPrimaryCamera : + MVtEngMedia::ESecondaryCamera ); + iLocalVideo->SetCurrentCameraId( camId ); + __VTPRINT2( DEBUG_MEDIA, "LocVid.ShareImage.StopL set camId %d", + camId ) + } + SetState( EStopped ); + __VTPRINTEXIT( "LocVid.ShareImage.StopL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::Error +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::Error( TInt +#ifdef _DEBUG + aError +#endif // _DEBUG + ) + { + TState stateAfter( EStopped ); + __VTPRINTENTER( "LocVid.ShareImage.Error" ) + if ( IsInitializing() ) + { + iInitializingProvider = NULL; + stateAfter = iPreviousState; + } + else if ( iState == ESharing ) + { + if ( iLocalVideo->iObserver.GetPendingCommand() != KVtEngInitializeShareImage ) + { + CVtEngEventManager::NotifyEvent( KVtEngShareImageDecodingError ); + } + stateAfter = ESharing; + //iActiveProvider = NULL; + } + SetState( stateAfter ); +#ifdef _DEBUG + __VTPRINTEXITR( "LocVid.ShareImage.Error %d", aError ) +#endif // _DEBUG + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::StoredSource +// +// Returns stored source for this share session. Stored source may have changed +// during share (e.g. when GS still image is being sent but during share +// GS still image is disabled => still image cannot be used anymore and thus +// None provider must be activated). All these conditions are checked by this +// method. +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType + CVtEngLocalVideo::CVtEngShareImage::StoredSource() const + { + __VTPRINTENTER( "LocVid.ShareImage.StoredSource" ) + CVtEngLocalVideo::TVtEngProviderType stored( iStoredType ); + + if ( iOriginalStoredType == KVtEngProviderNone || + iOriginalStoredType == KVtEngProviderImage || + iOriginalStoredType == KVtEngProviderDefaultStillImage ) + { + if ( CVtEngUtility::Settings().Config().iVideo.iImageIsValid ) + { + stored = KVtEngProviderImage; + } + else if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) + { + stored = KVtEngProviderDefaultStillImage; + } + else + { + stored = KVtEngProviderNone; + } + } + __VTPRINTEXITR( "LocVid.ShareImage.StoredSource = %d", stored ) + return stored; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::CVtEngShareImage +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::CVtEngShareImage::CVtEngShareImage( + CVtEngLocalVideo& aLocalVideo ) + : iLocalVideo( &aLocalVideo ), iState( EStopped ), + iStoredType( KVtEngProviderUndefined ), + iOriginalStoredType( KVtEngProviderUndefined ), + iBuffered( 2 ), iSettingsChanged( EFalse ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::ConstructL() + { + __VTPRINTENTER( "LocVid.ShareImage.ConstructL" ) + for ( TInt i = 0; i < KVtEngNumProvidersBuffered; i++ ) + { + TProviderItem* item = new (ELeave) TProviderItem(); + CleanupStack::PushL( item ); + User::LeaveIfError( iBuffered.Append( item ) ); + CleanupStack::Pop(); // item + } + __VTPRINTEXIT( "LocVid.ShareImage.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::Parameters +// ----------------------------------------------------------------------------- +// +const MVtEngMedia::TShareObjectImageParameters& + CVtEngLocalVideo::CVtEngShareImage::Parameters() const + { + __VTPRINTENTER( "LocVid.ShareImage.Parameters" ) + __VTPRINTEXIT( "LocVid.ShareImage.Parameters" ) + return iParameters; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::IsInitializing +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::CVtEngShareImage::IsInitializing() const + { + TBool isInitializing( iState == EInitializing ); + __VTPRINTENTER( "LocVid.ShareImage.IsInitializing" ) + __VTPRINTEXITR( "LocVid.ShareImage.IsInitializing %d", isInitializing ) + return isInitializing; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::SetState +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::SetState( const TState aNewState ) + { + __VTPRINTENTER( "LocVid.ShareImage.SetState" ) + // Signal UI when entering or leaving initializing state + if ( aNewState == EInitializing ) + { + CVtEngEventManager::NotifyEvent( KVtEngShareImageInitializeBegin ); + } + else if ( iState == EInitializing ) + { + CVtEngEventManager::NotifyEvent( KVtEngShareImageInitializeEnd ); + } + // Reset stored type when stopping + if( aNewState == EStopped ) + { + iOriginalStoredType = iStoredType = KVtEngProviderUndefined; + iSettingsChanged = EFalse; + } + iPreviousState = iState; + iState = aNewState; + __VTPRINTEXITR( "LocVid.ShareImage.SetState iState = %d", iState ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::GetProviderItemL +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TProviderItem* + CVtEngLocalVideo::CVtEngShareImage::FetchProviderItem() const + { + __VTPRINTENTER( "LocVid.ShareImage.FetchProviderItem" ) + for( TInt i = 0; i < iBuffered.Count(); i++ ) + { + if( ( iBuffered[ i ] != iActiveProvider ) && + ( iBuffered[ i ] != iInitializingProvider ) ) + { + __VTPRINTEXIT( "LocVid.ShareImage.FetchProviderItem" ) + return iBuffered[ i ]; + } + } + __VTPRINTEXIT( "LocVid.ShareImage.FetchProviderItem" ) + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::CreateProviderL +// ----------------------------------------------------------------------------- +void CVtEngLocalVideo::CVtEngShareImage::CreateProviderL( + TProviderItem& aProviderItem ) + { + __VTPRINTENTER( "LocVid.ShareImage.CreateProviderL" ) + iLocalVideo->ReCreateProviderL( aProviderItem, KVtEngProviderShareImage ); + __VTPRINTEXIT( "LocVid.ShareImage.CreateProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::InitializeProviderL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::InitializeProviderL( + TProviderItem& aProviderItem ) + { + __VTPRINTENTER( "LocVid.ShareImage.InitializeProviderL" ) + if( IsInitializing() ) + { + User::Leave( KErrNotReady ); + } + TPckgBuf< TVSStillImageDataProviderParams > pckg( Parameters() ); +#ifdef _DEBUG + RDebug::Print( _L( "LocVid.ShareImage.InitializeProviderL: %S" ), + &( pckg().iFileName ) ); +#endif // _DEBUG + iLocalVideo->InitializeShareProviderL( aProviderItem, pckg ); + __VTPRINTEXIT( "LocVid.ShareImage.InitializeProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::DeleteProvider +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::DeleteProvider( + TVtEngProviderType aProviderType ) + { + __VTPRINTENTER( "LocVid.ShareImage.DeleteProvider" ) + TProviderItem* pItem; + if ( iLocalVideo->GetProviderByType( aProviderType, pItem ) + != KErrNotFound ) + { + iLocalVideo->DeleteProvider( *pItem ); + } + __VTPRINTEXIT( "LocVid.ShareImage.DeleteProvider" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::GetObjectSharingState +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::GetObjectSharingState( + MVtEngMedia::TShareObjectState& aObjectSharingState ) const + { + __VTPRINTENTER( "LocVid.ShareImage.GetObjectSharingState" ) + switch ( iState ) + { + case EStopped: + aObjectSharingState = MVtEngMedia::ENotSharing; + break; + + case EInitializing: + aObjectSharingState = MVtEngMedia::EInitializingShareImage; + break; + + case ESharing: + aObjectSharingState = MVtEngMedia::ESharingImage; + break; + + default: + aObjectSharingState = MVtEngMedia::ENotAbleToShare; + break; + } + __VTPRINTEXIT( "LocVid.ShareImage.GetObjectSharingState" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::IsInitializingShare +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::CVtEngShareImage::IsInitializingShare() const + { + __VTPRINTENTER( "LocVid.ShareImage.IsInitializingShare" ) + const TBool result( iState == EInitializing ); + __VTPRINTEXITR( "LocVid.ShareImage.IsInitializingShare %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::SettingsChanged +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::SettingsChanged() + { + __VTPRINTENTER( "LocVid.ShareImage.SettingsChanged" ) + iSettingsChanged = ETrue; + __VTPRINTEXIT( "LocVid.ShareImage.SettingsChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::ProviderSwitchDone +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::ProviderSwitchDone( + CVSDataProvider* aOldProvider ) + { + __VTPRINTENTER( "LocVid.ShareImage.ProviderSwitchDone" ) + //if ( iState == EStopped ) + { + for ( TInt i = iBuffered.Count() - 1; i >= 0; i-- ) + { + if ( iBuffered[ i ]->iProvider == aOldProvider ) + { + iLocalVideo->DeleteProvider( *iBuffered[ i ] ); + break; + } + } + } + __VTPRINTEXIT( "LocVid.ShareImage.ProviderSwitchDone" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::NotifyCameraChanged +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::NotifyCameraChanged( + const TVtEngProviderType& aProviderType ) + { + __VTPRINTENTER( "LocVid.ShareImage.NotifyCameraChanged" ) + if ( ( iState == EInitializing ) || ( iState == ESharing ) ) + { + iStoredType = aProviderType; + } + __VTPRINTEXIT( "LocVid.ShareImage.NotifyCameraChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::DeleteProviders +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::DeleteProviders() + { + __VTPRINTENTER( "LocVid.ShareImage.DeleteProviders" ) + for ( TInt i = 0; i < iBuffered.Count(); i++ ) + { + iLocalVideo->DeleteProvider( *iBuffered[ i ] ); + } + __VTPRINTEXIT( "LocVid.ShareImage.DeleteProviders" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CVtEngShareImage::CancelInitialize +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CVtEngShareImage::CancelInitialize() + { + __VTPRINTENTER( "CVtEngLocalVideo.CVtEngShareImage.CancelInitialize"); + if( iInitializingProvider ) + { + if(iInitializingProvider->iProvider) + { + __VTPRINT( DEBUG_MEDIA,"iInitializingProvider->iProvider->CancelInitializing()"); + iInitializingProvider->iProvider->CancelInitializing(); + } + } + __VTPRINTEXIT( "CVtEngLocalVideo.CVtEngShareImage.CancelInitialize"); + } +// Implementation of CVtEngLocalVideo::TVtEngDelayedSelect + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngDelayedSelect::TVtEngDelayedSelect +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngDelayedSelect::TVtEngDelayedSelect() + : iDelayedProviderType( KVtEngProviderUndefined ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngDelayedSelect::NotifyDelayedSelect +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngDelayedSelect::NotifyDelayedSelect( + const TVtEngProviderType& aProviderType ) + { + __VTPRINTENTER( "LocVid.DelSel.NotifyDelayedSelect" ) + iDelayedProviderType = aProviderType; + __VTPRINTEXIT( "LocVid.DelSel.NotifyDelayedSelect" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngDelayedSelect::IsDelayedSelectPending +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::TVtEngDelayedSelect::IsDelayedSelectPending() const + { + __VTPRINTENTER( "LocVid.DelSel.IsDelayedSelectPending" ) + const TBool result( iDelayedProviderType != KVtEngProviderUndefined ); + __VTPRINTEXITR( "LocVid.DelSel.IsDelayedSelectPending %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngDelayedSelect::DelayedSelectTarget +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngProviderType +CVtEngLocalVideo::TVtEngDelayedSelect::DelayedSelectTarget() + { + __VTPRINTENTER( "LocVid.DelSel.DelayedSelectTarget" ) + TVtEngProviderType current( iDelayedProviderType ); + iDelayedProviderType = KVtEngProviderUndefined; + __VTPRINTEXITR( "LocVid.DelSel.DelayedSelectTarget %d", current ) + return current; + } + +// Implementation of CVtEngLocalVideo::TVtEngLayoutChangeHandler + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::TVtEngLayoutChangeHandler +// ----------------------------------------------------------------------------- +// +CVtEngLocalVideo::TVtEngLayoutChangeHandler::TVtEngLayoutChangeHandler( + CVtEngLocalVideo& aLocalVideo ) + : iLocalVideo( &aLocalVideo ), iState( EIdle ), + iStored( KVtEngProviderUndefined ) + { + __VTPRINTEXIT( "LocVid.LayoutCH.Ctor" ) + __VTPRINTEXIT( "LocVid.LayoutCH.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::UnfreezeL +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::UnfreezeL() + { + TBool result( EFalse ); + __VTPRINTENTER( "LocVid.LayoutCH.UnfreezeL" ) + if ( iState == ELayoutChangePending ) + { + result = ETrue; + DoHandleLayoutChangeL(); + } + __VTPRINTEXITR( "LocVid.LayoutCH.UnfreezeL %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::HandleLayoutChangeL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngLayoutChangeHandler::HandleLayoutChangeL() + { + __VTPRINTENTER( "LocVid.LayoutCH.HandleLayoutChangeL" ) + TInt error( KErrNone ); + if ( iState != EIdle ) + { + if ( iState == ELayoutChangePending ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.HandleLayoutChangeL PENDING" ) + } + else + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.HandleLayoutChangeL NOT ready" ) + error = KErrNotReady; + } + CompleteOperation( error ); + } + else + { + // Only do reinitialize if camera is active source + if ( iLocalVideo->GetMediaSource() == MVtEngMedia::EMediaCamera && + !iLocalVideo->IsDelayedSelectPending() ) + { + if ( !iLocalVideo->IsFrozen() ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.HandleLayoutChangeL camera active, reinitialize" ) + DoHandleLayoutChangeL(); + } + else + { + iState = ELayoutChangePending; + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.HandleLayoutChangeL flag set, frozen" ) + CompleteOperation( error ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.HandleLayoutChangeL no op, camera is not active" ) + CompleteL( error ); + } + } + __VTPRINTEXITR( "LocVid.LayoutCH.HandleLayoutChangeL %d", error ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CancelHandleLayoutChange +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CancelHandleLayoutChange() + { + __VTPRINTENTER( "LocVid.LayoutCH.CancelHandleLayoutChange" ) + if ( iState == ELayoutChangePending ) + { + iState = EIdle; + } + __VTPRINTEXITR( "LocVid.LayoutCH.CancelHandleLayoutChange iState = %d", + iState ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::DoHandleLayoutChangeL +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngLayoutChangeHandler::DoHandleLayoutChangeL() + { + __VTPRINTENTER( "LocVid.LayoutCH.DoHandleLayoutChangeL" ) + iStored = iLocalVideo->ActiveProvider(); + iState = ESwitchingBlank; + TVtEngProviderType providerType( KVtEngProviderNone ); + // Use user defined image, if available + if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) + { + providerType = KVtEngProviderDefaultStillImage; + } + iLocalVideo->SelectSourceL( providerType ); + __VTPRINTEXIT( "LocVid.LayoutCH.DoHandleLayoutChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::Complete +// ----------------------------------------------------------------------------- +// +TInt CVtEngLocalVideo::TVtEngLayoutChangeHandler::Complete( const TInt aError ) + { + __VTPRINTENTER( "LocVid.LayoutCH.Complete" ) + TRAPD( error, CompleteL( aError ) ); + __VTPRINTEXITR( "LocVid.LayoutCH.Complete %d", error ) + return error; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteL +// Resets internal state and completes asynchronous operation. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteL( const TInt aError ) + { + __VTPRINTENTER( "LocVid.LayoutCH.CompleteL" ) + iStored = KVtEngProviderUndefined; + iState = EIdle; + CompleteOperation( aError ); + __VTPRINTEXIT( "LocVid.LayoutCH.CompleteL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteOperation +// Completes asynchronous operation. +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteOperation( + const TInt aError ) + { + __VTPRINTENTER( "LocVid.LayoutCH.CompleteOperation" ) + iLocalVideo->CompleteOperation( aError ); + __VTPRINTEXIT( "LocVid.LayoutCH.CompleteOperation" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderError +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderError( TInt aError ) + { + TBool handled( EFalse ); + __VTPRINTENTER( "LocVid.LayoutCH.ProviderError" ) + if ( iState != EIdle && iState != ELayoutChangePending ) + { + handled = ETrue; + Complete( aError ); + } + __VTPRINTEXITR( "LocVid.LayoutCH.ProviderError %d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderReady +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderReady() + { + TBool handled( EFalse ); + __VTPRINTENTER( "LocVid.LayoutCH.ProviderReady" ) + switch ( iState ) + { + case ESwitchingCamera: + case EIdle: + break; + + case EInitializingCamera: + handled = ETrue; + iState = ESwitchingCamera; + TRAPD( error, iLocalVideo->SelectSourceL( iStored ) ); + if ( error ) + { + Complete( error ); + } + break; + + case ESwitchingBlank: + handled = ETrue; + break; + } + __VTPRINTEXITR( "LocVid.LayoutCH.ProviderReady %d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderSwitchDone +// ----------------------------------------------------------------------------- +// +TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderSwitchDone( + CVSDataProvider* aOldProvider ) + { + TBool handled( EFalse ); + __VTPRINTENTER( "LocVid.LayoutCH.ProviderSwitchDone" ) + switch ( iState ) + { + case EIdle: + // nothing to do + break; + + case ESwitchingBlank: + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone ESwitchingBlank" ) + handled = ETrue; + iState = EInitializingCamera; + TProviderItem* providerItem; + const TInt result( + iLocalVideo->GetProviderByInstance( aOldProvider, providerItem ) ); + if ( result != KErrNotFound ) + { + iLocalVideo->DeleteProvider( *providerItem ); + iLocalVideo->iCameraPref->SetProvider( NULL, + *iLocalVideo->iActiveProvider ); + + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone initializing provider" ) + + TRAPD( error, iLocalVideo->InitializeProviderL( *providerItem ) ); + + if ( error ) + { + __VTPRINT2( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone ERROR %d in initialize", + error ) + Complete( error ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone provider NOT found" ) + Complete( result ); + } + } + break; + + case EInitializingCamera: + handled = ETrue; + break; + + case ESwitchingCamera: + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone ESwitchingCamera" ) + TRAP_IGNORE( iLocalVideo->StartViewFinderIfWasStartedL() ); + //Re-Set provider to camera preference. Otherwise, after layout change, the provider in camera preference will be invalid + iLocalVideo->iCameraPref->SetProvider( iLocalVideo->iActiveProvider->iProvider, + *iLocalVideo->iActiveProvider ); + handled = ETrue; + __VTPRINT( DEBUG_MEDIA, + "LocVid.LayoutCH.ProviderSwitchDone reinit done" ) + Complete( KErrNone ); + break; + } + __VTPRINTEXITR( "LocVid.LayoutCH.ProviderSwitchDone %d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CreateCameraPreferencesL +// ----------------------------------------------------------------------------- +// +CVtEngCameraPreferences* CVtEngLocalVideo::CreateCameraPreferencesL() + { + __VTPRINTENTER( "LocVid.CreateCameraPreferencesL" ) + iCameraPref = CVtEngCameraPreferences::NewL(); + + // Check if provider exist and set it + // as provider to camera preferences + if ( iActiveProvider ) + { + __VTPRINT( DEBUG_MEDIA, + "LocVideo.CreateCameraPreferencesL SetProvider" ) + iCameraPref->SetProvider( iActiveProvider->iProvider, + *iActiveProvider ); + } + + __VTPRINTEXIT( "LocVid.CreateCameraPreferencesL" ) + return iCameraPref; + } + +// ----------------------------------------------------------------------------- +// CVtEngLocalVideo::CancelInitializeShareImage +// ----------------------------------------------------------------------------- +// +void CVtEngLocalVideo::CancelInitializeShareImage() + { + __VTPRINTENTER( "CVtEngLocalVideo.CancelInitializeShareImage"); + iShareImage->CancelInitialize(); + __VTPRINTEXIT( "CVtEngLocalVideo.CancelInitializeShareImage"); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngMediaHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngMediaHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,4580 @@ +/* +* Copyright (c) 2004-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 video session interface. +* +*/ + + +// INCLUDE FILES +#include "CVtEngMediaHandler.h" +#include "CVtEngLocalVideo.h" +#include "CVtEngRemoteVideo.h" +#include "MVtEngFrameObserver.h" +#include "CVtEngStateManager.h" +#include "CVtEngOperation.h" +#include "TVtEngRendering.h" +#include "TVtEngRenderingDSA.h" +#include "TVtEngRenderingDP.h" +#include "TVtEngRenderingNGA.h" +#include "VtEngUtils.h" +#include "CVtEngInitializer.h" +#include "CVtEngEventManager.h" +#include "CVtEngSettings.h" +#include "CVtEngHandlerContainer.h" +#include "MVtEngDtmfHandler.h" +#include "cvtengmdtrcommandsender.h" +#include "VtEngPanic.h" +#include +#include +#include +#include +#include +#include // BigEndian + +#include +#include "cvtengrecord2file.h" + +// MACROS +#ifdef VTDEBUG +// In debug mode sinks and sources are not necessarily added. +#define ADD_VIDEO_SINK { \ + if ( DEBUG_CFG_NO_VIDEO_SINK == 0 ) { AddVideoSink(); } } +#define ADD_VIDEO_SOURCE { \ + if ( DEBUG_CFG_NO_VIDEO_SOURCE == 0 ) { AddVideoSource(); } } +#define ADD_AUDIO_SOURCE \ + { if ( DEBUG_CFG_NO_AUDIO_SOURCE == 0 ) { AddAudioSource(); } } +#define ADD_AUDIO_SINK \ + { if ( DEBUG_CFG_NO_AUDIO_SINK == 0 ) { AddAudioSink(); } } +#else +// In release mode they are added. +#define ADD_VIDEO_SINK AddVideoSink(); +#define ADD_VIDEO_SOURCE AddVideoSource(); +#define ADD_AUDIO_SOURCE AddAudioSource(); +#define ADD_AUDIO_SINK AddAudioSink(); +#endif // VTDEBUG + +// CONSTANTS +const TInt KVtEngOperationArraySize = 2; +// System version string buffer length. +const TInt KVtEngSwVersionTextLength = KSysUtilVersionTextLength; +// Country code for version information. +const TUint8 KVtEngCountryCodeForProto = 60; +// Extension code for version information (unknown). +const TUint8 KVtEngExtensionForProto = 0; +// Manufacturer code for version information (unknown). +const TUint32 KVtEngManufacturerForProto = 0; +// Timer to detect too long disconnect. +const TInt KVtEngDisconnectionTimer = 20000000; +// Space character constant. +const TText KVtEngCharacterSpace( ' ' ); +// New line (\n) character constant. +const TInt KVtEngCharacterEndLine( 10 ); + +// Multiplex delay in milliseconds +const TInt KVtEngMultiplexingDelay = 150; + +// TradeOff values +const TInt KVtEngTradeOffDetailMax = 9; +const TInt KVtEngTradeOffNormalMax = 19; +const TInt KVtEngTradeOffMotionMax = 31; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CVtEngMediaHandler +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::CVtEngMediaHandler() : + iProtoState( MVtProtocolCommand::EIdle ), + iAudioCtrl(0), + iProtoMaxVolume(0), + iTempProviderInfo( CVtEngLocalVideo::KVtEngProviderNone ), + iH324Config( 0 ), + iH263Encoder( 0 ) + { + if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) + { + iTempProviderInfo = CVtEngLocalVideo::KVtEngProviderDefaultStillImage; + } + + // Check is AMR-WB supported or not in platform. Adjusted using local + // variation. + if ( CVtEngUtility::Settings().CheckBits( KVTLVFlagEnableAMR_WB ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "MH.c++ AMR-WB set ON" ) + iSdkInitInfo.iAMRWBOn = ETrue; + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "MH.c++ AMR-WB set OFF" ) + iSdkInitInfo.iAMRWBOn = EFalse; + } + + if ( CVtEngUtility::Settings().CheckBits( KVTLVFlagDisableMpeg4 ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "MH.c++ Mpeg4 set OFF" ) + iSdkInitInfo.iDisableMpeg4 = ETrue; + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "MH.c++ Mpeg4 set ON" ) + iSdkInitInfo.iDisableMpeg4 = EFalse; + } + + __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "MH.c++" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::ConstructL() + { + __VTPRINTENTER( "MH.ConstructL" ) + + iAsyncCallback = CIdle::NewL( CActive::EPriorityHigh ); + iPendingOps = new ( ELeave) + CArrayFixFlat( KVtEngOperationArraySize ); + iPendingOps->SetReserveL( KVtEngOperationArraySize ); + + __VTPRINT2( DEBUG_MEDIA, "DebugFlags used are %d", CVtLogger::Flags() ) + + iLocalVideo = CVtEngLocalVideo::NewL( *this ); + __VTPRINTEXIT( "MH.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler* CVtEngMediaHandler::NewL() + { + CVtEngMediaHandler* self = new( ELeave )CVtEngMediaHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::~CVtEngMediaHandler +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::~CVtEngMediaHandler() + { + __VTPRINTENTER( "MH.~" ) + if ( iPendingOps ) + { + iPendingOps->Reset(); // Make sure this is empty + delete iPendingOps; + } + delete iPendingOp; + delete iTimer; + delete iAsyncCallback; + delete iLocalVideo; + delete iRemoteVideo; + __VTPRINTEXIT( "MH.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetMediaState +// Returns media state. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetMediaState( + const TMediaDirection aMediaDirection, + TInt& aActiveMedia ) const + { + __VTPRINT2( DEBUG_MEDIA, "MH.GetMediaState direction=%d", aMediaDirection ) + aActiveMedia = 0; + switch ( aMediaDirection ) + { + case EMediaOutgoing: + { + const TInt result( iLocalVideo->GetMediaState( aActiveMedia ) ); + if ( !IsFlag( EOutVideoChannelClosed ) ) + { + aActiveMedia |= EMediaVideoChannelOpen; + } + if ( !IsFlag( EOutAudioChannelClosed ) ) + { + aActiveMedia |= EMediaAudioChannelOpen; + } + return result; + } + + case EMediaIncoming: + aActiveMedia = iRemoteMediaState; + if ( ( iRemoteVideo && !iRemoteVideo->GetDsaState() ) ) + { + aActiveMedia &= (~EMediaVideo); + } + __VTPRINT2( DEBUG_MEDIA, "MH.remoteState=%d", aActiveMedia ) + return KErrNone; + + default: + break; + } + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::RenderingStarted +// Returns the state of video. +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::RenderingStarted( + const TMediaDirection aDirection ) const + { + __VTPRINT2( DEBUG_MEDIA, "MH.RS %d", aDirection ) + TBool started( EFalse ); + if( aDirection == EMediaOutgoing ) + { + started = iLocalVideo->ViewFinderStarted(); + } + else // EMediaIncoming + { + started = iRemoteVideo->GetDsaState(); + } + + __VTPRINT2( DEBUG_MEDIA, "MH.RS started %d", started ) + return started; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetSource +// Returns active source. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetSource( TMediaSource& aSource ) const + { + TInt err( KErrNotReady ); + if ( iLocalVideo ) + { + aSource = iLocalVideo->GetMediaSource(); + err = KErrNone; + } + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetSourcesCaps +// Returns source selection capabilities. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetSourcesCaps( TInt& aCaps ) const + { + TInt err( KErrNotReady ); + if ( iLocalVideo ) + { + err = iLocalVideo->GetSourceCaps( aCaps ); + } + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetCurrentCameraId +// Returns current camera. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetCurrentCameraId( TCameraId& aId ) const + { + __VTPRINT( DEBUG_GEN, "MH.GetCurrentCameraId") + aId = iSelectedCameraId; + TInt err( KErrNotReady ); + + TBool initialized( EFalse ); + err = iLocalVideo->IsInitialized( aId, initialized ); + if ( !initialized && ( err != KErrInUse ) ) + { + __VTPRINT2( DEBUG_GEN, "MH.GetCurrentCameraId err=%d", KErrNotReady ) + return KErrNotReady; + } + __VTPRINT2( DEBUG_GEN, "MH.GetCurrentCameraId initialized err=%d", err ) + return err;//Not initialized + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetCameraInfo +// Returns camera information. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetCameraInfo( + const TCameraId aId, TCameraInfo& aInfo ) const + { + return iLocalVideo->GetCameraInfo( aId, aInfo ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetCurrentZoomStep +// Returns current zooming. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetCurrentZoomStep( TInt& aCurrentStep ) + { + return iLocalVideo->GetDigitalZoomFactor( aCurrentStep ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetMaxZoomStep +// Returns maximum zooming. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetMaxZoomStep( TInt& aMaxZoomStep ) + { + return iLocalVideo->GetMaxDigitalZoomStep( aMaxZoomStep ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetMajorZoomStepCount +// Gets number of major zoom level leaps. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetMajorZoomStepCount( TInt& aCount ) + { + return iLocalVideo->GetMajorDigitalZoomStepCount( aCount ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetMajorZoomStep +// Maps major zoom leap step to corresponding step index. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::GetMajorZoomStep( TInt aIndex, TInt& aStep ) + { + if ( iLocalVideo ) + { + iLocalVideo->GetMajorDigitalZoomStep( aIndex, aStep ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetFreezeSupported +// Maps major zoom leap step to corresponding step index. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetFreezeSupported( TBool& aFreezeSupported) const + { + if ( iLocalVideo ) + { + return iLocalVideo->GetFreezeSupported( aFreezeSupported ); + } + return KErrNotReady; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetFreezeState +// Returns KErrNotReady if provider is not ready yet. If KErrNone is returned +// then aFrozen will be ETrue if the provider is frozen, EFalse otherwise. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetFreezeState( TBool& aFrozen ) const + { + if ( iLocalVideo ) + { + aFrozen = iLocalVideo->IsFrozen(); + return KErrNone; + } + return KErrNotReady; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetDsaState +// Returns media state. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::GetDsaState( + const TMediaDirection aMediaDirection, + TBool& aActive ) const + { + if ( !iRemoteVideo ) + { + return KErrNotReady; + } + switch ( aMediaDirection ) + { + case EMediaOutgoing: + break; + case EMediaIncoming: + aActive = iRemoteVideo->GetDsaState(); + return KErrNone; + default: + break; + } + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::VideoCallConnected +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::VideoCallConnected () const + { + TBool connected = EFalse; + if ( MVtProtocolCommand::EConnected == iProtoState ) + { + connected = ETrue; + } + return connected; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetVideoQuality +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::GetVideoQuality( TVideoQuality& aVideoQuality ) const + { + __VTPRINTENTER( "MH.GetVideoQuality" ) + aVideoQuality = iVideoQuality.VideoQuality(); + __VTPRINTEXIT( "MH.GetVideoQuality" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetObjectSharingState +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::GetObjectSharingState( + TShareObjectState& aObjectSharingState ) const + { + __VTPRINTENTER( "MH.GetObjectSharingState" ) + if( iProtoState == MVtProtocolCommand::EConnected ) + { + iLocalVideo->GetObjectSharingState( aObjectSharingState ); + } + else + { + aObjectSharingState = ENotAbleToShare; + } + __VTPRINTEXIT( "MH.GetObjectSharingState" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetCameraOrientations +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::GetCameraOrientations( + TCameraOrientation& aPrimaryCameraOrientation, + TCameraOrientation& aSecondaryCameraOrientation ) const + { + __VTPRINTENTER( "MH.GetCameraOrientations" ) + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.GetCameraOrientations( aPrimaryCameraOrientation, + aSecondaryCameraOrientation ); + __VTPRINTEXIT( "MH.GetCameraOrientations" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::RequestLastRemoteFrame +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::RequestLastRemoteFrame( ) + { + __VTPRINTENTER( "MH.RequestLastRemoteFrame" ) + if( iRemoteVideo ) + iRemoteVideo->RequestLastFrame(); + __VTPRINTEXIT( "MH.RequestLastRemoteFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ValidateCommand +// Checks if command is valid in current proto state. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::ValidateCommand( const TVtEngCommandId aCommand ) const + { + __VTPRINTENTER( "MH.ValidateCommand" ) + __VTPRINT2( DEBUG_MEDIA, "MH.ValidateCommand cmd=%d", aCommand ) + TInt okToPerform( KErrNotReady ); + if ( iInitialized ) + { + switch ( aCommand ) + { + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + // mute/unmute not possible if audio channel closed. + if ( IsFlag( EOutAudioChannelClosed ) ) { + break; + } + case KVtEngSetAudioRouting: + case KVtEngSetAudioVolume: + if ( ( iProtoState == MVtProtocolCommand::EConnected ) && !iPendingOp ) + { + okToPerform = KErrNone; + } + break; + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + + if ( iProtoState == MVtProtocolCommand::EConnected ) + { + okToPerform = KErrNone; + } + break; + case KVtEngRequestLastRemoteFrame: + if ( iProtoState == MVtProtocolCommand::EConnected ) + { + okToPerform = KErrNone; + } + break; + case KVtEngPrepareViewFinder: + case KVtEngPrepareViewFinderDSA: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareViewFinderDP: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + okToPerform = KErrNone; // can be done any time + break; + + case KVtEngHandleLayoutChange: + if ( iLocalVideo && iLocalVideo->ActiveProvider() != + CVtEngLocalVideo::KVtEngProviderNone && !iPendingOp ) + { + okToPerform = KErrNone; + } + break; + + case KVtEngSetZoomStep: + { + const CVtEngLocalVideo::TVtEngProviderType + activeProvider( iLocalVideo->ActiveProvider() ); + if ( iRequestStatus == NULL && + iVSInitState == EInitStateNone && + ( activeProvider == CVtEngLocalVideo::KVtEngProviderCam1 || + activeProvider == CVtEngLocalVideo::KVtEngProviderCam2 ) ) + { + okToPerform = KErrNone; + } + } + break; + case KVtEngSetSource: + if ( !IsFlag( EOutVideoChannelClosed ) ) + { + okToPerform = KErrNone; + } + // when EOutVideoChannelClosed is active + // don't allow source switch because it may require + // pause or resume on Protocol which would fail when video + // channel is closed. + // Note1: this is especially for the case when channel is + // closed after being already open. + // Note2: it must be possible to set source already before Protocol + // is connected (in MONA calls) so Proto state check is not done. + break; + case KVtEngPrepareCamera: + case KVtEngStartViewFinder: + case KVtEngFreeze: + case KVtEngUnfreeze: + if ( iRequestStatus == NULL && + // If initialising or change provider during reset then + // not allowed + iVSInitState == EInitStateNone && + // If terminate ongoing then not allowed + iProtoState != MVtProtocolCommand::EIdle ) + { + okToPerform = KErrNone; + if( aCommand == KVtEngFreeze ) + { + if( !iLocalVideo->OkToFreeze() ) + { + okToPerform = KErrNotReady; + } + } + else if( aCommand == KVtEngUnfreeze ) + { + if( !iLocalVideo->OkToUnfreeze() ) + { + okToPerform = KErrNotReady; + } + } + } + break; + case KVtEngSetVideoQuality: + if( IsPending( ESetVideoQuality ) != KErrNotFound ) + { + okToPerform = KErrNotReady; + } + else + { + if ( iRequestStatus == NULL && iProtoState != MVtProtocolCommand::EIdle ) + { + okToPerform = KErrNone; + } + } + break; + + case KVtEngInitializeShareImage: + { + TShareObjectState objectSharingState; + GetObjectSharingState( objectSharingState ); + if ( ( objectSharingState != ENotAbleToShare ) && + ( objectSharingState != EInitializingShareImage ) && + !IsFlag( EOutVideoChannelClosed ) ) + { + okToPerform = KErrNone; + } + } + break; + + case KVtEngStartShareImage: + { + TShareObjectState objectSharingState; + GetObjectSharingState( objectSharingState ); + if( objectSharingState != ENotAbleToShare ) + { + okToPerform = KErrNone; + } + } + break; + + case KVtEngStopShareImage: + { + TShareObjectState objectSharingState; + GetObjectSharingState( objectSharingState ); + if ( ( objectSharingState == ESharingImage ) && + !IsFlag( EOutVideoChannelClosed ) ) + { + okToPerform = KErrNone; + } + } + break; + + case KVtEngTerminateSession: + if ( iProtoState == MVtProtocolCommand::EConnected || + iProtoState == MVtProtocolCommand::EConnecting ) + { + okToPerform = KErrNone; + } + break; + + default: + okToPerform= KErrNotSupported; + break; + } + } + __VTPRINT2( DEBUG_MEDIA, "MH.ValidateCommand okToPerform=%d", okToPerform ) + __VTPRINTEXIT( "MH.ValidateCommand" ) + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::IsVideoChannelClosed +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::IsVideoChannelClosed() const + { + __VTPRINTENTER( "MH.IsVideoChannelClosed" ) + const TBool result( IsFlag( EOutVideoChannelClosed ) ); + __VTPRINTEXITR( "MH.IsVideoChannelClosed %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleL +// Handles a request. +// +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleL( CVtEngOperation& aOperation ) + { + __VTPRINTENTER( "MH.HandleL" ) + + const TVtEngCommandId id( aOperation.Command() ); + if ( !iInitialized ) + { + __VTPRINT( DEBUG_MEDIA, "MH.Handle not ready" ) + User::Leave( KErrNotReady ); + } + __VTPRINT2( DEBUG_MEDIA, "MH.Handle cmdId=%d", id ) + switch ( id ) + { + case KVtEngSetUIForeground: + TBool foregroundValue; + TVtEngOpParamUtil::Set( foregroundValue, aOperation ); + if( iLocalVideo ) + { + iLocalVideo->SetUIForeground( foregroundValue ); + } + if( iRemoteVideo ) + { + iRemoteVideo->SetUIForegroundL( foregroundValue ); + } + break; + + case KVtEngSetAudioVolume: + { + __VTPRINT( DEBUG_MEDIA, "MH.Handle.Vol" ) + MVtEngAudio::TVtEngOutputVolume volSetting; + TVtEngOpParamUtil::Set( + volSetting, aOperation ); + + // Store volume. + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.SetVolume( + volSetting.iHandsetVolume, + volSetting.iHandsfreeVolume, + ETrue ); + settings.SetVolume( + volSetting.iHandsetVolume, + volSetting.iHandsfreeVolume, + EFalse ); + + // Update volume. + iPendingVolumeOp = &aOperation; + AssignPendingOp( aOperation ); + UpdateVolume(); + + if ( IsPending( ESetAudioVolume ) == KErrNotFound ) + { + // No volume operation ongoing. Need to complete operation by itself. + AsyncCompleteOp(); + } + } + break; + + case KVtEngIncreaseAudioVolume: + { + CVtEngAudioHandler& audioHandler( + static_cast< CVtEngAudioHandler& >( + CVtEngUtility::StateManager()->Handlers().Audio() ) ); + if ( audioHandler.IncreaseVolume() ) + { + UpdateVolume(); + } + } + break; + + case KVtEngDecreaseAudioVolume: + { + CVtEngAudioHandler& audioHandler( + static_cast< CVtEngAudioHandler& >( + CVtEngUtility::StateManager()->Handlers().Audio() ) ); + if ( audioHandler.DecreaseVolume() ) + { + UpdateVolume(); + } + } + break; + + case KVtEngMuteOutgoingAudio: + { + // No Local video if not on target +#if !defined( __WINS__ ) + AddOperation( EMuteAudio, + iSessionCommand->PauseAudioL( *iLocalVideo->AudioSource()) ); +#endif // !WINS + AssignPendingOp( aOperation ); + } + break; + case KVtEngUnmuteOutgoingAudio: + { + // No Local video if not on target +#if !defined( __WINS__ ) + AddOperation ( EUnmuteAudio, + iSessionCommand->ResumeAudioL( *iLocalVideo->AudioSource() ) ); +#endif // !WINS + AssignPendingOp( aOperation ); + } + break; + case KVtEngPrepareViewFinder: + { + const TPckgC& pckg = + static_cast< const TPckgC& > + ( *aOperation.Parameters() ); + const TVtEngRenderingOptions& options = pckg(); + iLocalVideo->SetViewFinderParameters( options ); + } + break; + case KVtEngPrepareRemoteRenderNGA: + { + const TPckgC& pckg = + static_cast< const TPckgC& > + ( *aOperation.Parameters() ); + const TVtEngRenderingOptionsNGA& options = pckg(); + iRemoteVideo->SetRenderingParametersL( options ); + } + break; + case KVtEngPrepareViewFinderDSA: + case KVtEngPrepareRemoteRenderDSA: + { + const TPckgC& pckg = + static_cast< const TPckgC& > + ( *aOperation.Parameters() ); + const TVtEngRenderingOptionsDSA& options = pckg(); + if ( id == KVtEngPrepareViewFinderDSA ) + { + iLocalVideo->SetViewFinderParameters( options ); + } + else if ( iRemoteVideo ) + { + iRemoteVideo->SetRenderingParametersL( options ); + } + } + break; + + case KVtEngPrepareViewFinderDP: + case KVtEngPrepareRemoteRenderDP: + { + const TPckgC& pckg = + static_cast< const TPckgC& > + ( *aOperation.Parameters() ); + const TVtEngRenderingOptionsDP& options = pckg(); + if ( id == KVtEngPrepareViewFinderDP ) + { + iLocalVideo->SetViewFinderParameters( options ); + } + else if ( iRemoteVideo ) + { + iRemoteVideo->SetRenderingParametersL( options ); + } + } + break; + + case KVtEngHandleLayoutChange: + iLocalVideo->HandleLayoutChangeL(); + AssignPendingOp( aOperation ); + break; + + case KVtEngSetSource: + { + __VTPRINT( DEBUG_MEDIA, "MH.set source" ) + MVtEngMedia::TMediaSource source; + TVtEngOpParamUtil::Set( source, + aOperation ); + + iLocalVideo->InitializeOnly( EFalse ); + TOperation startedOp( ENone ); + switch ( source ) + { + case EMediaCamera: + __VTPRINT( DEBUG_MEDIA, "EMediaCamera" ) + iTempProviderInfo = + ( iSelectedCameraId == ESecondaryCamera ) ? + CVtEngLocalVideo::KVtEngProviderCam2 : + CVtEngLocalVideo::KVtEngProviderCam1; + + SetFlag( EProtoContVideoBlankProv ); + startedOp = EnableVideoL( ETrue ); + if ( startedOp == ENone ) + { + // Did nothing + ClearFlag( EProtoContVideoBlankProv ); + } + iLocalVideo->ResumeVideoSending(); + break; + case EMediaCameraPri: + __VTPRINT( DEBUG_MEDIA, "EMediaCameraPri" ) + iTempProviderInfo = CVtEngLocalVideo::KVtEngProviderCam1; + iSelectedCameraId = EPrimaryCamera; + ClearFlag( EProtoContVideoBlankProv ); + break; + case EMediaCameraSec: + __VTPRINT( DEBUG_MEDIA, "EMediaCameraSec" ) + iTempProviderInfo = CVtEngLocalVideo::KVtEngProviderCam2; + iSelectedCameraId = ESecondaryCamera; + ClearFlag( EProtoContVideoBlankProv ); + break; + case EMediaStillImage: + __VTPRINT( DEBUG_MEDIA, "EMediaStillImage" ) + iTempProviderInfo = CVtEngLocalVideo::KVtEngProviderImage; + SetFlag( EProtoContVideoBlankProv ); + startedOp = EnableVideoL( ETrue ); + if ( startedOp == ENone ) + { + // Did nothing + ClearFlag( EProtoContVideoBlankProv ); + } + break; + case EMediaNone: + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "EMediaNone" ) + if ( CVtEngUtility::Settings(). + IsDefaultStillImageDefined() ) + { + iTempProviderInfo = + CVtEngLocalVideo::KVtEngProviderDefaultStillImage; + + SetFlag( EProtoContVideoBlankProv ); + startedOp = EnableVideoL( ETrue ); + if ( startedOp == ENone ) + { + // Did nothing + ClearFlag( EProtoContVideoBlankProv ); + } + } + else + { + iTempProviderInfo = + CVtEngLocalVideo::KVtEngProviderNone; + + ClearFlag( EProtoContVideoBlankProv ); + SetFlag( EProtoPauseVideoBlankProv ); + if ( !IsFlag( + EProtoVideoSourceAdded ) && iProtoState != MVtProtocolCommand::EConnected ) + { + // Set as not enabled video when no sources + __VTPRINT( DEBUG_MEDIA, "MH.set blanked - not ready" ) + EnableVideoL( EFalse ); + } + else + { + // we have "done" something + startedOp = EDisableVideo; + iLocalVideo->PauseVideoSending(); + } + } + break; + default: + __VTPRINT( DEBUG_MEDIA, "invalid source" ) + User::Leave( KErrArgument ); + } + TBool selectOngoing( EFalse ); + ClearFlag( ESourceUpdateNeeded ); + TInt err( KErrNone ); + + // Either pausing or switching between still and camera + if ( !IsFlag( EProtoContVideoBlankProv ) ) + { + TRAP( err, selectOngoing = + iLocalVideo->SelectSourceL( iTempProviderInfo ) ); + __VTPRINT3( DEBUG_MEDIA, " ongoing=%d, op=%d",selectOngoing, + startedOp ) + } + + if ( ( selectOngoing || IsFlag( EProtoContVideoBlankProv ) || + IsFlag( EProtoContVideoBlankInit ) ) && + startedOp != ENone && err == KErrNone ) + { + // Enabling/disabling video started. Set flag that operation + // should be completed only when both callback from Protocol and + // local video (switch done) are complete. + __VTPRINT( DEBUG_MEDIA, "MH.set source 2stage" ) + SetFlag( ETwoStageOperation ); + } + else + { + User::LeaveIfError( err ); + } + AssignPendingOp( aOperation ); + } + break; + case KVtEngPrepareCamera: + { + __VTPRINT( DEBUG_MEDIA, "MH.prepare cam" ) + MVtEngMedia::TPrepareCameraParams params; + if ( aOperation.Parameters() ) + { + TVtEngOpParamUtil< MVtEngMedia::TPrepareCameraParams > + ::Set( params, aOperation ); + } + else + { + params.iMediaSource = EMediaCamera; + params.iInitialize = ETrue; + } + CVtEngLocalVideo::TVtEngProviderType + type( CVtEngLocalVideo::KVtEngProviderCam1 ); + switch ( params.iMediaSource ) + { + case EMediaCamera: + type = ( iSelectedCameraId == ESecondaryCamera ) ? + CVtEngLocalVideo::KVtEngProviderCam2 : + CVtEngLocalVideo::KVtEngProviderCam1; + break; + case EMediaCameraPri: + iSelectedCameraId = EPrimaryCamera; + type = CVtEngLocalVideo::KVtEngProviderCam1; + break; + case EMediaCameraSec: + iSelectedCameraId = ESecondaryCamera; + type = CVtEngLocalVideo::KVtEngProviderCam2; + break; + default: + User::Leave( KErrArgument ); + break; + } + iLocalVideo->SetIsPrepareCameraCalled( ETrue ); + AssignPendingOp( aOperation ); + if ( params.iInitialize ) + { + __VTPRINT( DEBUG_MEDIA, "MH.prepare cam iInitialize TRUE" ) + iLocalVideo->InitializeOnly(); + ClearFlag( ESourceUpdateNeeded ); + iLocalVideo->SelectSourceL( type ); + } + else + { + __VTPRINT( DEBUG_MEDIA, + "MH.prepare cam iInitialize FALSE, complete with KErrNone" ) + AsyncCompleteOp( KErrNone ); + } + } + break; + + case KVtEngSetZoomStep: + { + TInt zoom( 0 ); + TVtEngOpParamUtil::Set( zoom, aOperation ); + iLocalVideo->SetDigitalZoomFactorL( zoom ); + } + break; + + case KVtEngFreeze: + iLocalVideo->FreezeL(); + break; + + case KVtEngUnfreeze: + iLocalVideo->UnfreezeL(); + AssignPendingOp( aOperation ); + break; + + case KVtEngStartViewFinder: + iLocalVideo->StartViewFinderL( ETrue ); + break; + case KVtEngStopViewFinder: + iLocalVideo->StopViewFinder( ETrue ); + break; + case KVtEngStartRenderRemote: + iRemoteVideo->StartVideoL(); + break; + case KVtEngStopRenderRemote: + iRemoteVideo->StopVideoRendering(); + break; + case KVtEngPauseRenderRemote: + iRemoteVideo->PauseVideoL(); + break; + case KVtEngRequestLastRemoteFrame: + RequestLastRemoteFrame(); + break; + case KVtEngTerminateSession: + AssignPendingOp( aOperation ); + break; + + // Set video quality + case KVtEngSetVideoQuality: + { + TVideoQuality videoQuality( EVideoQualityUndefined ); + TVtEngOpParamUtil< TVideoQuality >::Set( videoQuality, aOperation ); + SetPeerVideoQuality( videoQuality ); + } + break; + + // Initialize share + case KVtEngInitializeShareImage: + { + TShareObjectImageParameters parameters; + TVtEngOpParamUtil< TShareObjectImageParameters >::Set( + parameters, aOperation ); + TBool firstTime = EFalse; + iLocalVideo->InitializeShareImageL( parameters, firstTime ); + AssignPendingOp( aOperation ); + if ( firstTime ) + { + iVideoAction = IsFlag( EProtoVideoTrackPaused ) ? + EVideoActionEnable : EVideoActionNone; + } + } + break; + + // Start share + case KVtEngStartShareImage: + iLocalVideo->StartShareImageL(); + AssignPendingOp( aOperation ); + break; + + // Stop Image sharing + case KVtEngStopShareImage: + { + // If video sending needs to be paused when sharing is stopped + // then do it before doing the actual provider switch. It is + // done before hand to prevent dummy frame sending to receiving + // end (ie. black frame). + const TBool needsPause( iLocalVideo->ShareStoredSource() == + CVtEngLocalVideo::KVtEngProviderNone ); + if ( needsPause ) + { + // With this flag we prevent premature operation + // complete after the pause command has been executed. + iPauseNoCompleteOp = ETrue; + EnableVideoL( EFalse ); + } + // reset the action flag. + iVideoAction = EVideoActionNone; + iLocalVideo->StopShareImageL(); + AssignPendingOp( aOperation ); + } + break; + + default: + User::Leave( KErrNotSupported ); + break; + } + __VTPRINTEXIT( "MH.HandleL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSessionCommandEventL +// Handles command completion in protocol engine. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleSessionCommandEventL( + const TVtCommandResponse& aResponse ) + { + __VTPRINTENTER( "MH.HandleSessionCommandEventL" ) + const TVtCommandType type( aResponse.iCmdType ); + if ( type == EVtCommandGetSDKInfo ) + { + // ignore completely + __VTPRINTEXIT( "MH.HandleSessionCommandEventL" ) + return; + } + const TInt protoCmdId( aResponse.iCmdId ); + const TInt protoResponse( aResponse.iCmdStatus ); + TInt event( KVtEngEventNone ); + __VTPRINT2( DEBUG_MEDIA, "MH.protoComC type=%d", type ) + __VTPRINT3( DEBUG_MEDIA, "MH.protoComC cmdId=%d,response=%d", protoCmdId, protoResponse ) + + CVtEngStateManager* states = CVtEngUtility::StateManager(); + switch ( type ) + { + case EVtCommandGetProtocolState: + break; + case EVtCommandInit://PVT_COMMAND_INIT -> ESetup + { + CVtEngUtility* utils = CVtEngUtility::EngineUtils(); + iSessionCommand = utils->Initializer().GetSessionCommand(); + iRemoteVideo = CVtEngRemoteVideo::NewL( *iSessionCommand, *states ); + iInitialized = ETrue; + iProtoState = MVtProtocolCommand::ESetup; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: ESetup" ) + states->Update(); + + // Get interfaces towards H324 and video encoder + QueryProtoInterfacesL(); + } + break; + case EVtCommandGetProtocolInterface: + { + __VTPRINT2( DEBUG_MEDIA, "MH.protoComC:IF response=%d", protoCmdId ) + if ( protoResponse == KErrNone && + ( iProtoState == MVtProtocolCommand::ESetup || + iProtoState == MVtProtocolCommand::EInitializing || // Allowed to query when initializing also + iProtoState == MVtProtocolCommand::EConnecting || + iProtoState == MVtProtocolCommand::EConnected ) ) + { + __ASSERT_DEBUG( + IsPending( EGet324CtrlInterface ) != KErrNotFound + || IsPending( EGetH263EncInterface ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + + //Check which interface. + if ( MatchResponseToPendingOps( + protoCmdId, EGet324CtrlInterface ) && iH324Config ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:324 IF" ) + iH324Config->SetObserverL ( this ); + + // Create DTMF handler with H324 interface. + CVtEngUtility* utils = CVtEngUtility::EngineUtils(); + TRAP_IGNORE( utils->Initializer().CreateDtmfHandlerL( iH324Config ) ); + + // Set version to protocol -- cannot cause problem +#ifdef VTDEBUG + TRAPD( err, SetVersionInfoL() ); + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA, + "MH.protoComC:324 IF VersionInfo failed=%d", err ) + } +#else + TRAP_IGNORE( SetVersionInfoL() ); +#endif + // Set resolutions to Proto. + SetSupportedResolutions(); + + // Set Fast options + SetFastCsupOptions(); + + SetFlag( EProto324IFAcquired ); + RemoveOperation( protoCmdId ); + states->Update(); + } + else if ( MatchResponseToPendingOps( + protoCmdId, EGetH263EncInterface ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:IF 263 created" ) + iH263Encoder->SetObserverL( this ); + RemoveOperation( protoCmdId ); + } + else + { + // Not supported interface. + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:NOT requested" ) + } + } + else + { + // failed or not in appropriate state + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:query IF fail/incorrect state" ) + RemoveOperation( protoCmdId ); + } + } + break; + + case EVtCommandResume: + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.protoComC Resume" ) + + __ASSERT_DEBUG( + IsPending( EUnmuteAudio ) != KErrNotFound || + IsPending( EEnableVideo ) != KErrNotFound || + IsPending( EEnableVideoInternal ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + + // Was command unmute audio? + const TBool audioEnabled( + MatchResponseToPendingOps( protoCmdId, EUnmuteAudio ) ); + + if ( protoResponse == KErrNone ) + { + if ( audioEnabled ) + { + iLocalVideo->UnMute(); + event = KVtEngAudioUnmuted; + } + else + { + iLocalVideo->ResumeVideoSending(); + } + } + + // Was command enable video? + const TBool videoEnabledByUser( + MatchResponseToPendingOps( protoCmdId, EEnableVideo ) ); + + RemoveOperation( protoCmdId ); + + if ( videoEnabledByUser && IsFlag( ETwoStageOperation ) ) + { + // Two-phase operation (resume + switch, resume completed) + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.video Resume 1st stage" ) + ClearFlag( ETwoStageOperation ); + ClearFlag( ESourceUpdateNeeded ); + iLocalVideo->SelectSourceL( iTempProviderInfo ); + iTempProviderInfo = CVtEngLocalVideo::KVtEngProviderNone; + } + else if ( videoEnabledByUser || audioEnabled ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.video Resume " ) + CompleteOp( protoResponse ); + } + + // Do send an intra message + if ( IsFlag( EProtoVideoTrackPaused ) ) + { + ClearFlag( EProtoVideoTrackPaused ); + if ( IsFlag( EProtoSendIntraFrame ) ) + { + RequestFrame(); + } + } + } + break; + case EVtCommandPause: // Audio or video disable + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.protoComC Pause" ) + __ASSERT_DEBUG( iRequestStatus || + // uninit ongoing, still possible + // to receive callback from protocol + ( IsPending( EMuteAudio ) != KErrNotFound || + IsPending( EDisableVideo ) != KErrNotFound ), + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + + TBool videoDisabled( EFalse ); + + // was command disable audio? + if ( MatchResponseToPendingOps( protoCmdId, EMuteAudio ) ) + { + iLocalVideo->Mute(); + event = KVtEngAudioMuted; + } + else + { + // was command disable video? + videoDisabled = MatchResponseToPendingOps( + protoCmdId, EDisableVideo ); + if ( videoDisabled ) + { + SetFlag( EProtoVideoTrackPaused ); + } + } + RemoveOperation( protoCmdId ); + if ( IsFlag( ETwoStageOperation ) && videoDisabled ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.video pause 1st stage" ) + // First event out of two that DisableVideo video + // is complete (waiting for event from local video). + + if ( !IsPending( EEnableVideo ) ) + { + ClearFlag( ETwoStageOperation ); + } + else + { + // Except if pause was not user originated, i.e + // pause done in the beginning because there is no + // still image to be sent in MT call and video is paused + // (user has not yet allowed video sending). + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.video paused, 2stage NOT CLEARED" ) + } + } + else + { + if ( !iPauseNoCompleteOp ) + { + CompleteOp( protoResponse ); + } + else + { + iPauseNoCompleteOp = EFalse; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.video paused due to share stop, clearing flag" ) + } + } + } + break; + case EVtCommandAddDataSink: + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink"); + if ( protoResponse == KErrNone ) + { + __ASSERT_DEBUG( iRequestStatus || + // uninit ongoing, still possible + // to receive callback from pv2way + ( IsPending( EAddVideoSink ) != KErrNotFound || + IsPending( EAddAudioSink ) != KErrNotFound ), + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.data sink added" ) + + if ( MatchResponseToPendingOps( protoCmdId, EAddVideoSink ) + && ( iRemoteMediaState & EMediaVideoPreparing ) ) + { + // Video sink added + SetFlag( EProtoVideoSinkAdded ); + iRemoteMediaState &= ~EMediaVideoPreparing; + iRemoteMediaState |= EMediaVideo; + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink for VIDEO OK."); + } + else if ( MatchResponseToPendingOps( protoCmdId, EAddAudioSink ) + && ( iRemoteMediaState & EMediaAudioPreparing ) ) + { + // Audio sink added + SetFlag( EProtoAudioSinkAdded ); + iRemoteMediaState &= ~EMediaAudioPreparing; + iRemoteMediaState |= EMediaAudio; + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink for AUDIO OK."); + // DevSound created in Proto => temporary devSound needed + // for making audio routing work can be released now. + CVtEngStateManager* stateManager = + CVtEngUtility::StateManager(); + CVtEngAudioHandler& audioHandler = + static_cast< CVtEngAudioHandler& >( + stateManager->Handlers().Audio() ); + audioHandler.SetRoutingEnablerL( EFalse ); + RequestAudioControllerL(); + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.protoComC invalid" ) + Panic( EVtEngPanicMediaHandlerOpStateFailure ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink FAILED"); + + if ( MatchResponseToPendingOps( protoCmdId, EAddVideoSink ) ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink FAILED, INCOMING VIDEO"); + + iVideoIncomingLogicalChannel.iSameTypeClosingPending = EFalse; + if( iVideoIncomingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iVideoIncomingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding VIDEO, ADDing SINK" ) + AddVideoSink( iVideoIncomingLogicalChannel.iLogicalChannelId ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSink FAILED, INCOMING AUDIO"); + + iAudioIncomingLogicalChannel.iSameTypeClosingPending = EFalse; + if( iAudioIncomingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iAudioIncomingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding AUDIO, ADDing SINK" ) + AddAudioSink( iAudioIncomingLogicalChannel.iLogicalChannelId ); + } + } + } + RemoveOperation( protoCmdId ); + } + break; + case EVtCommandAddDataSource: + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.data source added" ) + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSource"); + if ( protoResponse == KErrNone && + ( iProtoState == MVtProtocolCommand::EConnected || iProtoState == MVtProtocolCommand::EConnecting || iProtoState == MVtProtocolCommand::ESetup ) ) + { + if ( MatchResponseToPendingOps( protoCmdId, EAddVideoSource ) ) + { + SetFlag( EProtoVideoSourceAdded ); + + // This flag was set if channel closed indication + // EVtIndicationClosingTrack was received from Proto. + ClearFlag( EOutVideoChannelClosed ); + + iLocalVideo->VideoChannelOpenedL(); + + CVtEngEventManager::NotifyEvent( + KVtEngMediaOutgoingVideoChannelStatusChanged ); + + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSource for VIDEO OK."); + + // Adjust to normal value after Connect has completed + // so MONA is over. + if( iProtoState == MVtProtocolCommand::EConnected ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: Adjusting I Frame Interval in " ) + __VTPRINT( DEBUG_MEDIA, "LCN: ADD_DATA_SOURCE for Video, Connect has completed earlier." ) + __VTPRINT( DEBUG_MEDIA, "LCN: Normal I-frame rate." ) + + + // Setting I-Frame interval to normal since MONA connections are over. + AddOperation( ESetIFrameInterval, + // I-Frame every 10 second. + iH263Encoder->SetIntraFrameInterval( 100 ) ); + } + else if( iProtoState == MVtProtocolCommand::EConnecting || iProtoState == MVtProtocolCommand::ESetup ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: Adjusting I Frame Interval in " ) + __VTPRINT( DEBUG_MEDIA, "LCN: ADD_DATA_SOURCE for Video, Proto state Connecting." ) + __VTPRINT( DEBUG_MEDIA, "LCN: High I-frame rate" ) + + // MONA negotiations ongoing, I-Frame invertal must be small + AddOperation( ESetIFrameInterval, + // 10 I-Frames every 1 second. + iH263Encoder->SetIntraFrameInterval( 10000 ) ); + } + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.data setting default videoquality" ) + + // Set default frame rate and send indication to peer + if ( !IsFlag( EVideoQualitySetByPeer ) ) + { + SetVideoQualityL( EVideoQualityNormal, EFalse ); + } + + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.data source added check flag" ) + if ( IsFlag( EProtoPauseVideoRequested ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.data source added pausing video" ) + EnableVideoL( EFalse ); + } + } + else if ( MatchResponseToPendingOps( + protoCmdId, EAddAudioSource ) ) + { + SetFlag( EProtoAudioSourceAdded ); + + // This flag was set if channel closed indication + // EVtIndicationClosingTrack was received from PV. + ClearFlag( EOutAudioChannelClosed ); + + CVtEngEventManager::NotifyEvent( + KVtEngMediaOutgoingAudioChannelStatusChanged ); + + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSource for AUDIO OK."); + } + } + + else + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSource FAILED"); + + if ( MatchResponseToPendingOps( protoCmdId, EAddVideoSource ) ) + { + __VTPRINT( DEBUG_MEDIA, "EVtCommandAddDataSource FAILED, OUTGOING VIDEO"); + + iVideoOutgoingLogicalChannel.iSameTypeClosingPending = EFalse; + if( iVideoOutgoingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iVideoOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding VIDEO, ADDing SOURCE" ) + AddVideoSource( iVideoOutgoingLogicalChannel.iLogicalChannelId ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA, "LCN: EVtCommandAddDataSource FAILED, OUTGOING AUDIO"); + + iAudioOutgoingLogicalChannel.iSameTypeClosingPending = EFalse; + if( iAudioOutgoingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iAudioOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding AUDIO, ADDing SOURCE" ) + AddAudioSource( iAudioOutgoingLogicalChannel.iLogicalChannelId ); + } + } + } + + if ( !RemoveOperation( protoCmdId ) ) + { + __ASSERT_DEBUG( iRequestStatus != NULL, + // uninit ongoing, still possible to receive + // callback from protocol + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + } + states->Update(); + break; + } + + case EVtCommandConnect: + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.Connect complete" ) + if ( protoResponse == KErrNone ) + { + __ASSERT_DEBUG( IsPending( EConnectProto ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + RemoveOperation( EConnectProto ); + iProtoState = MVtProtocolCommand::EConnected; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: EConnected" ) + states->Update(); + + // Adjust only if VideoSource adding has compled + if( IsPending( EAddVideoSource ) == KErrNotFound ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: Adjusting I FrameInterval " ) + __VTPRINT( DEBUG_MEDIA, "LCN: after Connect has completed" ) + __VTPRINT( DEBUG_MEDIA, "LCN: Normal I-frame interval." ) + + + // Setting I-Frame interval to normal since MONA connections are over. + AddOperation( ESetIFrameInterval, + // I-Frame every 10 second. + iH263Encoder->SetIntraFrameInterval( 100 ) ); + } + } + else + { + if ( iProtoState == MVtProtocolCommand::EConnecting ) { + // it is possible that we're here because call was hanged up + iProtoState = MVtProtocolCommand::ESetup; + } + RemoveOperation( EConnectProto ); + // connect may have failed due to disconnect request (possible only in debug env?) + if ( iPendingOp && + ( iPendingOp->Command() == KVtEngTerminateSession ) ) + { + __VTPRINT( DEBUG_MEDIA, + "complete KVtEngTerminateSession on connect failure" ) + CompleteOp( KErrNone ); + } + else + { + __VTPRINT( DEBUG_MEDIA, + "request fallback on connect failure" ) + // request fallback from telephony + CVtEngUtility* utils = CVtEngUtility::EngineUtils(); + utils->MediatorCommands().VoiceFallback(); + } + states->Update(); + } + } + break; + case EVtCommandRemoveDataSource: + case EVtCommandRemoveDataSink: + break; + case EVtCommandReset: + { + __ASSERT_DEBUG( IsPending( EDestructProtoPhaseReset ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:RESET complete" ) + RemoveOperation( protoCmdId ); + if ( protoResponse == KErrNone ) + { + iProtoState = MVtProtocolCommand::EIdle; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: EIdle" ) + } + if ( iRequestStatus ) + { + // we're in uninitialization process + // do this even if reset failed! + iLocalVideo->StopViewFinder(); + UninitializeNextStep(); + } + states->Update(); + } + break; + case EVtCommandDeleteProtocolInterface: + { + + // Remove pending operation from list + RemoveOperation( protoCmdId ); + + // Proceed to disconnecting if inetrfaces are free'd + UninitializeNextStep(); + states->Update(); + + break; + } + case EVtCommandDisconnect: + { + __ASSERT_DEBUG( + IsPending( EDestructProtoPhaseDisconnect ) != KErrNotFound || + IsPending( ETerminateSession ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + __VTPRINT( DEBUG_MEDIA, "MH.protoComC:DISCONNECT complete" ) + if ( protoResponse == KErrNone ) + { + iProtoState = MVtProtocolCommand::ESetup; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: ESetup_disconnect" ) + } + + delete iTimer; + iTimer = NULL; + + RemoveOperation( protoCmdId ); + + // If disconnect was requested while connecting we + // have connect operation added. + RemoveOperation( EConnectProto ); + + if ( iRequestStatus ) + { + // continue uninitialization + UninitializeNextStep(); + } + else + { + // complete plain disconnect request from UI + CompleteOp( protoResponse ); + } + states->Update(); + } + break; + case EVtCommandCancelAllCommands: + { + __ASSERT_DEBUG( + IsPending( EUninitializeCancelAllProto ) != KErrNotFound, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + RemoveOperation( protoCmdId ); + + UninitializeNextStep(); + } + break; + default: + { + __VTPRINT( DEBUG_MEDIA, "MH.protoComC Unknown Proto reply" ) + } + break; + } + if ( event != KVtEngEventNone ) + { + CVtEngEventManager::NotifyEvent( event ); + } + __VTPRINTEXIT( "MH.HandleSessionCommandEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSessionInformationalEventL +// Handles event from protocol engine. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleSessionInformationalEventL( + const TVtIndicationEvent& aEvent) + { + __VTPRINTENTER( "MH.InfoEvent" ) + const TInt type( aEvent.iEventType ); + __VTPRINT2( DEBUG_MEDIA, "MH.protoHIE type=%d", type ) + + TVtIndicationEvent& event = + const_cast(aEvent); + const TUint8* buffer = event.iLocalBuffer; + + if ( buffer || type == EVtIndicationDisconnect ) + { + TBool video( EFalse ); + TBool audio( EFalse ); + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE inbound") + if ( type != EVtIndicationDisconnect && + type != EVtIndicationUserInputCapability ) + { + switch ( buffer[0] ) + { + case EVtAudio: + audio = ETrue; + break; + case EVtVideo: + video = ETrue; + break; + case EVtControl: + case EVtData: + case EVtMediaNone: + __VTPRINTEXIT( "MH.InfoEvent" ) + return; + + default: + break; + + } + } + + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE acting according" ) + TInt event( KVtEngEventNone ); + switch ( type ) + { + case EVtIndicationIncomingTrack: + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE EVtIndicationIncomingTrack" ) + if ( video ) + { + TInt tempID = *((TInt*)(buffer+4)); + __VTPRINT2( DEBUG_MEDIA, "LCN: MH.protoHIE INCOMING VIDEO:%d", tempID ) + + if( !iVideoIncomingLogicalChannel.iSameTypeClosingPending ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE InTrack VIDEO, ADDing SINK" ) + AddVideoSink( tempID ); + } + else + { + // Store old value since ID will change when we get outgoing track indication + iVideoIncomingLogicalChannel.iLogicalChannelIdClosing = iVideoIncomingLogicalChannel.iLogicalChannelId; + iVideoIncomingLogicalChannel.iSameTypeChannelReadyToOpen = ETrue; + } + + // Store new LCN ID. + iVideoIncomingLogicalChannel.iLogicalChannelId = tempID; + } + else if ( audio ) + { + TInt tempID = *((TInt*)(buffer+4)); + __VTPRINT2( DEBUG_MEDIA, "LCN: MH.protoHIE INCOMING AUDIO:%d", tempID ) + + if( !iAudioIncomingLogicalChannel.iSameTypeClosingPending ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE InTrack AUDIO, ADDing SINK" ) + AddAudioSink( tempID ); + } + else + { + // Store old value since ID will change when we get outgoing track indication + iAudioIncomingLogicalChannel.iLogicalChannelIdClosing = iAudioIncomingLogicalChannel.iLogicalChannelId; + iAudioIncomingLogicalChannel.iSameTypeChannelReadyToOpen = ETrue; + } + + // Store new LCN ID. + iAudioIncomingLogicalChannel.iLogicalChannelId = tempID; + } + } + break; + + case EVtIndicationOutgoingTrack: + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE EVtIndicationOutgoingTrack" ) + if ( video ) + { + TInt tempID = *((TInt*)(buffer+4)); + __VTPRINT2( DEBUG_MEDIA, "LCN: MH.protoHIE OUTGOING VIDEO ID:%d", tempID ) + + if( !iVideoOutgoingLogicalChannel.iSameTypeClosingPending ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE OutTrack VIDEO, ADDing SOURCE" ) + AddVideoSource( tempID ); + } + else + { + // Store old value since ID will change when we get outgoing track indication + iVideoOutgoingLogicalChannel.iLogicalChannelIdClosing = iVideoOutgoingLogicalChannel.iLogicalChannelId; + iVideoOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = ETrue; + } + + // Store new LCN ID. + iVideoOutgoingLogicalChannel.iLogicalChannelId = tempID; + } + else if ( audio ) + { + + TInt tempID = *((TInt*)(buffer+4)); + __VTPRINT2( DEBUG_MEDIA, "LCN: MH.protoHIE OUTGOING AUDIO:%d", tempID ) + + if( !iAudioOutgoingLogicalChannel.iSameTypeClosingPending ) + { + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE OutTrack AUDIO, ADDing SOURCE" ) + AddAudioSource( tempID ); + } + else + { + // Store old value since ID will change when we get outgoing track indication + iAudioOutgoingLogicalChannel.iLogicalChannelIdClosing = iAudioOutgoingLogicalChannel.iLogicalChannelId; + iAudioOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = ETrue; + } + + // Store new LCN ID. + iAudioOutgoingLogicalChannel.iLogicalChannelId = tempID; + } + } + break; + + case EVtIndicationClosingTrack: + { + + TUint8 direction = buffer[0]; + TInt tempID = *((TInt*)(buffer+4)); + + __VTPRINT3( DEBUG_MEDIA, "LCN: MH.protoHIE PEVtIndicationClosingTrack ID:%d, dir:%d", tempID, direction ) + + if( direction == EVtIncoming ) + { + if( tempID == iVideoIncomingLogicalChannel.iLogicalChannelId ) + { + iVideoIncomingLogicalChannel.iSameTypeClosingPending = ETrue; + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSING INCOMING VIDEO" ) + } + else + { + iAudioIncomingLogicalChannel.iSameTypeClosingPending = ETrue; + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSING INCOMING AUDIO" ) + } + } + else + { + TInt uiEvent; + if( tempID == iVideoOutgoingLogicalChannel.iLogicalChannelId ) + { + SetFlag( EOutVideoChannelClosed ); + iVideoOutgoingLogicalChannel.iSameTypeClosingPending = ETrue; + uiEvent = KVtEngMediaOutgoingVideoChannelStatusChanged; + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSING OUTGOING VIDEO" ) + } + else + { + SetFlag( EOutAudioChannelClosed ); + iAudioOutgoingLogicalChannel.iSameTypeClosingPending = ETrue; + uiEvent = KVtEngMediaOutgoingAudioChannelStatusChanged; + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSING OUTGOING AUDIO" ) + } + CVtEngEventManager::NotifyEvent( uiEvent ); + } + } + break; + + case EVtIndicationCloseTrack: + { + + TInt tempID = *((TInt*)(buffer+4)); + + TUint8 direction = buffer[0]; + + __VTPRINT3( DEBUG_MEDIA, "LCN: MH.protoHIE EVtIndicationCloseTrack ID:%d, dir:%d", tempID, direction ) + + if( direction == EVtIncoming ) + { + if( iVideoIncomingLogicalChannel.iLogicalChannelId == tempID || + ( iVideoIncomingLogicalChannel.iSameTypeClosingPending && + tempID == iVideoIncomingLogicalChannel.iLogicalChannelIdClosing ) + ) + { + iVideoIncomingLogicalChannel.iSameTypeClosingPending = EFalse; + iRemoteMediaState &= ~EMediaVideo; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSE INCOMING VIDEO" ) + + if( iVideoIncomingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iVideoIncomingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding VIDEO, ADDing SINK" ) + AddVideoSink( iVideoIncomingLogicalChannel.iLogicalChannelId ); + } + } + else + { + iAudioIncomingLogicalChannel.iSameTypeClosingPending = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSE INCOMING AUDIO" ) + + if( iAudioIncomingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iAudioIncomingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding AUDIO, ADDing SINK" ) + AddAudioSink( iAudioIncomingLogicalChannel.iLogicalChannelId ); + } + } + } + else + { + if( iVideoOutgoingLogicalChannel.iLogicalChannelId == tempID || + ( iVideoOutgoingLogicalChannel.iSameTypeClosingPending && + tempID == iVideoOutgoingLogicalChannel.iLogicalChannelIdClosing ) + ) + { + iVideoOutgoingLogicalChannel.iSameTypeClosingPending = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSE OUTGOING VIDEO" ) + + if( iVideoOutgoingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iVideoOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding VIDEO, ADDing SOURCE" ) + AddVideoSource( iVideoOutgoingLogicalChannel.iLogicalChannelId ); + } + } + else + { + iAudioOutgoingLogicalChannel.iSameTypeClosingPending = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE CLOSE OUTGOING AUDIO" ) + + if( iAudioOutgoingLogicalChannel.iSameTypeChannelReadyToOpen ) + { + iAudioOutgoingLogicalChannel.iSameTypeChannelReadyToOpen = EFalse; + + __VTPRINT( DEBUG_MEDIA, "LCN: MH.protoHIE delayed adding AUDIO, ADDing SOURCE" ) + AddAudioSource( iAudioOutgoingLogicalChannel.iLogicalChannelId ); + } + } + } + } + break; + case EVtIndicationResumeTrack: + __VTPRINT2( DEBUG_MEDIA, "MH.protoHIE X is resumed %d", buffer[1] ) + if ( buffer[1] == EVtIncoming ) // Only for remote + { + if ( video ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE video resumed" ) + event = KVtEngRemoteVideoResumed; + ClearFlag( EProtoVideoTrackPaused ); + } + else if ( audio ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE audio resumed" ) + event = KVtEngRemoteAudioResumed; + ClearFlag( EProtoAudioTrackPaused ); + } + } + break; + case EVtIndicationPauseTrack: + __VTPRINT2( DEBUG_MEDIA, "MH.protoHIE X is paused %d", buffer[1] ) + if ( buffer[1] == EVtIncoming ) // Only for remote + { + if ( audio ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE audio paused" ) + SetFlag( EProtoAudioTrackPaused ); + event = KVtEngRemoteAudioPaused; + } + else if ( video ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoHIE video paused" ) + SetFlag( EProtoVideoTrackPaused ); + event = KVtEngRemoteVideoPaused; + } + } + break; + case EVtIndicationDisconnect: + { + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "MH.protoHIE PID" ) + + // Fix for disconnecting remote (bearer). Engine + // needs to send KVtEngRemoteDisconnect event to UI to notify + // UI that call can not be hangup! + CVtEngEventManager::NotifyEvent( KVtEngRemoteDisconnect ); + + delete iTimer; + iTimer = NULL; + CVtEngStateManager* states = CVtEngUtility::StateManager(); + iProtoState = MVtProtocolCommand::ESetup; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: ESetup_indi_disconnect" ) + states->Update(); + if ( iPendingOp && + ( iPendingOp->Command() == KVtEngTerminateSession || + iPendingOp->Command() == KVtEngResetEngine ) ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.protoHIE PID PO", iPendingOp->Command() ) + // Complete only KVtEngTerminateSession, if KVtEngResetEngine + // is pending complete it after uninitialisation is finalised. + if ( iPendingOp->Command() == KVtEngTerminateSession ) + { + CompleteOp( KErrNone ); + } + } + else + { + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "MH.protoHIE PID RO") + UninitializeNextStep(); + } + } + break; + default: + break; + } + if ( KVtEngEventNone != event ) + { + CVtEngEventManager::NotifyEvent( event ); + } + } + __VTPRINTEXIT( "MH.InfoEvent" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSessionErrorEventL +// Handles error event from protocol engine. +// ----------------------------------------------------------------------------- +// +#ifdef VTDEBUG +void CVtEngMediaHandler::HandleSessionErrorEventL( const TVtErrorEvent& aEvent ) +#else +void CVtEngMediaHandler:: + HandleSessionErrorEventL( const TVtErrorEvent& /* aEvent */ ) +#endif // VTDEBUG + { + // Must have an implementation. + __VTPRINT2( DEBUG_MEDIA, "MH.protoHEE,%d", aEvent.iEventType ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSettingChangedL +// Handles still image setting change. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleSettingChangedL( + CVtEngSettings::TSettingId aId, + const TDesC& /*aValue*/ ) + { + __VTPRINTENTER( "MH.HandleSettingChangedL" ) + if ( aId == CVtEngSettings::ESelectVolume || + aId == CVtEngSettings::EHandsetVolume || + aId == CVtEngSettings::EHandsfreeVolume ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.volChgd %d", aId ) + UpdateVolume(); + + if ( aId == CVtEngSettings::EHandsetVolume || + aId == CVtEngSettings::EHandsfreeVolume ) + { + CVtEngEventManager::NotifyEvent( + KVtEngAudioOutputVolumeChanged ); + } + } + else if ( aId == CVtEngSettings::EStillImage || + aId == CVtEngSettings::EStillImagePath ) + { + __VTPRINT( DEBUG_MEDIA, "MH.stillChgd" ) + + TShareObjectState shareState; + GetObjectSharingState( shareState ); + if ( shareState == EInitializingShareImage || + shareState == ESharingImage ) + { + iLocalVideo->SettingsChanged(); + return; + } + + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = + settings.Config(); + + const CVtEngLocalVideo::TVtEngProviderType + activeProvider( iLocalVideo->ActiveProvider() ); + if ( config.iVideo.iImageIsValid ) + { + __VTPRINT( DEBUG_GEN, "MH.HSC valid" ) + EnableVideoL( ETrue ); + // if still image is not active we should only + // initialize it, not start after initialization. + const TBool initOnly( activeProvider == + CVtEngLocalVideo::KVtEngProviderCam1 || + activeProvider == CVtEngLocalVideo::KVtEngProviderCam2 || + activeProvider == + CVtEngLocalVideo::KVtEngProviderShareImage ); + iLocalVideo->InitializeOnlyEx( initOnly ); + TRAPD( err,iLocalVideo->SetStillImageL( !initOnly ) ); + if ( err == KErrNotReady ) + { + __VTPRINT( DEBUG_GEN, "MH.HSC waiting...") + // Another switch ongoing, wait until it is done. + } + } + else + { + __VTPRINT( DEBUG_GEN, "MH.HSC invalid" ) + __VTPRINT2( DEBUG_MEDIA, "MH.HSC provider=", activeProvider ) + if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) + { + __VTPRINT( DEBUG_MEDIA, "MH.SetDefaultStillImageL" ) + if ( activeProvider == CVtEngLocalVideo::KVtEngProviderImage ) + { + iLocalVideo->SetDefaultStillImageL(); + } + } + else + { + if( activeProvider != + CVtEngLocalVideo::KVtEngProviderCam1 && + activeProvider != CVtEngLocalVideo::KVtEngProviderCam2 ) + { + EnableVideoL( EFalse ); + } + __VTPRINT( DEBUG_MEDIA, "MH.tStillImageL" ) + iLocalVideo->SetStillImageL( ETrue ); + } + + } + } + else + { + // Do nothing, but satisfy lint. + __VTPRINT2( DEBUG_MEDIA, "MH.HSC not handled=%d", aId ) + } + __VTPRINTEXIT( "MH.HSC" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::InitializeL +// Initializes settings listeners. +// Sets still image and initializes default provider. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::InitializeL( TRequestStatus& aStatus ) + { + __VTPRINTENTER( "MH.InitializeL" ) + // configure still image + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.NotifyChangeL( CVtEngSettings::EStillImage, *this ); + settings.NotifyChangeL( CVtEngSettings::EStillImagePath, *this ); + settings.NotifyChangeL( CVtEngSettings::ESelectVolume, *this ); + settings.NotifyChangeL( CVtEngSettings::EHandsetVolume, *this ); + settings.NotifyChangeL( CVtEngSettings::EHandsfreeVolume, *this ); + + const CVtEngSettings::TVtEngVideoCallConfig& config = settings.Config(); + TInt err( KErrNotFound ); + if ( config.iVideo.iImageIsValid ) + { + // first step initialize still, when that is complete, initialize blank + TRAP( err, iLocalVideo->SetStillImageL( ETrue ) ); + if ( err == KErrNone ) + { + iVSInitState = EStateInitStillImage; + iRequestStatus = &aStatus; + } + } + if ( err != KErrNone ) + { + // Still provider init failed -> initialize blank + InitializeProviderL( aStatus ); + } + __VTPRINTEXIT( "MH.InitializeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CancelInitialize +// Sets initialization state as cancelled. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::CancelInitialize() + { + __VTPRINTENTER( "MH.CancelInitialize" ) + iVSInitState = EStateInitCanceled; + __VTPRINTEXIT( "MH.CancelInitialize" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::InitializeProviderL +// Initializes default blank provider. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::InitializeProviderL( TRequestStatus& aStatus ) + { + __VTPRINTENTER( "MH.InitializeProviderL" ) + iLocalVideo->InitializeL(); + iVSInitState = EStateInitProvider; + iRequestStatus = &aStatus; + __VTPRINTEXIT( "MH.InitializeProviderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::Uninitialize +// Frees all resources. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::Uninitialize( TRequestStatus& aStatus ) + { + __VTPRINTENTER( "MH.Uninitialize" ) + ClearFlag( ETwoStageOperation ); + ClearFlag( ESourceUpdateNeeded ); + iRequestStatus = &aStatus; + if ( iProtoState == MVtProtocolCommand::EDisconnecting ) + { + // Protocol is disconnecting if + // 1) bearer was lost (and videoteleng issued disconnect on protocol), or + // 2) protocol issued disconnect due unrecoverable error or disconnect + // request from remote terminal. + // And now UI requested 'reset engine' while performing disconnect. + // When disconnecting is complete check if iRequestStatus + // is not null AND iInitialized is ETrue. + // If so, Uninitialize has been called (UI requested reset). + + StopRendering(); + __VTPRINT( DEBUG_MEDIA, "MH.UnInit wait for disconnect to complete" ) + __VTPRINTEXIT( "MH.Uninitialize" ) + return; + } + iInitialized = EFalse; + UninitializeNextStep(); + __VTPRINTEXIT( "MH.Uninitialize" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::UninitializeNextStep +// Goes to next step in uninitialization +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::UninitializeNextStep( ) + { + __VTPRINTENTER( "MH.UninitializeNextStep" ) + StopRendering(); + + TOperation op( ENone ); + + // CancelAllProtoCommands is no op if nothing to cancel or already pending. + // However, then op is still assigned with EUninitializeCancelAllProto to + // indicate it is pending and we must wait for it to complete. + CancelAllProtoCommands( op ); + + if ( op == ENone ) // Cancellation is not pending + { + __VTPRINT2( DEBUG_MEDIA, "next step protostate=%d", iProtoState ) + switch ( iProtoState ) + { + case MVtProtocolCommand::EConnected: + case MVtProtocolCommand::EConnecting: + op = EDestructProtoPhaseDisconnect; + break; + case MVtProtocolCommand::ESetup: + // In EInitializing state operation is waited to complete. See + // CVtEngInitializer::ContinueOrRetry op==EReset and iStep==EInitProto + + if( iH324Config || iH263Encoder ) + { + // First remove interfaces, after completion perform reset + op = ERemove324CtrlInterface; + break; + } + + // If interfaces are already released or not even reserved, go to Reset. + op = EDestructProtoPhaseReset; + break; + case MVtProtocolCommand::EResetting: + // Reset ongoing, wait for it to complete + __VTPRINT( DEBUG_MEDIA, "MH.UnInit resetting" ) + break; + case MVtProtocolCommand::EIdle: + op = ERemove324CtrlInterface; + __VTPRINT( DEBUG_MEDIA, "MH.UnInit idling" ) + break; + default: + __VTPRINT( DEBUG_MEDIA, "MH.UnInit invalid state" ) + break; + } + if ( op != ENone ) + { + TRAPD( err, ContinueUninitializeL( op ) ); + if ( err != KErrNone ) + { + if ( iRequestStatus ) + { + User::RequestComplete( iRequestStatus, err ); + iRequestStatus = NULL; + } + else + { + // Infinite waiting for end state! + __VTPRINT( DEBUG_MEDIA, "MH. dead end!" ) + Panic( EVtEngPanicDisconnectTimerExpired ); + } + __VTPRINT2( DEBUG_MEDIA, "next step err=%d", err ) + } + } + } + __VTPRINTEXIT( "MH.UninitializeNextStep" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ContinueUninitializeL +// Completes uninitialization: +// does disconnecting, deletes members. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::ContinueUninitializeL( + const TOperation aOp ) + { + __VTPRINTENTER( "MH.ContinueUninitializeL" ) + __VTPRINT2( DEBUG_MEDIA, "MH.ContUn op=%d", aOp) + switch ( aOp ) + { + case EDestructProtoPhaseDisconnect: // causes DisconnectL on protocol + __VTPRINT2( DEBUG_MEDIA, "MH.ContUn EDestructProtoPhaseDisconnect iProtoState=%d", iProtoState ) + + // Disconnecting only allowed in Connecting and Connected state. + if( iProtoState == MVtProtocolCommand::EConnecting || iProtoState == MVtProtocolCommand::EConnected ) + { + DisconnectProtoL(); + if ( iProtoState == MVtProtocolCommand::EDisconnecting ) { + // started succefully disconnecting + break; + } + } + // fall through if state was not proper was disconnect + case EDestructProtoPhaseReset: // causes ResetL on protocol + + ResetProto2WayL(); + if ( iProtoState == MVtProtocolCommand::EResetting ) + { + break; + } + // fall through if state was not proper for reset + case ERemove324CtrlInterface: + { + __VTPRINT( DEBUG_MEDIA, "MH.ContUn ERemove324CtrlInterface" ) + const TBool extCmdPending( ExtensionCommandsPending() ); + if ( !extCmdPending && ( iH324Config || iH263Encoder ) ) + { // no pending extension commands, interfaces can be released + // this is no-op if already released + ReleaseProtoInterfacesL(); + break; + } + if( extCmdPending || + IsPending( ERemove324CtrlInterface ) != KErrNotFound || + IsPending( ERemoveH263EncInterface ) != KErrNotFound ) + { + // Interface releasing has not completed yet, need to wait + // until proceeding ahead. + break; + } + } + // fall through if interfaces are released + case EDestructSwitchBlank: + { + __VTPRINT( DEBUG_MEDIA, "MH.ContUn EDestructSwitchBlank" ) + // provider must be selected to something else that + // is not deleted + const CVtEngLocalVideo::TVtEngProviderType + activeProvider( iLocalVideo->ActiveProvider() ); + if ( activeProvider != CVtEngLocalVideo::KVtEngProviderNone ) + { + iLocalVideo->SelectSourceL( CVtEngLocalVideo::KVtEngProviderNone ); + iVSInitState = EStateWaitingProviderChangeForUninit; + break; + } + // blank provider already active so continue + iVSInitState = EInitStateNone; + } + // fall thru + case EDestructInternals: + __VTPRINT( DEBUG_MEDIA, "MH.ContUn EDestructInternals" ) + iLocalVideo->Reset(); + delete iRemoteVideo; + iRemoteVideo = NULL; + if ( iRequestStatus ) + { + User::RequestComplete( iRequestStatus, KErrNone ); + iRequestStatus = NULL; + } + break; + default: + // Should not happen + Panic( EVtEngPanicUnInitIncorrectOperation ); + break; + } + + __VTPRINTEXIT( "MH.ContinueUninitializeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::StopRendering +// Stops all rendering. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::StopRendering() + { + __VTPRINTENTER( "MH.StopRendering" ) + if ( iLocalVideo ) + { + iLocalVideo->StopViewFinder(); + } + if ( iRemoteVideo ) + { + iRemoteVideo->StopVideoRendering(); + } + __VTPRINTEXIT( "MH.StopRendering" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::UpdateVolume +// Updates volume values. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::UpdateVolume() + { + __VTPRINTENTER( "MH.UpdateVolume" ) + if ( iUpdateVolumeAllowed && IsPending( ESetAudioVolume ) == KErrNotFound ) + { + CVtEngSettings& settings = CVtEngUtility::Settings(); + + TInt volume( 0 ); + TInt err( settings.GetVolume( volume, + settings.CurrentVolume(), ETrue ) ); + if ( err != KErrNone ) + { + volume = settings.MinVolume(); + } + + SetVolume( volume ); + } + else + { + iUpdateVolumeRequired = ETrue; + } + __VTPRINTEXIT( "MH.UpdateVolume" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AutoEnableVideo +// Enables video when primary camera becomes available while blank provider +// is active (i.e. video is disabled). This should not be called in other +// occations. Difference to EnableVideoL is that callback doesn't try to +// complete pending request to UI (that usually is different request than this). +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AutoEnableVideo( TBool aEnable ) + { + __VTPRINTENTER( "MH.AutoEnableVideo" ) + __VTPRINT( DEBUG_MEDIA, "MH.AutoEnableVideo" ) + TOperation op( EDisableVideoInternal ); + if ( aEnable ) + { + op = EEnableVideoInternal; + } + TRAPD( err, EnableVideoL( aEnable, op ) ); + __VTPRINTEXITR( "MH.AutoEnableVideo %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::FinalizeUninitialization +// Deletes protocol. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::FinalizeUninitialization() + { + __VTPRINTENTER( "MH.FinalUninit" ) + if ( iSessionCommand ) + { + iAudioCtrl = NULL; + TInt err( KErrNone ); + + // Delete the config interface + TRAP( err, + { + if ( iSessionCommand ) + { + VTProtocolFactory::DeleteSessionCommand( iSessionCommand ); + iSessionCommand = NULL; + } + + // Trapped to log the possible error + __VTPRINT( DEBUG_MEDIA, "MH.Deleted Terminal" ) + } ); + __VTPRINT2( DEBUG_MEDIA, "MH.Deletion complete=%d", err ) + iSessionCommand = NULL; + iProtoStateFlags = 0; + iProtoState = MVtProtocolCommand::EIdle; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: EIdle uninit" ) + if ( iPendingOp && + iPendingOp->Command() == KVtEngTerminateSession ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.FinalUninit comp TerminateSession=%d", + iPendingOp->Command()) + CompleteOp( KErrNone ); + } + else if ( iPendingOp ) { + __VTPRINT2( DEBUG_MEDIA, "MH.FinalUninit comp =%d", + iPendingOp->Command() ) + delete iPendingOp; + } + iPendingOp = NULL; + } + iPendingOps->Reset(); + __VTPRINTEXIT( "MH.FinalUninit" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ResetProto2WayL +// Resets protocol engine. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::ResetProto2WayL() + { + __VTPRINTENTER( "MH.ResetProto2WayL" ) + __ASSERT_ALWAYS( iProtoState == MVtProtocolCommand::ESetup, + Panic( EVtEngPanicMediaHandlerOpStateFailure ) ); + + __VTPRINT( DEBUG_MEDIA, "MH. Calling ResetL on Proto" ) + iUpdateVolumeAllowed = EFalse; + TInt cmdId = iSessionCommand->ResetProtocolL(); + if ( cmdId > 0 ) + { + // Add the operation if ok + AddOperation( EDestructProtoPhaseReset, cmdId, EFalse ); + iProtoState = MVtProtocolCommand::EResetting; + } + else + { + __VTPRINT( DEBUG_MEDIA, + "MH.ResetProto2WayL waiting for cancel to complete" ) + } + __VTPRINTEXIT( "MH.ResetProto2WayL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetSelectedCameraId +// Called from Local video when camera has been selected. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetSelectedCameraId( + const TCameraId aId, + TBool aUpdateRequired ) + { + __VTPRINTENTER( "MH.SetSelectedCameraId" ) + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "MH.SetSelectedCameraId id=%d", aId ) + iSelectedCameraId = aId; + // Set flag that switch should be done later if + // engine has not reached proper state + // - but only if active provider is a camera. + if ( aUpdateRequired && iLocalVideo ) + // NULL if called inside CVtEngLocalVideo::ConstructL + { + const CVtEngLocalVideo::TVtEngProviderType + activeProvider( iLocalVideo->ActiveProvider() ); + + if ( activeProvider == CVtEngLocalVideo::KVtEngProviderCam1 || + activeProvider == CVtEngLocalVideo::KVtEngProviderCam2 ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH. ESourceUpdateNeeded flag set" ) + SetFlag( ESourceUpdateNeeded ); + } + } + __VTPRINTEXIT( "MH.SetSelectedCameraId" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleLocalVideoOperationCompleteL +// Asynchronous local video operation is completed in here. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleLocalVideoOperationCompleteL( + const TInt aResult ) + { + __VTPRINTENTER( "MH.LocVidOpComp" ) + __VTPRINT3( DEBUG_MEDIA, "MH.LocVidOpComp res=%d,intOps=%d", + aResult, iPendingOps->Count() ) + __VTPRINT2( DEBUG_MEDIA, "MH.LocVidOpComp state flags=%d", iProtoStateFlags ) + + // Check if video should be paused + if ( IsFlag( EProtoPauseVideoBlankProv ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.LocVidOpComp pause flagged" ) + if ( aResult == KErrNone ) + { + __VTPRINT( DEBUG_MEDIA, "MH.LocVidOpComp pausing" ) + EnableVideoL( EFalse ); + // Not ready yet, clear the two stages and complete in the end + if ( IsFlag( ETwoStageOperation ) && + IsFlag( EProtoContVideoBlankInit ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.LocVidOpComp 1 stage complete" ) + ClearFlag( ETwoStageOperation ); + ClearFlag( EProtoContVideoBlankInit ); + } + ClearFlag( EProtoPauseVideoBlankProv ); + } + } + + if ( iRequestStatus ) + { + if ( iVSInitState == EStateInitStillImage ) + + { // still image initialized, proceed to initializing blank provider + InitializeProviderL( *iRequestStatus ); + __VTPRINTEXIT( "MH.LocVidOpComp" ) + return; + } + else if ( iVSInitState == EStateInitProvider ) + { + __VTPRINT( DEBUG_MEDIA, "MH.LocVidOpComp reqComplete" ) + // Part of media handler initialization + User::RequestComplete( iRequestStatus, aResult ); + iRequestStatus = NULL; + iVSInitState = EInitStateNone; + __VTPRINTEXIT( "MH.LocVidOpComp" ) + return; + } + else if ( iVSInitState == EStateWaitingProviderChangeForUninit ) + { + iVSInitState = EInitStateNone; + iLocalVideo->StopViewFinder(); // ensure view finder is stopped + ContinueUninitializeL( EDestructInternals ); + __VTPRINTEXIT( "MH.LocVidOpComp" ) + return; + } + else if ( iVSInitState == EStateInitCanceled ) + { + // If the request status has been cancelled + // uninitialize VT + ContinueUninitializeL( EDestructSwitchBlank ); + } + } + + // Either complete the operation or remove 2 stage flag. + // If flag removed, the operation will be completed when + // the second stage finalizes. + if ( IsFlag( ETwoStageOperation ) ) + { + SetFlag( EProtoSendIntraFrame ); + ClearFlag( ETwoStageOperation ); + } + else + { + // Send a sync message, if video enabled. + if ( !IsFlag( EProtoVideoTrackPaused ) && + // and + iInitialized && + iProtoState == MVtProtocolCommand::EConnected && + iPendingOp && + iPendingOp->Command() == KVtEngSetSource ) + { + RequestFrame(); + } + // Complete operation only if it is related. We may have received + // KVtEngTerminateSession while prepare/set source is pending and + // cannot complete it! + if ( iPendingOp ) + { + switch( iPendingOp->Command() ) + { + case KVtEngHandleLayoutChange: + case KVtEngPrepareCamera: + case KVtEngSetSource: + case KVtEngUnfreeze: + CompleteOp( aResult ); + break; + + // Image sharing + case KVtEngInitializeShareImage: + __VTPRINT( DEBUG_MEDIA, + "MH.LocVidOpComp KVtEngInitializeShareImage" ) + if ( aResult != KErrNone ) + { + iLocalVideo->ShareError( aResult ); + } + CompleteOp( aResult ); + break; + + case KVtEngStartShareImage: + __VTPRINT( DEBUG_MEDIA, + "MH.LocVidOpComp KVtEngStartShareImage" ) + if ( aResult != KErrNone ) + { + iLocalVideo->ShareError( aResult ); + } + CompleteOp( aResult ); + if ( iVideoAction == EVideoActionEnable ) + { + if ( aResult == KErrNone ) + { + EnableVideoL( ETrue ); + iVideoAction = EVideoActionDisable; + } + else + { + iVideoAction = EVideoActionNone; + } + } + + break; + + case KVtEngStopShareImage: + __VTPRINT( DEBUG_MEDIA, + "MH.LocVidOpComp KVtEngStopShareImage" ) + if ( aResult != KErrNone ) + { + iLocalVideo->ShareError( aResult ); + } + CompleteOp( aResult ); + break; + + default: + break; + } + } + } + __VTPRINTEXIT( "MH.LocVidOpComp" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::Disconnect +// Starts Protocol disconnecting procedure. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::Disconnect() + { + UninitializeNextStep(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SdkInitInfo +// Returns Protocol sdk initialization information. +// ----------------------------------------------------------------------------- +// +TVtInitInfo& CVtEngMediaHandler::SdkInitInfo() + { + return iSdkInitInfo; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ProtoState +// Returns protocol state, maintained by VTEngine. +// Might be out of sync with actual Proto state. +// ----------------------------------------------------------------------------- +// +MVtProtocolCommand::TVtProtocolState CVtEngMediaHandler::ProtoState() + { + return iProtoState; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::Connect +// Sets up connection with remote end. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::Connect() + { + __VTPRINTENTER( "MH.Connect" ) + __VTPRINT( DEBUG_MEDIA, "MH.Connect" ) + TInt err( KErrNotReady ); + if ( ProtoState() == MVtProtocolCommand::ESetup && IsFlag( EProto324IFAcquired ) ) + { + TInt cmdId( 0 ); + __VTPRINT( DEBUG_MEDIA, "MH. Calling ConnectToProtocolL on Proto" ) + TRAP( err, cmdId = iSessionCommand->ConnectToProtocolL( ( ( CVtEngUtility::EngineUtils() )->Initializer() ).GetVtComms() ) ); + if ( err == KErrNone ) + { + const TInt res( AddOperation( EConnectProto, cmdId) ); + if ( res < KErrNone ) + { + err = res; + } + iProtoState = MVtProtocolCommand::EConnecting; + __VTPRINT( DEBUG_MEDIA, "MH.protoComC: EConnecting Connecting" ) + } + } + __VTPRINTEXITR( "MH.Connect err=%d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AddVideoSource +// Adds video source. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AddVideoSource( TUint aChannelId ) + { + __VTPRINTENTER( "MH.AddVideoSource" ) + + if( !MediaAddingValidity() ) + return KErrCancel; + + TInt cmdId( 0 ); + TRAPD( err, cmdId = iSessionCommand->AddVideoSourceL( + aChannelId, *iLocalVideo->Source() ) ); + if ( err == KErrNone ) + { + const TInt res( AddOperation( EAddVideoSource, cmdId ) ); + if ( res >= KErrNone ) + { + iRemoteMediaState |= EMediaVideoPreparing; + } + else + { + err = res; + } + } + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + __VTPRINTEXITR( "MH.AddVideoSource %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AddAudioSource +// Adds audio source. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AddAudioSource( TUint aChannelId ) + { + __VTPRINTENTER( "MH.AddAudioSource" ) + + if( !MediaAddingValidity() ) + return KErrCancel; + + TInt cmdId( 0 ); + TInt err( KErrNone ); + // Only for target compilations. +#if !defined( __WINS__ ) + err = iLocalVideo->CreateAudioSource(); + if ( err == KErrNone ) + { + TRAP( err, cmdId = iSessionCommand->AddAudioSourceL( + aChannelId, *iLocalVideo->AudioSource() ) ); + } +#endif // !__WINS__ +#if defined (__WINS__) + aChannelId = aChannelId; // Remove compilation warnings with CW. +#endif // __WINS__ + + if ( err == KErrNone ) + { + const TInt res( AddOperation( EAddAudioSource, cmdId ) ); + if ( res < KErrNone ) + { + err = res; + } + } + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + if ( IsFlag( ESourceUpdateNeeded ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.AddASource updateProvider" ) + ClearFlag( ESourceUpdateNeeded ); + // Generate event + iLocalVideo->vsProvidersChanged( + iSelectedCameraId == MVtEngMedia::EPrimaryCamera ); + } + __VTPRINTEXITR( "MH.AddAudioSource %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AddVideoSinkL +// Adds video sink. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AddVideoSink( TUint aChannelId ) + { + __VTPRINTENTER( "MH.AddVideoSink" ) + + if( !MediaAddingValidity() ) + return KErrCancel; + + TInt cmdId( 0 ); + TRAPD( err, cmdId = iRemoteVideo->AddVideoSinkL( aChannelId ) ); + if ( err == KErrNone ) + { + const TInt res( AddOperation( EAddVideoSink, cmdId ) ); + if ( res >= KErrNone ) + { + iRemoteMediaState |= EMediaVideoPreparing; + } + else + { + err = res; + } + } + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + __VTPRINTEXITR( "MH.AddVideoSink %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AddAudioSink +// Adds audio sink. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AddAudioSink( TUint aChannelId ) + { + __VTPRINTENTER( "MH.AddAudioSink" ) + + if( !MediaAddingValidity() ) + return KErrCancel; + + TInt cmdId( 0 ); + TRAPD( err, cmdId = iRemoteVideo->AddAudioSinkL( aChannelId ) ); + if ( err == KErrNone ) + { + const TInt res( AddOperation( EAddAudioSink, cmdId ) ); + if ( res >= KErrNone ) + { + iRemoteMediaState |= EMediaAudioPreparing; + } + else + { + err = res; + } + } + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + __VTPRINTEXITR( "MH.AddAudioSink %d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::RemoveOperation +// Removes an operation from stored operations. +// ----------------------------------------------------------------------------- +// +template +TBool CVtEngMediaHandler::RemoveOperation( const T& aOp ) + { + TBool removed( EFalse ); + const TInt pos( IsPending( aOp ) ); + if ( pos != KErrNotFound ) + { + __VTPRINT3( DEBUG_MEDIA, "MH.RemoveOp removed index=%d TOperation=%d", + pos, ( *iPendingOps )[ pos ].iOp ) + iPendingOps->Delete( pos ); + removed = ETrue; + } + return removed; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AddOperation +// Adds operation to operations pending completion. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AddOperation( + const TOperation aOp, + TInt aCmdId, + const TBool aResetExisting ) + { + if ( aResetExisting ) + { + iPendingOps->Reset(); + } + TCmdOpPair opPair; + opPair.iOp = aOp; + opPair.iProtoCmdId = aCmdId; + // this should never leave because SetReserveL called in ConstructL + TRAPD( err, iPendingOps->AppendL( opPair ) ); + if ( err != KErrNone ) + { + CVtEngEventManager::NotifyEvent( KVtEngResourceMemAllocFailure ); + return err; + } + const TInt count( iPendingOps->Count() ); + __VTPRINT3( DEBUG_MEDIA, " MH.op added. op=%d,cmdId=%d", aOp, aCmdId ) + __VTPRINT2( DEBUG_MEDIA, " count=%d", count ) + return ( count - 1 ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::IsPending +// Checks if a command is set to be completed. +// Checking is done based on operation. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::IsPending( const TOperation aOp ) const + { + const TInt count( iPendingOps->Count() ); + for ( TInt i = 0; i < count ; i++ ) + { + if ( aOp == ( *iPendingOps )[ i ].iOp ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.IsPending VT Op index=%d", i ) + return i; + } + } + __VTPRINT( DEBUG_MEDIA, "MH.IsPending VT Op NOT FOUND" ) + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::IsPending +// Checks if a command is set to be completed. +// Checking is done based on command id. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::IsPending( const TInt aCmdId ) const + { + const TInt count( iPendingOps->Count() ); + for ( TInt i = 0; i < count ; i++ ) + { + if ( aCmdId == ( *iPendingOps )[ i ].iProtoCmdId ) + { + __VTPRINT3( DEBUG_MEDIA, "MH.IsPending ProtoCmdId=%d index=%d", + aCmdId, i ) + return i; + } + } + __VTPRINT( DEBUG_MEDIA, "MH.IsPending ProtoCmdId NOT FOUND" ) + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CompleteOp +// Asynchronous command completion. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::CompleteOp( const TInt aResult ) + { + CVtEngOperation* opToComplete = iPendingOp; + TInt err( KErrNotFound ); + if ( opToComplete ) + { + iPendingOp = NULL; + opToComplete->HandleOpComplete( aResult ); + err = KErrNone; + } + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AsyncCompleteOp +// Asynchronous command completion. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::AsyncCompleteOp( const TInt aResult ) + { + iAsyncCallback->Cancel(); + iAsyncCompleteOpResult = aResult; + iAsyncCallback->Start( TCallBack( DoCompleteOp, this ) ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::MatchResponseToPendingOps +// Checks if a response matches corresponding operation. +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::MatchResponseToPendingOps( + const TInt aProtoCmdId, + const TOperation aOperation, + TInt* aIndex ) + { + const TInt index( IsPending( aOperation ) ); + TBool entryFound( EFalse ); + if ( index != KErrNotFound ) + { + const TCmdOpPair opPair = ( *iPendingOps )[index]; + if ( opPair.iProtoCmdId == aProtoCmdId ) + { + entryFound = ETrue; + if ( aIndex ) + { + *aIndex = index; + } + } + } + __VTPRINT2( DEBUG_MEDIA, "MH.MatchRespToOp was found=%d", entryFound ) + return entryFound; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::StartDisconnectTimerL +// Starts the disconnect timer. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::StartDisconnectTimerL() + { + __VTPRINT( DEBUG_MEDIA, "MH. start disc.timer" ) + if ( iTimer == NULL ) + { + TCallBack cb( CVtEngMediaHandler::TimerCallback, NULL ); + iTimer = CPeriodic::NewL( 0 ); + iTimer->Start( KVtEngDisconnectionTimer, + KVtEngDisconnectionTimer, + cb ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::NextUninitStepCallbackL +// Proceeds to next uninitializatioin step asynchronously. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::NextUninitStepCallbackL() + { + __VTPRINTENTER( "MH.NextUninitStepCallbackL" ) + if ( !iNextStepCallback ) + { + // perform asap => high priority + TCallBack cb( CVtEngMediaHandler::UninitCallback, this ); + iNextStepCallback = new ( ELeave ) CAsyncCallBack( + cb, CActive::EPriorityHigh ); + iNextStepCallback->CallBack(); + } + __VTPRINTEXIT( "MH.NextUninitStepCallbackL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::UninitCallback +// Asynch callback method for uninitialization. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::UninitCallback( TAny* aAny ) + { + __VTPRINTENTER( "MH.UninitCallback" ) + CVtEngMediaHandler* handler = static_cast( aAny ); + delete handler->iNextStepCallback; + handler->iNextStepCallback = NULL; + handler->UninitializeNextStep(); + __VTPRINTEXIT( "MH.UninitCallback" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AssignPendingOp +// Assigns operation and completes pending if necessary. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::AssignPendingOp( + CVtEngOperation& aOperation, + TInt aReplaceError ) + { + TInt result = KErrNone; + if ( iPendingOp ) + { + if ( aReplaceError != KErrNone && + // if terminating don't allow other commands + iPendingOp->Command() != KVtEngTerminateSession ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.Assign op replace err=", aReplaceError ) + CompleteOp( aReplaceError ); + // indicate previous operation was "cancelled" (even though it is + // not really cancelled, we still get callback!) + result = KErrCancel; + } + else + { + // not allowed to assign new operation + result = KErrGeneral; + } + } + if ( result != KErrGeneral ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.AssignPendingOp=%d", aOperation.Command() ) + iPendingOp = &aOperation; + } + __VTPRINT2( DEBUG_MEDIA, "MH.AssignPendingOp.res=%d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::DoCompleteOp +// Implementation of command completion. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::DoCompleteOp( TAny* aAny ) + { + CVtEngMediaHandler* self = static_cast< CVtEngMediaHandler* >( aAny ); + self->CompleteOp( self->iAsyncCompleteOpResult ); + self->iAsyncCompleteOpResult = KErrNone; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::GetPendingCommand +// +// ----------------------------------------------------------------------------- +// +TVtEngCommandId CVtEngMediaHandler::GetPendingCommand() + { + if ( iPendingOp ) + { + return iPendingOp->Command(); + } + return KVtEngCommandNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::AssertFlag +// Checks flag's validity. +// ----------------------------------------------------------------------------- +// +#ifdef _DEBUG +void CVtEngMediaHandler::AssertFlag( const TInt aFlag ) const +#else +void CVtEngMediaHandler::AssertFlag( const TInt /* aFlag */ ) const +#endif // _DEBUG + { + __ASSERT_DEBUG( + aFlag == EProtoAudioSourceAdded || + aFlag == EProtoVideoSourceAdded || + aFlag == EProtoAudioSinkAdded || + aFlag == EProtoVideoSinkAdded || + aFlag == EProtoAudioTrackPaused || + aFlag == EProtoVideoTrackPaused || + aFlag == ETwoStageOperation || + aFlag == EProtoPauseVideoRequested || + aFlag == EProtoPauseVideoBlankProv || + aFlag == EProtoContVideoBlankProv || + aFlag == EProtoContVideoBlankInit || + aFlag == ESourceUpdateNeeded || + aFlag == EProtoSendIntraFrame || + aFlag == EProto324IFAcquired || + aFlag == EProtoCancelProtoCmdsOk || + aFlag == EVideoQualitySetByPeer || + aFlag == EOutVideoChannelClosed || + aFlag == EOutAudioChannelClosed, + Panic( EVtEngPanicInvalidFlag ) ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::IsFlag +// Checks if a certain flag is set. +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::IsFlag( const TInt aFlag ) const + { + AssertFlag( aFlag ); + if ( iProtoStateFlags & aFlag ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetFlag +// Sets flag on. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetFlag( const TInt aFlag ) + { + AssertFlag( aFlag ); + iProtoStateFlags |= aFlag; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ClearFlag +// Removes a flag. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::ClearFlag( const TInt aFlag ) + { + AssertFlag( aFlag ); + iProtoStateFlags &= ~aFlag; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetVolume +// Sets volume values to Protocol. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::SetVolume( + const TInt aVolume, + CVtEngOperation* aOperation ) + { + __VTPRINTENTER( "MH.SetVolume" ) + TInt res( KErrNotFound ); + __VTPRINT2( DEBUG_MEDIA, " vol=%d", aVolume ) + if ( iAudioCtrl ) + { + TInt id( 0 ); + // Max volume cannot be zero. + TInt vol( ( CVtEngUtility::Settings().ValidVolume( aVolume ) ) * + ( iProtoMaxVolume / CVtEngUtility::Settings().MaxVolume() ) ); + __VTPRINT2( DEBUG_MEDIA, "CVtEngMediaHandler::SetVolumeL, vol=%d", vol ) + TRAP( res, id = iAudioCtrl->SetAudioVolumeL( vol ) ); + if ( res == KErrNone ) + { + AddOperation( ESetAudioVolume, id ); + if( aOperation ) + { + AssignPendingOp( *aOperation ); + } + } + } + __VTPRINTEXITR( "MH.SetVolume %d", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::RequestAudioControllerL +// Requests controllers for audio output and input +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::RequestAudioControllerL() + { + __VTPRINTENTER( "MH.RequestAudioControllerL" ) + __VTPRINT( DEBUG_MEDIA, "MH.RequestAudioControllerL" ) + __ASSERT_ALWAYS(iSessionCommand, Panic( EVtEngPanicInvalidAudioPointer ) ); + + TInt id( 0 ); + iAudioCtrl = VTProtocolFactory::GetAudioConfigCommandL(iRemoteVideo->AudioSink()); + + if ( !iAudioCtrl ) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + __VTPRINTEXIT( "MH.RequestAudioControllerL Failed" ) + return EFalse; + } + iAudioCtrl->SetObserverL( this ); + + // Get the max value for Protocol volume + TRAPD ( res, id = iAudioCtrl->GetMaxAudioVolumeL( iProtoMaxVolume ) ) ; + __VTPRINT2( DEBUG_MEDIA, "MH.RequestAudioControllerL: err=%d",res ) + if ( res != KErrNone) + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + __VTPRINTEXIT( "MH.RequestAudioControllerL" ) + return EFalse; + } + + res = AddOperation( EGetAudioGetMaxVolume, id ); + if ( res < KErrNone ) // res is index + { + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + __VTPRINT2( DEBUG_MEDIA, "MH.RequestAudioControllerL::res=%d", res ) + } + __VTPRINTEXIT( "MH.RequestAudioControllerL" ) + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSpatialTradeoffIndication +// +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleSpatialTradeoffIndication( + const TUint16 aLogicalChannelId, const TUint8 aTradeOff ) + { + __VTPRINTENTER( "MH.HandleSpatialTradeoffIndication" ) + __VTPRINT3( DEBUG_MEDIA, + "MH.HandleSpatialTradeoffIndication id=%d tradeOff=%d", + aLogicalChannelId, aTradeOff ) + ( void ) aLogicalChannelId; + iVideoQuality.UpdateVideoQuality( iVideoQuality.FromTradeOff( aTradeOff ) ); + __VTPRINTEXIT( "MH.HandleSpatialTradeoffIndication" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleSpatialTradeoffCommandL +// +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleSpatialTradeoffCommandL( + const TUint16, const TUint8 aTradeOff ) + { + __VTPRINTENTER( "MH.HandleSpatialTradeoffCommandL" ) + SetVideoQualityL( iVideoQuality.FromTradeOff( aTradeOff ), EFalse ); + __VTPRINTEXIT( "MH.HandleSpatialTradeoffCommandL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::EnableVideoL +// Enables/Disables video sending. +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TOperation CVtEngMediaHandler::EnableVideoL( + const TBool aEnable, const TOperation aOp ) + { + __VTPRINTENTER( "MH.EnableVideoL" ) + __VTPRINT3( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnableV en=%d state=%d", + aEnable, iProtoState ) + TInt cmdId( 0 ); + TInt err( KErrNone ); + TOperation op( ENone ); + MVtEngMedia::TMediaSource currentSource; + GetSource( currentSource ); + + // Videosource is added and Protocol is in connected state. + if ( IsFlag( EProtoVideoSourceAdded ) && iSessionCommand ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnableV source=%d", + currentSource ) + // Has an actual source been selected. + if ( ( currentSource == EMediaNone ) || ( currentSource == EMediaShare ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnaLocVideo blank" ) + if ( aEnable && IsPending( EEnableVideo) == KErrNotFound ) + { + ClearFlag( EProtoPauseVideoRequested ); + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH. Calling ResumeL on Protocol" ) + TRAP( err, cmdId = iSessionCommand->ResumeVideoL( *iLocalVideo->Source() ) ); + if ( err != KErrNone ) + { + // Log the error and leave, UI handles the rest + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.EnaLocVideo PauseL left=%d", err ) + __VTPRINTEXIT( "MH.EnableVideoL" ) + User::Leave( err ); + } + else + { + op = aOp; + AddOperation( aOp, cmdId ); + } + } + // Video to be paused. + else if( !aEnable && IsPending( EDisableVideo ) ) + { + op = DoPauseVideo(); + } + } + else // camera or still image + { + if ( !aEnable && IsPending( EDisableVideo ) ) + { + // Pause video + op = DoPauseVideo(); + } + } + } + else // Not connected and sources not added yet + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.enavideo not conn" ) + // If we are initializing, then this has to be executed + if ( IsFlag( EProtoContVideoBlankProv ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.enavideo blank cont" ) + ClearFlag( EProtoContVideoBlankProv ); + SetFlag( EProtoContVideoBlankInit ); + } + + if ( aEnable ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnableV clear pending" ) + // Ensure that video sending is enabled in data source. + iLocalVideo->ResumeVideoSending(); + ClearFlag( EProtoPauseVideoRequested ); + } + else + { + iLocalVideo->PauseVideoSending(); + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnableV set pending" ) + SetFlag( EProtoPauseVideoRequested ); + } + } + + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, "MH.EnableV=%d", err ) + __VTPRINTEXITR( "MH.EnableVideoL %d", op ) + return op; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::DoPauseVideo +// Does video pausing. +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TOperation CVtEngMediaHandler::DoPauseVideo() + { + __VTPRINTENTER( "MH.DoPauseVideo" ) + TInt cmdId( 0 ); + TOperation op( ENone ); + __VTPRINT( DEBUG_MEDIA, "MH. Calling PauseL on Protocol" ) + TRAPD( err, cmdId = iSessionCommand->PauseVideoL( *iLocalVideo->Source() ) ); + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.DoPauseVideo PauseL left=%d", err ) + // Remove the 2 stage flag, since PauseL failed. + // Command should be completed. + if( IsFlag( ETwoStageOperation ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + " Disable 2 stage clearance" ) + ClearFlag( ETwoStageOperation ); + } + } + else + { + AddOperation( EDisableVideo, cmdId ); + op = EDisableVideo; + __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.DisaLocVideo PauseL issued" ) + } + ClearFlag( EProtoPauseVideoRequested ); + __VTPRINTEXITR( "MH.DoPauseVideo %d", op ) + return op; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleAudioOutputControlCommandComplete +// Callback function for audio controller commands. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleAudioOutputControlCommandComplete(TInt aId, + TVtAudioOutputControlCommand aCmd, + TAny* /*aContextData*/, + TInt aStatus) + { + __VTPRINTENTER( "MH.HandleAudioOutputControlCommandComplete" ) + __VTPRINT2( DEBUG_MEDIA, "MH.AudioComC CMD=%d", aCmd ) + __VTPRINT2( DEBUG_MEDIA, "MH.AudioComC cmdId=%d", aId ) + __VTPRINT2( DEBUG_MEDIA, "MH.AudioComC stat=%d", aStatus ) + + switch ( aCmd ) + { + case EVtAudioOutputControlGetMaxVolume: + RemoveOperation( aId ); + InitializeVolume(); + break; + case EVtAudioOutputControlSetVolume: + __VTPRINT2( DEBUG_MEDIA, "MH.protoComC SetVolume=%d", + iUpdateVolumeRequired ) + + RemoveOperation( aId ); + + if ( iUpdateVolumeRequired ) + { + iUpdateVolumeRequired = EFalse; + UpdateVolume(); + } + + if ( IsPending( ESetAudioVolume ) == KErrNotFound && + iPendingOp == iPendingVolumeOp ) + { + iPendingVolumeOp = NULL; + CompleteOp( aStatus ); + } + break; + case EVtAudioOutputControlGetBalance: + case EVtAudioOutputControlSetBalance: + case EVtAudioOutputControlGetVolume: + default: + break; + } + __VTPRINTEXIT( "MH.HandleAudioOutputControlCommandComplete" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::InitializeVolume +// Sets the 'beginning' values for volume. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::InitializeVolume() + { + __VTPRINT2( DEBUG_MEDIA, "MH.InitializeVolume: max vol=%d", iProtoMaxVolume ) + iUpdateVolumeAllowed = ETrue; + UpdateVolume(); + if ( iLocalVideo ) + { + iLocalVideo->UnMute(); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::DisconnectProtoL +// Does the disconnecting of Protocol. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::DisconnectProtoL() + { + __VTPRINTENTER( "MH.DisconnectProtoL" ) + __VTPRINT2( DEBUG_MEDIA, "MH.DisconnectProto with Protocol state=%d", + iProtoState ) + TInt cmdId( 0 ); + // The two states that require disconnecting + if ( iProtoState == MVtProtocolCommand::EConnected || + iProtoState == MVtProtocolCommand::EConnecting ) + { + __VTPRINT( DEBUG_MEDIA, "MH. Calling DisconnectFromProtocolL on Protocol" ) + TRAPD( err, cmdId = iSessionCommand->DisconnectFromProtocolL() ); + if ( err == KErrNone ) + { + __VTPRINT( DEBUG_MEDIA, "MH.protoCom: Disconnecting" ) + AddOperation( EDestructProtoPhaseDisconnect, cmdId ); + iProtoState = MVtProtocolCommand::EDisconnecting; + StartDisconnectTimerL(); + } + else + { + // Canceling the disconnect to notify that it has failed + __VTPRINT2( DEBUG_MEDIA, "MH.DisconnectProto erronous=%d", err ) + cmdId = err; + } + } + else { + cmdId = KErrNotSupported; + } + __VTPRINTEXITR( "MH.DisconnectProtoL cmdId=%d", cmdId ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CancelAllProtoCommands +// Cancels all commands pending for execution in Proto. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::CancelAllProtoCommands( TOperation &aOp ) + { + __VTPRINTENTER( "MH.CancelAllProtoCommands" ) + TInt err( KErrNotReady ); + aOp = ENone; + if ( IsPending( EUninitializeCancelAllProto ) != KErrNotFound ) + { + aOp = EUninitializeCancelAllProto; + // Indicate difference from started cancellation with error code. + err = KErrAlreadyExists; + } + else if ( iSessionCommand && iPendingOps && !IsFlag( EProtoCancelProtoCmdsOk ) ) + { + if ( iPendingOps->Count() ) + { + __VTPRINT( DEBUG_MEDIA, "MH. Calling CancelAllCommandsL on Proto" ) + TInt cmdId( 0 ); + TRAP( err, ( cmdId = iSessionCommand->CancelAllCommandsL() ) ); + __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, + "MH.CancelAllProtoCommands cmdId=%d", cmdId ) + if ( cmdId && err == KErrNone ) + { + aOp = EUninitializeCancelAllProto; + SetFlag( EProtoCancelProtoCmdsOk ); + AddOperation( aOp, cmdId ); + } + // completes in CommandCompletedL + } + else { + // mark there's nothing to cancel + SetFlag( EProtoCancelProtoCmdsOk ); + } + } + __VTPRINTEXITR( "MH.CancelAllProtoCommands err=%d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ProtoInitialized +// Proto init completed. +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::ProtoInitialized() const + { + return iSessionCommand ? ETrue : EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TimerCallback +// Callback method for timer expiration. +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::TimerCallback( TAny* /*aAny*/ ) + { + __VTPRINT( DEBUG_MEDIA, "MH.TimerCallback -> PANIC " ) + Panic( EVtEngPanicDisconnectTimerExpired ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetVersionInfoL +// Sets version information to Proto. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetVersionInfoL( ) + { + __VTPRINTENTER( "MH.SetVersionInfoL" ) + + if ( !iH324Config ) + { + __VTPRINT( DEBUG_MEDIA, "MH.SetVersion not ready" ) + User::Leave( KErrNotReady ); + } + + // Current new line character index + TInt index( 0 ); + + // Version information from SysUtil + HBufC* versionInfo16 = HBufC::NewLC( KVtEngSwVersionTextLength ); + + // Pointer to SysUtil versionInfo descriptor. Temporary pointer to + // handle data. + TPtr versionInfoptr16( versionInfo16->Des() ); + + // SW Version and product information buffers to be send to peer. + HBufC8* version = HBufC8::NewLC( KVtEngSwVersionTextLength ); + HBufC8* product = HBufC8::NewLC( KVtEngSwVersionTextLength ); + TPtr8 versionPtr8( version->Des() ); + TPtr8 productPtr8( product->Des() ); + + // Marker for line ending '\n' + const TChar endLine( KVtEngCharacterEndLine ); + + TInt err = ( SysUtil::GetSWVersion( versionInfoptr16 ) ); + if ( err != KErrNone || !versionInfoptr16.Length() ) + { + __VTPRINT2( DEBUG_MEDIA, "MH.SetVersion SU: %d", err ) + __VTPRINTEXIT( "MH.SetVersionInfoL" ) + return; + } +#ifdef VTDEBUG + RDebug::Print( _L("SysUtil::GetSWVersion: %s"), versionInfoptr16.Ptr() ); +#endif + // Construct similar buffer than for version information and get po + HBufC* productInfo16 = versionInfo16->AllocLC(); + TPtr productInfoptr16( productInfo16->Des() ); + + // We assume that format from file is: + // SW version\ndate\nproduct\nmanufacturer + // \n is new line character + + // Find first new line character + index = versionInfo16->Locate( endLine ); + if ( index >= 0 ) + { + // Replace new line character using space. + versionInfoptr16[ index ] = KVtEngCharacterSpace ; + + // Find second new line character, this ends the version information + index = versionInfo16->Locate( endLine ); + if ( index >= 0 ) + { + // Take version information and ignore product info. + versionInfoptr16 = versionInfo16->Left( index ); + + // Take product information and ignore version information. + productInfoptr16 = productInfo16->Mid( index + 1 ); + + // Find the only remaining new line character. + index = productInfoptr16.Locate( endLine ); + + // Replace new line character using space. + productInfoptr16[ index ] = KVtEngCharacterSpace; + + // Copy 16 bit descriptors to 8 bit descriptors and append + // zero terminators. + versionPtr8.Copy( versionInfoptr16 ); + versionPtr8.ZeroTerminate(); + productPtr8.Copy( productInfoptr16 ); + productPtr8.ZeroTerminate(); + + // Set the info to Protocol +#ifdef VTDEBUG + RDebug::Print(_L("MH.Product: %s" ), productPtr8.Ptr() ); + RDebug::Print(_L("MH.Version: %s" ), versionPtr8.Ptr() ); +#endif //VTDEBUG + + AddOperation( ESetVendorId, + iH324Config->SetVendorId( KVtEngCountryCodeForProto, + KVtEngExtensionForProto, + KVtEngManufacturerForProto, &productPtr8, &versionPtr8 ) ); + } + } + CleanupStack::PopAndDestroy( 4 ); // HBufC's + __VTPRINTEXIT( "MH.SetVersionInfoL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::RequestFrame +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::RequestFrame( ) + { + __VTPRINTENTER( "MH.RequestFrame" ) + if ( !iH263Encoder ) + { + __VTPRINT( DEBUG_MEDIA, "MH.RequestFrame FAILED") + return; + } + AddOperation( ESendIntraframe,iH263Encoder->RequestNextIntraFrame() ); + ClearFlag( EProtoSendIntraFrame ); + + __VTPRINTEXIT( "MH.RequestFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetVideoQualityL +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetVideoQualityL( + const TVideoQuality aVideoQuality, const TBool aSetPeerVideoQuality ) + { + __VTPRINTENTER( "MH.SetVideoQualityL" ) + if ( !iH263Encoder ) + { + __VTPRINT( DEBUG_MEDIA, "MH.SetVideoQualityL FAILED") + return; + } + SetFlag( EVideoQualitySetByPeer ); + TInt protoOperId( iH263Encoder->SetVideoFrameRate( + iVideoQuality.ToFrameRate( aVideoQuality ) ) ); + AddOperation( ESetVideoQuality, protoOperId ); + iVideoQuality.SettingVideoQuality( protoOperId, + aVideoQuality, aSetPeerVideoQuality ); + __VTPRINTEXIT( "MH.SetVideoQualityL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetPeerVideoQuality +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetPeerVideoQuality( const TVideoQuality aVideoQuality ) + { + __VTPRINTENTER( "MH.SetPeerVideoQuality" ) + AddOperation( ESendVTSTO, iH324Config->SendVideoTemporalSpatialTradeoffCommand( + iVideoIncomingLogicalChannel.iLogicalChannelId, + iVideoQuality.ToTradeOff( aVideoQuality ) ) ); + __VTPRINTEXIT( "MH.SetPeerVideoQuality" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleVideoEncoderCommandCompletedL +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleVideoEncoderCommandCompletedL( + const TVtCommandResponse& aResponse ) + { + __VTPRINTENTER( "MH.EncExtCommandCompleted" ) + const TInt type( aResponse.iCmdType ); + const TInt protoCmdId( aResponse.iCmdId ); + const TInt protoResponse( aResponse.iCmdStatus ); + __VTPRINT2( DEBUG_MEDIA, "MH.263 ComC type=%d", type ) + __VTPRINT3( DEBUG_MEDIA, "MH.263 ComC cmdId=%d,response=%d", + protoCmdId, protoResponse ) + + // Find correct entry in iPendingOps based on TOperation because there can + // be several entries with same Protocol cmd id since each Protocol interface has their + // own id allocation and ids may overlap. + TInt index( KErrNotFound ); + TOperation completedOp = ENone; + if ( MatchResponseToPendingOps( protoCmdId, ESendIntraframe, &index ) || + MatchResponseToPendingOps( protoCmdId, ESetIFrameInterval, &index ) || + MatchResponseToPendingOps( protoCmdId, ESetVideoQuality, &index ) ) + { + // TOperation entries in are unique in the array... + const TCmdOpPair pair = (*iPendingOps)[ index ]; + completedOp = pair.iOp; + // ...so remove based on that instead of protoCmdId + RemoveOperation( completedOp ); + } + else + { + __VTPRINT( DEBUG_MEDIA, "MH.EECC ERROR (response to unknown command)" ) + } + if ( completedOp == ESetVideoQuality ) + { + __VTPRINT( DEBUG_MEDIA, "MH.EECC ESetVideoQuality" ) + if( iPendingOp && ( iPendingOp->Command() == KVtEngSetVideoQuality ) ) + { + CompleteOp( protoResponse ); + } + if( protoResponse == KErrNone ) + { + TVtEngVideoQuality::TVQSParams vqp; + + if ( iVideoQuality.SettingSucceeded( protoCmdId, vqp ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.EECC sending vq indication" ) + AddOperation( ESendVTSTO, + iH324Config->SendVideoTemporalSpatialTradeoffIndication( + iVideoOutgoingLogicalChannel.iLogicalChannelId, + iVideoQuality.ToTradeOff( vqp.iValue ) ) ); + if ( vqp.iSetPeer ) + { + __VTPRINT( DEBUG_MEDIA, "MH.EECC setting peer vq" ) + SetPeerVideoQuality( vqp.iValue ); + } + } + } + else + { + iVideoQuality.SettingFailed( protoCmdId ); + } + } + if ( iProtoState == MVtProtocolCommand::EIdle ) + { // Command was complete during uninitialization. + NextUninitStepCallbackL(); + } + __VTPRINTEXIT( "MH.EncExtCommandCompleted" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleVideoEncoderInformationalEventL +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleVideoEncoderInformationalEventL( + const TVtIndicationEvent& aEvent) + { + const TInt type( aEvent.iEventType ); + __VTPRINT2( DEBUG_MEDIA, "MH.263 infoevent=%d", type ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleH324MConfigCommandCompletedL +// +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleH324MConfigCommandCompletedL( + const TVtCommandResponse& aResponse ) + { + __VTPRINTENTER( "MH.HandleH324MConfigCommandCompletedL" ) + const TInt protoCmdId( aResponse.iCmdId ); + const TInt protoResponse( aResponse.iCmdStatus ); + const TInt type( aResponse.iCmdType ); + + __VTPRINT2( DEBUG_MEDIA, "MH.HandleH324MConfigCommandCompletedL type=%d", type ) + __VTPRINT3( DEBUG_MEDIA, "MH.HandleH324MConfigCommandCompletedL cmdId=%d,response=%d", protoCmdId, protoResponse ) + TInt index( KErrNotFound ); + // Find correct entry in iPendingOps based on TOperation because there can + // be several entries with same Protocol cmd id since each Protocol interface has their + // own id allocation and ids may overlap. + if ( MatchResponseToPendingOps( protoCmdId, ESetVendorId, &index ) || + MatchResponseToPendingOps( protoCmdId, ESendVTSTO, &index ) || + MatchResponseToPendingOps( protoCmdId, ESetSupportedResolutions, &index ) || + MatchResponseToPendingOps( protoCmdId, ESetFastCsupOptions, &index ) ) + { + // TOperation entries in are unique in the array... + const TCmdOpPair pair = (*iPendingOps)[ index ]; + // ...so remove based on that instead of protoCmdId + RemoveOperation( pair.iOp ); + } + switch( iProtoState ) + { + case MVtProtocolCommand::EConnected: + { + CVtEngStateManager* stateManager = CVtEngUtility::StateManager(); + + // Check does the received command ID match to command ID that was received + // from Protocol when DTMF was send. + if( stateManager->Handlers().Dtmf().CheckCommandId( protoCmdId ) ) + { + __VTPRINT( DEBUG_MEDIA, "MH.Complete DTMF" ) + stateManager->Handlers().Dtmf().SendComplete( protoResponse ); + } + } + break; + case MVtProtocolCommand::EIdle: // extension command complete + NextUninitStepCallbackL(); + default: + break; + } + + __VTPRINTEXITR( "MH.HandleH324MConfigCommandCompletedL.CommandID %d", aResponse.iCmdId ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::HandleH324MConfigInformationalEventL +// +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::HandleH324MConfigInformationalEventL( + const TVtIndicationEvent& aEvent ) + { + __VTPRINTENTER( "MH.HandleH324MConfigInformationalEventL" ) + + const TInt type( aEvent.iEventType ); + const TUint8* buffer = (const_cast(aEvent)).iLocalBuffer; + + switch(type) + { + case EVtIndicationVideoSpatialTamporalTradeOffIndication: + case EVtIndicationVideoSpatialTamporalTradeOffCommand: + { + TUint16 logicalChannelId = BigEndian::Get16( buffer ); + TUint8 tradeOffValue = buffer[ 2 ]; + __VTPRINT3( DEBUG_MEDIA, "MH.protoHIE.H324 channelId=%d, tradeOff=%d", + logicalChannelId, tradeOffValue ) + if( type == + EVtIndicationVideoSpatialTamporalTradeOffIndication ) + { + HandleSpatialTradeoffIndication( logicalChannelId, + tradeOffValue ); + } + else + { + HandleSpatialTradeoffCommandL( logicalChannelId, + tradeOffValue ); + } + } + break; + + // When remote terminal sends its UII capabilities in TCS we get + // indication from Protocol. If remote does not send UII capas in TCS + // we are obliged to use alphanumeric UIIs as specified by 245 + // spec. Default is IA5String.We get bit pattern from Protocol but + // they are listed below in preferred order of usage. + // The order can be freely chosen. + case EVtIndicationUserInputCapability: + { +#ifdef VTDEBUG + RDebug::Print(_L("Buffer[0]:%d"), buffer[0] ); +#endif // VTDEBUG + __VTPRINT( DEBUG_MEDIA, + "MH.protoHIE UserInput Capability Indication" ) + + CVtEngStateManager* stateManager = + CVtEngUtility::StateManager(); + + // IA5String preferred, it's the simplest and most used in TCSs. + if ( buffer[0] & CVtEngDtmfHandler::EIA5String ) + { + stateManager->Handlers().Dtmf().SetUIISupport( + CVtEngDtmfHandler::EIA5String ); + CVtEngEventManager::NotifyEvent( + KVtEngRemoteUIIIA5StringSupport ); + __VTPRINT( DEBUG_MEDIA, + "KVtEngRemoteUIIIA5StringSupport Support signalled" ) + } + // Basic string is also simple and easy to use, second position. + else if ( buffer[0] & CVtEngDtmfHandler::EBasicString ) + { + stateManager->Handlers().Dtmf().SetUIISupport( + CVtEngDtmfHandler::EBasicString ); + CVtEngEventManager::NotifyEvent( + KVtEngRemoteUIIBasicStringSupport ); + __VTPRINT( DEBUG_MEDIA, + "KVtEngRemoteUIIBasicStringSupport Support signalled" ) + } + // DTMFs are more limited but more interoperable than + // General string. + else if ( buffer[0] & CVtEngDtmfHandler::EDTMFString ) + { + stateManager->Handlers().Dtmf().SetUIISupport( + CVtEngDtmfHandler::EDTMFString ); + CVtEngEventManager::NotifyEvent( KVtEngRemoteUIIDtmfSupport ); + __VTPRINT( DEBUG_MEDIA, + "KVtEngRemoteUIIDtmfSupport Support signalled" ) + } + // General string is the complicated one, priority is + // lowest because of possible diffuculties in remote + // end decoding of string (various number of letter + // combinations). + else if ( buffer[0] & CVtEngDtmfHandler::EGeneralString ) + { + stateManager->Handlers().Dtmf().SetUIISupport( + CVtEngDtmfHandler::EGeneralString ); + CVtEngEventManager::NotifyEvent( + KVtEngRemoteUIIGeneralStringSupport ); + __VTPRINT( DEBUG_MEDIA, + "KVtEngRemoteUIIGeneralStringSupport Support signalled" ) + } + else + { + __VTPRINT( DEBUG_MEDIA, "MH.HIE invalid DTMF" ) + Panic( EVtEngPanicInvalidDtmfState ); + } + } + break; + } + __VTPRINTEXIT( "MH.HandleH324MConfigInformationalEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetSupportedResolutionsL +// Sets supported resolutions to protocol. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetSupportedResolutions() + { + __VTPRINTENTER( "MH.SetSupportedResolutions" ) + __ASSERT_ALWAYS( iH324Config != NULL, Panic( EVtEngPanicInvalidPointer ) ); + + AddOperation( ESetSupportedResolutions, + iH324Config->SetSupportedResolutions( ) ); + __VTPRINTEXIT( "MH.SetSupportedResolutions " ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::SetFastCsupOptions +// Sets supported resolutions to Protocol. +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::SetFastCsupOptions() + { + __VTPRINTENTER( "MH.SetFastCsupOptions" ) + + AddOperation( + ESetFastCsupOptions, + iH324Config->SetFastCsupOptions( ) ); + __VTPRINTEXIT( "MH.SetFastCsupOptions" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CreateExtensionsL +// Creates extension according to API Uid. +// ----------------------------------------------------------------------------- +// +CVtEngExtensionBase* CVtEngMediaHandler::CreateExtensionsL( const TUid& aUid ) + { + __VTPRINTENTER( "MH.CreateExtensionsL" ) + + // if UID is supported camera pref + if ( aUid == KVtEngExtensionCameraPreferences ) + { + __VTPRINT2( DEBUG_GEN, "MH.CreateExtensionsL extension UID=%d", + aUid.iUid ) + + CVtEngExtensionBase* base = reinterpret_cast< CVtEngExtensionBase* > + ( iLocalVideo->CreateCameraPreferencesL() ); + __VTPRINTEXITR( "MH.CreateExtensionsL base [%d]", ( TInt )base ) + return base; + } + +#if defined ( RD_VT_RTF ) + + // if UID is supported R2F + else if ( aUid == KVtEngExtensionRecord2File ) + { + CVtEngExtensionBase* base = reinterpret_cast< CVtEngExtensionBase* > + ( CVtEngRecord2File::NewL() ); + __VTPRINTEXITR( "MH.CreateExtensionsL base [%d]", ( TInt )base ) + return base; + } + // not supported UID + +#endif //RD_VT_RTF + + else + { + __VTPRINTEXITR( "MH.CreateExtensionsL error [%d]", KErrNotSupported ) + User::Leave( KErrNotSupported); + return NULL; + } + } + +// Implementation for TVtEngVideoQuality + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::TVtEngVideoQuality +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TVtEngVideoQuality::TVtEngVideoQuality() + : iCurrent( EVideoQualityNormal ), iParamList( 1 ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::~TVtEngVideoQuality +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TVtEngVideoQuality::~TVtEngVideoQuality() + { + iParamList.Reset(); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::SettingVideoQuality +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::TVtEngVideoQuality::SettingVideoQuality( + TInt aId, const TVideoQuality aValue, TBool aSetPeer ) + { + __VTPRINTENTER( "MH.VQ.SettingVideoQuality" ) + iParamList.Append( TVQSParams( aId, aValue, aSetPeer ) ); + __VTPRINTEXIT( "MH.VQ.SettingVideoQuality" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::VideoQuality +// ----------------------------------------------------------------------------- +// +MVtEngMedia::TVideoQuality + CVtEngMediaHandler::TVtEngVideoQuality::VideoQuality() const + { + __VTPRINTENTER( "MH.VQ.VideoQuality" ) + __VTPRINTEXITR( "MH.VQ.VideoQuality %d", iCurrent ) + return iCurrent; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::IsSetPeer +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::TVtEngVideoQuality::SettingSucceeded( TInt aId, + TVQSParams& aParams ) + { + __VTPRINTENTER( "MH.VQ.SettingSucceeded" ) + TInt index( FindVQSParam( aId ) ); + TBool foundRecord( index != KErrNotFound ); + if ( foundRecord ) + { + aParams = iParamList[ index ]; + iParamList.Remove( index ); + iParamList.Compress(); + } + __VTPRINTEXITR( "MH.VQ.SettingSucceeded %d", foundRecord ) + return foundRecord; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::IsSetPeer +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::TVtEngVideoQuality::UpdateVideoQuality( + const TVideoQuality aVideoQuality ) + { + __VTPRINTENTER( "MH.VQ.UpdateVideoQuality" ) + iCurrent = aVideoQuality; + __VTPRINTEXIT( "MH.VQ.UpdateVideoQuality" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::SettingFailed +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::TVtEngVideoQuality::SettingFailed( TInt aId ) + { + __VTPRINTENTER( "MH.VQ.SettingFailed" ) + TInt index( FindVQSParam( aId ) ); + if ( index != KErrNotFound ) + { + iParamList.Remove( index ); + iParamList.Compress(); + } + __VTPRINTEXITR( "MH.VQ.SettingFailed %d", index ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::FromTradeOff +// ----------------------------------------------------------------------------- +// +MVtEngMedia::TVideoQuality + CVtEngMediaHandler::TVtEngVideoQuality::FromTradeOff( + const TInt aTradeOff ) const + { + __VTPRINTENTER( "MH.VQ.FromTradeOff" ) + TVideoQuality videoQuality; + + // [0 .. KVtEngTradeOffDetailMax] + if( aTradeOff <= KVtEngTradeOffDetailMax ) + { + videoQuality = EVideoQualityDetail; + } + // ]KVtEngTradeOffDetailMax .. KVtEngTradeOffNormalMax] + else if( aTradeOff <= KVtEngTradeOffNormalMax ) + { + videoQuality = EVideoQualityNormal; + } + // ]KVtEngTradeOffNormalMax .. 31] + else + { + videoQuality = EVideoQualityMotion; + } + __VTPRINTEXITR( "MH.VQ.FromTradeOff %d", videoQuality ) + return videoQuality; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::ToFrameRate +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::TVtEngVideoQuality::ToFrameRate( + const TVideoQuality aVideoQuality ) const + { + __VTPRINTENTER( "MH.VQ.ToFrameRate" ) + TInt frameRate( 0 ); + CVtEngSettings& settings = CVtEngUtility::Settings(); + switch( aVideoQuality ) + { + case EVideoQualityDetail: + frameRate = settings.VideoQualityFrameRateConfig().iDetail; + break; + + case EVideoQualityNormal: + frameRate = settings.VideoQualityFrameRateConfig().iNormal; + break; + + case EVideoQualityMotion: + frameRate = settings.VideoQualityFrameRateConfig().iMotion; + break; + + default: + Panic( EVtEngPanicInvalidVideoQualityValue ); + break; + } + __VTPRINTEXITR( "MH.VQ.ToFrameRate %d", frameRate ) + return frameRate; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::ToTradeOff +// ----------------------------------------------------------------------------- +// +TUint8 CVtEngMediaHandler::TVtEngVideoQuality::ToTradeOff( + const TVideoQuality aVideoQuality ) const + { + __VTPRINTENTER( "MH.VQ.ToTradeOff" ) + TUint8 tradeOff( 0 ); + switch( aVideoQuality ) + { + case EVideoQualityDetail: + tradeOff = KVtEngTradeOffDetailMax; + break; + + case EVideoQualityNormal: + tradeOff = KVtEngTradeOffNormalMax; + break; + + case EVideoQualityMotion: + tradeOff = KVtEngTradeOffMotionMax; + break; + + default: + Panic( EVtEngPanicInvalidVideoQualityValue ); + break; + } + __VTPRINTEXITR( "MH.VQ.ToTradeOff %d", tradeOff ) + return tradeOff; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::FindVQSParam +// ----------------------------------------------------------------------------- +// +TInt CVtEngMediaHandler::TVtEngVideoQuality::FindVQSParam( TInt aId ) const + { + __VTPRINTENTER( "MH.VQ.FindVQSParam" ) + TInt result( KErrNotFound ); + for ( TInt i = iParamList.Count() - 1; i >= 0; i-- ) + { + if ( iParamList[ i ].iId == aId ) + { + result = i; + break; + } + } + __VTPRINTEXITR( "MH.VQ.FindVQSParam %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::TVQSParams::TVQSParams +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TVtEngVideoQuality::TVQSParams::TVQSParams() + { + Mem::FillZ( this, sizeof( TVQSParams ) ); + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::TVtEngVideoQuality::TVQSParams::TVQSParams +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler::TVtEngVideoQuality::TVQSParams::TVQSParams( + TInt aId, const TVideoQuality aValue, TBool aSetPeer ) + : iId( aId ), iValue( aValue ), iSetPeer( aSetPeer ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::QueryProtoInterfacesL +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::QueryProtoInterfacesL() + { + __VTPRINTENTER( "MH.QueryProtoInterfacesL" ) + // Ensure call is still connected to prevent unnecessary Protocol + // interface acquisition + CVtEngStateManager* states = CVtEngUtility::StateManager(); + const MVtEngSessionInfo::TSessionState sessionState = + states->SessionState(); + if ( sessionState != MVtEngSessionInfo::EIdle && + sessionState != MVtEngSessionInfo::EClearing ) + + { + // Request the 324M Stack interface + if ( !IsFlag( EProto324IFAcquired ) ) + { + /* + AddOperation( EGet324CtrlInterface, + iSessionCommand->GetProtocolInterfaceL( + EVtH324Config, + ( MVtProtocolCommand*& ) iH324Config )); + */ + MVtProtocolCommand *pCommand = NULL; + AddOperation( EGet324CtrlInterface, + iSessionCommand->GetProtocolInterfaceL( + EVtH324Config, + ( MVtProtocolCommand*& ) pCommand )); + iH324Config = static_cast(pCommand); + } + // Get encoder interface. + /* + AddOperation( EGetH263EncInterface, + iSessionCommand->GetProtocolInterfaceL( + EVtVideoEncoderConfig, + ( MVtProtocolCommand*& ) iH263Encoder )); + */ + MVtProtocolCommand *pCommand = NULL; + AddOperation( EGetH263EncInterface, + iSessionCommand->GetProtocolInterfaceL( + EVtVideoEncoderConfig, + ( MVtProtocolCommand*& ) pCommand )); + iH263Encoder = static_cast(pCommand); + } + __VTPRINTEXIT( "MH.QueryProtoInterfacesL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ReleaseProtoInterfacesL +// ----------------------------------------------------------------------------- +// +void CVtEngMediaHandler::ReleaseProtoInterfacesL() + { + __VTPRINTENTER( "MH.ReleaseProtoInterfacesL" ) + + // Release interfaces + __VTPRINT( DEBUG_MEDIA, "LCN: MH.324 started to release interfaces" ) + if( iH324Config ) + { + /* + AddOperation( ERemove324CtrlInterface, + iSessionCommand->DeleteProtocolInterfaceL( EVtH324Config, iH324Config ) );*/ + MVtProtocolCommand *pCommand = NULL; + pCommand = static_cast(iH324Config); + AddOperation( ERemove324CtrlInterface, + iSessionCommand->DeleteProtocolInterfaceL( EVtH324Config, pCommand ) ); + iH324Config = 0; + __VTPRINT( DEBUG_MEDIA, "MH.324 started to release" ) + } + + if ( iH263Encoder ) + { + /* + AddOperation( ERemoveH263EncInterface, + iSessionCommand->DeleteProtocolInterfaceL( EVtVideoEncoderConfig, iH263Encoder ) );*/ + MVtProtocolCommand *pCommand = NULL; + pCommand = static_cast(iH263Encoder); + AddOperation( ERemoveH263EncInterface, + iSessionCommand->DeleteProtocolInterfaceL( EVtVideoEncoderConfig, pCommand ) ); + iH263Encoder = 0; + iH263Encoder = 0; + __VTPRINT( DEBUG_MEDIA, "MH.263 started to release" ) + } + __VTPRINTEXIT( "MH.ReleaseProtoInterfacesL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::ExtensionCommandsPending +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::ExtensionCommandsPending() const + { + __VTPRINTENTER( "MH.ExtensionCommandsPending" ) + TBool isPending = EFalse; + TInt count( iPendingOps->Count() ); + while ( count-- ) + { + const TOperation op = ( *iPendingOps )[ count ].iOp; + switch ( op ) + { + // extension commands + case ESendIntraframe: + case ESetSupportedResolutions: + case ESetVideoQuality: + case ESendVTSTO: + case ESetFastCsupOptions: + case ESetVendorId: + case ESetIFrameInterval: + isPending = ETrue; +#ifdef _DEBUG + RDebug::Print( _L(" (ext) op=%d,protoCmdId=%d"), + op, ( *iPendingOps )[ count ].iProtoCmdId ); +#else +// in debug mode allow printing all pending ops to log + count = 0; // break loop +#endif + break; + default: + break; + } + } + __VTPRINTEXITR( "MH.ExtensionCommandsPending %d", isPending ) + return isPending; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::MediaAddingValidity +// ----------------------------------------------------------------------------- +// +TBool CVtEngMediaHandler::MediaAddingValidity() const + { + __VTPRINTENTER( "MH.MediaAddingValidity" ) + + TBool addingOK( ETrue ); + CVtEngStateManager* states = CVtEngUtility::StateManager(); + MVtEngSessionInfo::TSessionState sessionState ( states->SessionState() ); + if( sessionState == MVtEngSessionInfo::EClearing || + sessionState == MVtEngSessionInfo::EIdle ) + { + __VTPRINT( DEBUG_MEDIA, "MH.MediaAddingValidity NOT ALLOWED" ) + // State is wrong, adding not allowed. + addingOK = EFalse; + } + + __VTPRINTEXITR( "MH.MediaAddingValidity %d", addingOK ) + + return addingOK; + } + +// ----------------------------------------------------------------------------- +// CVtEngMediaHandler::CancelInitializeShareImage +// ----------------------------------------------------------------------------- +void CVtEngMediaHandler::CancelInitializeShareImage() + { + __VTPRINTENTER( "CVtEngMediaHandler.CancelInitializeShareImage"); + if(iLocalVideo) + { + iLocalVideo->CancelInitializeShareImage(); + } + __VTPRINTEXIT( "CVtEngMediaHandler.CancelInitializeShareImage"); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Media/CVtEngRemoteVideo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Media/CVtEngRemoteVideo.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,737 @@ +/* +* Copyright (c) 2004-2006 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: Remote video handler. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngRemoteVideo.h" +#include "CVtEngStateManager.h" +#include "MVtEngFrameObserver.h" +#include +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngEventManager.h" +#include "VtEngConstants.h" +#include "VtEngPanic.h" +#include "TVtEngRenderingDSA.h" +#include "TVtEngRenderingDP.h" +#include "TVtEngRenderingNGA.h" +#include "TVtEngRenderConfigDSA.h" +#include "TVtEngRenderConfigDP.h" +#include "TVtEngRenderConfigNGA.h" +#include "CVtEngDrawDP.h" +#include "CVtEngDrawDSA.h" +#include "CVtEngDrawNGA.h" +#include +#include +#include +#include +#include + +// LOCAL CONSTANTS AND MACROS +// This active object priority. +const TInt KVtEngRemoteDrawPriority = CActive::EPriorityStandard; + +// Timer priority when not frame watching. +const TInt KVtEngStoppedRenderPriority = CActive::EPriorityLow; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngRemoteVideo +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngRemoteVideo::CVtEngRemoteVideo( + MVtSessionCommand& aSessionCommand, + CVtEngStateManager& aStateManager ) : + iSessionCommand( aSessionCommand), + iStateManager( aStateManager ), + iEnableNGA(ETrue) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::ConstructL() + { + __VTPRINTENTER( "RV.ConstructL" ) + //We are in the Proto ESetup state + iDrawer = + static_cast< CVtEngDraw* >( VtEngDrawFactory::CreateDrawerL( this , iEnableNGA) ); + //Add protocol Data Sink; + iDisplaySink = iDrawer->DisplaySink(); + iAudioSink = VTProtocolFactory::CreateAudioSink(); + __VTPRINTEXIT( "RV.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngRemoteVideo* CVtEngRemoteVideo::NewL( + MVtSessionCommand& aSessionCommand, + CVtEngStateManager& aStateManager ) + { + CVtEngRemoteVideo* self = new( ELeave ) + CVtEngRemoteVideo( aSessionCommand, aStateManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngRemoteVideo +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngRemoteVideo::~CVtEngRemoteVideo() + { + __VTPRINTENTER( "RV.~" ) + VTProtocolFactory::DeleteAudioSink( iAudioSink ); + delete iDrawer; + __VTPRINTEXIT( "RV.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::SetRenderingParametersL +// Sets parameters for rendering the remote video. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::SetRenderingParametersL( + const TVtEngRenderingOptionsNGA& aParams ) + { + __VTPRINTENTER( "RV.SetRenderingParametersL NGA" ) + + // If rendering is ongoing, stop it + StopVideoRendering(); + // Set new values + TVtEngRenderConfigNGA config( aParams ); + iDrawer->BaseSetConfigL( config ); + __VTPRINTEXIT( "RV.SetRenderingParametersL NGA" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::SetRenderingParametersL +// Sets parameters for rendering the remote video. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::SetRenderingParametersL( + const TVtEngRenderingOptionsDSA& aParams ) + { + __VTPRINTENTER( "RV.SetRenderingParametersL DSA" ) + + __VTPRINT( DEBUG_MEDIA , "================== RV.Params ==================" ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iTl.iX %d", aParams.iRect.iTl.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iTl.iY %d", aParams.iRect.iTl.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iBr.iX %d", aParams.iRect.iBr.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iBr.iY %d", aParams.iRect.iBr.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iTl.iX %d", + aParams.iClipRect.iTl.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iTl.iY %d", + aParams.iClipRect.iTl.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iBr.iX %d", + aParams.iClipRect.iBr.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iBr.iY %d", + aParams.iClipRect.iBr.iY ) + __VTPRINT( DEBUG_MEDIA , "================== RV.Params ==================" ) + // If rendering is ongoing, stop it + StopVideoRendering(); + // Set new values + TVtEngRenderConfigDSA config( aParams ); + iDrawer->BaseSetConfigL( config ); + __VTPRINTEXIT( "RV.SetRenderingParametersL DSA" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::SetRenderingParametersL +// Sets parameters for rendering the remote video. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::SetRenderingParametersL( + const TVtEngRenderingOptionsDP& aParams ) + { + __VTPRINTENTER( "RV.SetRenderingParametersL DP" ) + + __VTPRINT( DEBUG_MEDIA , "================== RV.Params ==================" ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iTl.iX %d", aParams.iRect.iTl.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iTl.iY %d", aParams.iRect.iTl.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iBr.iX %d", aParams.iRect.iBr.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iRect.iBr.iY %d", aParams.iRect.iBr.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iTl.iX %d", + aParams.iClipRect.iTl.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iTl.iY %d", + aParams.iClipRect.iTl.iY ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iBr.iX %d", + aParams.iClipRect.iBr.iX ) + __VTPRINT2( DEBUG_MEDIA , " aParams.iClipRect.iBr.iY %d", + aParams.iClipRect.iBr.iY ) + __VTPRINT( DEBUG_MEDIA , "================== RV.Params ==================" ) + // If rendering is ongoing, stop it + StopVideoRendering(); + // Set new values + TVtEngRenderConfigDP config( aParams ); + iDrawer->BaseSetConfigL( config ); + __VTPRINTEXIT( "RV.SetRenderingParametersL DP" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::StartVideoL +// +// For incoming, this function starts/resumes playing out the media to the +// appropriate sink based on the current settings. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::StartVideoL() + { + __VTPRINTENTER( "RV.StartVideoL" ) + if ( iDisplaySink && iDrawer && + ( iDrawer->IsFlag( CVtEngDraw::EFlagInitialized ) || + iDrawer->IsFlag( CVtEngDraw::EBaseConstructCalled ) ) ) + { + iDrawer->BaseStartDrawL(); + } + else + { + User::Leave( KErrNotReady ); + } + __VTPRINTEXIT( "RV.StartVideoL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::StopVideoRendering +// Stops rendering of remote video. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::StopVideoRendering() + { + __VTPRINTENTER( "RV.StopVideoRendering" ) + // Stop only if active + if( iDrawer->GetDsaState() ) + { + __VTPRINT( DEBUG_MEDIA, "RV.Stopping" ) + iDrawer->BaseStopDraw(); + } + __VTPRINTEXIT( "RV.StopVideoRendering" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::AddVideoSinkL +// Adds a sink for video to proto. +// ----------------------------------------------------------------------------- +// +TInt CVtEngRemoteVideo::AddVideoSinkL( TInt aChannelId ) + { + __VTPRINTENTER( "RV.AddVideoSinkL" ) + if ( iDisplaySink == NULL ) + { + User::Leave( KErrNotReady ); + } + TInt id = iSessionCommand.AddVideoSinkL( + aChannelId, *iDisplaySink ); + iDrawer->VideoSinkAdded(); + __VTPRINTEXITR( "RV.AddVideoSinkL id=%d", id ) + return id; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::AddAudioSinkL +// Adds a sink for audio to proto. +// ----------------------------------------------------------------------------- +// +TInt CVtEngRemoteVideo::AddAudioSinkL( TInt aChannelId ) + { + __VTPRINTENTER( "RV.AddAudioSinkL" ) + if ( iAudioSink == NULL ) + { + User::Leave( KErrNotReady ); + } + TInt id = iSessionCommand.AddAudioSinkL( aChannelId, *iAudioSink ); + __VTPRINTEXITR( "RV.AddAudioSinkL id=%d", id ) + return id; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::GetDsaState +// Returns state of Direct Screen Access. +// ----------------------------------------------------------------------------- +// +TBool CVtEngRemoteVideo::GetDsaState() const + { + return iDrawer->GetDsaState(); + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::PauseVideoL +// +// For an incoming track this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CVtEngRemoteVideo::PauseVideoL() + { + __VTPRINTENTER( "RV.PauseVideoL" ) + if ( iDisplaySink == NULL ) + { + User::Leave( KErrNotReady ); + } + TInt cmdId = iSessionCommand.PauseVideoL( *iDisplaySink ); + __VTPRINTEXITR( "RV.PauseVideoL id=%d", cmdId ) + return cmdId; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::AudioSink +// Returns audio sink. +// ----------------------------------------------------------------------------- +// +MVTAudioSink* CVtEngRemoteVideo::AudioSink() + { + return iAudioSink; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::SetUIForegroundL +// Sets UI foreground state. +// ----------------------------------------------------------------------------- +void CVtEngRemoteVideo::SetUIForegroundL( TBool aForeground ) + { + __VTPRINTENTER( "RV.SetUIForegroundL" ) + if( !iDisplaySink ) + { + User::Leave( KErrNotReady ); + } + if( aForeground ) + { + __VTPRINT( DEBUG_MEDIA, " RV.Resuming" ) + iDisplaySink->Resume(); + } + else + { + __VTPRINT( DEBUG_MEDIA, " RV.Pausing" ) + iDisplaySink->Pause(); + } + iDrawer->BaseSetUIForegroundL( aForeground ); + __VTPRINTEXIT( "RV.SetUIForegroundL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::RequestLastFrame +// Request update last remote video frame through MVtEngFrameObserver::vtSetFrame +// ----------------------------------------------------------------------------- +void CVtEngRemoteVideo::RequestLastFrame() + { + __VTPRINTENTER( "RV.RequestLastFrame" ) + if(iDrawer) + iDrawer->BaseRequestLastFrame(); +__VTPRINTEXIT( "RV.RequestLastFrame" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::~CVtEngDraw +// Destructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngRemoteVideo::CVtEngDraw::~CVtEngDraw() + { + __VTPRINTENTER( "RVD.~" ) + Cancel(); + delete iWatcher; + delete iDSA; + if ( iDisplaySink ) + { + iDisplaySink->Destroy(); + } + __VTPRINTEXIT( "RVD.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::CVtEngDraw +// C++ constructor. Cannot leave. +// ----------------------------------------------------------------------------- +// +CVtEngRemoteVideo::CVtEngDraw::CVtEngDraw( MDisplaySinkObserver* aObserver ) : + CActive( KVtEngRemoteDrawPriority ), iCheckpoint( KVtEngWatcherThreshold ), + iObserver( aObserver ), iCallback( WatcherExpired, this ), + iDSUpdated( ETrue ) + { + iSourceSize = TSize( KVtEngRemoteVideoDefaultWidth, + KVtEngRemoteVideoDefaultHeight ); + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::ConstructL( ) + { + __VTPRINTENTER( "RVD.ConstructL" ) + BaseConstructL(); + // Create sink + iDisplaySink = CreateSinkL(); + iWatcher = CPeriodic::NewL( KVtEngStoppedRenderPriority ); + __VTPRINTEXIT( "RVD.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::AbortNow +// Aborts DSA when requested by Window Server. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::AbortNow( + RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + __VTPRINTENTER( "RVD.AbortNow" ) + ClearFlag( EReadyForeground | EStarted ); + BaseAbortNow(); + __VTPRINTEXIT( "RVD.AbortNow" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::Restart +// Restarts DSA. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::Restart( + RDirectScreenAccess::TTerminationReasons /*aReason*/ ) + { + __VTPRINTENTER( "RVD.Restart" ) + TRAPD( err, + { + if ( !IsFlag( EStarted ) ) + { + if ( !iDSA->IsActive() ) + { + iDSA->StartL(); + } + SetFlag( EStarted ); + } + if ( !Config().iClipRect.IsEmpty() ) + { + __VTPRINT3( DEBUG_MEDIA, "RVD.Restart iClipRect.iTl (%d, %d)", + Config().iClipRect.iTl.iX, Config().iClipRect.iTl.iY ); + __VTPRINT3( DEBUG_MEDIA, "RVD.Restart iClipRect.iBr (%d, %d)", + Config().iClipRect.iBr.iX, Config().iClipRect.iBr.iY ); + iDSA->Gc()->SetClippingRect( Config().iClipRect ); + } + BaseRestartL(); + } ); + if ( err != KErrNone ) + { + ClearFlag( EReadyForeground ); + } + else + { + SetFlag( EReadyForeground ); + } + + __VTPRINT2( DEBUG_MEDIA, "RVD.Restart flags %d", iFlags ) + if ( iCheckpoint == KVtEngWatcherThreshold ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "RVD.Restart RFs" ) + TRAP( err, BaseRefreshL() ); + } + __VTPRINTEXITR( "RVD.Restart %d", err ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::GetDsaState +// Returns the state of DSA: is drawing ongoing. +// ----------------------------------------------------------------------------- +// +TBool CVtEngRemoteVideo::CVtEngDraw::GetDsaState() const + { + __VTPRINTENTER( "RVD.GetDsaState" ) + TBool active( EFalse ); + active = IsFlag( ERemoteVideoDrawing ); + __VTPRINTEXITR( "RVD.GetDsaState is active=%d", active ) + return active; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::WatcherExpired +// Checks if frame watcher has expired, ie. no frames are received. +// ----------------------------------------------------------------------------- +// +TInt CVtEngRemoteVideo::CVtEngDraw::WatcherExpired( TAny* aAny ) + { + CVtEngRemoteVideo::CVtEngDraw* drawer = + reinterpret_cast( aAny ); + drawer->HandleWatcherExpired(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::HandleWatcherExpired +// Does the checking for frame reception. +// If not receiving, notify using client (VT UI). +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::HandleWatcherExpired() + { + __VTPRINTENTER( "RVD.WatcherExpired" ) + if ( IsFlag( EStarted ) ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, "RVD.WatcherExpired RF:%d", + iCheckpoint ) + if ( iCheckpoint != KVtEngWatcherThreshold && + IsFlag( EFirstFrameReceived ) ) + { + __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "RVD.WatcherExpired RF" ) + TRAP_IGNORE( BaseRefreshL() ); + } + iCheckpoint--; + // Not under zero though. + if ( iCheckpoint < 0 ) + { + iCheckpoint = 0; + } + } + __VTPRINTEXIT( "RVD.WatcherExpired" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::SetFlag +// Sets flags. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::SetFlag( TUint aFlags ) + { + iFlags |= aFlags; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::ClearFlag +// Clears (unsets) flags. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::ClearFlag( TUint aFlags ) + { + iFlags &= ~aFlags; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::IsFlag +// Tests a flag. +// ----------------------------------------------------------------------------- +// +TBool CVtEngRemoteVideo::CVtEngDraw::IsFlag( TUint aFlag ) const + { + return ( iFlags & aFlag ) != 0 ; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::VideoSinkAdded +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::VideoSinkAdded() + { + // By clearing this flag every time when sink is added, we assure that + // blind icon is correctly faded in UI. + ClearFlag( EFirstFrameReceived ); + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::Activate +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::Activate() + { + __VTPRINTENTER( "RVD.Activate" ) + if ( !IsActive() ) + { + __VTPRINT( DEBUG_MEDIA, "RVD.Activate setting active" ) + iStatus = KRequestPending; + SetActive(); + } + __VTPRINTEXIT( "RVD.Activate" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::ConfigUpdatedL +// Set drawing configuration. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::ConfigUpdatedL() + { + __VTPRINTENTER( "RVD.ConfigUpdatedL" ) + ClearFlag( EFlagInitialized ); + TRAPD( err, { + BaseVerifyConfigL(); + + if ( IsFlag( EReadyInternal ) ) + { + __VTPRINT( DEBUG_MEDIA, "RVD.SetC started" ) + SetFlag( EStarted ); + __VTPRINT( DEBUG_MEDIA, "RVD.SetC notify rvd start" ) + } + BaseRefreshBitmapsL(); + } ); + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, "RVD.SetC FAILED %d", err ) + CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); + } + User::LeaveIfError( err ); + SetFlag( EFlagInitialized ); + __VTPRINTEXIT( "RVD.ConfigUpdatedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::DisplaySink +// Returns used display sink. +// ----------------------------------------------------------------------------- +// +MDisplaySink* CVtEngRemoteVideo::CVtEngDraw::DisplaySink() + { + return iDisplaySink; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::DoCancel() + { + __VTPRINTENTER( "RVD.DoCancel" ) + BaseDoCancel(); + iDisplaySink->Release(); + ClearFlag( EStarted | EFrameWatcherExpired ); + __VTPRINTEXIT( "RVD.DoCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::RunError +// ----------------------------------------------------------------------------- +// +#ifdef VTDEBUG +TInt CVtEngRemoteVideo::CVtEngDraw::RunError( TInt aError ) +#else +TInt CVtEngRemoteVideo::CVtEngDraw::RunError( TInt /* aError */ ) +#endif // VTDEBUG + { + __VTPRINTENTER( "RVD.RunError" ) + ClearFlag( EStarted ); + BaseStopDraw(); + CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStopped ); + __VTPRINTEXITR( "RVD.RunError %d", aError ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::CVtEngDraw::CreateAndStartDSAL +// Create DSA instance. +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo::CVtEngDraw::CreateAndStartDSAL() + { + __VTPRINTENTER( "RVD.CreateAndStartDSAL" ) + delete iDSA; + iDSA = NULL; + iDSA = CDirectScreenAccess::NewL( + *Config().iWsSession, + *Config().iWsSreenDevice, + *Config().iWindow, + *this ); + iDSA->StartL(); + if ( !Config().iClipRect.IsEmpty() ) + { + __VTPRINT( DEBUG_MEDIA, "RVD.CreateAndStartDSAL setting cliprect" ) + iDSA->Gc()->SetClippingRect( Config().iClipRect ); + } + __VTPRINTEXIT( "RVD.CreateAndStartDSAL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngRemoteVideo::VideoFrameSizeChanged +// Callback from DisplaySink to inform the size change +// ----------------------------------------------------------------------------- +// +void CVtEngRemoteVideo:: + VideoFrameSizeChangedL( const TSize& /* aFrom */, const TSize& aTo ) + { + __VTPRINTENTER( "RVD.VideoFrameSizeChangedL" ) + __VTPRINT( DEBUG_MEDIA , " ======= RV.RVD.VideoFrameSizeChangedL ========" ) + __VTPRINT2( DEBUG_MEDIA , " aTo.iWidth: %d", aTo.iWidth) + __VTPRINT2( DEBUG_MEDIA , " aTo.iHeight: %d", aTo.iHeight ) + __VTPRINT( DEBUG_MEDIA , " ======= RV.RVD.VideoFrameSizeChangedL ========" ) + + // Notification of changed layout. + if ( aTo.iHeight == KVtEngResolutionQCIFHeight && + aTo.iWidth == KVtEngResolutionQCIFWidth ) + { + // Store the new size. + iDrawer->iSourceSize = aTo; + CVtEngEventManager::NotifyEvent( KVtEngResolutionToQCIF ); + } + else if ( aTo.iHeight == KVtEngResolutionSQCIFHeight && + aTo.iWidth == KVtEngResolutionSQCIFWidth ) + { + // Store the new size. + iDrawer->iSourceSize = aTo; + CVtEngEventManager::NotifyEvent( KVtEngResolutionToSQCIF ); + } + else + { + // Unlisted resolution. + __VTPRINTEXITR( "RVD.VideoFrameSizeChangedL %d", 0 ) + return; + } + + iDrawer->BaseVideoFrameSizeChangedL( aTo ); + + __VTPRINTEXITR( "RVD.VideoFrameSizeChangedL %d", 1 ) + } + +// VtEngDrawFactory + +// ----------------------------------------------------------------------------- +// VtEngDrawFactory::CreateDrawerL +// ----------------------------------------------------------------------------- +// +MVtEngDraw* VtEngDrawFactory::CreateDrawerL( MDisplaySinkObserver* aObserver, TBool aSupportNGA ) + { + __VTPRINTENTER( "VtEngDrawFactory.CreateDrawerL" ) + MVtEngDraw* drawer = NULL; + if(aSupportNGA) + { + drawer = CVtEngDrawNGA::NewL( aObserver ); + } + else + { + if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) ) + { + drawer = CVtEngDrawDP::NewL( aObserver ); + } + else + { + drawer = CVtEngDrawDSA::NewL( aObserver ); + } + } + __VTPRINTEXIT( "VtEngDrawFactory.CreateDrawerL" ) + return drawer; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/Session/CVtEngSessionHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/Session/CVtEngSessionHandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,323 @@ +/* +* Copyright (c) 2006 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: Session handler. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngSessionHandler.h" +#include "CVtEngOperation.h" +#include "CVtEngStateManager.h" +#include "cvtengincomingcallmonitor.h" +#include "vtengcommands.h" +#include "CVtEngOperation.h" +#include "CVtCtlFactory.h" +#include "MVtCtlCallControl.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "VtCtlTypes.h" // for TVtCtlCSSessionInfoV1 +#include "cvtlogger.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::CVtEngSessionHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngSessionHandler::CVtEngSessionHandler() + : CActive( CActive::EPriorityStandard ), iIncomingCallMonitor(NULL) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::ConstructL() + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + StartIncomingCallMonitorL(); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngSessionHandler* CVtEngSessionHandler::NewL( ) + { + CVtEngSessionHandler* self = new( ELeave ) + CVtEngSessionHandler( ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::~CVtEngSessionHandler +// Destructor +// +// ----------------------------------------------------------------------------- +// +CVtEngSessionHandler::~CVtEngSessionHandler() + { + __VTPRINTENTER( "SH.~" ) + Cancel(); + Uninitialize(); + delete iIncomingCallMonitor; + __VTPRINTEXIT( "SH.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::HandleL +// Performs session request. +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::HandleL( + CVtEngOperation& /*aOperation*/ ) + { + __VTPRINT( DEBUG_SESSION, "SH.HandleL leave not supported" ) + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::State +// Returns session state +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngSessionHandler::State( + TBool aForcedRefresh ) const + { + CVtEngStateManager* states = CVtEngUtility::StateManager(); + if ( aForcedRefresh ) + { + states->Update(); + } + return states->SessionState(); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::GetDirection +// Returns direction. +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngSessionHandler::GetDirection( + TDirection& aDirection ) const + { + __VTPRINTENTER( "SH.GetDirection" ) + if ( !iSessionControl ) + { + __VTPRINTEXITR( "SH.GetDirection err=%d", KErrNotFound ) + return KErrNotFound; + } + + TVtCtlCSSessionInfoV1 info; + TPckg pckg( info ); + TRAPD( err, iSessionControl->GetSessionInfoL( KActiveSessionId, pckg ) ); + if ( err == KErrNone ) + { + switch ( info.iDirection ) + { + case MVtCtlCallControl::EDirectionMobileOriginated: + aDirection = EDirectionMO; + break; + case MVtCtlCallControl::DirectionMobileTerminated: + aDirection = EDirectionMT; + break; + default: + aDirection = EDirectionNone; + break; + } + } + __VTPRINT2( DEBUG_SESSION, "SH.direction dir=%d", aDirection ) + __VTPRINTEXITR( "SH.GetDirection err=%d", err ) + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::GetDuration +// Returns session duration. +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngSessionHandler::GetDuration( + TDuration& aDuration, + TBool& aEnabled ) const + { + if ( !iSessionControl ) + { + return KErrNotFound; + } + + TVtCtlDuration duration; + TInt err ( iSessionControl->GetDuration( KActiveSessionId, duration ) ); + if ( err == KErrNone ) + { + aDuration = duration; + const CVtEngSettings& settings = CVtEngUtility::Settings(); + aEnabled = settings.Config().iCallTimerOn; + } + return err; + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::GetCLI +// +// +// ----------------------------------------------------------------------------- +// +TInt CVtEngSessionHandler::GetCLI( TCLI& aCLI ) const + { + const CVtEngSettings& settings = CVtEngUtility::Settings(); + const TBool isValid = settings.GetCLI( aCLI); + TInt res = KErrNone; + if ( !isValid ) + { + res = KErrNotReady; + } + return res; + } + + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::HandleVtSessionEventL +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::HandleVtSessionEventL( + TVtCtlEvent aEvent, + TAny* /*aParams*/ ) + { + if ( aEvent == KVtCtlEventSessionStatusChanged ) + { + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update( ); + } + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::InitializeL +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::InitializeL() + { + __VTPRINTENTER( "SH.Initilialize" ) + if ( iSessionControl ) + { + // already initialized + __VTPRINTEXIT( "SH.Initilialize" ) + return; + } + TInt err = iLib.Load( KVtCtlLibraryName() ); + CleanupClosePushL( iLib ); + if ( err == KErrNone ) + { + TLibraryFunction func = iLib.Lookup( 1 ); + iFactory = reinterpret_cast( func() ); + iSessionControl = iFactory->CreateCallControlL( *this ); + + // Update state + CVtEngStateManager* states = CVtEngUtility::StateManager(); + states->Update(); + } + CleanupStack::Pop(); // lib + __VTPRINTEXIT( "SH.Initilialize" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::Uninitialize +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::Uninitialize() + { + if ( iFactory ) + { + iFactory->Delete( iSessionControl ); + delete iFactory; + iFactory = NULL; + iSessionControl = NULL; + } + iLib.Close(); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::RealState +// +// +// ----------------------------------------------------------------------------- +// +MVtCtlCallControl::TVtCtlState CVtEngSessionHandler::RealState() const + { + MVtCtlCallControl::TVtCtlState state( MVtCtlCallControl::EUnknown ); + if ( iSessionControl ) + { + state = iSessionControl->GetSessionState( KActiveSessionId ); + __VTPRINT2( DEBUG_SESSION, "SH.realState=%d", state ) + } + return state; + } +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::RunL +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::RunL() + { + InitializeL(); + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::DoCancel +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::DoCancel() + { + // nothing here + } + +// ----------------------------------------------------------------------------- +// CVtEngSessionHandler::StartIncomingCallMonitorL +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngSessionHandler::StartIncomingCallMonitorL() + { + iIncomingCallMonitor = CVtEngIncomingCallMonitor::NewL(); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngDtmfBuffered.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngDtmfBuffered.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2006 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: Buffered state of DTMF sending. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngDtmfState.h" +#include "VtEngPanic.h" +#include + +// CONSTANTS +const TInt KVtEngDtmfToneBufferSize = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::NewL +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfState* CVtEngDtmfBuffered::NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + { + CVtEngDtmfBuffered* self = new ( ELeave ) + CVtEngDtmfBuffered( aDtmfHandler, aH324Config ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::~CVtEngDtmfBuffered +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfBuffered::~CVtEngDtmfBuffered() + { + delete iTones; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::SendDtmfL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfBuffered::SendDtmfL( const TVtEngDtmfTone& aTone ) + { + // just add to buffer and wait for completion of pending send operation. + iTones->AppendL( aTone ); + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::DtmfSendCompleteL +// +// PSEUDO CODE: +// deallocate Protocol dtmf instance +// if ( previous_sending_OK ) +// if ( tones_in_buffer > 1 ) +// next_state = buffered +// else +// next_state = sending +// endif +// send tone from buffer and change state +// endif +// if ( previous_sending_FAIL or new_sending_FAIL ) +// reset buffer +// next_state = idle +// endif +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfBuffered::DtmfSendCompleteL( TInt aError ) + { + __VTPRINTENTER( "DtmfStateBuffered.DtmfSendCompleteL" ) + CVtEngDtmfState::DtmfSendCompleteL( aError ); + const TInt count( iTones->Count() ); + __VTPRINT2( DEBUG_MEDIA , "DtmfStateBuffered.Send bufSize=%d", count ) + + TInt index( KErrNone ); + if ( count && aError == KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA , "DtmfStateBuffered cnt=%d", count ) + const TVtEngDtmfTone& tone = iTones->At( index ); + MVtEngDtmfHandler::TVtEngDtmfState nextState = ( count > 1 ) ? + MVtEngDtmfHandler::EVtDtmfStateBuffered : + MVtEngDtmfHandler::EVtDtmfStateSending; + TRAP( aError, DoSendAndActivateStateL( tone, nextState ) ); + iTones->Delete( index ); + } + + if ( aError != KErrNone ) + { + __VTPRINT2( DEBUG_MEDIA , "DtmfStateBuffered.failed=%d", aError ) + // if failed clear DTMF buffer and go to dtmf idle state + iTones->Reset(); + iDtmfHandler.ActivateState( MVtEngDtmfHandler::EVtDtmfStateIdle ); + } + __VTPRINTEXIT( "DtmfStateBuffered.DtmfSendCompleteL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::CVtEngDtmfBuffered +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfBuffered::CVtEngDtmfBuffered( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + : CVtEngDtmfState( aDtmfHandler, aH324Config) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfBuffered::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfBuffered::ConstructL() + { + iTones = new ( ELeave ) + CArrayFixFlat( KVtEngDtmfToneBufferSize ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngDtmfIdle.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngDtmfIdle.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2006 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: Idle state of DTMF sending. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngDtmfState.h" +#include "VtEngPanic.h" +#include "MVtEngDtmfHandler.h" +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CVtEngDtmfIdle::NewL +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfState* CVtEngDtmfIdle::NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + { + CVtEngDtmfIdle* self = new ( ELeave ) + CVtEngDtmfIdle( aDtmfHandler, aH324Config ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfIdle::~CVtEngDtmfIdle +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfIdle::~CVtEngDtmfIdle() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfIdle::SendDtmfL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfIdle::SendDtmfL( const TVtEngDtmfTone& aTone ) + { + __VTPRINTENTER( "DtmfStateIdle.Send" ) + DoSendAndActivateStateL( aTone, MVtEngDtmfHandler::EVtDtmfStateSending ); + __VTPRINTEXIT( "DtmfStateIdle.Send" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfIdle::DtmfSendCompleteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfIdle::DtmfSendCompleteL( TInt /*aError*/ ) + { + __VTPRINT( DEBUG_MEDIA , "DtmfStateIdle.SendComplete" ) + // Do nothing (should be never called since state is always + // "sending" or "buffered" when sending is completed). + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfIdle::CVtEngDtmfIdle +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfIdle::CVtEngDtmfIdle( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + : CVtEngDtmfState( aDtmfHandler, aH324Config ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngDtmfSending.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngDtmfSending.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2006 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: Sending state of DTMF sending. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngDtmfState.h" +#include "VtEngPanic.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CVtEngDtmfSending::NewL +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfState* CVtEngDtmfSending::NewL( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + { + CVtEngDtmfState* self = new ( ELeave ) + CVtEngDtmfSending( aDtmfHandler, aH324Config ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfSending::~CVtEngDtmfSending +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfSending::~CVtEngDtmfSending() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfSending::SendDtmfL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfSending::SendDtmfL( const TVtEngDtmfTone& aTone ) + { + __VTPRINTENTER( "DtmfStateSending.Send" ) + CVtEngDtmfState& state = iDtmfHandler.ActivateState( + MVtEngDtmfHandler::EVtDtmfStateBuffered ); + // let buffered state handle this + state.SendDtmfL( aTone ); + __VTPRINTEXIT( "DtmfStateSending.Send" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfSending::DtmfSendCompleteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfSending::DtmfSendCompleteL( TInt aError ) + { + __VTPRINTENTER( "DtmfStateSending.SendComplete" ) + CVtEngDtmfState::DtmfSendCompleteL( aError ); + // sending complete, change state + iDtmfHandler.ActivateState( MVtEngDtmfHandler::EVtDtmfStateIdle ); + __VTPRINTEXIT( "DtmfStateSending.SendComplete" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfSending::CVtEngDtmfSending +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfSending::CVtEngDtmfSending( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) + : CVtEngDtmfState( aDtmfHandler, aH324Config ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngDtmfState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngDtmfState.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2006 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: Base state class of DTMF sending. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngDtmfState.h" +#include "MVtEngDtmfHandler.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngDtmfState::CVtEngDtmfState +// +// ----------------------------------------------------------------------------- +// +CVtEngDtmfState::CVtEngDtmfState( + MVtEngDtmfHandler& aDtmfHandler, + MVtH324ConfigCommand& aH324Config ) : + iDtmfHandler( aDtmfHandler ), + iH324Config( aH324Config ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfState::DtmfSendCompleteL +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfState::DtmfSendCompleteL( TInt /*aError*/ ) + { + __VTPRINTENTER( "DtmfState.DtmfSendCompleteL" ) + iDtmfHandler.ReleaseProtoDtmf(); + __VTPRINTEXIT( "DtmfState.DtmfSendCompleteL" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngDtmfState::DoSendAndActivateStateL +// +// Requests new Protocol dtmf tone instance from the DTMF handler, sends it and +// changes state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngDtmfState::DoSendAndActivateStateL( + const TVtEngDtmfTone& aDtmf, + MVtEngDtmfHandler::TVtEngDtmfState aNewState ) + { + __VTPRINTENTER( "DtmfState.DoSendAndActivateStateL" ) + MVTUserInput& protoDtmf = iDtmfHandler.ReserveProtoDtmfL( aDtmf ); + iDtmfHandler.StoreCommandId( iH324Config.SendUserInputMessageL( protoDtmf )); + iDtmfHandler.ActivateState( aNewState ); + __VTPRINTEXIT( "DtmfState.DoSendAndActivateStateL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateAlerting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateAlerting.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2004-2006 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: Base class for states +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateAlerting.h" +#include +#include "CVtEngOperation.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngAudioHandler.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::CVtEngStateAlerting +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateAlerting::CVtEngStateAlerting( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateAlerting::~CVtEngStateAlerting() + { + __VTPRINT( DEBUG_DESTRUCT, "~StateAlrt") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::UpdateL +// Updates state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateAlerting::UpdateL() + { + __VTPRINTENTER( "StateAlert.Update" ) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + CVtEngStateBase* newState = NULL; + if ( bearerstate == MVtCtlCallControl::EIdle || + bearerstate == MVtCtlCallControl::EDisconnecting ) + { + newState = NewStateL( MVtEngSessionInfo::EIdle ); + } + else + { + newState = NegotiatingOrConnectedStateL(); // or null + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateAlert.Update") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::OpenL +// State transition to alerting state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateAlerting::DoOpenL() + { + __VTPRINTENTER( "StateAlert.Open" ) + NotifyStateChange( MVtEngSessionInfo::ERemoteAlerting ); + + // Instantiate temporary devsound for audio routing + AudioHandler().SetRoutingEnablerL( ETrue ); + __VTPRINTEXIT( "StateAlert.Open" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::ValidateCommand +// Returns if a command is valid in idle state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateAlerting::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL |DEBUG_GEN, "StateAlert.Validate" ) + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngInitializeEngine: + case KVtEngInitializeEngineDiag: + case KVtEngInitializeEngineTest: + case KVtEngSetSource: + case KVtEngPrepareViewFinder: + case KVtEngPrepareViewFinderDSA: + case KVtEngPrepareViewFinderDP: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateAlerting::State() const + { + return MVtEngSessionInfo::ERemoteAlerting; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateAlerting::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateAlerting::HandleL( + CVtEngOperation& aOp ) + { + TBool handled( CVtEngStateBase::HandleL( aOp )); + return handled; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateBase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,395 @@ +/* +* Copyright (c) 2004-2006 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: Base class for states +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateBase.h" +#include "CVtEngOperation.h" +#include "CVtEngHandlerContainer.h" +#include "TVtEngOperationUtils.h" +#include "CVtEngStateInitializing.h" +#include "CVtEngStateAlerting.h" +#include "CVtEngStateRinging.h" +#include "CVtEngStateConnected.h" +#include "CVtEngStateClearing.h" +#include "CVtEngStateOpen.h" +#include "CVtEngStateNegotiating.h" +#include "CVtEngStateIdle.h" +#include "CVtEngSettings.h" +#include "MVtEngSessionInfo.h" +#include "VtEngUtils.h" +#include "VtEngPanic.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::CVtEngStateBase +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateBase::CVtEngStateBase( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : iStateManager( aStateManager ), + iEventManager( aEventManager ) + { + } + +// Destructor +CVtEngStateBase::~CVtEngStateBase() + { + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::OpenL +// Changes state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::OpenL( CVtEngStateBase* aOldState ) + { + __VTPRINTENTER( "StateBase.Open" ) + __VTPRINT( DEBUG_GEN, "StateBase. **** State Change ****" ) + iStateManager.SetState( *this ); + if ( aOldState ) + { + aOldState->Close(); + } + // call derived class open. + DoOpenL(); + __VTPRINTEXIT( "StateBase.Open" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::Close +// Closes state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::Close() + { + delete this; + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::SaveToSettingsL +// +// Saves configuration to settings. +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::SaveToSettingsL( CVtEngOperation& aOp ) + { + const TVtEngCommandId command( aOp.Command() ); + + if ( command == KVtEngSetAudioVolume ) + { + MVtEngAudio::TVtEngOutputVolume volume; + TVtEngOpParamUtil::Set( volume, aOp ); + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.SetVolume( volume.iHandsetVolume, volume.iHandsfreeVolume, ETrue ); + settings.SetVolume( volume.iHandsetVolume, volume.iHandsfreeVolume, EFalse ); + } + } +// ----------------------------------------------------------------------------- +// CVtEngStateBase::NotifyStateChangeL +// Notifies state change to event manager. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::NotifyStateChange( + MVtEngSessionInfo::TSessionState /*aNewState*/ ) + { + iEventManager.SessionStateChanged( ); + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::SetVideoEnabled +// +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::SetVideoEnabled( TBool aEnabled ) + { + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.SetVideoEnabled( aEnabled ); + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateBase::HandleL( CVtEngOperation& aOp ) + { + __VTPRINTENTER( "StateBase.Handle" ) + __VTPRINT2( DEBUG_GEN, "StateBase.Handle cmd=%d", aOp.Command() ) + TBool handled( EFalse ); + switch ( aOp.Command() ) + { + case KVtEngSetAudioRouting: + // Change audio routing + AudioHandler().HandleL( aOp ); + break; + + case KVtEngSetAudioVolume: + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + // Change audio volume + MediaHandler().HandleL( aOp ); + break; + case KVtEngTerminateSession: + default: + break; + } + __VTPRINTEXITR( "StateBase.Handle handled=%d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::SessionHandler +// Returns session handler. +// +// ----------------------------------------------------------------------------- +// +CVtEngSessionHandler& CVtEngStateBase::SessionHandler() + { + MVtEngSessionInfo& msession = iStateManager.Handlers().Session(); + CVtEngSessionHandler& handler = + static_cast( msession ); + return handler; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::MediaHandler +// Returns media handler. +// +// ----------------------------------------------------------------------------- +// +CVtEngMediaHandler& CVtEngStateBase::MediaHandler() + { + MVtEngMedia& msession = iStateManager.Handlers().Media(); + CVtEngMediaHandler& handler = + static_cast( msession ); + return handler; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::AudioHandler +// Returns audio handler. +// +// ----------------------------------------------------------------------------- +// +CVtEngAudioHandler& CVtEngStateBase::AudioHandler() + { + MVtEngAudio& maudio = iStateManager.Handlers().Audio(); + CVtEngAudioHandler& handler = + static_cast( maudio ); + return handler; + } +// ----------------------------------------------------------------------------- +// CVtEngStateBase::SessionHandler +// Returns session handler. +// +// ----------------------------------------------------------------------------- +// +CVtEngStateBase* CVtEngStateBase::NewStateL( + const MVtEngSessionInfo::TSessionState aState ) + { + CVtEngStateBase* newState = NULL; + switch ( aState ) + { + case MVtEngSessionInfo::EIdle: + newState = new ( ELeave ) + CVtEngStateIdle( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::EInitializing: + newState = new ( ELeave ) + CVtEngStateInitializing( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::ERemoteAlerting: + newState = new ( ELeave ) + CVtEngStateAlerting( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::EReceiving: + newState = new ( ELeave ) + CVtEngStateRinging( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::EConnected: + newState = new ( ELeave ) + CVtEngStateConnected( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::ENegotiating: + newState = new ( ELeave ) + CVtEngStateNegotiating( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::EOpen: + newState = new ( ELeave ) + CVtEngStateOpen( iStateManager, iEventManager ); + break; + case MVtEngSessionInfo::EClearing: + newState = new ( ELeave ) + CVtEngStateClearing( iStateManager, iEventManager ); + break; + default: + Panic( EVtEngPanicInvalidSessionState ); + break; + } + return newState; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::NegotiatingOrConnectedStateL +// +// ----------------------------------------------------------------------------- +// +CVtEngStateBase* CVtEngStateBase::NegotiatingOrConnectedStateL( + TBool aAcceptOnlyNegotiating ) + { + __VTPRINTENTER( "StateBase.NegOrCon" ) + __VTPRINT2( DEBUG_GEN, "StateBase.NegOrCon %d", aAcceptOnlyNegotiating) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + CVtEngStateBase* newState = NULL; + if ( bearerstate == MVtCtlCallControl::EConnected ) + { + const MVtProtocolCommand::TVtProtocolState state( MediaHandler().ProtoState() ); + const CVtEngSettings& settings = CVtEngUtility::Settings(); + const TBool readyForConnect = settings.Config().iReadyForConnect; + + __VTPRINT3( DEBUG_GEN, "StateBase.NegOrCon readyForConnect:%d, state:%d", readyForConnect, state) + __VTPRINT2( DEBUG_GEN, "StateBase.NegOrCon iIsDataportLoaned:%d", settings.Config().iIsDataportLoaned) + + if ( readyForConnect && state == MVtProtocolCommand::ESetup && settings.Config().iIsDataportLoaned ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "StateBase.NegOrCon ready & ESetup") + const TInt res( MediaHandler().Connect() ); + if ( res == KErrNotReady ) + { + // Cannot be done yet, need to wait for an operation + // to complete. + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "StateBase.NegOrCon not ready" ) + } + else if ( res != KErrNone ) + { + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "StateBase.NegOrCon fail") + iEventManager.NotifyEvent( KVtEngNegotiationProblem ); + } + else + { + // change to negotiating state + newState = NewStateL( MVtEngSessionInfo::ENegotiating ); + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "StateBase.NegOrCon-->negotiating") + } + } + else if ( !aAcceptOnlyNegotiating ) + { + newState = NewStateL( MVtEngSessionInfo::EConnected ); + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, + "StateBase.NegOrCon-->connected") + } + } + __VTPRINTEXIT( "StateBase.NegOrCon" ) + return newState; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::TerminateSessionL +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateBase::TerminateSessionL( CVtEngOperation& aOp ) + { + // State transition to "clearing state" initiates disconnect on protocol. + CVtEngStateBase* newState = NewStateL( MVtEngSessionInfo::EClearing ); + // just store aOp for callback to UI + CVtEngMediaHandler& mHandler = MediaHandler(); + CleanupStack::PushL( newState ); + newState->OpenL( this ); + CleanupStack::Pop(); // newState + mHandler.HandleL( aOp ); + } + +// ----------------------------------------------------------------------------- +// CVtEngStateBase::ValidateCommand +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateBase::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateBase.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + // Flow through, ok to execute ==> check the state possibilities + case KVtEngInitializeEngine: + case KVtEngInitializeEngineDiag: + case KVtEngInitializeEngineTest: + case KVtEngResetEngine: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngPrepareRemoteRender: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngPrepareViewFinder: + // Media + case KVtEngSetUIForeground: + okToPerform = ETrue; + break; + case KVtEngPrepareCamera: + case KVtEngSetSource: + case KVtEngSetZoomStep: + case KVtEngStartViewFinder: + case KVtEngFreeze: + case KVtEngUnfreeze: + case KVtEngSetVideoQuality: + case KVtEngHandleLayoutChange: + + // Media object sharing + case KVtEngInitializeShareImage: + case KVtEngStartShareImage: + case KVtEngStopShareImage: + + case KVtEngMuteOutgoingAudio: + case KVtEngUnmuteOutgoingAudio: + case KVtEngSetAudioRouting: + case KVtEngSetAudioVolume: + case KVtEngIncreaseAudioVolume: + case KVtEngDecreaseAudioVolume: + case KVtEngRequestLastRemoteFrame: + + okToPerform = + ( MediaHandler().ValidateCommand( aCommandId ) == KErrNone ); + break; + default: + case KVtEngTerminateSession: // valid only in open state + break; + } + return okToPerform; + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateClearing.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateClearing.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2006 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: Base class for states +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateClearing.h" +#include +#include "CVtEngOperation.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::CVtEngStateClearing +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateClearing::CVtEngStateClearing( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateClearing::~CVtEngStateClearing() + { + __VTPRINT( DEBUG_DESTRUCT, "~StateClr") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::UpdateL +// Updates state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateClearing::UpdateL() + { + __VTPRINTENTER( "StateClr.Update" ) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + const MVtProtocolCommand::TVtProtocolState protostate( MediaHandler().ProtoState() ); + + __VTPRINT2( DEBUG_GEN, "StateClr.bearerState=%d", bearerstate ) + __VTPRINT2( DEBUG_GEN, "StateClr.protoState=%d", protostate ) + + if ( bearerstate == MVtCtlCallControl::EIdle || + bearerstate == MVtCtlCallControl::EDisconnecting || + bearerstate == MVtCtlCallControl::EUnknown || + protostate == MVtProtocolCommand::EIdle || + protostate == MVtProtocolCommand::ESetup ) + { + CVtEngStateBase* idleState = NewStateL( MVtEngSessionInfo::EIdle ); + idleState->OpenL( this ); + } + __VTPRINTEXIT( "StateClr.Update" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::OpenL +// State transition to clearing state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateClearing::DoOpenL() + { + __VTPRINTENTER( "StateClr.Open") + + // Do disconnect on Protocol, it is possible that disconnect is already + // ongoing and we get error and that's fine. + TInt err( MediaHandler().Disconnect() ); + if ( err != KErrNone && err != KErrAlreadyExists ) + { + __VTPRINT2( DEBUG_GEN, "StateClr.OpenL disconnect fail=%d", err) + } + // Reset settings + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.ResetAll(); + NotifyStateChange( MVtEngSessionInfo::EClearing ); + __VTPRINTEXIT( "StateClr.Open") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::ValidateCommand +// Returns if a command is valid in idle state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateClearing::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngTerminateSession: + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateClearing::State() const + { + return MVtEngSessionInfo::EClearing; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateClearing::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateClearing::HandleL( CVtEngOperation& aOp ) + { + TBool handled( CVtEngStateBase::HandleL( aOp )); + return handled; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateConnected.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateConnected.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004-2006 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: Base class for states +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateConnected.h" +#include +#include "CVtEngOperation.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::CVtEngStateConnected +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateConnected::CVtEngStateConnected( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateConnected::~CVtEngStateConnected() + { + __VTPRINT( DEBUG_DESTRUCT, "~StateConnected") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::UpdateL +// Updates state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateConnected::UpdateL() + { + __VTPRINTENTER( "StateConnected.Update") + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + MVtProtocolCommand::TVtProtocolState state( MediaHandler().ProtoState() ); + + + CVtEngStateBase* newState = NULL; + if ( bearerstate != MVtCtlCallControl::EConnected ) + { + // we've lost bearer connection, go to idle + newState = NewStateL( MVtEngSessionInfo::EIdle ); + } + else if ( state == MVtProtocolCommand::EConnected ) + { + // protocol is open (should always go through neg.state but just in case) + // change to open state + newState = NewStateL( MVtEngSessionInfo::EOpen ); + } + else if ( state == MVtProtocolCommand::EDisconnecting || + state == MVtProtocolCommand::EResetting ) + { + // change to clearing state + newState = NewStateL( MVtEngSessionInfo::EClearing ); + } + else + { + // protocol is set up so connect now if ready + newState = NegotiatingOrConnectedStateL( ETrue ); + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateConnected.Update") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::DoOpenL +// State transition to connected state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateConnected::DoOpenL() + { + __VTPRINTENTER( "StateConnected.Open") + NotifyStateChange( MVtEngSessionInfo::EConnected ); + //start monitor incoming call + __VTPRINTEXIT( "StateConnected.Open") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::ValidateCommand +// Returns if a command is valid in idle state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateConnected::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL |DEBUG_GEN, "StateConnected.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngSetSource: + case KVtEngPrepareViewFinder: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngStopViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateConnected::State() const + { + return MVtEngSessionInfo::EConnected; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateConnected::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateConnected::HandleL( CVtEngOperation& aOp ) + { + TBool handled( CVtEngStateBase::HandleL( aOp )); + return handled; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateIdle.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateIdle.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2004-2006 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: Idle state +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateIdle.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateIdle::CVtEngStateIdle +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateIdle::CVtEngStateIdle( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateIdle::~CVtEngStateIdle() + { + __VTPRINT( DEBUG_DESTRUCT, "~Stateidl") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateIdle::UpdateL +// Updates state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateIdle::UpdateL() + { + __VTPRINTENTER( "StateIdle.Update") + + const MVtCtlCallControl::TVtCtlState state = SessionHandler().RealState(); + CVtEngStateBase* newState = NULL; + + if( iStateManager.PreviousSessionState() == MVtEngSessionInfo::EUnknown ) + { + switch ( state ) + { + case MVtCtlCallControl::EInitializing: + newState = NewStateL( MVtEngSessionInfo::EInitializing ); + break; + case MVtCtlCallControl::EAlerting: + newState = NewStateL( MVtEngSessionInfo::ERemoteAlerting ); + break; + case MVtCtlCallControl::ERinging: + newState = NewStateL( MVtEngSessionInfo::EReceiving ); + break; + case MVtCtlCallControl::EConnected: + newState = NegotiatingOrConnectedStateL(); + break; + default: + break; + } + if ( newState ) + { + CVtEngUtility* utils = CVtEngUtility::EngineUtils(); + + // Notify UI about initial autolock state. UI must have this + // information early enough to deduce if it is allowed to + // go to foreground. + utils->NotifyLockState(); + utils->StartSATListenL(); + newState->OpenL( this ); + } + } + else + { + __VTPRINT( DEBUG_GEN, "StateIdle.Update wrong previous state, ignoring") + } + __VTPRINTEXIT( "StateIdle.Update") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateIdle::OpenL +// State transition to idle. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateIdle::DoOpenL() + { + __VTPRINTENTER( "StateIdle.Open") + // Reset settings + CVtEngSettings& settings = CVtEngUtility::Settings(); + settings.ResetAll(); + + NotifyStateChange( MVtEngSessionInfo::EIdle ); + __VTPRINTEXIT( "StateIdle.Open") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateIdle::ValidateCommand +// Returns if a command is valid in idle state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateIdle::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateIdle.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngPrepareViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRender: + case KVtEngPrepareRemoteRenderNGA: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateIdle::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateIdle::State() const + { + return MVtEngSessionInfo::EIdle; + } + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateInitializing.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateInitializing.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2006 - 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" +* 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: Initializing state +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateInitializing.h" +#include "CVtEngOperation.h" +#include "CVtEngSettings.h" +#include "VtEngUtils.h" +#include "CVtEngAudioHandler.h" +#include "CVtEngInitializer.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::CVtEngStateInitializing +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateInitializing::CVtEngStateInitializing( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateInitializing::~CVtEngStateInitializing() + { + __VTPRINT( DEBUG_DESTRUCT, "~Stateini") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::UpdateL +// Updates state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateInitializing::UpdateL() + { + __VTPRINTENTER( "StateInit.Update") + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + + CVtEngStateBase* newState = NULL; + if ( bearerstate == MVtCtlCallControl::EIdle || + bearerstate == MVtCtlCallControl::EDisconnecting ) + { + newState = NewStateL( MVtEngSessionInfo::EClearing ); + // Initializer may be waiting for dataport. In that case MediaHandler + // has already signaled reqStatus of CVtEngInitializer which must + // complete KVtEngInitializeEngine command in order uninitialisation to + // finish properly. This scenario may happen in 1st call since phone + // boot, i.e. when dataport name is not already published. + CVtEngUtility::EngineUtils()->Initializer().CancelInit(); + } + else if ( bearerstate == MVtCtlCallControl::EAlerting ) + { + newState = NewStateL( MVtEngSessionInfo::ERemoteAlerting ); + } + else + { + newState = NegotiatingOrConnectedStateL(); // or null + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateInit.Update") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::OpenL +// State transition to initializing. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateInitializing::DoOpenL() + { + __VTPRINTENTER( "StateInit.Open" ) + NotifyStateChange( MVtEngSessionInfo::EInitializing ); + + // Instantiate temporary devsound for audio routing + AudioHandler().SetRoutingEnablerL( ETrue ); + __VTPRINTEXIT( "StateInit.Open" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::ValidateCommand +// Returns if a command is valid in initializing state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateInitializing::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateInit.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngPrepareViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngSetSource: + case KVtEngStartViewFinder: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateInitializing::State() const + { + return MVtEngSessionInfo::EInitializing; + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateInitializing::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateInitializing::HandleL( CVtEngOperation& aOp ) + { + TBool handled( CVtEngStateBase::HandleL( aOp )); + if ( !handled ) + { + switch ( aOp.Command() ) + { + case KVtEngStartRenderRemote: + SetVideoEnabled( ETrue ); + handled = ETrue; + break; + } + } + return handled; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateManager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2006 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 state manager for session and audio routing states. +* +*/ + + + +// INCLUDE FILES +#include "CVtEngStateManager.h" +#include "CVtEngHandlerContainer.h" +#include "CVtEngStateBase.h" +#include "CVtEngStateIdle.h" +#include "CVtEngStateOpen.h" +#include "CVtEngEventManager.h" +#include "CVtEngStateConnected.h" +#include "CVtEngOperation.h" +#include "cvtlogger.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::CVtEngStateManager +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateManager::CVtEngStateManager( + CVtEngHandlerContainer& aHandlers, + CVtEngEventManager& aEventManager ) : + iPreviousSessionState( MVtEngSessionInfo::EUnknown ), + iHandlers( aHandlers ), + iEventManager( aEventManager ) + { + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtEngStateManager::ConstructL() + { + iSessionState = new ( ELeave ) + CVtEngStateIdle( *this, iEventManager ); + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtEngStateManager* CVtEngStateManager::NewL( + CVtEngHandlerContainer& aHandlers, + CVtEngEventManager& aEventManager ) + { + __VTPRINT( DEBUG_GEN , "CVtEngStateManager::NewL" ) + CVtEngStateManager* self = new ( ELeave ) + CVtEngStateManager( aHandlers, aEventManager ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CVtEngStateManager::~CVtEngStateManager() + { + __VTPRINT( DEBUG_GEN , "CVtEngStateManager::~" ) + delete iSessionState; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::UpdateL +// Updates current state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateManager::Update( ) + { + if ( iSessionState ) + { + TRAPD(err,iSessionState->UpdateL()); + if ( err != KErrNone ) + { + __VTPRINT2( DEBUG_GEN, "SM.update fail=%d", err ) + iEventManager.NotifyEvent( err ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::IsCommandPossible +// Checks if a command is possible in current state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateManager::IsCommandPossible( + const TVtEngCommandId aCommandId ) const + { + if ( iSessionState ) + { + return iSessionState->ValidateCommand( aCommandId ); + } + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::SetState +// Sets new session state. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateManager::SetState( CVtEngStateBase& aNewState ) + { + if( iSessionState ) + { + iPreviousSessionState = iSessionState->State(); + } + iSessionState = &aNewState; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::HandleOperationL +// +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateManager::HandleOperationL( CVtEngOperation& aOp ) + { + __VTPRINT2( DEBUG_GEN, "StateMgr.HandleOp=%d", aOp.Command() ) + TInt handled( EFalse ); + if ( iSessionState ) + { + handled = iSessionState->HandleL( aOp ); + } + __VTPRINT2( DEBUG_GEN | DEBUG_RETURN, "StateMgr.HandleOp handled=%d", + handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::SessionState +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateManager::SessionState() const + { + if ( iSessionState ) + { + return iSessionState->State(); + } + return MVtEngSessionInfo::EUnknown; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateManager::PreviousSessionState +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateManager::PreviousSessionState() const + { + return iPreviousSessionState; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateNegotiating.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateNegotiating.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2004-2006 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: Negotiating state +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateNegotiating.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::CVtEngStateNegotiating +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateNegotiating::CVtEngStateNegotiating( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateNegotiating::~CVtEngStateNegotiating() + { + __VTPRINT( DEBUG_DESTRUCT, "~Stateneg") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::UpdateL +// Updates state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateNegotiating::UpdateL() + { + __VTPRINTENTER( "StateNegotiate.Update" ) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + const MVtProtocolCommand::TVtProtocolState state( MediaHandler().ProtoState() ); + CVtEngStateBase* newState = NULL; + + if ( bearerstate != MVtCtlCallControl::EConnected || + state == MVtProtocolCommand::ESetup ) // <- connect failed + { + newState = NewStateL( MVtEngSessionInfo::EClearing ); + } + else if ( state == MVtProtocolCommand::EConnected ) + { + // change to open state + newState = NewStateL( MVtEngSessionInfo::EOpen ); + } + else if ( state == MVtProtocolCommand::ESetup ) + { + // should not usually happen unless connect fails + newState = NewStateL( MVtEngSessionInfo::EConnected ); + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateNegotiate.Update" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::OpenL +// State transition to negotiating. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateNegotiating::DoOpenL( ) + { + __VTPRINTENTER( "StateNegotiate.Open" ) + NotifyStateChange( MVtEngSessionInfo::ENegotiating); + __VTPRINTEXIT( "StateNegotiate.Open" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::ValidateCommand +// Returns if a command is valid in negotiating state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateNegotiating::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateNegotiate.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngPrepareViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRender: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngStartRenderRemote: // cached to settings + case KVtEngSetSource: + case KVtEngPrepareCamera: + case KVtEngSetZoomStep: + case KVtEngStartViewFinder: + case KVtEngStopViewFinder: + case KVtEngTerminateSession: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateNegotiating::State() const + { + return MVtEngSessionInfo::ENegotiating; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateNegotiating::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateNegotiating::HandleL( CVtEngOperation& aOp ) + { + __VTPRINTENTER( "StateNegotiate.HandleL" ) + TBool handled( CVtEngStateBase::HandleL( aOp ) ); + if ( !handled ) + { + switch ( aOp.Command() ) + { + case KVtEngStartRenderRemote: + SetVideoEnabled( ETrue ); + handled = ETrue; + break; + case KVtEngTerminateSession: + TerminateSessionL( aOp ); + break; + } + } + __VTPRINTEXITR( "StateNegotiate.HandleL %d", handled ) + return handled; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateOpen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateOpen.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,288 @@ +/* +* Copyright (c) 2006 - 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: Open state handle interfaces implementation +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateOpen.h" +#include "CVtEngOperation.h" +#include "CVtEngAudioHandler.h" +#include + +#include "CVtEngExtensions.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::CVtEngStateOpen +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateOpen::CVtEngStateOpen( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateOpen::~CVtEngStateOpen() + { + __VTPRINT( DEBUG_DESTRUCT, "~StateOpen") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::UpdateL +// Updates state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateOpen::UpdateL() + { + __VTPRINTENTER( "StateOpen.Update" ) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + + const MVtProtocolCommand::TVtProtocolState protoState( MediaHandler().ProtoState() ); + const TBool bearerIdle = ( bearerstate == MVtCtlCallControl::EIdle || + bearerstate == MVtCtlCallControl::EUnknown ); + const TBool bearerDisconnecting = + ( bearerstate == MVtCtlCallControl::EDisconnecting ); + + CVtEngStateBase* newState = NULL; + + if ( protoState == MVtProtocolCommand::ESetup || + protoState == MVtProtocolCommand::EIdle || + bearerIdle ) + { + newState = NewStateL( MVtEngSessionInfo::EIdle ); + } + else if ( bearerDisconnecting || protoState == MVtProtocolCommand::EDisconnecting ) + { + newState = NewStateL( MVtEngSessionInfo::EClearing ); + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateOpen.Update" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::OpenL +// State transition to open. +// ----------------------------------------------------------------------------- +// +void CVtEngStateOpen::DoOpenL() + { + __VTPRINTENTER( "StateOpen.Open" ) + + // set audio routing (and ouput volume) + RouteAudioL( NULL ); + + NotifyStateChange( MVtEngSessionInfo::EOpen ); + __VTPRINTEXIT( "StateOpen.Open" ) + } + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::ValidateCommand +// Returns if a command is valid in open state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateOpen::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "StateOpen.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngInitializeEngine: // temporary + case KVtEngPrepareCamera: + case KVtEngSetZoomStep: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngStopViewFinder: + case KVtEngStartRenderRemote: + case KVtEngStopRenderRemote: + case KVtEngPauseRenderRemote: + case KVtEngTerminateSession: + case KVtEngStartDtmfTone: + case KVtEngStopDtmfTone: + // Handling of different UIIs, support is there + case KVtEngSetUIIDtmfSupport: + case KVtEngSetUIIBasicStringSupport: + case KVtEngSetUIIIA5StringSupport: + case KVtEngSetUIIGeneralStringSupport: + case KVtEngSwitchToVoice: + okToPerform = ETrue; + break; + + // Extension commands + case KVtEngSetContrast: + case KVtEngSetBrightness: + case KVtEngSetWhiteBalance: + case KVtEngSetColorTone: +#if defined ( RD_VT_RTF ) + case KVtEngStartRecord: + case KVtEngStopRecord: +#endif // RD_VT_RTF + { + // Get extension handle from Utils + __VTPRINT(DEBUG_GEN, "StateOpen extension->ValidateCommand") + okToPerform = CVtEngUtility::Extensions()->ValidateCommand( + aCommandId ); + break; + } + + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateOpen::State() const + { + return MVtEngSessionInfo::EOpen; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::HandleL +// Handles an operation when behavior is state dependent. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateOpen::HandleL( CVtEngOperation& aOp ) + { + __VTPRINTENTER( "StateOpen.HandleL" ) + TBool handled( CVtEngStateBase::HandleL( aOp ) ); + switch ( aOp.Command() ) + { + case KVtEngTerminateSession: + TerminateSessionL( aOp ); + handled = ETrue; + break; + + case KVtEngSwitchToVoice: + { + CVtEngStateBase* newState = + NewStateL( MVtEngSessionInfo::EClearing ); + CleanupStack::PushL( newState ); + newState->OpenL( this ); + CleanupStack::Pop(); + // aOp is not passed to media handler because mediator command + // sender signals completion, see + // CVtEngMdtrCommandSender::HandleVtEventL + } + break; + + // Extension commands + case KVtEngSetContrast: + case KVtEngSetBrightness: + case KVtEngSetWhiteBalance: + case KVtEngSetColorTone: +#if defined ( RD_VT_RTF ) + case KVtEngStartRecord: + case KVtEngStopRecord: +#endif // RD_VT_RTF + CallExtensionL( &aOp); + break; + default: + break; + } + __VTPRINTEXITR( "StateOpen.HandleL %d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::RouteAudioL +// Handles audio routing operation. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateOpen::RouteAudioL( + CVtEngOperation* aOp ) + { + __VTPRINTENTER( "StateOpen.RouteAudioL" ) + CVtEngSettings& settings = CVtEngUtility::Settings(); + const CVtEngSettings::TVtEngVideoCallConfig& config = settings.Config(); + + CVtEngAudioHandler& audioHandler = AudioHandler(); + MVtEngAudio::TAudioRoutingState routingState( MVtEngAudio::EAudioWiredHeadset ); + audioHandler.GetRoutingState( routingState ); + + TBool routeAudio( ETrue ); + TInt volume( config.iAudio.iVolume.iHandsfreeVolume ); + switch ( routingState ) + { + case MVtEngAudio::EAudioWiredHeadset: + routeAudio = EFalse; + // fall thru + case MVtEngAudio::EAudioHandset: + case MVtEngAudio::EAudioBT: + volume = config.iAudio.iVolume.iHandsetVolume; + break; + // use default values + case MVtEngAudio::EAudioLoudspeaker: + default: + break; + } + __VTPRINT3( DEBUG_GEN | DEBUG_DETAIL, + "StateOpen.RouteAudioL route=%d,vol=%d", routeAudio,volume ) + if ( aOp == NULL || ( aOp && routeAudio ) ) + { + // set volume if state was changed (called from DoOpenL) or + // audio routing will be changed + __VTPRINT( DEBUG_GEN | DEBUG_DETAIL, "StateOpen.RouteAudioL SetVol" ) + MediaHandler().SetVolume( volume ); + } + + // *** AUDIO && ( aOp != NULL ) *** + if ( routeAudio && ( aOp != NULL ) ) + { + if ( aOp ) + { + audioHandler.HandleL( *aOp ); + } + } + __VTPRINTEXIT( "StateOpen.RouteAudioL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateOpen::CallExtensionL +// Handles extension operations. +// +// ----------------------------------------------------------------------------- +// +void CVtEngStateOpen::CallExtensionL( + CVtEngOperation* aOp) + { + __VTPRINTENTER( "StateOpen.CallExtensionL" ) + CVtEngUtility::Extensions()->OfferOperationL( aOp ); + __VTPRINTEXIT( "StateOpen.CallExtensionL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/Src/State/CVtEngStateRinging.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/Src/State/CVtEngStateRinging.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2004-2006 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: Ringing state handle interfaces implementation +* +*/ + + +// INCLUDE FILES +#include "CVtEngStateRinging.h" +#include "CVtEngInitializer.h" +#include "VtEngUtils.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtEngStateRinging::CVtEngStateRinging +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtEngStateRinging::CVtEngStateRinging( + CVtEngStateManager& aStateManager, + CVtEngEventManager& aEventManager ) + : CVtEngStateBase( aStateManager, aEventManager ) + { + } + +// Destructor +CVtEngStateRinging::~CVtEngStateRinging() + { + __VTPRINT( DEBUG_DESTRUCT, "~StateRing") + } + + +// ----------------------------------------------------------------------------- +// CVtEngStateRinging::UpdateL +// Updates state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateRinging::UpdateL() + { + __VTPRINTENTER( "StateRing.Update" ) + const MVtCtlCallControl::TVtCtlState bearerstate = + SessionHandler().RealState(); + CVtEngStateBase* newState = NULL; + switch ( bearerstate ) + { + case MVtCtlCallControl::EConnected: + newState = NegotiatingOrConnectedStateL(); + break; + case MVtCtlCallControl::EDisconnecting: + case MVtCtlCallControl::EIdle: + newState = NewStateL( MVtEngSessionInfo::EIdle ); + // Initializer may be waiting for dataport. In that case MediaHandler + // has already signaled reqStatus of CVtEngInitializer which must + // complete KVtEngInitializeEngine command in order uninitialisation to + // finish properly. This scenario may happen in 1st call since phone + // boot, i.e. when dataport name is not already published. + CVtEngUtility::EngineUtils()->Initializer().CancelInit(); + break; + default: + break; + } + if ( newState ) + { + newState->OpenL( this ); + } + __VTPRINTEXIT( "StateRing.Update") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateRinging::OpenL +// State transition to Ring. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtEngStateRinging::DoOpenL() + { + __VTPRINTENTER( "StateRing.Open") + NotifyStateChange( MVtEngSessionInfo::EReceiving ); + __VTPRINTEXIT( "StateRing.Open") + } + +// ----------------------------------------------------------------------------- +// CVtEngStateRinging::ValidateCommand +// Returns if a command is valid in ringing state. +// +// ----------------------------------------------------------------------------- +// +TBool CVtEngStateRinging::ValidateCommand( + const TVtEngCommandId aCommandId ) + { + __VTPRINT( DEBUG_DETAIL | DEBUG_GEN, "Statering.Validate") + TBool okToPerform( EFalse ); + switch ( aCommandId ) + { + case KVtEngSetSource: + case KVtEngPrepareViewFinder: + case KVtEngStartViewFinder: + case KVtEngPauseViewFinder: + case KVtEngPrepareRemoteRenderDSA: + case KVtEngPrepareRemoteRenderDP: + case KVtEngPrepareRemoteRender: + case KVtEngPrepareRemoteRenderNGA: + case KVtEngStartRenderRemote: + okToPerform = ETrue; + break; + default: + okToPerform = CVtEngStateBase::ValidateCommand( aCommandId ); + break; + } + return okToPerform; + } + +// ----------------------------------------------------------------------------- +// CVtEngStateRinging::State +// Returns session state. +// +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState CVtEngStateRinging::State() const + { + return MVtEngSessionInfo::EReceiving; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/bwins/VIDEOTELENGU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/bwins/VIDEOTELENGU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,9 @@ +EXPORTS + ??1CVtEngModel@@UAE@XZ @ 1 NONAME ; CVtEngModel::~CVtEngModel(void) + ?Audio@CVtEngModel@@QBEAAVMVtEngAudio@@XZ @ 2 NONAME ; class MVtEngAudio & CVtEngModel::Audio(void) const + ?CommandHandler@CVtEngModel@@QBEAAVMVtEngCommandHandler@@XZ @ 3 NONAME ; class MVtEngCommandHandler & CVtEngModel::CommandHandler(void) const + ?Extension@CVtEngModel@@QAEPAXABVTUid@@@Z @ 4 NONAME ; void * CVtEngModel::Extension(class TUid const &) + ?Media@CVtEngModel@@QBEAAVMVtEngMedia@@XZ @ 5 NONAME ; class MVtEngMedia & CVtEngModel::Media(void) const + ?NewL@CVtEngModel@@SAPAV1@AAVMVtEngEventObserver@@AAVMVtEngCommandObserver@@@Z @ 6 NONAME ; class CVtEngModel * CVtEngModel::NewL(class MVtEngEventObserver &, class MVtEngCommandObserver &) + ?Session@CVtEngModel@@QBEAAVMVtEngSessionInfo@@XZ @ 7 NONAME ; class MVtEngSessionInfo & CVtEngModel::Session(void) const + diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/data/videoteleng_stub.SIS Binary file vtengines/videoteleng/data/videoteleng_stub.SIS has changed diff -r 000000000000 -r ed9695c8bcbe vtengines/videoteleng/data/videoteleng_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/videoteleng/data/videoteleng_stub.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +; +; 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: +; +; Languages +&EN + +; Header +#{"videoteleng"}, (0x101F867F), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +;Files +""-"z:\sys\bin\videoteleng.dll" +""-"z:\sys\bin\cscallctrl.dll" +""-"z:\sys\bin\vtlogger.dll" diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/data/vtmediatorplugin.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/data/vtmediatorplugin.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,35 @@ +; +; 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: +; + +; vtmediatorplugin.pkg +; +; Languages +&EN + +;Header +#{"vtmediatorplugin patch"},(0x2001599F),10,1,0,TYPE=PU + +; localized vendor name +%{"Nokia"} + +; unique vendor name +:"Nokia" + +"\epoc32\release\armv5\udeb\vtmediatorplugin.dll"-"!:\sys\bin\vtmediatorplugin.dll" +"\epoc32\data\z\resource\plugins\vtmediatorplugin.rsc"-"!:\sys\bin\vtmediatorplugin.rsc" + + +; End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/data/vtmediatorplugin.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/data/vtmediatorplugin.rss Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,55 @@ +/* +* 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" +* 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 for VT Mediator plugin. +* +*/ + + +// RESOURCE IDENTIFIER +// n/a + +// INCLUDES +#include +#include + + +// ----------------------------------------------------------------------------- +// theInfo +// ECom interface definition for the VT Mediator plugin. +// ----------------------------------------------------------------------------- +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = 0x2001599F; + interfaces = + { + INTERFACE_INFO + { + interface_uid = KMediatorPluginInterfaceUid; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x200159A0; + version_no = 1; + display_name = "VT Mediator Plugin"; + default_data = "Mediator"; + opaque_data = ""; + rom_only = 1; + } + }; + } + }; + } + diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/data/vtmediatorplugin.sis Binary file vtengines/vtmediatorplugin/data/vtmediatorplugin.sis has changed diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/data/vtmediatorplugin_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/data/vtmediatorplugin_stub.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -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 "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: +; +; Languages +&EN + +; Header +#{"vtmediatorplugin"}, (0x2001599F), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +;Files +""-"z:\sys\bin\vtmediatorplugin.dll" +""-"z:\resource\plugins\vtmediatorplugin.r*" diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/data/vtmediatorplugin_stub.sis Binary file vtengines/vtmediatorplugin/data/vtmediatorplugin_stub.sis has changed diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,32 @@ +/* +* 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" +* 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: Video Telephony Mediator Plugin +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/vtinternalmediatorapi.h |../../../inc/vtinternalmediatorapi.h + +../data/vtmediatorplugin_stub.sis /epoc32/data/z/system/install/vtmediatorplugin_stub.sis + +// Export IBY file +../rom/vtmediatorplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(vtmediatorplugin.iby) + +PRJ_MMPFILES +vtmediatorplugin.mmp diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/group/vtmediatorplugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/group/vtmediatorplugin.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,52 @@ +/* +* 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" +* 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: Video telephony mediator plugin +* +*/ + + +#include +#include // for APP_LAYER_SYSTEMINCLUDE macro + +// Build target + +CAPABILITY CAP_ECOM_PLUGIN +TARGET vtmediatorplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x2001599F +VENDORID VID_DEFAULT + +SOURCEPATH ../data +START RESOURCE vtmediatorplugin.rss +TARGET vtmediatorplugin.rsc +END + +SOURCEPATH ../src +SOURCE cvtmediatorplugin.cpp +SOURCE vtmediatorpluginproxy.cpp + +USERINCLUDE ../inc +SYSTEMINCLUDE ../../../inc +SYSTEMINCLUDE /epoc32/include/ecom +APP_LAYER_SYSTEMINCLUDE + +LIBRARY apparc.lib +LIBRARY apgrfx.lib +LIBRARY euser.lib +LIBRARY ws32.lib +LIBRARY ecom.lib +LIBRARY mediatorclient.lib +LIBRARY mediatorpluginbase.lib + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/inc/cvtmediatorplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/inc/cvtmediatorplugin.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,349 @@ +/* +* 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" +* 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: Video Telephony mediator plugin header +* +*/ + + +#ifndef C_VTMEDIATORPLUGIN_H +#define C_VTMEDIATORPLUGIN_H + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +using namespace TelephonyMediator; +using namespace MediatorService; + +class TelephonyMediator::TTelephonyCallDataParam; +class CMediatorCommandInitiator; +/** +* Mediator plugin for CS video telephony. Fullfills responsibilities: +* - launches Video Telephone application +* - caches CLI and Dataport information for VT app for time between +* the data is broadcasted to time VT is ready to receive it. +* @since S60 5.0 +*/ + +class CVtMediatorPlugin : public CMediatorPluginBase, + public MMediatorNotifications, + public MMediatorEventObserver, + public MMediatorCommandObserver, + public MMediatorCommandResponseObserver + { +public: + + static CMediatorPluginBase* NewL(); + + /** + * Destructor. + */ + ~CVtMediatorPlugin(); + +public: // From Base class + + virtual void StartL(); + +public: // From MMediatorNotifications + + /** + * Raises VT specific CLI/dataport event when event is registered by VT app, + * or when the information is available + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events that have been registered. + * @return None. + */ + virtual void MediatorEventsAddedL( TUid aDomain, + TUid aCategory, + const REventList& aEvents ); + + /** + * New commands have been registered. The commands can now be subscribed. + * The list can contain 1-n new commands into the category. + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands List of commands that have been registered. + * @return None. + */ + virtual void MediatorCommandsAddedL( TUid aDomain, + TUid aCategory, + const RCommandList& aCommands ); + + /** + * A category has been removed. All subscriptions are cancelled. + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @return None. + */ + virtual void MediatorCategoryRemovedL( TUid aDomain, TUid aCategory ); + + /** + * List of events has been removed. All subscriptions are cancelled. + * List can contain 1-n events from the specified category. + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEvents The list of events removed. + * @return None. + */ + virtual void MediatorEventsRemovedL( TUid aDomain, + TUid aCategory, + const REventList& aEvents ); + + /** + * List of commands have been removed. All subscriptions are cancelled. + * List can contain 1-n commands from the specified category. + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aCommands The list of commands removed + * @return None. + */ + virtual void MediatorCommandsRemovedL( TUid aDomain, + TUid aCategory, + const MediatorService::RCommandList& aCommands ); + +public: // from MMediatorCommandObserver + + /** + * @see MMediatorCommandObserver::MediatorCommandL + */ + virtual void MediatorCommandL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TVersion aVersion, + const TDesC8& aData ); + + /** + * @see MMediatorCommandObserver::CancelMediatorCommand + */ + virtual void CancelMediatorCommand( TUid aDomain, + TUid aCategory, + TInt aCommandId ); + +public:// from MMediatorCommandResponseObserver + /** + * @see MMediatorCommandResponseObserver::CommandResponseL + */ + virtual void CommandResponseL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TInt aStatus, + const TDesC8& aData ); + +public: // from MMediatorEventObserver + + /** + * A Mediator Service event. + * + * @since Series 60 3.1 + * @param aDomain The identifier of the domain. + * @param aCategory The identifier of the category. + * @param aEventId The identifier of the event. + * @param aData The parameters of the event. + * @return None. + */ + virtual void MediatorEventL( TUid aDomain, + TUid aCategory, + TInt aEventId, + const TDesC8& aData ); + +public: // new + static TInt EventRaiserCallback( TAny* aAny ); + +private: // constructors + + CVtMediatorPlugin(); void ConstructL(); + + enum TInternalState { + /** + * Waiting for video call state to reach value that is suitable + * for launching Video Telephone application. In this state + * video call is not ongoing. + */ + EWaitingAppLaunch, + + /** + * Waiting for VT application's readiness to receive video call info + * events. In this state video call is ongoing and VT application + * is starting up. + */ + EWaitingEventRegistration, + + /** + * VT application is ready to receive video call info events. + */ + EReady + }; + +private: // new functions + void ChangeCallDataEventSubscriptionL( + const REventList& aEvents, + const TBool aEventRegistered ); + + void HandleVtCommandUnregistrationL(); + + void HandleVtCommandRegistrationL(); + + void LaunchVtAppL(); + + void SaveCallData( const TelephonyMediator::TTelephonyCallDataParam& aData, TVtVideoTelephonyCallInformation& iVtCallInfo); + + void HandleDataportCommandL( const TDesC8& aData ); + + void ClearData(TVtVideoTelephonyCallInformation& aVtCallInfo, TCallState& aCallState); + + void RegisterVtInternalEventL(); + //test + void RegisterVtInternalEvent_2L(); + + void RegisterDataportCommandL(); + + void RaiseVtEventL(); + + /** + * Starts VT application if video call state transition is suitable. + */ + void HandleCallStateChangeL( const TelephonyMediator::TTelephonyCallDataParam& aData ); + + TBool IsEnoughMemory(); + + void FreeRam(); + + void StopDeathActiveL(); + +private: + // for detecting subscription to video call information from VT app. + CMediatorNotifications* iMediatorNotifications; + + // for sending video call information events + CMediatorEventProvider* iEventProvider; + + // for receiving CLI from Telephony + CMediatorEventConsumer* iEventConsumer; + + // for responding to dataport/releasedataport command from Telephony + CMediatorCommandResponder* iCommandResponder; + + // for issue command to vt app + CMediatorCommandInitiator* iCommandInitiator; + + // supported mediator commands + MediatorService::RCommandList iCommandList; + + // plugin's internal state + TInternalState iState; + + // cached active video call state (from last call data event from Telephony) + TCallState iActiveVideoCallState; + + TVtVideoTelephonyCallInformation iActiveVideoCallInfo; + + // cached waiting video call state (from last call data event from Telephony) + TCallState iWaitingVideoCallState; + + TVtVideoTelephonyCallInformation iWaitingVideoCallInfo; + + // for raising event to VT asynchronously when it starts up + CAsyncCallBack* iCallBack; + + class CAppDeathActive; + // Owned application death waiter. + CAppDeathActive* iAppDeathActive; + + // Owned application thread. + RThread iAppThread; + + // Application thread id. + TThreadId iAppThreadId; + + // Owned window server session. + RWsSession iWsSession; + /** + * Active object for waiting thread death. + * + * @since 2.6 + * @lib videotelcomms.lib + */ + NONSHARABLE_CLASS( CAppDeathActive ) : public CActive + { + public: // Constructors + + /** + * Constructor. + */ + CAppDeathActive( CVtMediatorPlugin& aMediatorPlugin, + RThread& aAppThread ); + + /** + * Destructor. + */ + ~CAppDeathActive(); + + public: // New functions + + /** + * Starts active object. + */ + void Start(); + + public: // From base classes + + /** + * @see CActive::RunL. + */ + virtual void RunL(); + + /** + * @see CActive::DoCancel. + */ + virtual void DoCancel(); + + /** + * @see CActive::RunError. + */ + virtual TInt RunError( TInt aError ); + + private: + + // Reference to starter. + CVtMediatorPlugin& iMediatorPlugin; + + // Reference to thread. + RThread& iAppThread; + + }; + + }; + +#endif // C_VTMEDIATORPLUGIN_H + diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/inc/vtinternalmediatorapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/inc/vtinternalmediatorapi.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,93 @@ +/* +* 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" +* 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: Message Interface between VT mediator plugin and VT application +* +*/ + + +#ifndef VTINTERNALMEDIATORAPI_H +#define VTINTERNALMEDIATORAPI_H + +// INCLUDES +#include + +/** The category UID for the messages in this header file. + * UID for category is not real UID, it just need to unique in Domain + */ +const TUid KCatVideotelInternalEvents = { 0x101F8690 }; +const TUid KCatVideotelInternalCommands = { 0x101F8691 }; + +/** Version number of this API */ +const TInt KVideotelMdtrEventVersionMajor( 1 ); +const TInt KVideotelMdtrEventVersionMinor( 0 ); +const TInt KVideotelMdtrEventVersionBuild( 0 ); + +/** Version number of this API */ +const TInt KVideotelMdtrCommandsVersionMajor( 1 ); +const TInt KVideotelMdtrCommandsVersionMinor( 0 ); +const TInt KVideotelMdtrCommandsVersionBuild( 0 ); + +struct TVtVideoTelephonyCallInformation +{ + /** Max length of display text */ + enum { TDisplayTextMaxLength = 100 }; + + /** Display text type definition */ + typedef TBuf TDisplayText; + + /** Remote end CLI identifier (name/number/call id) */ + TDisplayText iDisplayText; + + /** Call id of the video call */ + TInt iCallId; + + /** Indicates voice call creation possibility to remote end (number is + * available) + */ + TBool iVoiceCallPossible; + + /** Dataport name or empty buffer if not specified in the event */ + TName iDataport; + + /** + * Defines which parts of the event date is valid + */ + enum TMessageDataValidity { + EDisplayTextValid = 0x01, + EDataportValid = 0x02 + }; + + /** Event data validity */ + TUint iEventDataValidity; + +}; + +typedef TPckgBuf TVtMediatorInfoPackage; + +/** Events bwtween Video Telephony Mediator plugin and VT application. */ +enum TVideotelMdtrEvents + { + /** + * Event with TVtVideoTelephonyCallInformation as content + * Consuming event requires capability ECapabilityReadDeviceData + */ + EVtMediatorEventVideoCallInformation = 0 + }; + +enum TVideotelMdtrCommands + { + EVtMediatorReleaseDataport = 0 + }; + +#endif // VTINTERNALMEDIATORAPI_H diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/rom/vtmediatorplugin.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/rom/vtmediatorplugin.iby Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,25 @@ +/* +* 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" +* 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 + * +*/ + +#ifndef __VTMEDIATORPLUGIN_IBY__ +#define __VTMEDIATORPLUGIN_IBY__ + +#ifdef __CS_VIDEO_TELEPHONY +ECOM_PLUGIN( vtmediatorplugin.dll, vtmediatorplugin.rsc) +#endif +#endif + diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/src/cvtmediatorplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/src/cvtmediatorplugin.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1024 @@ +/* +* 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" +* 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: Video Telephony mediator plugin header +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cvtmediatorplugin.h" + + +// CONSTANTS +#ifdef _DEBUG +#define TRACE(x) RDebug::Print( _L(x) ); +#define TRACE2(x,y) RDebug::Print( _L(x),y ); +#else +#define TRACE(x) +#define TRACE2(x,y) +#endif + +// This array's values are used in algorithm defining if video telephone +// application should be started. Previous state value is substracted from new +// state value and if result is greater than zero, app is started. +// This tackles transitions where a state is for some reason skipped, +// e.g. idle -> connected (dialling/ringing/answering states were not detected). +// Negative value indicates call clearing. +static const TInt KVtCallStateActionArray[] = { + 0, //ECallStateUnknown + 0, //ECallStateIdle + 1, // ECallStateDialling + 0, // ECallStateEmergencyDialling (not valid video call state) + 1, // ECallStateRinging + 1, // ECallStateConnecting + 1, // ECallStateConnected + 0, // ECallStateHangingUp + 0, // ECallStateHeld (not valid video call state) + 1, // ECallStateAnswering + 0, // ECallStateRejecting + 0 // ECallStateDisconnecting + }; + +static const TInt KVtAppNotReady = 5000; + +static const TInt KVtEngMdtrCmdTimeout = 500000; + +static const TInt KVtInitCallId = -1000; + +// array granularity is 2 (use dataport, release dataport commands) +static const TInt KVtMdtrCmdArrayGranularity = 2; + +const TUid KVtCmVideoTelUiUid = { 0x101F8681 }; + +static const TInt KRamNeededForVideoCalls = 4000000; + +// VT application path +_LIT( KVtCmVideoTelUiPath, "\\sys\\bin\\videotelui.exe" ); + + +// ----------------------------------------------------------------------------- +// CMediatorTestPlugin::CMediatorTestPlugin +// First phase construction. +// ----------------------------------------------------------------------------- +CVtMediatorPlugin::CVtMediatorPlugin() : CMediatorPluginBase(), + iCommandList( KVtMdtrCmdArrayGranularity ), + iState( EWaitingAppLaunch ), + iActiveVideoCallState( ECallStateUnknown ), + iWaitingVideoCallState( ECallStateUnknown ) + + { + ClearData(iActiveVideoCallInfo, iActiveVideoCallState); + ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState); + } + +CMediatorPluginBase* CVtMediatorPlugin::NewL() + { + TRACE("CVtMediatorPlugin::NewL<") + CVtMediatorPlugin* self = new (ELeave) CVtMediatorPlugin; + TRACE("CVtMediatorPlugin::NewL>") + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +CVtMediatorPlugin::~CVtMediatorPlugin() + { + TRACE("CVtMediatorPlugin::~CVtMediatorPlugin<") + + if ( iMediatorNotifications ) + { + iMediatorNotifications->UnregisterNotificationObserver(); + delete iMediatorNotifications; + } + + // ignore error + if ( iEventConsumer ) + { + iEventConsumer->UnsubscribeEvent( + KMediatorTelephonyDomain, + KCatEventsFromTelephony, + EPhoneEventCallData ); + delete iEventConsumer; + } + + // ignore error + if ( iEventProvider ) + { + iEventProvider->UnregisterEvent( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalEvents, + EVtMediatorEventVideoCallInformation ); + delete iEventProvider; + } + + // ignore error + if ( iCommandResponder ) + { + iCommandResponder->UnregisterCommand( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + iCommandList ); + iCommandList.Close(); + delete iCommandResponder; + } + + delete iCommandInitiator; + + + if( iAppDeathActive ) + { + delete iAppDeathActive; + iAppThread.Close(); + iWsSession.Close(); + + } + + TRACE("CVtMediatorPlugin::~CVtMediatorPlugin>") + } + +// ----------------------------------------------------------------------------- +// StartL. +// ----------------------------------------------------------------------------- +void CVtMediatorPlugin::StartL() + { + TRACE("CVtMediatorPlugin.StartL<") + + // for monitoring VT app starting + iMediatorNotifications = CMediatorNotifications::NewL(); + iMediatorNotifications->RegisterNotificationObserver( this ); + + // consumer for call data events + iEventConsumer = CMediatorEventConsumer::NewL( this ); + + iCommandInitiator = CMediatorCommandInitiator::NewL( this ); + + + RegisterVtInternalEventL(); + + RegisterDataportCommandL(); + + TRACE("CVtMediatorPlugin.StartL>") + } + +// ----------------------------------------------------------------------------- +// MediatorEventL. +// ----------------------------------------------------------------------------- +void CVtMediatorPlugin::MediatorEventL( TUid /*aDomain*/, + TUid aCategory, + TInt aEventId, + const TDesC8& aData ) + { + TRACE("CVtMediatorPlugin.MediatorEventL<") + if ( aCategory == KCatEventsFromTelephony && + aEventId == EPhoneEventCallData ) + { + TTelephonyCallDataParamPackage pckg; + pckg.Copy( aData ); + const TTelephonyCallDataParam telCallData = pckg(); + HandleCallStateChangeL( telCallData ); + } + TRACE("CVtMediatorPlugin.MediatorEventL>") + } +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::MediatorEventsAddedL +// +// subscribes to CLI event when it is registered +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorEventsAddedL( TUid aDomain/*aDomain*/, + TUid aCategory, + const REventList& aEvents ) + { + TRACE("CVtMediatorPlugin.MediatorEventsAddedL<") + + if ( aCategory == KCatEventsFromTelephony ) + { + ChangeCallDataEventSubscriptionL( aEvents, ETrue ); + } + TRACE("CVtMediatorPlugin.MediatorEventsAddedL>") + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorCommandsAddedL( TUid /*aDomain*/, + TUid aCategory, + const RCommandList& /*aCommands*/ ) + { + TRACE("CVtMediatorPlugin.MediatorCommandsAddedL<") + if ( aCategory == KCatPhoneToVideotelCommands ) + { + HandleVtCommandRegistrationL(); + } + TRACE("CVtMediatorPlugin.MediatorCommandsAddedL>") + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorCategoryRemovedL( TUid /*aDomain*/, + TUid /*aCategory*/ ) + { + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorEventsRemovedL( TUid /*aDomain*/, + TUid aCategory, + const REventList& aEvents ) + { + TRACE("CVtMediatorPlugin.MediatorEventsRemovedL<") + if ( aCategory == KCatEventsFromTelephony ) + { + ChangeCallDataEventSubscriptionL( aEvents, EFalse ); + } + TRACE("CVtMediatorPlugin.MediatorEventsRemovedL>") + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorCommandsRemovedL( TUid /*aDomain*/, + TUid aCategory, + const RCommandList& /*aCommands*/ ) + { + TRACE("CVtMediatorPlugin.MediatorCommandsRemovedL<") + if ( aCategory == KCatPhoneToVideotelCommands ) + { + // VT has unregistered commands, meaning it is shutting down + HandleVtCommandUnregistrationL(); + } + TRACE("CVtMediatorPlugin.MediatorCommandsRemovedL>") + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::MediatorCommandL +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::MediatorCommandL( TUid aDomain, + TUid aCategory, + TInt aCommandId, + TVersion /*aVersion*/, + const TDesC8& aData ) + { + TRACE("CVtMediatorPlugin.MediatorCommandL<") + if ( aCategory == KCatPhoneToVideotelCommands ) + { + if ( aCommandId == EVtCmdUseDataport ) + { +#ifdef _DEBUG + // error in responding is ignored but printed on debug build + const TInt err = +#endif + iCommandResponder->IssueResponse( + aDomain, aCategory, aCommandId, KErrNone, KNullDesC8() ); + TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdUseDataport err=%d", err ) + HandleDataportCommandL( aData ); + } + else if ( aCommandId == EVtCmdReleaseDataport ) + { + if ( EReady == iState ) + { + const TVersion version( + KVideotelMdtrCommandsVersionMajor, + KVideotelMdtrCommandsVersionMinor, + KVideotelMdtrCommandsVersionBuild ); + +#ifdef _DEBUG + // error in responding is ignored but printed on debug build + const TInt err = +#endif + iCommandInitiator->IssueCommand( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalCommands, + EVtMediatorReleaseDataport, + version, + KNullDesC8() ); + TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdReleaseDataport, send to VT err=%d", err ) + + } + else + { +#ifdef _DEBUG + // error in responding is ignored but printed on debug build + const TInt err = +#endif + iCommandResponder->IssueResponse( + aDomain, + aCategory, + aCommandId, + KErrNone, + KNullDesC8() ); + TRACE2("CVtMediatorPlugin.MediatorCommandL EVtCmdReleaseDataport, just Resp err=%d", err ) + } + + } + } + TRACE("CVtMediatorPlugin.MediatorCommandL>") + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CommandResponseL +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::CommandResponseL( TUid aDomain, TUid aCategory, + TInt aCommandId, TInt /*aStatus*/, const TDesC8& /*aData*/ ) + { + TRACE("CVtMediatorPlugin.CommandResponseL<") + if( ( aDomain == KMediatorVideoTelephonyDomain ) && + ( aCategory == KCatVideotelInternalCommands ) ) + { + TInt res = + iCommandResponder->IssueResponse( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + EVtCmdReleaseDataport, + KErrNone, + KNullDesC8() ); + TRACE2("CVtMediatorPlugin.CommandResponseL, IssueResponse res: %d", res ) + User::LeaveIfError( res ); + } + TRACE("CVtMediatorPlugin.CommandResponseL>") + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CancelMediatorCommand +// +// no-op +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::CancelMediatorCommand( TUid /*aDomain*/, + TUid /*aCategory*/, + TInt /*aCommandId*/ ) + { + } +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::ChangeCallDataEventSubscriptionL +// +// Takes care of 'call data' event subscription. +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::ChangeCallDataEventSubscriptionL( + const REventList& aEvents, + const TBool aEventRegistered ) + { + TRACE("CVtMediatorPlugin.ChangeCLIEventSubscription<") + + TInt res( KErrNone ); + TInt eventCount = aEvents.Count(); + while ( eventCount-- ) + { + const TEvent& aEvent = aEvents[ eventCount ]; + if ( aEvent.iEventId == EPhoneEventCallData ) + { + if ( aEventRegistered ) + { + // Phone has registered Call data event => subscribe it + const TVersion version( + KTelephonyEventsVersionMajor, + KTelephonyEventsVersionMinor, + KTelephonyEventsVersionBuild ); + res = iEventConsumer->SubscribeEvent( + KMediatorTelephonyDomain, + KCatEventsFromTelephony, + EPhoneEventCallData, version ); + } + else + { + // Phone has unregistered Call data event => unsubscribe it + res = iEventConsumer->UnsubscribeEvent( + KMediatorTelephonyDomain, + KCatEventsFromTelephony, + EPhoneEventCallData ); + } + TRACE2(" (un)subscribe result=%d", res ) + eventCount = 0; // break loop + } + } + + TRACE2("CVtMediatorPlugin.ChangeCLIEventSubscription result=%d>", res ) + User::LeaveIfError( res ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::HandleVtCommandRegistrationL +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::HandleVtCommandRegistrationL() + { + TRACE("CVtMediatorPlugin.HandleVtCommandRegistrationL<" ) + if ( iState == EWaitingEventRegistration ) + { + // VT app registered commands => it can also receive events + // NOTE: it is expected that VT application first subscribes + // to internal events and only after that registers commands to + // avoid timing problems. + iState = EReady; + delete iCallBack; + iCallBack = NULL; + TCallBack cb( &EventRaiserCallback, this ); + iCallBack = new ( ELeave ) CAsyncCallBack( cb, + CActive::EPriorityStandard ); + TRACE("CVtMediatorPlugin enque async callback" ) + iCallBack->CallBack(); + } + TRACE("CVtMediatorPlugin.HandleVtCommandRegistrationL>" ) + } + +TInt CVtMediatorPlugin::EventRaiserCallback( TAny* aAny ) + { + TRACE("CVtMediatorPlugin.EventRaiserCallback<" ) + CVtMediatorPlugin* plugin = reinterpret_cast( aAny ); + delete plugin->iCallBack; + plugin->iCallBack = NULL; + TRAP_IGNORE( plugin->RaiseVtEventL() ); + TRACE("CVtMediatorPlugin.EventRaiserCallback>" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin:: +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::HandleVtCommandUnregistrationL() + { + // unregistration means that VT app is shutting down. + TRACE("CVtMediatorPlugin.HandleVtCommandUnregistrationL<" ) + ClearData(iActiveVideoCallInfo, iActiveVideoCallState); + //ClearData(iWaitingVideoCallInfo); + TRACE("CVtMediatorPlugin.HandleVtCommandUnregistrationL>" ) + } + + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin:: +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::LaunchVtAppL() + { + + TRACE("CVtMediatorPlugin.LaunchVtAppL<" ) + + if ( !IsEnoughMemory() ) + { + const TVersion KTelephonyCmdVersion( + KTelephonyCommandsVersionMajor, + KTelephonyCommandsVersionMinor, + KTelephonyCommandsVersionBuild ); + const TInt res = + iCommandInitiator->IssueCommand( + KMediatorTelephonyDomain, + KCatVideoTelToPhoneCommands, + EVtCmdLowMemory, + KTelephonyCmdVersion, + KNullDesC8() ); + ClearData(iActiveVideoCallInfo, iActiveVideoCallState); + ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState); + TRACE("CVtMediatorPlugin.LaunchVtAppL, Insufficient Memory" ) + return; + } + + iAppDeathActive = new ( ELeave ) CAppDeathActive( *this, iAppThread ); + + User::LeaveIfError( iWsSession.Connect() ); + + TInt wgId = 0; + TBool found = EFalse; + + // Check if there is already application running. Then we do not + // start new one - rather we just monitor the existing one. + while ( ( wgId != KErrNotFound ) && !found ) + { + CApaWindowGroupName::FindByAppUid( + KVtCmVideoTelUiUid, + iWsSession, + wgId ); + + TApaTask task( iWsSession ); + task.SetWgId( wgId ); + if ( task.Exists() ) + { + if ( iAppThread.Open( task.ThreadId() ) == KErrNone ) + { + TExitType exitType = iAppThread.ExitType(); + found = ( exitType == EExitPending ); + + if ( found ) + { + iAppThreadId = task.ThreadId(); + } + } + } + + if ( !found ) + { + iAppThread.Close(); + } + } + + // If application was not found, then launch new application. + if ( !found ) + { + TThreadId threadId; +#ifndef SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1 + CApaCommandLine* cmd = CApaCommandLine::NewLC(); + cmd->SetExecutableNameL( KVtCmVideoTelUiPath ); +#else // !SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1 + CApaCommandLine* cmd = CApaCommandLine::NewLC( KVtCmVideoTelUiPath ); +#endif // SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1 + cmd->SetCommandL( EApaCommandBackground ); + + RApaLsSession session; + User::LeaveIfError( session.Connect() ); + CleanupClosePushL( session ); + + TInt err = session.StartApp( *cmd, threadId ); + if ( err > KErrNone ) + { + err = KErrGeneral; + } + User::LeaveIfError( err ); + CleanupStack::PopAndDestroy( 2, cmd ); // CleanupClosePushL, cmd + User::LeaveIfError( iAppThread.Open( threadId ) ); + iAppThreadId = threadId; + } + + // Start active objects. + iState = EWaitingEventRegistration; + iAppDeathActive->Start(); + TRACE("CVtMediatorPlugin.LaunchVtAppL>" ) + } + + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin:: +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::SaveCallData( const TTelephonyCallDataParam& aData, TVtVideoTelephonyCallInformation& iVtCallInfo ) + { + TRACE("CVtMediatorPlugin.SaveCallData<" ) + iVtCallInfo.iDisplayText = aData.iCLIText.Left( + TVtVideoTelephonyCallInformation::TDisplayTextMaxLength ); + + TRACE2("CVtMediatorPlugin.SaveCallData iDisplayText=%S", + &iVtCallInfo.iDisplayText ); + + iVtCallInfo.iCallId = aData.iCallId; + + if ( KNullDesC() != aData.iRemotePhoneNumber ) + { + iVtCallInfo.iVoiceCallPossible = ETrue; + } + iVtCallInfo.iEventDataValidity |= + TVtVideoTelephonyCallInformation::EDisplayTextValid; + TRACE2("CVtMediatorPlugin.SaveCallData data saved=%d>", + aData.iCallType == ECallTypeVideo ) + } + + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin:: +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::HandleDataportCommandL( const TDesC8& aData ) + { + TRACE("CVtMediatorPlugin.HandleDataportCommandL<" ) + TDataPortPackage pckg; + pckg.Copy( aData ); + iActiveVideoCallInfo.iDataport = pckg(); + iActiveVideoCallInfo.iEventDataValidity |= + TVtVideoTelephonyCallInformation::EDataportValid; + RaiseVtEventL(); + TRACE("CVtMediatorPlugin.HandleDataportCommandL>" ) + } + + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::ClearData +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::ClearData(TVtVideoTelephonyCallInformation& aVtCallInfo, TCallState& aCallState) + { + TRACE("CVtMediatorPlugin.ClearData<" ) + if ( aVtCallInfo.iCallId == iActiveVideoCallInfo.iCallId ) + { + iState = EWaitingAppLaunch; + } + aVtCallInfo.iEventDataValidity = 0; + aVtCallInfo.iDataport.Zero(); + aVtCallInfo.iVoiceCallPossible = EFalse; + //for video call, it should be 9/10 + //for other call, it will be from -1 to 8 + aVtCallInfo.iCallId = KVtInitCallId; + aVtCallInfo.iDisplayText.Zero(); + aCallState = ECallStateIdle; + TRACE("CVtMediatorPlugin.ClearData>" ) + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::RegisterVtInternalEventL +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::RegisterVtInternalEventL() + { + TRACE("CVtMediatorPlugin.RegisterVtInternalEventL<" ) + iEventProvider = CMediatorEventProvider::NewL(); + + TVersion version( + KVideotelMdtrEventVersionMajor, + KVideotelMdtrEventVersionMinor, + KVideotelMdtrEventVersionBuild ); + + TCapabilitySet capSet; + capSet.SetEmpty(); + capSet.AddCapability( ECapabilityReadDeviceData ); + + const TInt err = iEventProvider->RegisterEvent( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalEvents, + EVtMediatorEventVideoCallInformation, + version, + capSet ); + + + TRACE2("CVtMediatorPlugin.RegisterVtInternalEventL err=%d>", err ) + User::LeaveIfError( err ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::RegisterDataportCommandL +// +// +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::RegisterDataportCommandL() + { + TRACE("CVtMediatorPlugin.RegisterDataportCommandL<" ) + iCommandResponder = CMediatorCommandResponder::NewL( this ); + + TCapabilitySet capSet; + capSet.SetEmpty(); + capSet.AddCapability( ECapabilityWriteDeviceData ); + MediatorService::TCommand command; + + command.iCaps = capSet; + command.iVersion = TVersion( + KPhoneToVideotelCmdVersionMajor, + KPhoneToVideotelCmdVersionMinor, + KPhoneToVideotelCmdVersionBuild ); + command.iTimeout = KVtEngMdtrCmdTimeout; + + // enable microphone command + command.iCommandId = EVtCmdUseDataport; + iCommandList.Append( command ); + + // Releasedataport command + capSet.SetEmpty(); + capSet.AddCapability( ECapabilityPowerMgmt ); + command.iCommandId = EVtCmdReleaseDataport; + iCommandList.Append( command ); + + const TInt err = iCommandResponder->RegisterCommand( + KMediatorVideoTelephonyDomain, + KCatPhoneToVideotelCommands, + iCommandList ); + + TRACE2("CVtMediatorPlugin.RegisterDataportCommandL err=%d>", err ) + User::LeaveIfError( err ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::RaiseVtEventL +// +// Raises VT call info event if in suitable state, i.e. VT app has subscribed +// the event. +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::RaiseVtEventL() + { + TRACE("CVtMediatorPlugin.RaiseVtEventL<" ) + TInt result = KVtAppNotReady; // does not cause leave + TRACE2("CVtMediatorPlugin.RaiseVtEventL iState=%d>", + iState ) + TRACE2("CVtMediatorPlugin.RaiseVtEventL iActiveVideoCallState=%d>", + iActiveVideoCallState ) + if ( iState == EReady && // application subscribed to the event + + // don't send event if video call is not starting/ongoing + ( iActiveVideoCallState >= ECallStateDialling && + iActiveVideoCallState <= ECallStateConnected ) ) + { + const TVersion version( + KVideotelMdtrEventVersionMajor, + KVideotelMdtrEventVersionMinor, + KVideotelMdtrEventVersionBuild ); + + const TVtMediatorInfoPackage pckg( iActiveVideoCallInfo ); + result = iEventProvider->RaiseEvent( + KMediatorVideoTelephonyDomain, + KCatVideotelInternalEvents, + EVtMediatorEventVideoCallInformation, + version, + pckg + ); + } + TRACE2("CVtMediatorPlugin.RaiseVtEventL result=%d>", result ) + User::LeaveIfError( result ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::HandleCallStateChangeL +// +// Compares previous and new video call states and resolves based on result +// if Video telephone applicaton should be launched. +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::HandleCallStateChangeL( + const TTelephonyCallDataParam& aData ) + { + TRACE("CVtMediatorPlugin.HandleCallStateChangeL<" ) + + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL calltype=%d>", + aData.iCallType ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL saved Activecallid=%d>", + iActiveVideoCallInfo.iCallId ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL saved Waitingcallid=%d>", + iWaitingVideoCallInfo.iCallId ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL callid=%d>", + aData.iCallId ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL ActiveCallOldState=%d>", + iActiveVideoCallState ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL WaitingCallOldState=%d>", + iWaitingVideoCallState ) + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL NewState=%d>", + aData.iCallState ) + + //if the call is waitingcall, just save/clear + if ( aData.iCallType == ECallTypeVideo || + // check also call id because in call clearing states call type may + // be unspecified but call id is saved in call setup and we can + // compare to it. + iActiveVideoCallInfo.iCallId == aData.iCallId || + iWaitingVideoCallInfo.iCallId == aData.iCallId ) + { + TBool isWaitingCall = ETrue; + + /** + * firstly we should check the callid to identify if it is a waitingcal/activecall + * imagine the usecase that long press endkey to shutdown both calls. + * after that checking iState + */ + if ( iWaitingVideoCallInfo.iCallId == aData.iCallId ) + { + isWaitingCall = ETrue; + } + else if ( iActiveVideoCallInfo.iCallId == aData.iCallId ) + { + isWaitingCall = EFalse; + } + //no vt app launched, this happens while vt first launching or end key to shutdown both calls + else if ( iState == EWaitingAppLaunch ) + { + isWaitingCall = EFalse; + } + + TRACE2("CVtMediatorPlugin.HandleCallStateChangeL isWaitingCall=%d>", + isWaitingCall) + + TCallState& callState = isWaitingCall?iWaitingVideoCallState:iActiveVideoCallState; + TVtVideoTelephonyCallInformation& vtCallInfo = isWaitingCall?iWaitingVideoCallInfo:iActiveVideoCallInfo; + + TBool launchNeeded = KVtCallStateActionArray[ aData.iCallState ] - + KVtCallStateActionArray[callState] > 0; + if ( isWaitingCall ) + { + launchNeeded = EFalse; + } + callState = aData.iCallState; + + switch ( callState ) + { + case ECallStateDialling: + case ECallStateRinging: + case ECallStateConnecting: + case ECallStateConnected: + SaveCallData( aData, vtCallInfo); + break; + default: + // data becomes invalid in other states (=call clearing/idle) + ClearData(vtCallInfo, callState); + break; + } + if ( launchNeeded ) + { + LaunchVtAppL(); + } + if ( !isWaitingCall ) + { + RaiseVtEventL(); + } + } + + TRACE("CVtMediatorPlugin.HandleCallStateChangeL>" ) + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::IsEnoughMemory +// +// Check if there is enough memory to launch +// ----------------------------------------------------------------------------- +// +TBool CVtMediatorPlugin::IsEnoughMemory() + { + TRACE("CVtMediatorPlugin::IsEnoughMemory<" ) + // Fetch amount of free memory. + TMemoryInfoV1Buf memory; + UserHal::MemoryInfo( memory ); + TInt freeRam = (TInt)( memory().iFreeRamInBytes ); + TRACE2("CVtMediatorPlugin::IsEnoughMemory: freeRam = %d", freeRam ) + + TBool enoughRam = ETrue; + + if ( freeRam < KRamNeededForVideoCalls ) + { + FreeRam(); + freeRam = (TInt)( memory().iFreeRamInBytes ); + TRACE2("CVtMediatorPlugin::IsEnoughMemory: after free, freeRam = %d", freeRam ) + if ( freeRam < KRamNeededForVideoCalls ) + { + enoughRam = EFalse; + TRACE ("CVtMediatorPlugin::IsEnoughMemory : Not enough RAM") + + } + } + TRACE("CVtMediatorPlugin::IsEnoughMemory>" ) + return enoughRam; + } +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::FreeRam +// Try to free memory to match the memory usage of VT +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::FreeRam() + { + TRACE("CVtMediatorPlugin.FreeRam()<") + User::CompressAllHeaps(); + TRACE("CVtMediatorPlugin.FreeRam()>") + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::StopDeathActiveL +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::StopDeathActiveL() + { + TRACE("CVtMediatorPlugin.StopDeathActive<") + delete iAppDeathActive; + iAppThread.Close(); + iWsSession.Close(); + //if there is a waiting call, check if we need to launch it + TRACE2("CVtMediatorPlugin.StopDeathActive WaitintCallID=%d>", + iWaitingVideoCallInfo.iCallId) + if ( iWaitingVideoCallInfo.iCallId != KVtInitCallId ) + { + iActiveVideoCallInfo = iWaitingVideoCallInfo; + iActiveVideoCallState = iWaitingVideoCallState; + ClearData(iWaitingVideoCallInfo, iWaitingVideoCallState); + + if ( iActiveVideoCallState == ECallStateDialling || + iActiveVideoCallState == ECallStateRinging || + iActiveVideoCallState == ECallStateConnecting || + iActiveVideoCallState == ECallStateConnected || + iActiveVideoCallState == ECallStateAnswering ) + { + LaunchVtAppL(); + RaiseVtEventL(); + } + } + TRACE("CVtMediatorPlugin.StopDeathActive>") + } +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::CAppDeathActive +// ----------------------------------------------------------------------------- +// +CVtMediatorPlugin::CAppDeathActive::CAppDeathActive( + CVtMediatorPlugin& aMediatorPlugin, + RThread& aAppThread + ) + : CActive( CActive::EPriorityStandard ), + iMediatorPlugin( aMediatorPlugin ), + iAppThread( aAppThread ) + + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::~CAppDeathActive +// ----------------------------------------------------------------------------- +// +CVtMediatorPlugin::CAppDeathActive::~CAppDeathActive() + { + TRACE("CVtMediatorPlugin.~CAppDeathActive") + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::Start +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::CAppDeathActive::Start() + { + TRACE("CVtMediatorPlugin.Start<") + Cancel(); + iAppThread.Logon( iStatus ); + SetActive(); + TRACE("CVtMediatorPlugin.Start>") + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::RunL +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::CAppDeathActive::RunL() + { + //do something here + TRACE("CVtMediatorPlugin.RunL<") + iMediatorPlugin.StopDeathActiveL(); + TRACE("CVtMediatorPlugin.RunL>") + + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtMediatorPlugin::CAppDeathActive::DoCancel() + { + iAppThread.LogonCancel( iStatus ); + } + +// ----------------------------------------------------------------------------- +// CVtMediatorPlugin::CAppDeathActive::RunError +// ----------------------------------------------------------------------------- +// +TInt CVtMediatorPlugin::CAppDeathActive::RunError( TInt /*aError*/ ) + { + return KErrNone; + } diff -r 000000000000 -r ed9695c8bcbe vtengines/vtmediatorplugin/src/vtmediatorpluginproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtengines/vtmediatorplugin/src/vtmediatorpluginproxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,40 @@ +/* +* 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" +* 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: Source file for MediatorTest Plugin Proxy +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include "cvtmediatorplugin.h" + + +// Provides a key value pair table, this is used to identify +// the correct construction function for the requested interface. +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x200159A0, CVtMediatorPlugin::NewL ) + }; + +// Function used to return an instance of the proxy table. +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/EABI/DisplaySinkU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/EABI/DisplaySinkU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,5 @@ +EXPORTS + _Z11CreateSinkLR18TDisplaySinkParamsRK6TDesC8 @ 1 NONAME + _ZN18TDisplaySinkParamsC1Ev @ 2 NONAME + _ZN18TDisplaySinkParamsC2Ev @ 3 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/EABI/VtImageConverterU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/EABI/VtImageConverterU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,32 @@ +EXPORTS + _ZN24CVTYUVFbsBitmapConverter15SetDestinationLERK10CFbsBitmap @ 1 NONAME + _ZN24CVTYUVFbsBitmapConverter15SetDestinationLEi @ 2 NONAME + _ZN24CVTYUVFbsBitmapConverter8ProcessLEv @ 3 NONAME + _ZN24CVTYUVFbsBitmapConverterD0Ev @ 4 NONAME + _ZN24CVTYUVFbsBitmapConverterD1Ev @ 5 NONAME + _ZN24CVTYUVFbsBitmapConverterD2Ev @ 6 NONAME + _ZN25CVSFbsBitmapIYUVConverter10SetSourceLERK10CFbsBitmap @ 7 NONAME + _ZN25CVSFbsBitmapIYUVConverter4NewLERK10CFbsBitmap @ 8 NONAME + _ZN25CVSFbsBitmapIYUVConverter8ProcessLEv @ 9 NONAME + _ZN25CVSFbsBitmapIYUVConverterD0Ev @ 10 NONAME + _ZN25CVSFbsBitmapIYUVConverterD1Ev @ 11 NONAME + _ZN25CVSFbsBitmapIYUVConverterD2Ev @ 12 NONAME + _ZN25CVTIYUVFbsBitmapConverter4NewLERK5TSizeRK10CFbsBitmap @ 13 NONAME + _ZN25CVTIYUVFbsBitmapConverter4NewLERK5TSizei @ 14 NONAME + _ZN25CVTYV12FbsBitmapConverter4NewLERK5TSizeRK10CFbsBitmap @ 15 NONAME + _ZN25CVTYV12FbsBitmapConverter4NewLERK5TSizei @ 16 NONAME + _ZN30CVTYUVPlanarFbsBitmapConverter10SetSourceLERK5TSizeRK6TDesC8 @ 17 NONAME + _ZN30CVTYUVPlanarFbsBitmapConverter10SetSourceLERK6TDesC8 @ 18 NONAME + _ZN30CVTYUVPlanarFbsBitmapConverter14SetSourceSizeLERK5TSize @ 19 NONAME + _ZNK25CVSFbsBitmapIYUVConverter7YUVDataEv @ 20 NONAME + _ZTI24CVTYUVFbsBitmapConverter @ 21 NONAME ; ## + _ZTI25CVSFbsBitmapIYUVConverter @ 22 NONAME ; ## + _ZTI25CVTIYUVFbsBitmapConverter @ 23 NONAME ; ## + _ZTI25CVTYV12FbsBitmapConverter @ 24 NONAME ; ## + _ZTI30CVTYUVPlanarFbsBitmapConverter @ 25 NONAME ; ## + _ZTV24CVTYUVFbsBitmapConverter @ 26 NONAME ; ## + _ZTV25CVSFbsBitmapIYUVConverter @ 27 NONAME ; ## + _ZTV25CVTIYUVFbsBitmapConverter @ 28 NONAME ; ## + _ZTV25CVTYV12FbsBitmapConverter @ 29 NONAME ; ## + _ZTV30CVTYUVPlanarFbsBitmapConverter @ 30 NONAME ; ## + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/EABI/VtImageTransformsU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/EABI/VtImageTransformsU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +EXPORTS + _ZN12CVtImageIYUV4NewLERK5TSize @ 1 NONAME + _ZN12CVtImageIYUV4NewLERK5TSizeR5TPtr8 @ 2 NONAME + _ZN12CVtImageIYUV4NewLERK5TSizeRK6TDesC8 @ 3 NONAME + _ZN12CVtImageIYUV9SetImageLER5TPtr8 @ 4 NONAME + _ZN12CVtImageIYUV9SetImageLERK6TDesC8 @ 5 NONAME + _ZN12CVtImageIYUVD0Ev @ 6 NONAME + _ZN12CVtImageIYUVD1Ev @ 7 NONAME + _ZN12CVtImageIYUVD2Ev @ 8 NONAME + _ZN14CVtImageBitmap10SetBitmapLEi @ 9 NONAME + _ZN14CVtImageBitmap4NewLERK5TSize12TDisplayMode @ 10 NONAME + _ZN14CVtImageBitmap4NewLEi @ 11 NONAME + _ZN14CVtImageBitmap7ResizeLERK5TSize @ 12 NONAME + _ZN14CVtImageBitmapD0Ev @ 13 NONAME + _ZN14CVtImageBitmapD1Ev @ 14 NONAME + _ZN14CVtImageBitmapD2Ev @ 15 NONAME + _ZN14CVtImageScaler11SetQualityLENS_8TQualityE @ 16 NONAME + _ZN14CVtImageScaler4NewLER22MVtImageScalerObserverNS_8TQualityEN7CActive9TPriorityE @ 17 NONAME + _ZN14CVtImageScaler6ScaleLERK8CVtImageRS0_ @ 18 NONAME + _ZN14CVtImageScalerD0Ev @ 19 NONAME + _ZN14CVtImageScalerD1Ev @ 20 NONAME + _ZN14CVtImageScalerD2Ev @ 21 NONAME + _ZN15CVtImageRotator4NewLER23MVtImageRotatorObserverN7CActive9TPriorityE @ 22 NONAME + _ZN15CVtImageRotator7RotateLERK8CVtImageRS0_RKNS_14TRotationAngleE @ 23 NONAME + _ZN15CVtImageRotatorD0Ev @ 24 NONAME + _ZN15CVtImageRotatorD1Ev @ 25 NONAME + _ZN15CVtImageRotatorD2Ev @ 26 NONAME + _ZNK12CVtImageIYUV12UVPlaneWidthEv @ 27 NONAME + _ZNK12CVtImageIYUV13UVPlaneHeightEv @ 28 NONAME + _ZNK12CVtImageIYUV1UEv @ 29 NONAME + _ZNK12CVtImageIYUV1VEv @ 30 NONAME + _ZNK12CVtImageIYUV1YEv @ 31 NONAME + _ZNK12CVtImageIYUV5ImageEv @ 32 NONAME + _ZNK14CVtImageBitmap6BitmapEv @ 33 NONAME + _ZNK8CVtImage4TypeEv @ 34 NONAME + _ZTI12CVtImageIYUV @ 35 NONAME ; ## + _ZTI14CVtImageBitmap @ 36 NONAME ; ## + _ZTI14CVtImageScaler @ 37 NONAME ; ## + _ZTI15CVtImageRotator @ 38 NONAME ; ## + _ZTI25CVtImageScalerImplNearest @ 39 NONAME ; ## + _ZTI26CVtImageScalerImplBilinear @ 40 NONAME ; ## + _ZTI28CVtImageRotatorImplClockwise @ 41 NONAME ; ## + _ZTI29CVtImageRotatorImplMirrorFlip @ 42 NONAME ; ## + _ZTI33CVtImageScalerImplWeightedAverage @ 43 NONAME ; ## + _ZTV12CVtImageIYUV @ 44 NONAME ; ## + _ZTV14CVtImageBitmap @ 45 NONAME ; ## + _ZTV14CVtImageScaler @ 46 NONAME ; ## + _ZTV15CVtImageRotator @ 47 NONAME ; ## + _ZTV25CVtImageScalerImplNearest @ 48 NONAME ; ## + _ZTV26CVtImageScalerImplBilinear @ 49 NONAME ; ## + _ZTV28CVtImageRotatorImplClockwise @ 50 NONAME ; ## + _ZTV29CVtImageRotatorImplMirrorFlip @ 51 NONAME ; ## + _ZTV33CVtImageScalerImplWeightedAverage @ 52 NONAME ; ## + _ZN14CVtImageScaler5ScaleERK8CVtImageRS0_ @ 53 NONAME + _ZN15CVtImageRotator6RotateERK8CVtImageRS0_RKNS_14TRotationAngleE @ 54 NONAME + _ZN14CVtImageScaler9ScaleNowLERK8CVtImageRS0_ @ 55 NONAME + _ZTI18CVtImageScalerImpl @ 56 NONAME ; ## + _ZTV18CVtImageScalerImpl @ 57 NONAME ; ## + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bmarm/DISPLAYSINKU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bmarm/DISPLAYSINKU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,9 @@ +EXPORTS + SetBitmapAvailable__12CDisplaySinkQ212CDisplaySink9TBitmapNo @ 1 NONAME R3UNUSED ; CDisplaySink::SetBitmapAvailable(CDisplaySink::TBitmapNo) + Release__12CDisplaySink @ 2 NONAME R3UNUSED ; CDisplaySink::Release(void) + ResumeSink__12CDisplaySink @ 3 NONAME R3UNUSED ; CDisplaySink::ResumeSink(void) + NewSinkL__12CDisplaySinkG18TDisplaySinkParamsRC6TDesC8 @ 4 NONAME ; CDisplaySink::NewSinkL(TDisplaySinkParams, TDesC8 const &) + UpdateSinkParamsL__12CDisplaySinkRC18TDisplaySinkParamsRi @ 5 NONAME R3UNUSED ; CDisplaySink::UpdateSinkParamsL(TDisplaySinkParams const &, int &) + "_._12CDisplaySink" @ 6 NONAME R3UNUSED ; CDisplaySink::~CDisplaySink(void) + __18TDisplaySinkParams @ 7 NONAME R3UNUSED ; TDisplaySinkParams::TDisplaySinkParams(void) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bmarm/VTIMAGECONVERTERU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bmarm/VTIMAGECONVERTERU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,18 @@ +EXPORTS + "_._25CVSFbsBitmapIYUVConverter" @ 1 NONAME R3UNUSED ; CVSFbsBitmapIYUVConverter::~CVSFbsBitmapIYUVConverter(void) + NewL__25CVTIYUVFbsBitmapConverterRC5TSizeRC10CFbsBitmap @ 2 NONAME R3UNUSED ; CVTIYUVFbsBitmapConverter::NewL(TSize const &, CFbsBitmap const &) + NewL__25CVTIYUVFbsBitmapConverterRC5TSizei @ 3 NONAME R3UNUSED ; CVTIYUVFbsBitmapConverter::NewL(TSize const &, int) + NewL__25CVTYV12FbsBitmapConverterRC5TSizeRC10CFbsBitmap @ 4 NONAME R3UNUSED ; CVTYV12FbsBitmapConverter::NewL(TSize const &, CFbsBitmap const &) + NewL__25CVTYV12FbsBitmapConverterRC5TSizei @ 5 NONAME R3UNUSED ; CVTYV12FbsBitmapConverter::NewL(TSize const &, int) + ProcessL__24CVTYUVFbsBitmapConverter @ 6 NONAME R3UNUSED ; CVTYUVFbsBitmapConverter::ProcessL(void) + ProcessL__25CVSFbsBitmapIYUVConverter @ 7 NONAME R3UNUSED ; CVSFbsBitmapIYUVConverter::ProcessL(void) + SetDestinationL__24CVTYUVFbsBitmapConverterRC10CFbsBitmap @ 8 NONAME R3UNUSED ; CVTYUVFbsBitmapConverter::SetDestinationL(CFbsBitmap const &) + SetDestinationL__24CVTYUVFbsBitmapConverteri @ 9 NONAME R3UNUSED ; CVTYUVFbsBitmapConverter::SetDestinationL(int) + SetSourceL__25CVSFbsBitmapIYUVConverterRC10CFbsBitmap @ 10 NONAME R3UNUSED ; CVSFbsBitmapIYUVConverter::SetSourceL(CFbsBitmap const &) + SetSourceL__30CVTYUVPlanarFbsBitmapConverterRC5TSizeRC6TDesC8 @ 11 NONAME R3UNUSED ; CVTYUVPlanarFbsBitmapConverter::SetSourceL(TSize const &, TDesC8 const &) + SetSourceL__30CVTYUVPlanarFbsBitmapConverterRC6TDesC8 @ 12 NONAME R3UNUSED ; CVTYUVPlanarFbsBitmapConverter::SetSourceL(TDesC8 const &) + SetSourceSizeL__30CVTYUVPlanarFbsBitmapConverterRC5TSize @ 13 NONAME R3UNUSED ; CVTYUVPlanarFbsBitmapConverter::SetSourceSizeL(TSize const &) + YUVData__C25CVSFbsBitmapIYUVConverter @ 14 NONAME R3UNUSED ; CVSFbsBitmapIYUVConverter::YUVData(void) const + "_._24CVTYUVFbsBitmapConverter" @ 15 NONAME R3UNUSED ; CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter(void) + NewL__25CVSFbsBitmapIYUVConverterRC10CFbsBitmap @ 16 NONAME R3UNUSED ; CVSFbsBitmapIYUVConverter::NewL(CFbsBitmap const &) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bmarm/VTIMAGETRANSFORMSU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bmarm/VTIMAGETRANSFORMSU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,28 @@ +EXPORTS + "_._15CVtImageRotator" @ 1 NONAME R3UNUSED ; CVtImageRotator::~CVtImageRotator(void) + Image__C12CVtImageIYUV @ 2 NONAME R3UNUSED ; CVtImageIYUV::Image(void) const + NewL__12CVtImageIYUVRC5TSize @ 3 NONAME R3UNUSED ; CVtImageIYUV::NewL(TSize const &) + NewL__12CVtImageIYUVRC5TSizeR5TPtr8 @ 4 NONAME R3UNUSED ; CVtImageIYUV::NewL(TSize const &, TPtr8 &) + NewL__12CVtImageIYUVRC5TSizeRC6TDesC8 @ 5 NONAME R3UNUSED ; CVtImageIYUV::NewL(TSize const &, TDesC8 const &) + NewL__14CVtImageBitmapRC5TSize12TDisplayMode @ 6 NONAME R3UNUSED ; CVtImageBitmap::NewL(TSize const &, TDisplayMode) + NewL__14CVtImageBitmapi @ 7 NONAME R3UNUSED ; CVtImageBitmap::NewL(int) + NewL__14CVtImageScalerR22MVtImageScalerObserverQ214CVtImageScaler8TQualityQ27CActive9TPriority @ 8 NONAME R3UNUSED ; CVtImageScaler::NewL(MVtImageScalerObserver &, CVtImageScaler::TQuality, CActive::TPriority) + NewL__15CVtImageRotatorR23MVtImageRotatorObserverQ27CActive9TPriority @ 9 NONAME R3UNUSED ; CVtImageRotator::NewL(MVtImageRotatorObserver &, CActive::TPriority) + ResizeL__14CVtImageBitmapRC5TSize @ 10 NONAME R3UNUSED ; CVtImageBitmap::ResizeL(TSize const &) + RotateL__15CVtImageRotatorRC8CVtImageR8CVtImageRCQ215CVtImageRotator14TRotationAngle @ 11 NONAME ; CVtImageRotator::RotateL(CVtImage const &, CVtImage &, CVtImageRotator::TRotationAngle const &) + ScaleL__14CVtImageScalerRC8CVtImageR8CVtImage @ 12 NONAME R3UNUSED ; CVtImageScaler::ScaleL(CVtImage const &, CVtImage &) + SetBitmapL__14CVtImageBitmapi @ 13 NONAME R3UNUSED ; CVtImageBitmap::SetBitmapL(int) + SetImageL__12CVtImageIYUVR5TPtr8 @ 14 NONAME R3UNUSED ; CVtImageIYUV::SetImageL(TPtr8 &) + SetImageL__12CVtImageIYUVRC6TDesC8 @ 15 NONAME R3UNUSED ; CVtImageIYUV::SetImageL(TDesC8 const &) + SetQualityL__14CVtImageScalerQ214CVtImageScaler8TQuality @ 16 NONAME R3UNUSED ; CVtImageScaler::SetQualityL(CVtImageScaler::TQuality) + Type__C8CVtImage @ 17 NONAME R3UNUSED ; CVtImage::Type(void) const + UVPlaneHeight__C12CVtImageIYUV @ 18 NONAME R3UNUSED ; CVtImageIYUV::UVPlaneHeight(void) const + UVPlaneWidth__C12CVtImageIYUV @ 19 NONAME R3UNUSED ; CVtImageIYUV::UVPlaneWidth(void) const + U__C12CVtImageIYUV @ 20 NONAME R3UNUSED ; CVtImageIYUV::U(void) const + V__C12CVtImageIYUV @ 21 NONAME R3UNUSED ; CVtImageIYUV::V(void) const + Y__C12CVtImageIYUV @ 22 NONAME R3UNUSED ; CVtImageIYUV::Y(void) const + "_._12CVtImageIYUV" @ 23 NONAME R3UNUSED ; CVtImageIYUV::~CVtImageIYUV(void) + "_._14CVtImageBitmap" @ 24 NONAME R3UNUSED ; CVtImageBitmap::~CVtImageBitmap(void) + "_._14CVtImageScaler" @ 25 NONAME R3UNUSED ; CVtImageScaler::~CVtImageScaler(void) + Bitmap__C14CVtImageBitmap @ 26 NONAME R3UNUSED ; CVtImageBitmap::Bitmap(void) const + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bwins/DISPLAYSINKU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bwins/DISPLAYSINKU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,4 @@ +EXPORTS + ??0TDisplaySinkParams@@QAE@XZ @ 1 NONAME ; TDisplaySinkParams::TDisplaySinkParams(void) + ?CreateSinkL@@YAPAVMDisplaySink@@AAVTDisplaySinkParams@@ABVTDesC8@@@Z @ 2 NONAME ; class MDisplaySink * CreateSinkL(class TDisplaySinkParams &, class TDesC8 const &) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bwins/VTIMAGECONVERTERU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bwins/VTIMAGECONVERTERU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,18 @@ +EXPORTS + ??1CVSFbsBitmapIYUVConverter@@UAE@XZ @ 1 NONAME ; public: virtual __thiscall CVSFbsBitmapIYUVConverter::~CVSFbsBitmapIYUVConverter(void) + ??1CVTYUVFbsBitmapConverter@@UAE@XZ @ 2 NONAME ; public: virtual __thiscall CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter(void) + ?NewL@CVSFbsBitmapIYUVConverter@@SAPAV1@ABVCFbsBitmap@@@Z @ 3 NONAME ; public: static class CVSFbsBitmapIYUVConverter * __cdecl CVSFbsBitmapIYUVConverter::NewL(class CFbsBitmap const &) + ?NewL@CVTIYUVFbsBitmapConverter@@SAPAV1@ABVTSize@@ABVCFbsBitmap@@@Z @ 4 NONAME ; public: static class CVTIYUVFbsBitmapConverter * __cdecl CVTIYUVFbsBitmapConverter::NewL(class TSize const &,class CFbsBitmap const &) + ?NewL@CVTIYUVFbsBitmapConverter@@SAPAV1@ABVTSize@@H@Z @ 5 NONAME ; public: static class CVTIYUVFbsBitmapConverter * __cdecl CVTIYUVFbsBitmapConverter::NewL(class TSize const &,int) + ?NewL@CVTYV12FbsBitmapConverter@@SAPAV1@ABVTSize@@ABVCFbsBitmap@@@Z @ 6 NONAME ; public: static class CVTYV12FbsBitmapConverter * __cdecl CVTYV12FbsBitmapConverter::NewL(class TSize const &,class CFbsBitmap const &) + ?NewL@CVTYV12FbsBitmapConverter@@SAPAV1@ABVTSize@@H@Z @ 7 NONAME ; public: static class CVTYV12FbsBitmapConverter * __cdecl CVTYV12FbsBitmapConverter::NewL(class TSize const &,int) + ?ProcessL@CVSFbsBitmapIYUVConverter@@QAEXXZ @ 8 NONAME ; public: void __thiscall CVSFbsBitmapIYUVConverter::ProcessL(void) + ?ProcessL@CVTYUVFbsBitmapConverter@@UAEXXZ @ 9 NONAME ; public: virtual void __thiscall CVTYUVFbsBitmapConverter::ProcessL(void) + ?SetDestinationL@CVTYUVFbsBitmapConverter@@UAEXABVCFbsBitmap@@@Z @ 10 NONAME ; public: virtual void __thiscall CVTYUVFbsBitmapConverter::SetDestinationL(class CFbsBitmap const &) + ?SetDestinationL@CVTYUVFbsBitmapConverter@@UAEXH@Z @ 11 NONAME ; public: virtual void __thiscall CVTYUVFbsBitmapConverter::SetDestinationL(int) + ?SetSourceL@CVSFbsBitmapIYUVConverter@@QAEXABVCFbsBitmap@@@Z @ 12 NONAME ; public: void __thiscall CVSFbsBitmapIYUVConverter::SetSourceL(class CFbsBitmap const &) + ?SetSourceL@CVTYUVPlanarFbsBitmapConverter@@UAEXABVTDesC8@@@Z @ 13 NONAME ; public: virtual void __thiscall CVTYUVPlanarFbsBitmapConverter::SetSourceL(class TDesC8 const &) + ?SetSourceL@CVTYUVPlanarFbsBitmapConverter@@UAEXABVTSize@@ABVTDesC8@@@Z @ 14 NONAME ; public: virtual void __thiscall CVTYUVPlanarFbsBitmapConverter::SetSourceL(class TSize const &,class TDesC8 const &) + ?SetSourceSizeL@CVTYUVPlanarFbsBitmapConverter@@UAEXABVTSize@@@Z @ 15 NONAME ; public: virtual void __thiscall CVTYUVPlanarFbsBitmapConverter::SetSourceSizeL(class TSize const &) + ?YUVData@CVSFbsBitmapIYUVConverter@@QBE?AVTPtrC8@@XZ @ 16 NONAME ; public: class TPtrC8 __thiscall CVSFbsBitmapIYUVConverter::YUVData(void)const + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/bwins/VTIMAGETRANSFORMSU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/bwins/VTIMAGETRANSFORMSU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +EXPORTS + ??1CVtImageBitmap@@UAE@XZ @ 1 NONAME ; public: virtual __thiscall CVtImageBitmap::~CVtImageBitmap(void) + ??1CVtImageIYUV@@UAE@XZ @ 2 NONAME ; public: virtual __thiscall CVtImageIYUV::~CVtImageIYUV(void) + ??1CVtImageRotator@@UAE@XZ @ 3 NONAME ; public: virtual __thiscall CVtImageRotator::~CVtImageRotator(void) + ??1CVtImageScaler@@UAE@XZ @ 4 NONAME ; public: virtual __thiscall CVtImageScaler::~CVtImageScaler(void) + ?Bitmap@CVtImageBitmap@@QBEAAVCFbsBitmap@@XZ @ 5 NONAME ; public: class CFbsBitmap & __thiscall CVtImageBitmap::Bitmap(void)const + ?Image@CVtImageIYUV@@QBE?AVTPtrC8@@XZ @ 6 NONAME ; public: class TPtrC8 __thiscall CVtImageIYUV::Image(void)const + ?NewL@CVtImageBitmap@@SAPAV1@ABVTSize@@W4TDisplayMode@@@Z @ 7 NONAME ; public: static class CVtImageBitmap * __cdecl CVtImageBitmap::NewL(class TSize const &,enum TDisplayMode) + ?NewL@CVtImageBitmap@@SAPAV1@H@Z @ 8 NONAME ; public: static class CVtImageBitmap * __cdecl CVtImageBitmap::NewL(int) + ?NewL@CVtImageIYUV@@SAPAV1@ABVTSize@@@Z @ 9 NONAME ; public: static class CVtImageIYUV * __cdecl CVtImageIYUV::NewL(class TSize const &) + ?NewL@CVtImageIYUV@@SAPAV1@ABVTSize@@AAVTPtr8@@@Z @ 10 NONAME ; public: static class CVtImageIYUV * __cdecl CVtImageIYUV::NewL(class TSize const &,class TPtr8 &) + ?NewL@CVtImageIYUV@@SAPAV1@ABVTSize@@ABVTDesC8@@@Z @ 11 NONAME ; public: static class CVtImageIYUV * __cdecl CVtImageIYUV::NewL(class TSize const &,class TDesC8 const &) + ?NewL@CVtImageRotator@@SAPAV1@AAVMVtImageRotatorObserver@@W4TPriority@CActive@@@Z @ 12 NONAME ; public: static class CVtImageRotator * __cdecl CVtImageRotator::NewL(class MVtImageRotatorObserver &,enum CActive::TPriority) + ?NewL@CVtImageScaler@@SAPAV1@AAVMVtImageScalerObserver@@W4TQuality@1@W4TPriority@CActive@@@Z @ 13 NONAME ; public: static class CVtImageScaler * __cdecl CVtImageScaler::NewL(class MVtImageScalerObserver &,enum CVtImageScaler::TQuality,enum CActive::TPriority) + ?ResizeL@CVtImageBitmap@@QAEXABVTSize@@@Z @ 14 NONAME ; public: void __thiscall CVtImageBitmap::ResizeL(class TSize const &) + ?RotateL@CVtImageRotator@@QAEXABVCVtImage@@AAV2@ABW4TRotationAngle@1@@Z @ 15 NONAME ; public: void __thiscall CVtImageRotator::RotateL(class CVtImage const &,class CVtImage &,enum CVtImageRotator::TRotationAngle const &) + ?ScaleL@CVtImageScaler@@QAEXABVCVtImage@@AAV2@@Z @ 16 NONAME ; public: void __thiscall CVtImageScaler::ScaleL(class CVtImage const &,class CVtImage &) + ?SetBitmapL@CVtImageBitmap@@QAEXH@Z @ 17 NONAME ; public: void __thiscall CVtImageBitmap::SetBitmapL(int) + ?SetImageL@CVtImageIYUV@@QAEXAAVTPtr8@@@Z @ 18 NONAME ; public: void __thiscall CVtImageIYUV::SetImageL(class TPtr8 &) + ?SetImageL@CVtImageIYUV@@QAEXABVTDesC8@@@Z @ 19 NONAME ; public: void __thiscall CVtImageIYUV::SetImageL(class TDesC8 const &) + ?SetQualityL@CVtImageScaler@@QAEXW4TQuality@1@@Z @ 20 NONAME ; public: void __thiscall CVtImageScaler::SetQualityL(enum CVtImageScaler::TQuality) + ?Type@CVtImage@@QBE?AW4TVtImageType@1@XZ @ 21 NONAME ; public: enum CVtImage::TVtImageType __thiscall CVtImage::Type(void)const + ?U@CVtImageIYUV@@QBEPAEXZ @ 22 NONAME ; public: unsigned char * __thiscall CVtImageIYUV::U(void)const + ?UVPlaneHeight@CVtImageIYUV@@QBEHXZ @ 23 NONAME ; public: int __thiscall CVtImageIYUV::UVPlaneHeight(void)const + ?UVPlaneWidth@CVtImageIYUV@@QBEHXZ @ 24 NONAME ; public: int __thiscall CVtImageIYUV::UVPlaneWidth(void)const + ?V@CVtImageIYUV@@QBEPAEXZ @ 25 NONAME ; public: unsigned char * __thiscall CVtImageIYUV::V(void)const + ?Y@CVtImageIYUV@@QBEPAEXZ @ 26 NONAME ; public: unsigned char * __thiscall CVtImageIYUV::Y(void)const + ?Scale@CVtImageScaler@@QAEXABVCVtImage@@AAV2@@Z @ 27 NONAME ; void CVtImageScaler::Scale(class CVtImage const &, class CVtImage &) + ?Rotate@CVtImageRotator@@QAEXABVCVtImage@@AAV2@ABW4TRotationAngle@1@@Z @ 28 NONAME ; void CVtImageRotator::Rotate(class CVtImage const &, class CVtImage &, enum CVtImageRotator::TRotationAngle const &) + ?ScaleNowL@CVtImageScaler@@QAEXABVCVtImage@@AAV2@@Z @ 29 NONAME ; void CVtImageScaler::ScaleNowL(class CVtImage const &, class CVtImage &) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/data/displaysink_stub.SIS Binary file vtprotocolplugins/DisplaySink/data/displaysink_stub.SIS has changed diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/data/displaysink_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/data/displaysink_stub.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,31 @@ +; +; 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: +; + +; Languages +&EN +; Header +#{"displaysink"}, (0x101F8693), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +;Files +""-"z:\sys\bin\displaysink.dll" +""-"z:\sys\bin\VtImageConverter.dll" +""-"z:\sys\bin\VtImageTransforms.dll" diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/group/DisplaySink.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/group/DisplaySink.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2004 - 2006 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 definition file for Display Sink subsystem +* +*/ + + +#include +#include "../inc/DisplaySinkUids.hrh" + +TARGET displaysink.dll +TARGETTYPE dll +VENDORID VID_DEFAULT + +UID KSharedLibraryUidDefine KUidDisplaySinkLibrary + +SOURCEPATH ../src +SOURCE CDisplaySink.cpp + +SOURCE CDisplaySinkNGA.cpp +SOURCE CDisplaySinkDP.cpp +SOURCE vtyuvconverter.cpp +SOURCE CDisplaySinkDSA.cpp + + +USERINCLUDE ../inc +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../../inc +SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/mmf/server + +LIBRARY featmgr.lib +LIBRARY euser.lib +LIBRARY mmfcontrollerframework.lib +LIBRARY fbscli.lib +LIBRARY vtimageconverter.lib +LIBRARY vtimagetransforms.lib + +CAPABILITY CAP_GENERAL_DLL + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/group/VtImageConverter.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/group/VtImageConverter.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2004 - 2006 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 definition file for Display Sink subsystem +* +*/ + + + +#include +#include "../inc/VtImageConverterUids.hrh" + +TARGET vtimageconverter.dll +TARGETTYPE dll +VENDORID VID_DEFAULT + +UID KSharedLibraryUidDefine KUidVtImageConverterLibrary + +USERINCLUDE ../inc +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/libc + +SOURCEPATH ../src +SOURCE CVtImageConverter.cpp + +LIBRARY gdi.lib +LIBRARY euser.lib +LIBRARY fbscli.lib + +CAPABILITY CAP_GENERAL_DLL + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/group/VtImageTransforms.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/group/VtImageTransforms.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2004 - 2006 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 definition file for Video Source image transforms +* +*/ + + +#include +#include "../inc/CVtImageTransformsUids.hrh" + +TARGET vtimagetransforms.dll +TARGETTYPE dll +VENDORID VID_DEFAULT + +UID KSharedLibraryUidDefine KUidVtImageTransformsLibrary + +SOURCEPATH ../src +SOURCE CVtImage.cpp +SOURCE CVtImageBitmap.cpp +SOURCE CVtImageIYUV.cpp +SOURCE CVtImageScaler.cpp +SOURCE CVtImageScalerImpl.cpp +SOURCE CVtImageScalerImplNearest.cpp +SOURCE CVtImageScalerImplWeightedAverage.cpp +SOURCE CVtImageScalerImplBilinear.cpp +SOURCE CVtImageRotator.cpp +SOURCE CVtImageRotatorImpl.cpp +SOURCE CVtImageRotatorImplMirrorFlip.cpp +SOURCE CVtImageRotatorImplClockwise.cpp + +USERINCLUDE ../inc +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/mmf/server +SYSTEMINCLUDE /epoc32/include/mmf/common + +LIBRARY euser.lib +LIBRARY fbscli.lib +LIBRARY bitmaptransforms.lib + +CAPABILITY CAP_GENERAL_DLL + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2004 - 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: Component definition file for Display Sink subsystem. +* +*/ + + + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/CVtImageConverter.h |../../../inc/cvtimageconverter.h +../inc/cvtimageconverter.inl |../../../inc/cvtimageconverter.inl +../inc/mdisplaysink.h |../../../inc/mdisplaysink.h +../inc/TDisplaySinkParamsDSA.h |../../../inc/tdisplaysinkparamsdsa.h +../inc/tdisplaysinkparamsdsa.inl |../../../inc/tdisplaysinkparamsdsa.inl +../inc/TDisplaySinkParamsDP.h |../../../inc/tdisplaysinkparamsdp.h +../inc/TDisplaySinkParamsNGA.h |../../../inc/tdisplaysinkparamsnga.h +../inc/cvtimage.h |../../../inc/cvtimage.h +../inc/CVtImageBitmap.h |../../../inc/cvtimagebitmap.h +../inc/CVtImageIYUV.h |../../../inc/cvtimageiyuv.h +../inc/CVtImageScaler.h |../../../inc/cvtimagescaler.h +../inc/cvtimagerotator.h |../../../inc/cvtimagerotator.h + +// Export SIS stub file +../data/displaysink_stub.SIS /epoc32/data/z/system/install/displaysink_stub.sis + +// Export IBY file +../rom/DisplaySink.iby CORE_APP_LAYER_IBY_EXPORT_PATH(displaysink.iby) + +PRJ_MMPFILES +VtImageTransforms.mmp +VtImageConverter.mmp +DisplaySink.mmp + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CDisplaySink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CDisplaySink.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,671 @@ +/* +* Copyright (c) 2004 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: DisplaySink subsystem. +* +*/ + + + + +#ifndef CDISPLAYSINK_H +#define CDISPLAYSINK_H + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include + +#include "mdisplaysink.h" + +// CONSTANTS + +// QCIF size +#define QCIF TSize( 176, 144 ) + +// Number of bitmap sets (big/small) in array +const TInt KBitmapTableCount = 2; + +// FORWARD DECLARATIONS + +class CDisplaySink; +class CVTYUVFbsBitmapConverter; +class CVtCallback; +class CVtImageIYUV; +class CMMFDataBuffer; +class CVtFrameQueue; + +// CLASS DECLARATION + +/** +* CVtFrameQueue +* +* Storage class for DisplaySink. Used in situations where EmptyBufferL() is +* called and there's no available bitmaps (or buffers). This class will +* hold one buffer until next SetBitmapAvailable() is called. Instance operates +* in protocol thread's active scheduler. +* +* @lib DisplaySink.lib +*/ +NONSHARABLE_CLASS( CVtFrameQueue ) : public CActive + { + +public: // new methods + /** + * C++ constructor. + */ + CVtFrameQueue(); + + /** + * Adds this to protocol thread's active scheduler. + */ + TInt ThreadLogon(); + + /** + * Releases stored buffer, when sink is stopped. + */ + void SinkStoppedL(); + + /** + * Deques from protocol thread's active scheduler. + */ + void ThreadLogoff(); + + /** + * Stores buffer & supplier. + */ + void Store( MVTVideoSource& aSupplier, CMMFDataBuffer* aBuffer, TSize aFrameSize, TPtr8& aPtr ); + + /** + * Returns ETrue if buffer is being stored, EFalse otherwise. + */ + TBool IsStored() const; + + /** + * Returns stored buffer. + */ + TVtMMFDataBuffer Buffer(); + + /** + * Releases stored buffer. Supplier's BufferEmptiedL() is called. Call + * is executed in protocol thread's context. + */ + void Release(); + +private: + + /** + * Calls BufferEmptiedL() for supplier. This call always happens in protocol + * thread context. + * @param aBuffer Pointer reference to a buffer to be released. + */ + void DoReleaseBufferL( CMMFDataBuffer*& aBuffer ); + +private: // from CActive + /** + * @see CActive::RunL + */ + void RunL(); + + /** + * @see CActive::DoCancel + */ + void DoCancel(); + +private: + // Stored supplier + MVTVideoSource* iSupplier; + // Stored buffer + CMMFDataBuffer* iBuffer; + + TSize iFrameSize; + TPtr8* iPtr; + // Pre-opened thread object that is used for signalling the delayed + // BufferEmptiedL() call + RThread iThread; + // Buffer to be released on next RunL() + CMMFDataBuffer* iReleaseBuffer; + }; + +/** +* CVtCallback +* +* +* @lib DisplaySink.lib +*/ +NONSHARABLE_CLASS( CVtCallback ) : public CActive + { + +private: + + /** + * Callback type. Currently only size changes are supported. If new callback + * types are needed, add them here. + */ + enum TCallBackType + { + EVideoFrameSizeChanged + }; + +public: + + /** + * C++ constructor. + */ + CVtCallback( MDisplaySinkObserver& aObserver ); + + /** + * C++ destructor. + */ + ~CVtCallback(); + + /** + * Video frame size has been changed. Old and new size are given as + * parameter. + */ + void VideoFrameSizeChangedL( const TSize& aFrom, const TSize& aTo ); + + /** + * Returns callback result. + */ + TInt Result() const; + + /** + * Boolean variable that tells wether or not call back has been served. + */ + TBool Completed() const; + +private: + + /** + * Issues callback. Because callback receiver can be in same or different + * thread this is made as own function that checks whether or not other + * thread needs to be signalled. + */ + void IssueCallbackL(); + +private: // from CActive + + /** + * See CActive documentation. + */ + void RunL(); + + /** + * See CActive documentation. + */ + void DoCancel(); + + /** + * See CActive documentation. + */ + TInt RunError( TInt aError ); + +private: + + // Owner thread's id + TThreadId iOwnThreadId; + + // Pointer to observer + MDisplaySinkObserver* iObserver; + + // Callback type + TCallBackType iCallBackType; + + // Old size + TSize iFrom; + + // New size + TSize iTo; + + // Callback result + TInt iResult; + + // Has callback been completed? + TBool iCompleted; + }; + + +/** +* MVTVideoSink interface implementation +* +* @lib DisplaySink.lib +*/ +NONSHARABLE_CLASS( CDisplaySink ) : public CBase, public MDisplaySink, + public MVTVideoSink +{ +protected: // inner classes + + // Structure containing bitmap related data + class TBitmapEntry + { + public: // data + + // ETrue if this bitmap entry is free + TBool iIsFree; + }; + +private: // from MDisplaySink + + /** + * @see MDisplaySink::Destroy + */ + void Destroy(); + + /** + * @see MDisplaySink::SetBitmapAvailable + */ + void SetBitmapAvailable( TBitmapNo aBitmapNo ); + + /** + * @see MDisplaySink::Release + */ + void Release(); + + /** + * @see MDisplaySink::UpdateSinkParamsL + */ + void UpdateSinkParamsL( const TDisplaySinkParams& aParams, TBool& aUpdated ); + + /** + * @see MDisplaySink::Pause + */ + void Pause(); + + /** + * @see MDisplaySink::Resume + */ + void Resume(); + + /** + * @see MDisplaySink::operator MVTVideoSink& + */ + operator MVTVideoSink&(); + + /** + * @see MDisplaySink::NextFrame + */ + void NextFrame(); + +private: // from MVTVideoSink + /** + * From MVTVideoOutput. See MVTVideoOutput for description. + */ + virtual void SetFormatL( const TDesC8& aFormat ); + + /** + * From MVTVideoOutput. See MVTVideoOutput for description. + */ + virtual void SetVideoFrameSizeL( const TSize& aSize ); + + /** + * From MVTVideoOutput. See MVTVideoOutput for description. + */ + virtual void GetVideoFrameSizeL( TSize& aSize ) const; + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual void EmptyBufferL( + TVtMMFDataBuffer aDataBuffer, + MVTVideoSource* aSupplier, + TMediaId aMediaId ); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual void BufferFilledL( CMMFBuffer* aBuffer ); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TBool CanCreateSinkBuffer(); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual CMMFBuffer* CreateSinkBufferL( + TMediaId aMediaId, + TBool &aReference ); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual void SinkThreadLogoff(); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TInt SinkPrimeL(); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TInt SinkPlayL(); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TInt SinkPauseL(); + + /** + * From MVTVideoSink. See MVTVideoSink for description. + */ + virtual TInt SinkStopL(); + +private: + const RArray& GetMultimediaTypesL() const; + + +protected: // Constructors and destructor + + /** + * C++ default constructor. + */ + CDisplaySink(); + + /** + * Destructor. + */ + ~CDisplaySink(); + +protected: // New functions + + /** + * By default Symbian 2nd phase constructor is private. + * @param "aParams" Initialization parameters. + * @param "aInitData" Initialization parameters. Not used. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( TDisplaySinkParams& aParams, const TDesC8& aInitData ); + + /** + * Thread logon that may leave. This will be trapped and possible + * error code is returned to the caller of SinkThreadLogon(). + * @exception Can leave with one of the system wide error codes. + */ + void SinkThreadLogonL(); + + /** + * Sets limit for displaysink frame rate. + */ + void SetFrameRateLimit( + TDisplaySinkParams::TFrameRateLimit aFrameRateLimit ); + + /** + * Resets frame rate limitter. + */ + void ResetFrameRateLimitter(); + + /** + * Does frame rate limitter validation and also checks if sink is paused. + */ + TBool IsOkToSendFrame(); + + /** + * Opens fbs session and sets flag, if open succeeds. + */ + void FbsConnectL(); + + /** + * Opens VT engine thread. + */ + void ThreadOpenL(); + + /** + * Closes fbs session (if open succeeded earlier). + */ + void FbsDisconnect(); + + /** + * Closes VT thread (if open succeeded earlier). + */ + void ThreadClose(); + + /** + * Cleanup operation for SinkThradLogon. + */ + static void SinkThreadLogonCleanup( TAny* aPtr ); + +private: // new methods implemented in derived classes + + /** + * Called from ConstructL() to allow inherited classes to do their own + * construction. + */ + virtual void BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) = 0; + + /** + * Converts image. Calls DoConvertL() to do the task. + * @return KErrNone or one of the system wide error codes. + */ + virtual TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ) = 0; + + /** + * Called from SinkThreadLogonL(). + */ + virtual void BaseSinkThreadLogonL() = 0; + + /** + * Called from SinkThreadLogogg(). + */ + virtual void BaseSinkThreadLogoff() = 0; + + /** + * Called from UpdateSinkParamsL(). + */ + virtual void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ) = 0; + + /** + * Updates sink params. + * @exception May leave with one of the system wide error codes (e.g. in + * out of memory situaton). + */ + virtual void BaseDoUpdateParamsL() = 0; + + /** + * Called when video frame size is set. + * @exception May leave with one of the system wide error codes (e.g. in + * out of memory situaton). + */ + virtual void BaseSetVideoFrameSizeL( const TSize& aSize ) = 0; + + /** + * Returns ETrue if given frame size matches with expected frame size. + * Implemented in derived classes because in some cases (e.g. when rotation + * is enabled), size calculation is more complicated. + */ + virtual TBool BaseSizesMatch( const TSize& aSize ) = 0; + + /** + * Returns reference to TBitmapEntry. + */ + virtual TBitmapEntry& BitmapEntry( TInt aIndex ) = 0; + + /** + * EmptyBuffer handling. + */ + virtual void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ) = 0; + + /** + * Bitmap availability handling. + */ + virtual void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) = 0; + + /** + * Called when source frame size changes. + */ + virtual void BaseVideoFrameSizeChangedL( const TSize& aNewSize ) = 0; + +protected: // Data + + // Video source that provides buffer filled with video frame(s) + MVTVideoSource* iSupplier; + + // Event handler to notify events + MAsyncEventHandler* iEventHandler; + + // Buffer containing video frame(s) and to be converted + CMMFBuffer* iBuffer; + + // Sink data type code as fourCC code + TFourCC iSinkFourCC; + + // Sink state enumeration + enum TState + { + EStopped, + EPrimed, + EPlaying + }; + + // Sink state + TState iState; + + // Array of MIME types supported by sink + RArray iVTMimeTypes; + + // Video frame size + TSize iFrameSize; + + // Thread ID of thread to notify after video frame is converted + TThreadId iThreadId; + + // Handle to thread to notify after video frame is converted + RThread iThread; + + // Pointer to iStatus member of the Active Object to notify + // after video frame is converted + TRequestStatus* iRequestStatusPtr; + + // Critical section to serialize access to iBitmapTable + RCriticalSection iBitmapCS; + + // Semaphore to force thread context switch after video frame + // is converted + RSemaphore iSync; + + + // This is set to ETrue when new params are set, this pointer + // is also used as flag when parameter update is requested. + TBool* iParamsUpdated; + + // This flag variable will be set to ETrue when sink parameters + // need to be updated (e.g. when frame size changes from QCIF + // to Sub QCIF or vice versa) + TBool iWaitingForUpdate; + + // Contains expected frame size (this is taken from given bitmaps). + TSize iExpectedFrameSize; + + // Active object that will call callbacks to VT engine in VT + // engine's thread context. + CVtCallback* iVTSignaller; + + // If ETrue, sink does not convert data that is given to it + TBool iReleased; + + // Output MIME type holder + TBuf8< 128 > iYuv420PlanarDesc; + + // Frame rate interval in milliseconds + TInt iFrameRateInterval; + + // Time since last frame was sent (in milliseconds) + TInt iMilliSecondsSinceLastFrame; + + // Time stamp for last frame sent + TTime iLastFrameTime; + + // When paused remote video will no be sent to VT engine + TBool iPaused; + + // DisplaySink params flags + TUint32 iDSFlags; + + // Is set to ETrue when SinkThreadLogon() is called. + TUint32 iInitFlags; + + // Initialization flags + enum TInitFlags + { + // This flag is set, when SinkThreadLogon() is called + ESinkThreadLogonCalled = ( 1 << 0 ), + + // This flag is set, when FbsSession has been connected + EFbsSessionConnected = ( 1 << 1 ), + + // This flag is set, when handle to Sink Thread has been opened + EThreadOpened = ( 1 << 2 ) + }; + + // Frame queue for holding for holding frames until target conversion + // buffer is ready. + CVtFrameQueue* iVideoFrameQueue; + + // friend classes + + + }; + +/** +* Safe cleanup for synchronization primitives. +* +* @lib DisplaySink.lib +*/ +template < class T > +class CleanupSignal + { +public: + static void PushL( T& aPtr ); +private: + static void Signal( TAny *aPtr ); + }; + +template < class T > +void CleanupSignal< T >::PushL( T& aRef ) + { + CleanupStack::PushL( TCleanupItem( &Signal, &aRef ) ); + } + +template < class T > +void CleanupSignal< T >::Signal( TAny *aPtr ) + { + static_cast< T* >( aPtr )->Signal(); + } + +/** +* Pushes signalable object into cleanup stack. +*/ +template < class T > +void CleanupSignalPushL( T& aRef ) + { + CleanupSignal< T >::PushL( aRef ); + } + +#endif // CDISPLAYSINK_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CDisplaySinkDP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CDisplaySinkDP.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004 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: DisplaySink subsystem. +* +*/ + + + + +#ifndef CDISPLAYSINKDP_H +#define CDISPLAYSINKDP_H + +// INCLUDE FILES + +#include "CDisplaySink.h" +#include "TDisplaySinkParamsDP.h" + +// CLASS DECLARATION + +/** +* Displaysink implementation for Display Posting. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( CDisplaySinkDP ) : public CDisplaySink + { +public: // static constructor + + /** + * Static constructor that may leave. + */ + static CDisplaySinkDP* NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + +private: // constructors and destructor + + /** + * C++ default constructor. + */ + CDisplaySinkDP(); + + /** + * destructor + */ + ~CDisplaySinkDP(); + +private: // from CDisplaySink + + /** + * @see CDisplaySink::BaseConstructL + */ + void BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + + /** + * @see CDisplaySink::BaseConvert + */ + TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ); + + /** + * @see CDisplaySink::BaseSinkThreadLogonL + */ + void BaseSinkThreadLogonL(); + + /** + * @see CDisplaySink::BaseSinkThreadLogoff + */ + void BaseSinkThreadLogoff(); + + /** + * @see CDisplaySink::BaseUpdateSinkParamsL + */ + void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseDoUpdateParamsL(); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseSetVideoFrameSizeL( const TSize& aSize ); + + /** + * @see CDisplaySink::BaseSizesMatch + */ + TBool BaseSizesMatch( const TSize& aSize ); + + /** + * @see CDisplaySink::BitmapEntry + */ + TBitmapEntry& BitmapEntry( TInt aIndex ); + + /** + * @see CDisplaySink::BaseEmptyBufferL + */ + void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ); + + /** + * @see CDisplaySink::BaseSetBitmapAvailable + */ + void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ); + + /** + * @see CDisplaySink::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& aNewSize ); + +private: // MDisplaySink + + /** + * @see MDisplaySink::NextFrame + */ + void NextFrame(); + +private: // new methods + + /** + * Updates expected frame size. + * @exception May leave with KErrNotSupported, if bitmap sizes do not match. + */ + void UpdateExpectedFrameSizeL(); + +private: // new classes + + // Class posting buffer related data + class TBitmapEntryDP : public TBitmapEntry + { + public: // data + + // Pointer to Posting Buffer pointer + CPostingSurface::TPostingBuff** iBuffer; + }; + +private: // data + + // Array of bitmap related structures + TBitmapEntryDP iBitmapTable[ KBitmapTableCount ]; + + // Store for saving new parameters in UpdateSinkParamsL() call + TDisplaySinkParamsDP iNewParams; + }; + +#endif // CDISPLAYSINKDP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CDisplaySinkDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CDisplaySinkDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2004 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: DisplaySink subsystem. +* +*/ + + + + +#ifndef CDISPLAYSINKDSA_H +#define CDISPLAYSINKDSA_H + +// INCLUDE FILES + +#include "CDisplaySink.h" +#include "TDisplaySinkParamsDSA.h" + +// CLASS DECLARATION + +/** +* Displaysink implementation for Direct Screen access. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( CDisplaySinkDSA ) : public CDisplaySink, + public MVtImageRotatorObserver + { +public: // static constructor + + /** + * Static constructor that may leave. + */ + static CDisplaySinkDSA* NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + +private: // constructors and destructor + + /** + * C++ default constructor. + */ + CDisplaySinkDSA(); + + /** + * destructor + */ + ~CDisplaySinkDSA(); + +private: // from CDisplaySink + + /** + * @see CDisplaySink::BaseConstructL + */ + void BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + + /** + * @see CDisplaySink::BaseConvert + */ + TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ); + + /** + * @see CDisplaySink::BaseSinkThreadLogonL + */ + void BaseSinkThreadLogonL(); + + /** + * @see CDisplaySink::BaseSinkThreadLogoff + */ + void BaseSinkThreadLogoff(); + + /** + * @see CDisplaySink::BaseUpdateSinkParamsL + */ + void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseDoUpdateParamsL(); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseSetVideoFrameSizeL( const TSize& aSize ); + + /** + * @see CDisplaySink::BaseSizesMatch + */ + TBool BaseSizesMatch( const TSize& aSize ); + + /** + * @see CDisplaySink::BitmapEntry + */ + TBitmapEntry& BitmapEntry( TInt aIndex ); + + /** + * @see CDisplaySink::BaseEmptyBufferL + */ + void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ); + + /** + * @see CDisplaySink::BaseSetBitmapAvailable + */ + void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ); + + /** + * @see CDisplaySink::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& aNewSize ); + +private: // from MVtImageRotatorObserver + + /** + * @see MVtImageRotatorObserver::RotationFinished + */ + void RotationFinished( TInt aError ); + +private: // new methods + + /** + * Updates expected frame size. + * @exception May leave with KErrNotSupported, if bitmap sizes do not match. + */ + void UpdateExpectedFrameSizeL(); + + /** + * Converts image. Calls DoConvertL() to do the task. + * @param "aBitmapNo" CFbsBitmap number to use for converted image. + * @param "aConverted" Reference to boolean that will be ETrue if buffer + * was converted, EFalse otherwise. + * @return KErrNone or one of the system wide error codes. + */ + void ConvertL( const TPtrC8& aBuffer, TBool& aConverted ); + + /** + * Convert YUV420Planar image to a CFbsBitmap. + * @param "aBitmapNo" CFbsBitmap number to use for converted image. + * @return KErrNone or one of the system wide error codes. + */ + void DoConvertL( const TPtrC8& aBuffer, TBitmapNo aBitmapNo ); + +private: // new classes + + // Class containing bitmap related data + class TBitmapEntryDSA : public TBitmapEntry + { + public: // data + + // Handle to target bitmap + TInt iHandle; // QCIF + }; + +private: // data + + // Array of bitmap related structures + TBitmapEntryDSA iBitmapTable[ KBitmapTableCount ]; + + // Converter for bitmap 1, created into Protocol thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverter1; // owned + + // Converter for bitmap 2, created into Protocol thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverter2; // owned + + // Converter for bitmap, created into VT thread's heap + CVTYUVFbsBitmapConverter* iYUVBitmapConverterVT; + + // Pointer to image rotator instance. + CVtImageRotator* iRotator; // owned + + // Source YUV image for image transforms + CVtImageIYUV* iSourceImg; + + // Target YUV image for image transforms + CVtImageIYUV* iTargetImg; + + // Rotation angle + CVtImageRotator::TRotationAngle iRotationAngle; + + // Store for saving new parameters in UpdateSinkParamsL() call + TDisplaySinkParamsDSA iNewParams; + }; + +#endif // CDISPLAYSINKDSA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CDisplaySinkNGA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CDisplaySinkNGA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2004-2006 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: Displaysink implementation for NGA. +* +*/ + +#ifndef CDISPLAYSINKNGA_H +#define CDISPLAYSINKNGA_H + +// INCLUDE FILES +#include "CDisplaySink.h" +#include "TDisplaySinkParamsNGA.h" + +// CLASS DECLARATION + +/** +* Displaysink implementation for NGA. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( CDisplaySinkNGA ) : public CDisplaySink + { +public: // static constructor + + /** + * Static constructor that may leave. + */ + static CDisplaySinkNGA* NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + +private: // constructors and destructor + + /** + * C++ default constructor. + */ + CDisplaySinkNGA(); + + /** + * destructor + */ + ~CDisplaySinkNGA(); + +private: // from CDisplaySink + + + /** + * @see CDisplaySink::BaseConstructL + */ + void BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + + /** + * @see CDisplaySink::BaseConvert + */ + TBool BaseConvert( const TVtMMFDataBuffer& aBuffer ); + + /** + * @see CDisplaySink::BaseSinkThreadLogonL + */ + void BaseSinkThreadLogonL(); + + /** + * @see CDisplaySink::BaseSinkThreadLogoff + */ + void BaseSinkThreadLogoff(); + + /** + * @see CDisplaySink::BaseUpdateSinkParamsL + */ + void BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseDoUpdateParamsL(); + + /** + * @see CDisplaySink::BaseDoUpdateParamsL + */ + void BaseSetVideoFrameSizeL( const TSize& aSize ); + + /** + * @see CDisplaySink::BaseSizesMatch + */ + TBool BaseSizesMatch( const TSize& aSize ); + + /** + * @see CDisplaySink::BitmapEntry + */ + TBitmapEntry& BitmapEntry( TInt aIndex ); + + /** + * @see CDisplaySink::BaseEmptyBufferL + */ + void BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ); + + /** + * @see CDisplaySink::BaseSetBitmapAvailable + */ + void BaseSetBitmapAvailable( TBitmapNo aBitmapNo ); + + /** + * @see CDisplaySink::BaseVideoFrameSizeChangedL + */ + void BaseVideoFrameSizeChangedL( const TSize& aNewSize ); + +private: // MDisplaySink + + /** + * @see MDisplaySink::NextFrame + */ + void NextFrame(); + +private: // new methods + + /** + * Updates expected frame size. + * @exception May leave with KErrNotSupported, if bitmap sizes do not match. + */ + void UpdateExpectedFrameSizeL(); + +private: // new classes + + // Class submit buffer related data + class TBitmapEntryNGA : public TBitmapEntry + { + public: // data + + // Pointer to Surface Buffer pointer + //TVideoFrameBuffer** iBuffer; + TUint8** iBuffer; + }; + +private: // data + + // Array of bitmap related structures + TBitmapEntryNGA iBitmapTable[ KBitmapTableCount ]; + + // Store for saving new parameters in UpdateSinkParamsL() call + TDisplaySinkParamsNGA iNewParams; + }; + +#endif // CDISPLAYSINKNGA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageBitmap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageBitmap.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,162 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGEBITMAP_H +#define CVTIMAGEBITMAP_H + +// INCLUDE FILES + +#include "cvtimage.h" + +// FORWARD DECLARATIONS + +class CFbsBitmap; + +// CLASS DECLARATIONS + +/** +* CFbsBitmap image implementation. +* +* @lib videosource.lib +*/ +class CVtImageBitmap : public CVtImage + { + public: + + /** + * Creates new instance of CVtImageBitmap. + * @param "aBitmapHandle" Handle of bitmap to "bind" this instance to. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageBitmap* NewL( TInt aBitmapHandle ); + + /** + * Creates new instance of CVtImageBitmap. + * @param "aSize" Size of the image in pixels. + * @param "aDisplayMode" Display mode of the image. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageBitmap* NewL( + const TSize& aSize, + TDisplayMode aDisplayMode ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVtImageBitmap(); + + /** + * Resizes the image to new dimension. + * @exception In error situation leaves with one of the system wide + * error codes. + * @param "aSize" New size of the image in pixels. + */ + IMPORT_C void ResizeL( const TSize& aSize ); + + /** + * Sets new bitmap this image references to. + * @param "aBitmapHandle" Handle of the bitmap this image will be + * referencing to. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void SetBitmapL( TInt aBitmapHandle ); + + /** + * Returns constant reference to CFbsBitmap owned by this instance. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Constant reference to CFbsBitmap. + */ + IMPORT_C CFbsBitmap& Bitmap() const; + + public: // from CVtImage + + /** + * From CVtImage. See CVtImage for description. + */ + TBool NeedHeapLock() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TVtDisplayMode DisplayMode() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TSize Size() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TInt BytesPerRow() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TUint32* DataAddress() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TUint32* LineAddress( TInt aLine ) const; + + private: + + /** + * C++ constructor. + */ + CVtImageBitmap(); + + /** + * Second phase constructor. + * @param "aSize" Size of the image in pixels. + * @param "aDisplayMode" Display mode of the image. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL( const TSize& aSize, TDisplayMode aDisplayMode ); + + /** + * Second phase constructor. + * @param "aBitmapHandle" Handle of bitmap to "bind" this instance to. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL( TInt aBitmapHandle ); + + private: + + // CFbsImage this image instance references to + CFbsBitmap* iBitmap; // owned + }; + + +#endif // CVTIMAGEBITMAP_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageConverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageConverter.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,638 @@ +/* +* Copyright (c) 2004 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: Image conversion library for VideoTelephony. +* +*/ + + + + + +#ifndef CVTIMAGECONVERTER_H +#define CVTIMAGECONVERTER_H + +// INCLUDE FILES + +#include +#include + +// CLASS FORWARDS + +class CFbsBitmap; +class CVTYUVFbsBitmapConverter; +class CVSFbsBitmapIYUVConverter; + +// DATA TYPES + +typedef TRgb ( *TVSColorReadFunc ) ( TAny*& ); + +// CLASS DECLARATIONS + +/** +* Base class for all YUV to CFbsBitmap converters. +* +* @lib VTImageConverter.lib +*/ +class CVTYUVFbsBitmapConverter : public CBase + { + public: // Constructors and destructor + + /** + * C++ destructor. + */ + IMPORT_C ~CVTYUVFbsBitmapConverter(); + + public: // New functions + + /** + * Starts image conversion from YUV to CFbsBitmap. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C virtual void ProcessL(); + + /** + * Sets size of the source YUV image in pixels. This must be implemented + * in derived classes. + * @param "aSize" Size of source YUV image in pixels. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetSourceSizeL( const TSize& aSize ) = 0; + + /** + * Sets source YUV image data. This method must be implemented in derived + * classes. + * @param "aSourceData" 8-bit descriptor containing the YUV data. As + * data is referenced and not copied, given reference must be still + * valid when ProcessL() is called. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetSourceL( const TDesC8& aSourceData ) = 0; + + /** + * Sets size of the source YUV image in pixels and image data. + * This method must be implemented in derived classes. + * @param "aSize" Size of source YUV image in pixels. + * @param "aSourceData" 8-bit descriptor containing the YUV data. + * As data is referenced and not copied, given reference must be still + * valid when ProcessL() is called. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetSourceL( + const TSize& aSize, + const TDesC8& aSourceData ) = 0; + + /** + * Sets destination bitmap into which conversion will be made. + * @param "aDestinationBitmap" Reference to destination bitmap. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C virtual void SetDestinationL( + const CFbsBitmap& aDestinationBitmap ); + + /** + * Sets destination bitmap into which conversion will be made. + * Bitmap is given as handle to existing bitmap. + * @param "aHandle" Handle to existing bitmap. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C virtual void SetDestinationL( TInt aHandle ); + + public: // Functions from base classes + + protected: // New functions + + /** + * Updates iY, iU and iV member variables. Must be implemented in + * derived classes. + * @param "aSourceData" 8-bit descriptor to source YUV data. + */ + virtual void SetYUVPtrs( const TDesC8& aSourceData ) = 0; + + /** + * Second phase constructor. + * @param "aBitmapHandle" Handle to destination bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void ConstructL( TInt aBitmapHandle ); + + /** + * Second phase constructor that will be called when destination is + * changed. + * @param "aBitmapHandle" Handle to destination bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void ReConstructL( TInt aBitmapHandle ); + + /** + * Updates internal variables. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SizeUpdateL(); + + /** + * C++ constructor. + * @param "aSourceSize" Source size in pixels. + */ + CVTYUVFbsBitmapConverter( const TSize& aSourceSize ); + + /** + * Returns source size in pixels. + * @return Source size in pixels, as constant reference. + */ + inline const TSize& SourceSize() const; + + /** + * Returns source size in pixels. + * @return Source size in pixels, as reference. + */ + inline TSize& SourceSize(); + + /** + * Returns destination size in pixels. + * @return Destination size in pixels, as constant reference. + */ + inline const TSize& DestinationSize() const; + + /** + * Returns destination size in pixels. + * @return Destination size in pixels, as reference. + */ + inline TSize& DestinationSize(); + + /** + * Main process loop for Color4K mode. This must be implemented in + * derived classes. + * @param "aWriteFunction" Pointer to function that writes one pixel to + * destination. + */ + virtual void DoProcess4K() = 0; + + /** + * Main process loop for Color64K mode. This must be implemented in + * derived classes. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + virtual void DoProcess64K() = 0; + + /** + * Main process loop for Color16M mode. This must be implemented in + * derived classes. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + virtual void DoProcess16M() = 0; + + /** + * Main process loop for Color16MU mode. This must be implemented in + * derived classes. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + virtual void DoProcess16MU16MA() = 0; + + protected: // Functions from base classes + + private: // New functions + + /** + * C++ default constructor. + */ + CVTYUVFbsBitmapConverter(); + + private: // Functions from base classes + + public: // Data + + protected: // Data + + // Table of coefficients for EColor4K + static const TUint8 COFF_TBL_4K[ 80 ]; + + // Table of coefficients for EColor64K + static const TUint8 COFF_TBL_64K[ 220 ]; + + // Table of coefficients for EColor16M + static const TUint8 COFF_TBL_16M[ 528 ]; + + // Source size in pixels. + TSize iSourceSize; + + // Target size in pixels. + TSize iDestinationSize; + + // Pointer to destination bitmap. + CFbsBitmap* iDestination; // owned, duplicate + + // Pointer descriptor that points to Y data of the YUV image. + const TUint8* iY; + + // Pointer descriptor that points to Cr (U) data of the YUV image. + const TUint8* iU; + + // Pointer descriptor that points to Cb (V) data of the YUV image. + const TUint8* iV; + + // Horizontal skip real value. After every pixel this valus is added + // to X index in conversion loop. + TReal32 iVSkipReal; + + // Vertical skip real value. After every pixel this valus is added + // to Y index in conversion loop. + TReal32 iHSkipReal; + + private: // Data + }; + +/** +* Base class for YUV 4:2:0 planar image to CFbsBitmap converters. +* +* @lib VTImageConverter.lib +*/ +class CVTYUVPlanarFbsBitmapConverter : public CVTYUVFbsBitmapConverter + { + public: // New functions + + public: // Functions from base classes + + /** + * Sets size of the source YUV image in pixels. + * @param "aSize" Size of source YUV image in pixels. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C void SetSourceSizeL( const TSize& aSize ); + + /** + * Sets source YUV image data. + * @param "aSourceData" 8-bit descriptor containing the YUV data. As + * data is referenced and + * not copied, given reference must be still valid when ProcessL() is + * called. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C void SetSourceL( const TDesC8& aSourceData ); + + /** + * Sets size of the source YUV image in pixels and image data. This + * method must be + * implemented in derived classes. + * @param "aSize" Size of source YUV image in pixels. + * @param "aSourceData" 8-bit descriptor containing the YUV data. As + * data is referenced and + * not copied, given reference must be still valid when ProcessL() is + * called. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C void SetSourceL( + const TSize& aSize, + const TDesC8& aSourceData ); + + protected: // Constructors and destructor + + /** + * C++ constructor. + * @param "aSourceSize" Source size in pixels. + */ + CVTYUVPlanarFbsBitmapConverter( const TSize& aSourceSize ); + + protected: // New functions + + protected: // Functions from base classes + + /** + * Main process loop for Color4K mode. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess4K(); + + /** + * Main process loop for Color4K mode when scaling is not required. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess4KNoScale(); + + /** + * Main process loop for Color64K mode. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess64K(); + + /** + * Main process loop for Color64K mode when scaling is not required. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess64KNoScale(); + + /** + * Main process loop for Color16M mode. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess16M(); + + /** + * Main process loop for Color16M mode when scaling is not required. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess16MNoScale(); + + /** + * Main process loop for Color16MU and Color16MA modes. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess16MU16MA(); + + /** + * Main process loop for Color16MU and Color16MA modes when scaling is + * not required. + * @param "aWriteFunction" Pointer to function that writes one pixel + * to destination. + */ + void DoProcess16MU16MANoScale(); + + private: // New functions + + /** + * C++ default constructor. + */ + CVTYUVPlanarFbsBitmapConverter(); + + private: // Functions from base classes + }; + +/** +* FourCC IYUV image to CFbsBitmap converter (see IYUV description below). +* +* All Y samples are found first in memory as an array of unsigned char +* (possibly with a larger stride for memory alignment), followed immediately +* by all Cr (U) samples (with half the stride of the Y lines, and half the +* number of lines), then followed immediately by all Cb (V) samples in a +* similar fashion. +* +* @lib VTImageConverter.lib +*/ +class CVTIYUVFbsBitmapConverter : public CVTYUVPlanarFbsBitmapConverter + { + public: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @param "aSourceSize" Size of source image in pixels. + * @param "aDestination" Reference to destination bitmap. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVTIYUVFbsBitmapConverter* NewL( + const TSize& aSourceSize, + const CFbsBitmap& aDestination ); + + /** + * Static factory function to create instance of this class. + * @param "aSourceSize" Size of source image in pixels. + * @param "aBitmapHandle" Handle to destination bitmap. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVTIYUVFbsBitmapConverter* NewL( + const TSize& aSourceSize, + TInt aBitmapHandle ); + + public: // New functions + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + private: // Functions from base classes + + /** + * Updates iY, iU and iV member variables. + * @param "aSourceData" 8-bit descriptor to source YUV data. + */ + void SetYUVPtrs( const TDesC8& aSourceData ); + + private: // Constructors and destructor + + /** + * C++ destructor. + * @param "aSourceSize" Source size in pixels. + */ + CVTIYUVFbsBitmapConverter( const TSize& aSourceSize ); + + /** + * C++ default constructor. + */ + CVTIYUVFbsBitmapConverter(); + }; + +/** +* FourCC YV12 image to CFbsBitmap converter (see YV12 description below). +* +* All Y samples are found first in memory as an array of unsigned char +* (possibly with a larger stride for memory alignment), followed immediately +* by all Cb (V) samples (with half the stride of the Y lines, and half the +* number of lines), then followed immediately by all Cr (U) samples in a +* similar fashion. +* +* @lib VTImageConverter.lib +*/ +class CVTYV12FbsBitmapConverter : public CVTYUVPlanarFbsBitmapConverter + { + public: // Constructors and destructor + /** + * Static factory function to create instance of this class. + * @param "aSourceSize" Size of source image in pixels. + * @param "aDestination" Reference to destination bitmap. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVTYV12FbsBitmapConverter* NewL( + const TSize& aSourceSize, + const CFbsBitmap& aDestination ); + + /** + * Static factory function to create instance of this class. + * @param "aSourceSize" Size of source image in pixels. + * @param "aBitmapHandle" Handle to destination bitmap. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVTYV12FbsBitmapConverter* NewL( + const TSize& aSourceSize, + TInt aBitmapHandle ); + + public: // New functions + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + private: // Functions from base classes + + /** + * Updates iY, iU and iV member variables. + * @param "aSourceData" 8-bit descriptor to source YUV data. + */ + void SetYUVPtrs( const TDesC8& aSourceData ); + + private: // Constructors and destructor + + /** + * C++ destructor. + * @param "aSourceSize" Source size in pixels. + */ + CVTYV12FbsBitmapConverter( const TSize& aSourceSize ); + + /** + * C++ default constructor. + */ + CVTYV12FbsBitmapConverter(); + }; + +/** +* CFbsBitmap to FourCC IYUV image converter (see IYUV description below). +* +* All Y samples are found first in memory as an array of unsigned char +* (possibly with a larger stride for memory alignment), followed immediately +* by all Cr (U) samples (with half the stride of the Y lines, and half the +* number of lines), then followed immediately by all Cb (V) samples in a +* similar fashion. +* +* @lib VTImageConverter.lib +*/ +class CVSFbsBitmapIYUVConverter : public CBase + { + public: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @param "aBitmap" Reference to source bitmap. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVSFbsBitmapIYUVConverter* NewL( + const CFbsBitmap& aBitmap ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVSFbsBitmapIYUVConverter(); + + public: // New functions + + /** + * Sets new source bitmap. + * @param "aBitmap" Reference to new source bitmap. + */ + IMPORT_C void SetSourceL( const CFbsBitmap& aBitmap ); + + /** + * Starts image conversion from CFbsBitmap to YUV. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C void ProcessL(); + + /** + * After successfull ProcessL() call converted YUV image data can be + * fetched using this method. + * @return 8-bit pointer descriptor (constant) to YUV image data. + */ + IMPORT_C TPtrC8 YUVData() const; + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // Constructors and destructor + + /** + * C++ default constructor. + */ + CVSFbsBitmapIYUVConverter(); + + /** + * Second phase constructor. + * @param "aBitmap" Reference to source bitmap. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( const CFbsBitmap& aBitmap ); + + private: // New functions + + /** + * Second phase constructor that is called when source is changed. + * @param "aBitmap" Reference to source bitmap. + * @exception Can leave with one of the system wide error codes. + */ + void ReConstructL( const CFbsBitmap& aBitmap ); + + /** + * Main process loop. + * @param "aReadFunction" Pointer to function that reads one pixel from + * source. + */ + void DoProcess( TVSColorReadFunc aReadFunction ); + + private: // Functions from base classes + + public: // Data + + protected: // Data + + private: // Data + + // Destination size in pixels. + TSize iSize; + + // Pointer to source bitmap. + CFbsBitmap* iSource; // owned, duplicate + + // Heap descriptor that contains converted YUV data. + HBufC8* iYUVData; // owned + + // Pointer descriptor that points to Y data of the YUV image. + TPtrC8 iY; + + // Pointer descriptor that points to Cr (U) data of the YUV image. + TPtrC8 iU; + + // Pointer descriptor that points to Cb (V) data of the YUV image. + TPtrC8 iV; + }; + +// INLINE METHODS +#include "cvtimageconverter.inl" + + +#endif // CVTIMAGECONVERTER_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageIYUV.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageIYUV.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,231 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGEIYUV_H +#define CVTIMAGEIYUV_H + +// INCLUDE FILES + +#include "cvtimage.h" + +// CLASS DECLARATIONS + +/** +* CFbsBitmap image implementation. +* +* @lib videosource.lib +*/ +class CVtImageIYUV : public CVtImage + { + public: + + /** + * Creates new instance of CVtImageIYUV. + * @param "aSize" Size of the image in pixels. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageIYUV* NewL( const TSize& aSize ); + + /** + * Creates new instance of CVtImageIYUV. + * @param "aSize" Size of the image in pixels. + * @param "aImage" Image data as 8-bit descriptor. Image data is copied into + * this instance. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageIYUV* NewL( const TSize& aSize, const TDesC8& aImage ); + + /** + * Creates new instance of CVtImageIYUV. + * @param "aSize" Size of the image in pixels. + * @param "aImage" Image data as 8-bit descriptor. This image will be referenced + * and thus changes to this instance will be visible in the caller descriptor + * as well. Also descriptor must remain accessible lifetime of the current + * instance or until new non-referenced image is set. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageIYUV* NewL( const TSize& aSize, TPtr8& aImage ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVtImageIYUV(); + + /** + * Updates image with given data. + * @param "aImage" New image. + * @param "aImage" Image data as 8-bit descriptor. Image data is copied into + * this instance. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void SetImageL( const TDesC8& aImage ); + + /** + * Updates image with given data. + * @param "aImage" Image data as 8-bit descriptor. This image will be referenced + * and thus changes to this instance will be visible in the caller descriptor + * as well. Also descriptor must remain accessible lifetime of the current + * instance or until new non-referenced image is set. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void SetImageL( TPtr8& aImage ); + + /** + * Returns image as descriptor. + * @return Image as 8-bit descriptor. + */ + IMPORT_C TPtrC8 Image() const; + + /** + * Returns pointer to Y plane of this image. + * @return Pointer to Y plane of this image. + */ + IMPORT_C TUint8* Y() const; + + /** + * Returns pointer to U plane of this image. + * @return Pointer to U plane of this image. + */ + IMPORT_C TUint8* U() const; + + /** + * Returns pointer to V plane of this image. + * @return Pointer to V plane of this image. + */ + IMPORT_C TUint8* V() const; + + /** + * Returns width of the U and V plane in bytes. + * @return Width of the U and V plane in bytes. + */ + IMPORT_C TInt UVPlaneWidth() const; + + /** + * Returns height of the U and V plane in bytes. + * @return Height of the U and V plane in bytes. + */ + IMPORT_C TInt UVPlaneHeight() const; + + public: // from CVtImage + + /** + * From CVtImage. See CVtImage for description. + */ + TBool NeedHeapLock() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TVtDisplayMode DisplayMode() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TSize Size() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TInt BytesPerRow() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TUint32* DataAddress() const; + + /** + * From CVtImage. See CVtImage for description. + */ + TUint32* LineAddress( TInt aLine ) const; + + + private: + + /** + * Returns size of the image in bytes (all planes + * included). + * @return Size of the image in bytes. + */ + TInt ImageSize() const; + + /** + * C++ constructor. + */ + CVtImageIYUV( const TSize& aSize ); + + /** + * Second phase constructor. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL( const TDesC8* aImage ); + + /** + * Validates given size. + * @exception If the size is not correct leaves with KErrArgument. + */ + void ValidateSizeL( const TSize& aSize ); + + /** + * Checks the size of the given descriptor against required size. + * @exception If the size is not correct leaves with KErrArgument. + */ + void CheckDescriptorSizeL( const TDesC8& aImage ); + + /** + * Sets Y, U and V plane pointers. + */ + void SetYUVPointers(); + private: + + // Size of the image + TSize iSize; + + // Image data + HBufC8* iImage; // owned + + // Image data ptr descriptor + TPtr8 iPtrImage; + + // Ptr to Y plane + TUint8* iY; + + // Ptr to U plane + TUint8* iU; + + // Ptr to V plane + TUint8* iV; + }; + + +#endif // CVTIMAGEIYUV_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImpl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGEROTATORIMPL_H +#define CVTIMAGEROTATORIMPL_H + +// INCLUDE FILES + +#include "cvtimagerotator.h" + +// FORWARD DECLARATIONS + +class CVtImage; + +// CLASS DECLARATIONS + +/** +* Image scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageRotatorImpl : public CBase + { + public: + + /** + * Sets scaler params. + * @param "aParams" Scaling params, including source and target images. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void SetSourceTargetL( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Method to check whether bitmap heap locking is needed or not during + * scaling process. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return ETrue if bitmap heap lock is needed, EFalse otherwise. + */ + TBool NeedHeapLock() const; + + /** + * Pure virtual rotation method. + * @param "aContinue" When method returns, this parameter will contain + * ETrue if new call is needed (i.e. scaling is not yet finished) or + * EFalse if scaling is complete. + * @return KErrNone or one of the system wide error codes. + */ + virtual TInt Rotate( TBool& aContinue ) = 0; + + /** + * Pure virtual method for checking specific rotation angle support. + * @param "aAngle" Rotation type that will be needed. + * @return ETrue if aAngle is one of the supported rotation types + * EFalse otherwise. + */ + virtual TBool SupportsRotationAngle( const CVtImageRotator::TRotationAngle& aAngle ) = 0; + + /** + * Sets rotation angle to be used. + * @param "aAngle" Rotation type that will be needed. + */ + void SetAngle( const CVtImageRotator::TRotationAngle& aAngle ); + + protected: + + /** + * C++ constructor. + * @param "aAngle" Rotation type that will be needed. + */ + CVtImageRotatorImpl( const CVtImageRotator::TRotationAngle& aAngle ); + + private: + + /** + * Pure virtual source and target image validation method. + * @param "aSource" Constant reference to source image. + * @param "aTarget" Constant reference to target image. + * @exception If source or target is not valid, this method leaves + * with KErrNotSupported. + */ + virtual void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) = 0; + + protected: + + // Source for scaling + const CVtImage* iSource; // not owned + + // Target image (will hold scaled source) + CVtImage* iTarget; // not owned + + // Selected rotation angle + CVtImageRotator::TRotationAngle iAngle; + }; + +#endif // CVTIMAGEROTATORIMPL_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImplClockwise.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImplClockwise.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGEROTATORIMPLCLOCKWISE_H +#define CVTIMAGEROTATORIMPLCLOCKWISE_H + +// INCLUDE FILES + +#include "CVtImageRotatorImpl.h" + +// FORWARD DECLARATIONS + +class CVtImage; + +// CLASS DECLARATIONS + +/** +* Image scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageRotatorImplClockwise : public CVtImageRotatorImpl + { + public: + /** + * C++ constructor + * @param "aAngle" Selected rotation angle. + */ + CVtImageRotatorImplClockwise( const CVtImageRotator::TRotationAngle& aAngle ); + + /** + * Rotates the image. + * @param "aContinue" When method returns, this parameter will contain + * ETrue if new call is needed (i.e. scaling is not yet finished) or + * EFalse if scaling is complete. + * @return KErrNone or one of the system wide error codes. + */ + TInt Rotate( TBool& aContinue ); + + /** + * Source and target image validation method. + * @param "aSource" Constant reference to source image. + * @param "aTarget" Constant reference to target image. + * @exception If source or target is not valid, this method leaves + * with KErrNotSupported. + */ + void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ); + + /** + * Method for checking specific rotation angle support. + * @param "aAngle" Rotation type that will be needed. + * @return ETrue if aAngle is one of the supported rotation types + * EFalse otherwise. + */ + TBool SupportsRotationAngle( const CVtImageRotator::TRotationAngle& aAngle ); + + private: + + /** + * The rotation implementation. + */ + void DoRotate(); + + /** + * The rotation implementation for YUV planes. + * @param "aSource" Constant pointer to source plane. + * @param "aTarget" Pointer to target plane. + * @param "aWidth" Width of the plane in pixels. + * @param "aHeight" Height of the plane in pixels. + * @param "aBytesPerRow" Bytes per row in plane. + */ + void RotatePlane( + const TUint8* aSource, + TUint8* aTarget, + TInt aSourceWidth, + TInt aSourceHeight, + TInt aSourceBytesPerRow, + TInt aTargetHeight, + TInt aTargetBytesPerRow ); + }; + +#endif // CVTIMAGEROTATORIMPLCLOCKWISE_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImplMirrorFlip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageRotatorImplMirrorFlip.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGEROTATORIMPLMIRRORFLIP_H +#define CVTIMAGEROTATORIMPLMIRRORFLIP_H + +// INCLUDE FILES + +#include "CVtImageRotatorImpl.h" + +// FORWARD DECLARATIONS + +class CVtImage; +class CVtImageIYUV; + +// CLASS DECLARATIONS + +/** +* Image scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageRotatorImplMirrorFlip : public CVtImageRotatorImpl + { + public: + /** + * C++ constructor + * @param "aAngle" Selected rotation angle. + */ + CVtImageRotatorImplMirrorFlip( const CVtImageRotator::TRotationAngle& aAngle ); + + /** + * Rotates the image. + * @param "aContinue" When method returns, this parameter will contain + * ETrue if new call is needed (i.e. scaling is not yet finished) or + * EFalse if scaling is complete. + * @return KErrNone or one of the system wide error codes. + */ + TInt Rotate( TBool& aContinue ); + + /** + * Source and target image validation method. + * @param "aSource" Constant reference to source image. + * @param "aTarget" Constant reference to target image. + * @exception If source or target is not valid, this method leaves + * with KErrNotSupported. + */ + void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ); + + /** + * Method for checking specific rotation angle support. + * @param "aAngle" Rotation type that will be needed. + * @return ETrue if aAngle is one of the supported rotation types + * EFalse otherwise. + */ + TBool SupportsRotationAngle( const CVtImageRotator::TRotationAngle& aAngle ); + + private: + + /** + * Mirrors image horizontally from iSource to iTarget. + */ + void Mirror(); + + /** + * Mirrors image horizontally from aTarget to aTarget. + */ + void Mirror( CVtImage& aTarget ); + + /** + * Mirrors IYUV image from iSource to iTarget. + */ + void MirrorIYUV + ( + const CVtImageIYUV& aSource, + CVtImageIYUV& aTarget + ); + + /** + * Mirrors one plane of IYUV image from iSource to iTarget. + */ + void MirrorPlane + ( + TUint8* aSource, + TUint8* aTarget, + TInt aWidth, + TInt aHeight, + TInt aBytesPerRow + ); + + /** + * Flips image vertically from iSource to iTarget. + */ + void Flip(); + + /** + * Flips image vertically from aTarget to aTarget. + */ + void Flip( CVtImage& aTarget ); + + /** + * Flips IYUV image vertically from iSource to iTarget. + */ + void FlipIYUV + ( + const CVtImageIYUV& aSource, + CVtImageIYUV& aTarget + ); + + /** + * Flips one plane of IYUV. + */ + void FlipPlane + ( + TUint8* aSource, + TUint8* aTarget, + TInt aHeight, + TInt aBytesPerRow + ); + }; + +#endif // CVTIMAGEROTATORIMPLMIRRORFLIP_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScaler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGESCALER_H +#define CVTIMAGESCALER_H + +// INCLUDE FILES + +#include + +// FORWARD DECLARATIONS + +class CVtImageScalerImpl; +class CVtImage; +class CFbsBitmap; + +// CLASS DECLARATIONS + +/** +* Image scaler observer interface. +* +* @lib videosource.lib +*/ +class MVtImageScalerObserver + { + public: + /** + * Callback method that is called by CVtImageScaler when scaling has + * finished. + * @param "aError" KErrNone if the scaling was done successfully, one + * of the system wide error codes otherwise. + * @return Pointer to newly created instance. + */ + virtual void ScalingFinished( TInt aError ) = 0; + }; + +/** +* Image scaler. +* +* @lib videosource.lib +*/ +class CVtImageScaler : public CActive + { + public: + + /** + * An enumeration within the CVtImageScaler namespace. + * It provides a set of panic codes that may happen during + * scaling process. + */ + enum TPanics + { + /** + * RotateL() is called while previous rotation process + * has not yet been finished. + */ + EBusy = 1 + }; + + /** + * An enumeration within the CVtImageScaler namespace. + * It provides a set of supported scaling quality settings. + */ + enum TQuality + { + /** + * Nearest neigbour algorithm. Fast but poor image quality + * when scale factor exceeds 2x. + */ + ENearest, + + /** + * Weighted average algorithm. Slower than Nearest Neighbour + * but also better image quality when scaling at factor 2x or + * higher. + */ + EWeightedAverage, + + /** + * Bilinear scaling algorithm. Slower than Weighted Average + * but also better image quality. + */ + EBilinear + }; + + public: + + /** + * Creates new instance of CVtImageScaler. + * @param "aObserver" Reference to instance observer. + * @param "aQuality" Scaling quality. If this is omitted, then default + * value of EWeightedAverage is used. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageScaler* NewL( + MVtImageScalerObserver& aObserver, + TQuality aQuality = EWeightedAverage, + TPriority aPriority = EPriorityStandard ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVtImageScaler(); + + /** + * Sets scaling quality. + * @param "aQuality" Scaling quality. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void SetQualityL( TQuality aQuality ); + + /** + * Scales image to new size. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions + * will be taken from the size of target image. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void ScaleL( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Scales image to new size. Possible error during initialization is + * returned via MVtImageScalerObserver. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions will be taken from the size of target image. + */ + IMPORT_C void Scale( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Scales image to new size. This scale method is synchronous and + * aTarget will contain scaled image of aSource on return. This method + * may leave if aSource and/or aTarget are not suitable for scaling. + * MVtImageScalerObserver::ScalingFinished is not called when this + * method is used. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions will be taken from the size of target image. + */ + IMPORT_C void ScaleNowL( const CVtImage& aSource, CVtImage& aTarget ); + + private: // internal + + /** + * C++ default constructor. + */ + CVtImageScaler(); + + /** + * C++ constructor. + * @param "aObserver" Reference to observer. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + CVtImageScaler( MVtImageScalerObserver& aObserver, TPriority aPriority ); + + /** + * Second phase constructor. + * @param "aQuality" Quality of the scaling. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL( TQuality aQuality ); + + /** + * Sets iStatus to KRequestPending and calls CActive::SetActive(). + */ + void Activate(); + + /** + * Signals this instance AO with given error code. + * @param "aError" Signalling error code. + */ + void Signal( TInt aError ); + + private: // from CActive + + /** + * This is defined in CActive. Check CActive for description. + */ + void RunL(); + + /** + * This is defined in CActive. Check CActive for description. + */ + void DoCancel(); + + /** + * Scale method called by the CAsyncCallBack. + */ + static TInt StaticScale( TAny* aPtr ); + + /** + * Scale method called by the StaticScale. + */ + void DoScale(); + + private: + + // Scaling observer + MVtImageScalerObserver& iObserver; + + // Active quality implementation + CVtImageScalerImpl* iScalerImpl; // owned + + // Bitmap that will be used for locking global bitmap heap + CFbsBitmap* iHeapLock; // owned + + // Asynccallback instance + CAsyncCallBack* iAsyncCallBack; // owned + + // This is set to ETrue in DoCancel() method, and when CAsyncCallBack + // gets executed, iCancelled is checked whether scaling should be done + // or not. + TBool iCancelled; + }; + +#endif // CVTIMAGESCALER_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScalerImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScalerImpl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGESCALERIMPL_H +#define CVTIMAGESCALERIMPL_H + +// INCLUDE FILES + +#include +#include + +// FORWARD DECLARATIONS + +class CVtImage; + +// CLASS DECLARATIONS + +/** +* Image scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageScalerImpl : public CActive + { + protected: + + /** + * Constructor. + */ + CVtImageScalerImpl(); + + public: + + /** + * Destructor. + */ + ~CVtImageScalerImpl(); + + /** + * Sets scaler params. + * @param "aParams" Scaling params, including source and target images. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void SetSourceTargetL( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Method to check whether bitmap heap locking is needed or not during + * scaling process. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return ETrue if bitmap heap lock is needed, EFalse otherwise. + */ + TBool NeedHeapLock() const; + + /** + * Pure virtual scaling method. + * @param "aContinue" When method returns, this parameter will contain + * ETrue if new call is needed (i.e. scaling is not yet finished) or + * EFalse if scaling is complete. + * @return KErrNone or one of the system wide error codes. + */ + virtual TInt Scale( TBool& aContinue ) = 0; + + protected: + + /** + * Scales using CBitmapScaler, which is slow but works with any + * Symbian color mode. + * @param aQuality Scaling quality @see CBitmapScaler::TQualityAlgorithm + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ScaleWithBitmapScalerL( + const CBitmapScaler::TQualityAlgorithm aQuality ); + + private: + + /** + * Pure virtual source and target image validation method. + * @param "aSource" Constant reference to source image. + * @param "aTarget" Constant reference to target image. + * @exception If source or target is not valid, this method leaves + * with KErrNotSupported. + */ + virtual void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) = 0; + + /** + * Method for validating image size. + * @param "aSize" Size to be validated. + * @param "aMinSize" Minimum allowed size. If this is not given a default + * size of TSize( 1, 1 ) is used. + * @exception If size is not valid within given parameters, this + * method leaves with KErrNotSupported. + */ + void LeaveIfNotValidSizeL( + const TSize& aSize, + const TSize aMinSize = TSize( 1, 1 ) ); + + private: // from CActive + + /** + * @see CActive::RunL + */ + void RunL(); + + /** + * @see CActive::DoCancel + */ + void DoCancel(); + + protected: + + // Source for scaling + const CVtImage* iSource; // not owned + + // Target image (will hold scaled source) + CVtImage* iTarget; // not owned + + // Bitmap scaler instance + CBitmapScaler* iScaler; + + // Active scheduler waiter object + CActiveSchedulerWait iActiveSchedulerWait; + + }; + +#endif // CVTIMAGESCALERIMPL_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplBilinear.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplBilinear.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGESCALERIMPLBILINEAR_H +#define CVTIMAGESCALERIMPLBILINEAR_H + +// INCLUDE FILES + +#include "CVtImageScalerImpl.h" + +// CLASS DECLARATIONS + +/** +* Bilinear image scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageScalerImplBilinear : public CVtImageScalerImpl + { + private: // from CVtImageScalerImpl + + /** + * From CVtImageScalerImpl. Check CVtImageScalerImpl for description. + */ + TInt Scale( TBool& aContinue ); + + private: + + /** + * Validate given parameters. + */ + void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ); + + /** + * Initializes internal variables for scaling. + */ + void Initialize(); + + /** + * Scales images in displaymode EColor4K. + */ + void Scale4K(); + + /** + * Scales images in displaymode EColor64K. + */ + void Scale64K(); + + /** + * Scales images in displaymode EColor16M. + */ + void Scale16M(); + + /** + * Scales images in displaymode EColor16MU. + */ + void Scale16MU(); + + /** + * Scales images in displaymode EColor16MA. + */ + void Scale16MA(); + + /** + * Fast scaling when target is double the source size for + * 4K and 64K display modes. + */ + void Scale2x4K64K( TUint32 aMask ); + + /** + * Fast scaling when target is double the source size for + * 16M display mode. + */ + void Scale2x16M(); + + /** + * Fast scaling when target is double the source size for + * 16MU and 16MA display modes. + */ + void Scale2x16MU16MA(); + + private: + + // Target width ratio to source width + TUint32 iU; + + // Target height ratio to source height + TUint32 iV; + }; + +#endif // CVTIMAGESCALERIMPLBILINEAR_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplNearest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplNearest.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,138 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGESCALERIMPLNEAREST_H +#define CVTIMAGESCALERIMPLNEAREST_H + +// INCLUDE FILES + +#include "CVtImageScalerImpl.h" + +// CLASS DECLARATIONS + +/** +* Nearest neigbour image scaling implementation. +* +* @lib videosource.lib +*/ +class CVtImageScalerImplNearest : public CVtImageScalerImpl + { + private: // from CVtImageScalerImpl + + /** + * From CVtImageScalerImpl. Check CVtImageScalerImpl for description. + */ + TInt Scale( TBool& aContinue ); + + private: + + /** + * Validate given parameters. + */ + void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ); + + /** + * Initializes internal variables for scaling. + */ + void Initialize(); + + /** + * Scales images in displaymode EColor4K. + */ + void Scale4K( + const TUint16* aSrcPtr, + TUint32 aSrcPitch, + TUint16* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ); + + /** + * Scales images in displaymode EColor64K. + */ + void Scale64K( + const TUint16* aSrcPtr, + TUint32 aSrcPitch, + TUint16* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ); + + /** + * Scales images in displaymode EColor16M. + */ + void Scale16M( + const TUint8* aSrcPtr, + TUint32 aSrcPitch, + TUint8* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aTrgPitch, + TUint32 aDx, + TUint32 aDy ); + + /** + * Scales images in displaymodes EColor16MU and EColor16MA. + */ + void Scale16MU16MA( + const TUint32* aSrcPtr, + TUint32 aSrcPitch, + TUint32* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ); + + /** + * Fast scaling when target is double the source size for + * 4K and 64K display modes. + */ + void Scale2x4K64K(); + + /** + * Fast scaling when target is double the source size for 16M + * display mode. + */ + void Scale2x16M(); + + /** + * Fast scaling when target is double the source size for 16MU and 16MA + * display modes. + */ + void Scale2x16MU16MA(); + + private: + + // Target width ratio to source width + TUint32 iU; + + // Target height ratio to source height + TUint32 iV; + }; + +#endif // CVTIMAGESCALERIMPLNEAREST_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplWeightedAverage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScalerImplWeightedAverage.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGESCALERIMPLWEIGHTEDAVERAGE_H +#define CVTIMAGESCALERIMPLWEIGHTEDAVERAGE_H + +// INCLUDE FILES + +#include "CVtImageScalerImpl.h" + +// CLASS DECLARATIONS + +/** +* Weighted average scaler implementation. +* +* @lib videosource.lib +*/ +class CVtImageScalerImplWeightedAverage : public CVtImageScalerImpl + { + private: // from CVtImageScalerImpl + + /** + * From CVtImageScalerImpl. Check CVtImageScalerImpl for description. + */ + TInt Scale( TBool& aContinue ); + + private: // methods + + /** + * Validate given parameters. + */ + void ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ); + + /** + * Initializes internal variables for scaling. + */ + void Initialize(); + + /** + * Scales images in displaymode EColor4K. + */ + void Scale4K(); + + /** + * Scales images in displaymode EColor64K. + */ + void Scale64K(); + + /** + * Scales images in displaymode EColor16M. + */ + void Scale16M(); + + /** + * Scales images in displaymode EColor16MU. + */ + void Scale16MU(); + + /** + * Scales images in displaymode EColor16MA. + */ + void Scale16MA(); + + /** + * Fast scaling when target is double the source size for + * 4K and 64K display modes. + */ + void Scale2x4K64K( TUint32 aMask ); + + /** + * Fast scaling when target is double the source size for + * 16M display mode. + */ + void Scale2x16M(); + + /** + * Fast scaling when target is double the source size for + * 16MU and 16MA display modes. + */ + void Scale2x16MU16MA(); + + private: // data + + // Target width ratio to source width + TUint32 iU; + + // Target height ratio to source height + TUint32 iV; + + }; + +#endif // CVTIMAGESCALERIMPLWEIGHTEDAVERAGE_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScalerMacros.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScalerMacros.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGESCALERMACROS_H +#define CVTIMAGESCALERMACROS_H + +// MACROS + +#define UNPACK_4K_RED( c ) ( 0xf & ( c >> 8 ) ) +#define UNPACK_4K_GREEN( c ) ( 0xf & ( c >> 4 ) ) +#define UNPACK_4K_BLUE( c ) ( 0xf & c ) +#define PACK_4K_BGR( b, g, r ) \ + TUint16( ( b ) | ( ( ( g ) | ( ( r ) << 4 ) ) << 4 ) ) + +#define UNPACK_64K_RED( c ) ( c >> 11 ) +#define UNPACK_64K_GREEN( c ) ( 0x3f & ( c >> 5 ) ) +#define UNPACK_64K_BLUE( c ) ( 0x1f & c ) +#define PACK_64K_BGR( b, g, r ) \ + TUint16( ( b ) | ( ( ( g ) | ( ( r ) << 6 ) ) << 5 ) ) + +#define UNPACK_16MU_RED( c ) ( 0xff & ( c >> 16 ) ) +#define UNPACK_16MU_GREEN( c ) ( 0xff & ( c >> 8 ) ) +#define UNPACK_16MU_BLUE( c ) ( c & 0xff ) +#define PACK_16MU_BGR( b, g, r ) \ + TUint32( ( ( ( ( ( 0xff << 8 ) | ( r ) ) << 8 ) | ( g ) ) << 8 ) | ( b ) ) + +#define UNPACK_16MA_ALPHA( c ) ( 0xff & ( c >> 24 ) ) +#define UNPACK_16MA_RED( c ) ( 0xff & ( c >> 16 ) ) +#define UNPACK_16MA_GREEN( c ) ( 0xff & ( c >> 8 ) ) +#define UNPACK_16MA_BLUE( c ) ( c & 0xff ) +#define PACK_16MA_ABGR( a, b, g, r ) \ + TUint32( ( ( ( ( ( ( a ) << 8 ) | ( r ) ) << 8 ) | ( g ) ) << 8 ) | ( b ) ) + +#endif // CVTIMAGESCALERMACROS_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageTransformsUids.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageTransformsUids.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 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: Uid definition file for Display Sink subsystem +* +*/ + + + +#ifndef __CVTIMAGETRANSFORMS_HRH__ +#define __CVTIMAGETRANSFORMS_HRH__ + +#define KUidVtImageTransformsLibrary 0x101F8834 +#define KSharedLibraryUidDefine 0x1000008D + +#endif // __CVTIMAGETRANSFORMS_HRH__ \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/DisplaySinkUids.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/DisplaySinkUids.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 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: Uid definition file for Display Sink subsystem +* +*/ + + + +#ifndef __DISPLAYSINKUIDS_HRH__ +#define __DISPLAYSINKUIDS_HRH__ + +#define KUidDisplaySinkLibrary 0x101F8693 +#define KSharedLibraryUidDefine 0x1000008D + +#endif \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsDP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsDP.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2004 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: DisplaySink subsystem. +* +*/ + + +#ifndef TDISPLAYSINKPARAMSDP_H +#define TDISPLAYSINKPARAMSDP_H + +// INCLUDE FILES + +#include "mdisplaysink.h" +#include + +// CLASS DECLARATION + +/** +* Displaysink initialization parameters for DisplaySink's Display Posting +* implementation. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( TDisplaySinkParamsDP ) : public TDisplaySinkParams + { +public: + // Pointer's pointer to first posting buffer that is filled by the + // sink. + CPostingSurface::TPostingBuff** iPostingBuffer1; + + // Pointer's pointer to second posting buffer that is filled by the + // sink. + CPostingSurface::TPostingBuff** iPostingBuffer2; + + // Posting format to be used + CPostingSurface::TPostingFormat iPostingFormat; + + // Frame size in pixels + TSize iFrameSize; + }; + +#endif // TDISPLAYSINKPARAMSDP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsDSA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsDSA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2006 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: DisplaySink subsystem. +* +*/ + + +#ifndef TDISPLAYSINKPARAMSDSA_H +#define TDISPLAYSINKPARAMSDSA_H + +// INCLUDE FILES + +#include "cvtimagerotator.h" +#include "mdisplaysink.h" + +// CLASS DECLARATION + +/** +* Displaysink initialization parameters for DisplaySink's Direct Screen Access +* implementation. +* +* @lib displaysink.lib +* @since Series 60 3.1 +*/ +NONSHARABLE_CLASS( TDisplaySinkParamsDSA ) : public TDisplaySinkParams + { +public: + + /** + * C++ constructor + */ + TDisplaySinkParamsDSA(); + +public: + // Handle to first bitmap that is filled by the sink. 176x144 bitmap (QCIF) + TInt iBitmap1Handle; + + // Handle to second bitmap that is filled by the sink. 176x144 bitmap (QCIF) + TInt iBitmap2Handle; + + // Angle to which YUV image must be rotated BEFORE it is converted into bitmap. + // If CVtImageRotator::ERotationNone is given, image will be converted as it + // is received. Also make sure that iBitmap1Handle and iBitmap2Handle contains + // correct dimensions AFTER rotation. + CVtImageRotator::TRotationAngle iRotationAngle; + }; + +#include "tdisplaysinkparamsdsa.inl" + +#endif // TDISPLAYSINKPARAMSDSA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsNGA.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/TDisplaySinkParamsNGA.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2004-2006 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: Displaysink initialization parameters for DisplaySink's NGA implementation. +* +*/ + +#ifndef TDISPLAYSINKPARAMSNGA_H +#define TDISPLAYSINKPARAMSNGA_H + +// INCLUDE FILES + +#include "mdisplaysink.h" +#include +//#include +#include + +// CLASS DECLARATION + +/** +* Displaysink initialization parameters for DisplaySink's NGA +* implementation. +* +* @lib displaysink.lib +* @since Series 60 7.0 +*/ +NONSHARABLE_CLASS( TDisplaySinkParamsNGA ) : public TDisplaySinkParams + { +public: + // Pointer's pointer to first posting buffer that is filled by the + // sink. + TUint8** iSurfaceBuffer1; + //TVideoFrameBuffer** iSurfaceBuffer1; + + // Pointer's pointer to second posting buffer that is filled by the + // sink. + //TVideoFrameBuffer** iSurfaceBuffer2; + TUint8** iSurfaceBuffer2; + + // Posting format to be used + TUidPixelFormat iSurfaceFormat; + + // Frame size in pixels + TSize iFrameSize; + }; + +#endif // TDISPLAYSINKPARAMSNGA_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/VtImageConverterUids.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/VtImageConverterUids.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 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: Uid definition file for Display Sink subsystem +* +*/ + + + +#ifndef __VTIMAGECONVERTERUIDS_HRH__ +#define __VTIMAGECONVERTERUIDS_HRH__ + +#define KUidVtImageConverterLibrary 0x101F86B5 +#define KSharedLibraryUidDefine 0x1000008D + +#endif // __VTIMAGECONVERTERUIDS_HRH__ \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/cvtimage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/cvtimage.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + +#ifndef CVTIMAGE_H +#define CVTIMAGE_H + +// INCLUDE FILES + +#include +#include + +// CLASS DECLARATIONS + +/** +* Abstract base class for VS images. +* +* @lib videosource.lib +*/ +class CVtImage : public CBase + { + public: + /** + * Enumeration for supported image types. + */ + enum TVtImageType + { + /** + * CFbsBitmap image. + */ + EVtImageBitmap, + + /** + * YUV 420 planar image where all Y samples are found first in memory as an + * array of unsigned char (possibly with a larger stride for memory alignment), + * followed immediately by all Cr (U) samples (with half the stride of the Y + * lines, and half the number of lines), then followed immediately by all Cb + * (V) samples in a similar fashion. + */ + EVtImageIYUV + }; + + /** + * Vt display modes. Used for identifying image's data format. + */ + enum TVtDisplayMode + { + /** + * Unsupported display mode. + */ + EVtColorNone, + + /** + * 4096 colour display mode (12 bpp). + */ + EVtColor4K, + + /** + * 2^16 colour display mode (16 bpp). + */ + EVtColor64K, + + /** + * True colour display mode (24 bpp). + */ + EVtColor16M, + + /** + * True colour display mode (32 bpp). + */ + EVtColor16MU, + + /** + * True colour display mode with alpha (32 bpp). + */ + EVtColor16MA, + + /** + * YUV 420 planar display mode. + */ + EVtColorIYUV + }; + + /** + * Pure virtual function to check whether bitmap heap needs to be locked + * for this image type. + * @return Returns ETrue if bitmap heap lock is required, EFalse + * otherwise. + */ + virtual TBool NeedHeapLock() const = 0; + + /** + * Pure virtual function to get displaymode from image. + * @return Returns image's displaymode. + */ + virtual TVtDisplayMode DisplayMode() const = 0; + + /** + * Pure virtual function to get size of the image in pixels + * @return Returns size of the image in pixels. + */ + virtual TSize Size() const = 0; + + /** + * Pure virtual function to get how many bytes this image has per + * scaline. + * @return Returns number of bytes per scanline. + */ + virtual TInt BytesPerRow() const = 0; + + /** + * Pure virtual function to get pointer to image data. + * @return Returns pointer to image data. + */ + virtual TUint32* DataAddress() const = 0; + + /** + * Pure virtual function to get pointer to image data at defined line. + * If aLine is lower than zero then line zero is returned, also if aLine + * is greater than height of the image minus 1 ( height - 1 ) then line + * number ( height - 1 ) is returned. + * @param "aLine" Number of vertical line for which pointer is wanted. + * @return Returns pointer to the beginning of the requested scanline. + */ + virtual TUint32* LineAddress( TInt aLine ) const = 0; + + /** + * Method for getting image type. + * @return Returns type of the image. + */ + IMPORT_C TVtImageType Type() const; + + public: // static methods + + /** + * Converts given TDisplayMode to corresponding TVtDisplayMode. + * @param "aMode" Display mode as TDisplayMode. + * @return Returns mode as TVtDisplayMode. + */ + static TVtDisplayMode DisplayModeToVtDisplayMode( TDisplayMode aMode ); + + protected: + + /** + * C++ constructor. + */ + CVtImage( TVtImageType aType ); + + private: + + // Type of the image. + TVtImageType iType; + }; + +#endif // CVTIMAGE_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/cvtimageconverter.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/cvtimageconverter.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2004 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: Image conversion library for VideoTelephony. +* +*/ + + + + +#ifndef CVTIMAGECONVERTER_INL +#define CVTIMAGECONVERTER_INL + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::SourceSize() const +// Returns source size in pixels. +// ----------------------------------------------------------------------------- +// +inline const TSize& CVTYUVFbsBitmapConverter::SourceSize() const + { + return iSourceSize; + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::SourceSize() +// Returns source size in pixels. +// ----------------------------------------------------------------------------- +// +inline TSize& CVTYUVFbsBitmapConverter::SourceSize() + { + return iSourceSize; + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::DestinationSize() const +// Returns destination size in pixels. +// ----------------------------------------------------------------------------- +// +inline const TSize& CVTYUVFbsBitmapConverter::DestinationSize() const + { + return iDestinationSize; + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::DestinationSize() +// Returns destination size in pixels. +// ----------------------------------------------------------------------------- +// +inline TSize& CVTYUVFbsBitmapConverter::DestinationSize() + { + return iDestinationSize; + } + +#endif CVTIMAGECONVERTER_INL + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/cvtimagerotator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/cvtimagerotator.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,245 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGEROTATOR_H +#define CVTIMAGEROTATOR_H + +// INCLUDE FILES + +#include + +// FORWARD DECLARATIONS + +class CVtImage; +class CFbsBitmap; +class CVtImageRotatorImpl; + +// CLASS DECLARATIONS + +/** +* Image rotator observer interface. +* +* @lib videosource.lib +*/ +class MVtImageRotatorObserver + { + public: + /** + * Callback method that is called by CVtImageRotator when rotation + * process has been finished. + * @param "aError" KErrNone if the rotation was done successfully, one + * of the system wide error codes otherwise. + * @return Pointer to newly created instance. + */ + virtual void RotationFinished( TInt aError ) = 0; + }; + +/** +* Image rotator. +* +* @lib videosource.lib +*/ +class CVtImageRotator : public CActive + { + public: + /** + * An enumeration within the CVtImageRotator namespace. + * It provides a set of panic codes that may happen during + * rotation process. + */ + enum TPanics + { + /** + * RotateL() is called while previous rotation process + * has not yet been finished. + */ + EBusy = 1 + }; + + /** + * An enumeration within the CVtImageRotator namespace. + * It provides a set of supported rotation and mirror angles. + */ + enum TRotationAngle + { + /** + * Uninitialized place holder. Giving this rotation angle + * to RotateL() will make RotateL() leave with error code + * KErrNotSupported. + */ + ERotationNone = -1, + + /** + * Rotates image 90 degrees in a clockwise direction. + */ + E90DegreesClockwise, + + /** + * Rotates image 180 degrees in a clockwise direction. + * (flip & mirror) + */ + E180DegreesClockwise, + + /** + * Rotates image 270 degrees in a clockwise direction. + */ + E270DegreesClockwise, + + /** + * Mirrors the bitmap around the horizontal axis. + */ + EMirrorHorizontalAxis, + + /** + * Flips the image around the vertical axis. + */ + EFlipVerticalAxis, + }; + + public: + + /** + * Creates new instance of CVtImageRotator. + * @param "aObserver" Reference to instance observer. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageRotator* NewL( + MVtImageRotatorObserver& aObserver, + TPriority aPriority = EPriorityLow ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVtImageRotator(); + + /** + * Rotates image to given angle. + * @param "aSource" Source image that will be rotated. + * @param "aTarget" Target image that will hold the rotated image. + * @param "aAngle" Rotation angle. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void RotateL( const CVtImage& aSource, CVtImage& aTarget, + const TRotationAngle& aAngle ); + + /** + * Rotates image to given angle. Possible error during initialization is + * returned via MVtImageRotatorObserver. + * @param "aSource" Source image that will be rotated. + * @param "aTarget" Target image that will hold the rotated image. + * @param "aAngle" Rotation angle. + */ + IMPORT_C void Rotate( const CVtImage& aSource, CVtImage& aTarget, + const TRotationAngle& aAngle ); + + private: // internal + + /** + * C++ default constructor. + */ + CVtImageRotator(); + + /** + * C++ constructor. + * @param "aObserver" Reference to observer. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + CVtImageRotator( MVtImageRotatorObserver& aObserver, TPriority aPriority ); + + /** + * Second phase constructor. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL(); + + /** + * Creates new instance of rotator implementation if needed. + * @param "aAngle" Used rotation angle. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void CreateRotatorL( const TRotationAngle& aAngle ); + + /** + * Sets iStatus to KRequestPending and calls CActive::SetActive(). + */ + void Activate(); + + /** + * Signals this instance AO with given error code. + * @param "aError" Signalling error code. + */ + void Signal( TInt aError ); + + private: // from CActive + + /** + * This is defined in CActive. Check CActive for description. + */ + void RunL(); + + /** + * This is defined in CActive. Check CActive for description. + */ + void DoCancel(); + + /** + * Rotate method called by the CAsyncCallBack. + */ + static TInt StaticRotate( TAny* aPtr ); + + /** + * Rotate method called by the StaticScale. + */ + void DoRotate(); + + private: + + // Scaling observer + MVtImageRotatorObserver& iObserver; + + // Bitmap that will be used for locking global bitmap heap + CFbsBitmap* iHeapLock; // owned + + // Rotator implementation + CVtImageRotatorImpl* iRotatorImpl; // owned + + // Asynccallback instance + CAsyncCallBack* iAsyncCallBack; // owned + + // This is set to ETrue in DoCancel() method, and when CAsyncCallBack + // gets executed, iCancelled is checked whether scaling should be done + // or not. + TBool iCancelled; + }; + +#endif // CVTIMAGEROTATOR_H + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/mdisplaysink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/mdisplaysink.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2004 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: DisplaySink subsystem. +* +*/ + + +#ifndef MDISPLAYSINK_H +#define MDISPLAYSINK_H + +// INCLUDE FILES + +#include + +// FORWARD DECLARATIONS + +class MVTVideoSink; + +/** +* MDisplaySinkObserver +* +* Sink observer API. Currently only frame size changes are reported using +* this IF. +* +* @lib DisplaySink.lib +*/ +class MDisplaySinkObserver + { +public: + /** + * When incoming video frame size changes, this callback will be called. + * @param "aFrom" Current frame size. + * @param "aTo" New frame size. + * @return KErrNone if successful, one of the system wide error codes + * @exception May leave with one of the system wide error codes. + * otherwise. + */ + virtual void VideoFrameSizeChangedL( + const TSize& aFrom, + const TSize& aTo ) = 0; + }; + +/** +* Input parameters for Display Sink +* +* @lib DisplaySink.lib +*/ +class TDisplaySinkParams + { +public: + + /** + * Enumeration for limiting frame rate. + */ + enum TFrameRateLimit + { + /** Don't limit frame rate (default) */ + EFrameRateLimitNone = 0, + /** Limit frame rate to 1.0 frames per second */ + EFrameRateLimit1_0 = 1000, + /** Limit frame rate to 2.5 frames per second */ + EFrameRateLimit2_5 = 400, + /** Limit frame rate to 5.0 frames per second */ + EFrameRateLimit5_0 = 200, + /** Limit frame rate to 7.5 frames per second */ + EFrameRateLimit7_5 = 133, + /** Limit frame rate to 10.0 frames per second */ + EFrameRateLimit10_0 = 100, + /** Limit frame rate to 12.5 frames per second */ + EFrameRateLimit12_5 = 80, + /** Limit frame rate to 15.0 frames per second */ + EFrameRateLimit15_0 = 67, + }; + + /** + * Flags for selecting correct type sink. + */ + enum TFlags + { + /** Create instance of DSA version of sink */ + EDisplaySinkDSA = ( 1 << 0 ), + /** Create instance of DP version of sink */ + EDisplaySinkDP = ( 1 << 1 ), + /** Create instance of NGA version of sink */ + EDisplaySinkNGA = ( 1 << 2 ) + }; + +public: // Data + + /** + * C++ constructor for initializing some of the variables. + */ + IMPORT_C TDisplaySinkParams(); + + // Thread id that gets notified by sink + TThreadId iThreadId; + + // Pointer to iStatus member of the Active Object to notify after video + // frame is converted + TRequestStatus* iRequestStatusPtr; + + // Pointer to Display Sink observer interface + MDisplaySinkObserver* iObserver; + + // Frame rate limitation + TFrameRateLimit iFrameRateLimit; + + // Sink flags + TUint32 iFlags; + }; + +/** +* MDisplaySink +* +* @lib DisplaySink.lib +*/ +class MDisplaySink + { +public: // data + + // Enumeration for the bitmaps. + enum TBitmapNo + { + EFirstBitmap = 0, + ESecondBitmap + }; + +public: // new methods + + /** + * Deletes instance and frees all memory. + */ + virtual void Destroy() = 0; + + /** + * Mark the bitmap available for use. + * @param "aBitmapNo" One of the enumerated TBitmapNo values. + */ + virtual void SetBitmapAvailable( TBitmapNo aBitmapNo ) = 0; + + /** + * Cancels sink so that it does not convert bitmaps even it receives data. + */ + virtual void Release() = 0; + + /** + * Updates display sink parameters, e.g. when display mode changes. + * @param "aParams" Structure that contains new bitmap handles. + * @param "aUpdated" Reference to boolean variable that will be set to + * ETrue when display sink parameter update has been completed. + * @exception May leave with one of the system wide error codes (e.g. in + * out of memory situaton). + */ + virtual void UpdateSinkParamsL( const TDisplaySinkParams& aParams, + TBool& aUpdated ) = 0; + + /** + * Pauses sending of remote video to VT engine. + */ + virtual void Pause() = 0; + + /** + * Resumes sending of remote video to VT engine. + */ + virtual void Resume() = 0; + + /** + * Operator returns this instance . + */ + virtual operator MVTVideoSink&() = 0; + + /** + * This method is called by the VT engine when engine has finished handling + * of previous frame and is ready to handle a new one. + */ + virtual void NextFrame() = 0; + + }; + +/** +* Creates instance of displaysink. +*/ +IMPORT_C MDisplaySink* CreateSinkL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ); + +#endif // MDISPLAYSINK_H + +// End of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/tdisplaysinkparamsdsa.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/tdisplaysinkparamsdsa.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 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: DisplaySink subsystem. +* +*/ + + +#ifndef TDISPLAYSINKPARAMSDSA_INL +#define TDISPLAYSINKPARAMSDSA_INL + +// ====================== TDisplaySinkParamsDSA ========================== + +inline TDisplaySinkParamsDSA::TDisplaySinkParamsDSA() : TDisplaySinkParams() + { + Mem::FillZ( this, sizeof( TDisplaySinkParamsDSA ) ); + iRotationAngle = CVtImageRotator::ERotationNone; + } + +#endif TDISPLAYSINKPARAMSDSA_INL + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/vtyuvconverter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/vtyuvconverter.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2005-2006 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: YUV format transcoder. +* +*/ + + +#ifndef TVTYUVCONVERTER_H +#define TVTYUVCONVERTER_H + +#include + +/** + * Yuv format transcoder. + * + * Implements conversion between different YUV formats. + * + * @lib VTImageConverter.lib + * @since S60 v3.1 + */ +NONSHARABLE_CLASS( VtYuvConverter ) + { +public: + + /** + * Converts from 4:2:0 planar source image to 4:2:2 interleaved image. + * + * @since S60 v3.1 + * @param aSource Constant descriptor containing source image data. + * @param aSize Size of the image in pixels. + * @param aTarget Modifiable descriptor for target image data. + * @param aStide Number of bytes per scanline in target buffer. + * @return KErrNone if conversion was successful, KErrUnderflow if result + * does not fit in target buffer or KErrArgument if source buffer's size + * does not match with the given source size in pixels. + */ + static TInt ConvertFrom420PlanarTo422Interleaved( + const TDesC8& aSource, + const TSize& aSize, + TDes8& aTarget, + TInt aStride ); + +private: + + /** + * Constructor. + */ + VtYuvConverter(); + + /** + * Copy constructor. + */ + VtYuvConverter( const VtYuvConverter& ); + + /** + * Returns image size in bytes for 420 planar image that has given pixel + * size. + */ + static TInt ByteSize420Planar( const TSize& aSizeInPixels ); + + /** + * Returns image size in bytes for 422 interleaved image that has given + * pixel size. + */ + static TInt ByteSize422Interleaved( const TSize& aSizeInPixels ); + }; + +#endif // TVTYUVCONVERTER_H diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/rom/DisplaySink.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/rom/DisplaySink.iby Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2004-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: +* IBY file for DisplaySink +* +* +*/ + + +#ifndef __DISPLAYSINK_IBY__ +#define __DISPLAYSINK_IBY__ + +#ifdef __CS_VIDEO_TELEPHONY + +file=ABI_DIR\BUILD_DIR\VTImageConverter.dll SHARED_LIB_DIR\VTImageConverter.dll +file=ABI_DIR\BUILD_DIR\DisplaySink.dll SHARED_LIB_DIR\DisplaySink.dll +file=ABI_DIR\BUILD_DIR\VtImageTransforms.dll SHARED_LIB_DIR\VtImageTransforms.dll +data=ZSYSTEM\install\displaysink_stub.sis system\install\displaysink_stub.sis + +#endif + +#endif //__DISPLAYSINK_IBY__ diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CDisplaySink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CDisplaySink.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1029 @@ +/* +* Copyright (c) 2006 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: Display Sink subsystem. +* +*/ + + +// INCLUDE FILES + +#include "CDisplaySink.h" +#include "CDisplaySinkDP.h" +#include "CDisplaySinkDSA.h" +#include "CDisplaySinkNGA.h" +#include +#include + +// CONSTANTS + +// MACROS + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ============================= CVtFrameQueue ================================= + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::CVtFrameQueue +// ----------------------------------------------------------------------------- +// +CVtFrameQueue::CVtFrameQueue() : CActive( EPriorityNormal ) + { + _IFDBG(PRINT( _L( "CVtFrameQueue::CVtFrameQueue<" ) )); + _IFDBG(PRINT( _L( "CVtFrameQueue::CVtFrameQueue>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::ThreadLogon +// ----------------------------------------------------------------------------- +// +TInt CVtFrameQueue::ThreadLogon() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::ThreadLogon<" ) )); + if ( !IsAdded() ) + { + CActiveScheduler::Add( this ); + } + TInt result( iThread.Open( RThread().Id() ) ); + _IFDBG(PRINT( _L( "CVtFrameQueue::ThreadLogon %d >" ), result )); + return result; + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::SinkStoppedL +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::SinkStoppedL() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::SinkStoppedL<" ) )); + DoReleaseBufferL( iBuffer ); + DoReleaseBufferL( iReleaseBuffer ); + _IFDBG(PRINT( _L( "CVtFrameQueue::SinkStoppedL>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::ThreadLogoff +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::ThreadLogoff() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::ThreadLogoff<" ) )); + if ( IsAdded() ) + { + Deque(); + } + _IFDBG(PRINT( _L( "CVtFrameQueue::ThreadLogoff>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::Store +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::Store( MVTVideoSource& aSupplier, + CMMFDataBuffer* aBuffer, + TSize aFrameSize, + TPtr8& aPtr ) + { + _IFDBG(PRINT( _L( "CVtFrameQueue::Store<" ) )); + iSupplier = &aSupplier; + iBuffer = aBuffer; + iFrameSize = aFrameSize; + iPtr = &aPtr; + _IFDBG(PRINT( _L( "CVtFrameQueue::Store>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::IsStored +// ----------------------------------------------------------------------------- +// +TBool CVtFrameQueue::IsStored() const + { + _IFDBG(PRINT( _L( "CVtFrameQueue::IsStored<" ) )); + _IFDBG(PRINT( _L( "CVtFrameQueue::IsStored %d>" ), + ( iBuffer != NULL ) )); + return ( iBuffer != NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::Buffer +// ----------------------------------------------------------------------------- +// +TVtMMFDataBuffer CVtFrameQueue::Buffer() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::Buffer<" ) )); + _IFDBG(PRINT( _L( "CVtFrameQueue::Buffer %d>" ), + reinterpret_cast< TUint >( iBuffer ) )); + return TVtMMFDataBuffer(iBuffer, iFrameSize, *iPtr); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::Release +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::Release() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::Release<" ) )); + if ( !IsActive() && IsStored() ) + { + iReleaseBuffer = iBuffer; + iBuffer = NULL; + iStatus = KRequestPending; + TRequestStatus* pStatus = &iStatus; + SetActive(); + iThread.RequestComplete( pStatus, KErrNone ); + _IFDBG(PRINT( _L( "CVtFrameQueue::Release -done-" ) )); + } + _IFDBG(PRINT( _L( "CVtFrameQueue::Release>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::RunL +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::RunL() + { + _IFDBG(PRINT( _L( "CVtFrameQueue::RunL<" ) )); + DoReleaseBufferL( iReleaseBuffer ); + _IFDBG(PRINT( _L( "CVtFrameQueue::RunL>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::DoReleaseBufferL +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::DoReleaseBufferL( CMMFDataBuffer*& aBuffer ) + { + _IFDBG(PRINT( _L( "CVtFrameQueue::DoReleaseBufferL<" ) )); + if ( aBuffer && iSupplier ) + { + iSupplier->BufferEmptiedL( aBuffer ); + aBuffer = NULL; + } + _IFDBG(PRINT( _L( "CVtFrameQueue::DoReleaseBufferL>" ) )); + } + +// ----------------------------------------------------------------------------- +// CVtFrameQueue::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtFrameQueue::DoCancel() + { + // nothing to do + } + +// ============================ CVtCallback ================================= + +// ----------------------------------------------------------------------------- +// CVtCallback::CVtCallback( MDisplaySinkObserver& aObserver ) +// ----------------------------------------------------------------------------- +// +CVtCallback::CVtCallback( MDisplaySinkObserver& aObserver ) +: CActive( EPriorityStandard ), iObserver( &aObserver ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::CVtCallback()<"), RThread().Id().operator TUint())); + CActiveScheduler::Add( this ); + iOwnThreadId = RThread().Id(); + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::CVtCallback()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVtCallback::~CVtCallback() +// ----------------------------------------------------------------------------- +// +CVtCallback::~CVtCallback() + { + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtCallback::VideoFrameSizeChangedL( const TSize& aFrom, const TSize& aTo ) +// ----------------------------------------------------------------------------- +// +void CVtCallback::VideoFrameSizeChangedL( const TSize& aFrom, const TSize& aTo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::VideoFrameSizeChangedL()<"), RThread().Id().operator TUint())); + iCallBackType = EVideoFrameSizeChanged; + iFrom = aFrom; + iTo = aTo; + IssueCallbackL(); + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::VideoFrameSizeChangedL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVtCallback::Result() const +// ----------------------------------------------------------------------------- +// +TInt CVtCallback::Result() const + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::Result()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::Result()>"), RThread().Id().operator TUint())); + return iResult; + } + +// ----------------------------------------------------------------------------- +// CVtCallback::Completed() const +// ----------------------------------------------------------------------------- +// +TBool CVtCallback::Completed() const + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::Completed()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::Completed()>"), RThread().Id().operator TUint())); + return iCompleted; + } + +// ----------------------------------------------------------------------------- +// CVtCallback::IssueCallbackL() +// ----------------------------------------------------------------------------- +// +void CVtCallback::IssueCallbackL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::IssueCallbackL()<"), RThread().Id().operator TUint())); + iCompleted = EFalse; + TRequestStatus* pStatus = &iStatus; + RThread thread; + if( thread.Id() == iOwnThreadId ) + { + SetActive(); + User::RequestComplete( pStatus, KErrNone ); + } + else + { + User::LeaveIfError( thread.Open( iOwnThreadId ) ); + SetActive(); + *pStatus = KRequestPending; + thread.RequestComplete( pStatus, KErrNone ); + thread.Close(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::IssueCallbackL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVtCallback::RunL() +// ----------------------------------------------------------------------------- +// +void CVtCallback::RunL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::RunL()<"), RThread().Id().operator TUint())); + + iResult = KErrNone; + + switch( iCallBackType ) + { + case EVideoFrameSizeChanged: + iObserver->VideoFrameSizeChangedL( iFrom, iTo ); + break; + + default: + User::Leave( KErrArgument ); + } + + iCompleted = ETrue; + + _IFDBG(PRINT(_L("VideoSource[%d]: CVtCallback::RunL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVtCallback::DoCancel() +// ----------------------------------------------------------------------------- +// +void CVtCallback::DoCancel() + { + // do nothing! + } + +// ----------------------------------------------------------------------------- +// CVtCallback::RunError( TInt aError ) +// ----------------------------------------------------------------------------- +// +TInt CVtCallback::RunError( TInt aError ) + { + iCompleted = ETrue; + iResult = aError; + return KErrNone; + } + +// ========================== TDisplaySinkParams =============================== + +// ----------------------------------------------------------------------------- +// TDisplaySinkParams::TDisplaySinkParams +// ----------------------------------------------------------------------------- +// +EXPORT_C TDisplaySinkParams::TDisplaySinkParams() : + iFrameRateLimit( EFrameRateLimitNone ) + { + } + + +// ============================ CDisplaySink =================================== + +// ----------------------------------------------------------------------------- +// CDisplaySink::~CDisplaySink +// ----------------------------------------------------------------------------- +// +CDisplaySink::~CDisplaySink() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::~CDisplaySink()<"), RThread().Id().operator TUint())); + delete iVideoFrameQueue; + iBitmapCS.Close(); + delete iVTSignaller; + iVTMimeTypes.Reset(); + iVTMimeTypes.Close(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::~CDisplaySink()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::ConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::ConstructL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ConstructL()<"), RThread().Id().operator TUint())); + iDSFlags = aParams.iFlags; + iYuv420PlanarDesc.Delete( 0, iYuv420PlanarDesc.Length() ); + iYuv420PlanarDesc.Append( KVtVideoMIMETypeYUV420 ); + User::LeaveIfError( iVTMimeTypes.Append( &iYuv420PlanarDesc ) ); + iVideoFrameQueue = new ( ELeave ) CVtFrameQueue(); + iVTSignaller = new ( ELeave ) CVtCallback( *aParams.iObserver ); + BitmapEntry( EFirstBitmap ).iIsFree = EFalse; + BitmapEntry( ESecondBitmap ).iIsFree = EFalse; + iThreadId = aParams.iThreadId; + iRequestStatusPtr = aParams.iRequestStatusPtr; + iFrameSize = QCIF; + SetFrameRateLimit( aParams.iFrameRateLimit ); + User::LeaveIfError( iBitmapCS.CreateLocal() ); + BaseConstructL( aParams, aInitData ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ConstructL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::Destroy +// ----------------------------------------------------------------------------- +// +void CDisplaySink::Destroy() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Destroy()<"), RThread().Id().operator TUint())); + delete this; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Destroy()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SetBitmapAvailable( TBitmapNo aBitmapNo ) +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SetBitmapAvailable( TBitmapNo aBitmapNo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetBitmapAvailable()<"), RThread().Id().operator TUint())); + iBitmapCS.Wait(); + BitmapEntry( aBitmapNo ).iIsFree = ETrue; + BaseSetBitmapAvailable( aBitmapNo ); + iBitmapCS.Signal(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetBitmapAvailable()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::Release +// ----------------------------------------------------------------------------- +// +void CDisplaySink::Release() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Release()<"), RThread().Id().operator TUint())); + iBitmapCS.Wait(); + if( !iReleased ) + { + iReleased = ETrue; + if( iRequestStatusPtr != NULL && + (*iRequestStatusPtr) == KRequestPending ) + { + RThread thread; + TInt err = thread.Open( iThreadId ); + if( err == KErrNone ) + { + *iRequestStatusPtr = KRequestPending; + TRequestStatus* statusP = iRequestStatusPtr; + thread.RequestComplete( statusP, KErrCancel ); + thread.Close(); + } + } + } + iVideoFrameQueue->Release(); + iBitmapCS.Signal(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Release()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::UpdateSinkParamsL( const TDisplaySinkParams& aParams, +// TBool& aUpdated ) +// ----------------------------------------------------------------------------- +// +void CDisplaySink::UpdateSinkParamsL( + const TDisplaySinkParams& aParams, TBool& aUpdated ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::UpdateSinkParamsL()<"), RThread().Id().operator TUint())); + // This modification was requested by the VT engine team + iReleased = EFalse; + // This modification was requested by the VT engine team + iBitmapCS.Wait(); + BaseUpdateSinkParamsL( aParams ); + aUpdated = EFalse; + iParamsUpdated = &aUpdated; + iDSFlags = aParams.iFlags; + BitmapEntry( EFirstBitmap ).iIsFree = EFalse; + BitmapEntry( ESecondBitmap ).iIsFree = EFalse; + iVideoFrameQueue->Release(); + iBitmapCS.Signal(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::UpdateSinkParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::Pause() +// ----------------------------------------------------------------------------- +// +void CDisplaySink::Pause() + { + iBitmapCS.Wait(); + iPaused = ETrue; + iVideoFrameQueue->Release(); + iBitmapCS.Signal(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::Resume() +// ----------------------------------------------------------------------------- +// +void CDisplaySink::Resume() + { + iBitmapCS.Wait(); + iPaused = EFalse; + iBitmapCS.Signal(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::operator MVTVideoSink&() +// ----------------------------------------------------------------------------- +// +CDisplaySink::operator MVTVideoSink&() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::operator MVTVideoSink&()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::operator MVTVideoSink&()>"), RThread().Id().operator TUint())); + return *this; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::NextFrame +// ----------------------------------------------------------------------------- +// +void CDisplaySink::NextFrame() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::NextFrame()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::NextFrame()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::GetMultimediaTypesL() const +// ----------------------------------------------------------------------------- +// +const RArray& CDisplaySink::GetMultimediaTypesL() const + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::GetMultimediaTypeL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::GetMultimediaTypeL()>"), RThread().Id().operator TUint())); + return iVTMimeTypes; + } + + + +// ----------------------------------------------------------------------------- +// CDisplaySink::SetFormatL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SetFormatL( const TDesC8& aFormat ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetFormatL()<"), RThread().Id().operator TUint())); + if ( aFormat != KVtVideoMIMETypeYUV420 ) + { + User::Leave( KErrNotSupported ); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetFormatL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SetVideoFrameSizeL( const TSize& aSize ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetVideoFrameSizeL()<"), RThread().Id().operator TUint())); + if ( iInitFlags & ESinkThreadLogonCalled ) + { + SinkThreadLogonL(); + } + if ( iInitFlags & EFbsSessionConnected ) + { + TSize size( aSize ); + BaseSetVideoFrameSizeL( aSize ); + iFrameSize = aSize; + } + else + { + User::Leave( KErrNotReady ); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetVideoFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::GetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::GetVideoFrameSizeL( TSize& aSize ) const + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::GetVideoFrameSizeL()<"), RThread().Id().operator TUint())); + aSize = iFrameSize; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::GetVideoFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::EmptyBufferL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::EmptyBufferL( + TVtMMFDataBuffer aDataBuffer, + MVTVideoSource* aSupplier, + TMediaId /*aMediaId*/ ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL()<"), RThread().Id().operator TUint())); + if ( aDataBuffer.GetMMFBuffer() == NULL || aSupplier == NULL ) + { + User::Leave( KErrArgument ); + } + if ( iReleased ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL(): sink released, just return buffer"), RThread().Id().operator TUint())); + aSupplier->BufferEmptiedL( aDataBuffer.GetMMFBuffer() ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL()>"), RThread().Id().operator TUint())); + return; + } + else if ( iInitFlags & ESinkThreadLogonCalled ) + { + TRAPD( result, SinkThreadLogonL() ); + if ( result != KErrNone ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL(): SinkThreadLogonL failed %d"), RThread().Id().operator TUint(), result)); + aSupplier->BufferEmptiedL( aDataBuffer.GetMMFBuffer() ); + User::Leave( result ); + } + } + if ( aDataBuffer.GetMMFBuffer()->Type() != KVTUidYUVFrameBuffer ) + { + User::Leave( KErrArgument ); + } + if ( iState != EPlaying ) + { + User::Leave( KErrNotReady ); + } + iBitmapCS.Wait(); + + CleanupSignalPushL( iBitmapCS ); + iBuffer = aDataBuffer.GetMMFBuffer(); + iSupplier = aSupplier; + if ( IsOkToSendFrame() ) + { + // Waiting for frame size update? + if ( iWaitingForUpdate ) + { + // Update completed? + if ( iVTSignaller->Completed() ) + { + // YES: If it failed then Leave + if ( iVTSignaller->Result() != KErrNone ) + { + iSupplier->BufferEmptiedL( iBuffer ); + User::Leave( iVTSignaller->Result() ); + } + } + else + { + // NO: Report buffer emptied and return + iSupplier->BufferEmptiedL( iBuffer ); + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + return; + } + } + + // Is param update pending? + if ( iParamsUpdated ) + { + // YES: set new params + BaseDoUpdateParamsL(); + *iParamsUpdated = ETrue; + iParamsUpdated = 0; + iWaitingForUpdate = EFalse; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL(): params update finished"), RThread().Id().operator TUint())); + } + + // Update YUV data descriptor size based on resolution info. + TSize size( aDataBuffer.GetFrameSize() ); + TInt length( ( size.iWidth * size.iHeight * 12 ) / 8 ); + aDataBuffer.Data().Set( const_cast( aDataBuffer.Data().Ptr() ), length, length ); + // Expected frame size same as received size? + if ( !BaseSizesMatch( size ) ) + { + if ( !iWaitingForUpdate ) + { + iVTSignaller->VideoFrameSizeChangedL( iExpectedFrameSize, + aDataBuffer.GetFrameSize() ); + BaseVideoFrameSizeChangedL( aDataBuffer.GetFrameSize() ); + iWaitingForUpdate = ETrue; + } + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + return; + } + // All validation done, now it is ok to do implementation specific + // empty buffer. + BaseEmptyBufferL( aDataBuffer ); + +// debugging +// debugging +// debugging + + //iFC.PrintStatus(); + +// debugging +// debugging +// debugging + + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL()>"), RThread().Id().operator TUint())); + // No CleanupStack::PopAndDestroy() here, because cleanup is done in + // BaseEmptyBufferL(). Reason behind this decission is that certain + // things have to be handled either before or after cleanup and thus + // single cleanup here is not enough. + return; + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL(): dropping frame %d < %d"), RThread().Id().operator TUint(), iMilliSecondsSinceLastFrame, iFrameRateInterval )); + iSupplier->BufferEmptiedL( iBuffer ); + } + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal() + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::EmptyBufferL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::BufferFilledL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::BufferFilledL( CMMFBuffer* /*aBuffer*/ ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::BufferFilledL()<"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::BufferFilledL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::CanCreateSinkBuffer +// ----------------------------------------------------------------------------- +// +TBool CDisplaySink::CanCreateSinkBuffer() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::CanCreateSinkBuffer()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::CanCreateSinkBuffer()>"), RThread().Id().operator TUint())); + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::CreateSinkBufferL +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CDisplaySink::CreateSinkBufferL( + TMediaId /*aMediaId*/, + TBool& /*aReference*/ ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::CreateSinkBufferL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::CreateSinkBufferL()>"), RThread().Id().operator TUint())); + return NULL; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkThreadLogon +// ----------------------------------------------------------------------------- +// +TInt CDisplaySink::SinkThreadLogon( MAsyncEventHandler& /*aEventHandler*/ ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogon()<"), RThread().Id().operator TUint())); + iInitFlags |= ESinkThreadLogonCalled; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogon()>"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkThreadLogonL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SinkThreadLogonL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogonL()<"), RThread().Id().operator TUint())); + TInt result( FbsStartup() ); + if ( result == KErrNone ) + { + CleanupStack::PushL( TCleanupItem( &SinkThreadLogonCleanup, this ) ); + FbsConnectL(); + ThreadOpenL(); + User::LeaveIfError( iVideoFrameQueue->ThreadLogon() ); + BaseSinkThreadLogonL(); + iInitFlags &= ~ESinkThreadLogonCalled; + CleanupStack::Pop(); // TCleanupItem( &SinkThreadLogonCleanup, this ) + } + User::LeaveIfError( result ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogonL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkThreadLogoff +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SinkThreadLogoff() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogoff()<"), RThread().Id().operator TUint())); + BaseSinkThreadLogoff(); + iVideoFrameQueue->ThreadLogoff(); + ThreadClose(); + FbsDisconnect(); + iInitFlags = 0; + iExpectedFrameSize = TSize(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogoff()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkPrimeL +// ----------------------------------------------------------------------------- +// +TInt CDisplaySink::SinkPrimeL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPrimeL()<"), RThread().Id().operator TUint())); + if ( iState != EStopped ) + { + return KErrNone; + } + iState = EPrimed; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPrimeL()>"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkPlayL +// ----------------------------------------------------------------------------- +// +TInt CDisplaySink::SinkPlayL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPlayL()<"), RThread().Id().operator TUint())); + if ( iState != EPrimed ) + { + User::Leave( KErrNotReady ); + } + ResetFrameRateLimitter(); + iState = EPlaying; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPlayL()>"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkPauseL +// ----------------------------------------------------------------------------- +// +TInt CDisplaySink::SinkPauseL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPauseL()<"), RThread().Id().operator TUint())); + if ( iState != EPlaying ) + { + return KErrNone; + } + iState = EPrimed; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkPauseL()>"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkStopL +// ----------------------------------------------------------------------------- +// +TInt CDisplaySink::SinkStopL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkStopL()<"), RThread().Id().operator TUint())); + if ( iState == EStopped ) + { + return KErrNone; + } + iBitmapCS.Wait(); + iVideoFrameQueue->SinkStoppedL(); + iBitmapCS.Signal(); + iState = EStopped; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkStopL()>"), RThread().Id().operator TUint())); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CDisplaySink::CDisplaySink +// ----------------------------------------------------------------------------- +// +CDisplaySink::CDisplaySink() : MVTVideoSink( KNullUid ), + iSinkFourCC( 0 ), iState( EStopped ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Ctor()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::Ctor()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SetFrameRateLimit( +// TDisplaySinkParams::TFrameRateLimit aFrameRateLimit ) +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SetFrameRateLimit( + TDisplaySinkParams::TFrameRateLimit aFrameRateLimit ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetFrameRateLimit()<"), RThread().Id().operator TUint())); + iFrameRateInterval = TInt( aFrameRateLimit ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SetFrameRateLimit()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::ResetFrameRateLimitter() +// ----------------------------------------------------------------------------- +// +void CDisplaySink::ResetFrameRateLimitter() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ResetFrameRateLimitter()<"), RThread().Id().operator TUint())); + iMilliSecondsSinceLastFrame = 0; + iLastFrameTime = Time::NullTTime(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ResetFrameRateLimitter()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::BufferFilledL +// ----------------------------------------------------------------------------- +// +TBool CDisplaySink::IsOkToSendFrame() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::IsOkToSendFrame()<"), RThread().Id().operator TUint())); + TBool isOkToSendFrame( EFalse ); + if( iPaused ) + { + // nothing to do here because okToSendFrame defaults to EFalse + } + else if( iFrameRateInterval == TDisplaySinkParams::EFrameRateLimitNone ) + { + // If no limitation is set -> send frame + isOkToSendFrame = ETrue; + } + else if( iLastFrameTime == Time::NullTTime() ) + { + // EmptyBufferL() is being called the first time after SinkPlayL() -> + // send frame + iLastFrameTime.HomeTime(); + isOkToSendFrame = ETrue; + } + else + { + // Check if enough time has passed since previous frame sent + TTime now; + now.HomeTime(); + TTimeIntervalMicroSeconds interval( + now.MicroSecondsFrom( iLastFrameTime ) ); + iMilliSecondsSinceLastFrame += I64INT( interval.Int64() ) / 1000; + iLastFrameTime = now; + if( iMilliSecondsSinceLastFrame >= iFrameRateInterval ) + { + // Enough time passed -> send frame + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::IsOkToSendFrame(): sending frame %d >= %d"), RThread().Id().operator TUint(), iMilliSecondsSinceLastFrame, iFrameRateInterval )); + isOkToSendFrame = ETrue; + while( iMilliSecondsSinceLastFrame >= iFrameRateInterval ) + { + iMilliSecondsSinceLastFrame -= iFrameRateInterval; + } + } + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::IsOkToSendFrame() %d>"), RThread().Id().operator TUint(), isOkToSendFrame)); + return isOkToSendFrame; + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::FbsConnectL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::FbsConnectL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::FbsConnectL()<"), RThread().Id().operator TUint())); + if ( !( iInitFlags & EFbsSessionConnected ) ) + { + User::LeaveIfError( RFbsSession::Connect() ); + iInitFlags |= EFbsSessionConnected; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::FbsConnectL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::ThreadOpenL +// ----------------------------------------------------------------------------- +// +void CDisplaySink::ThreadOpenL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ThreadOpenL()<"), RThread().Id().operator TUint())); + if ( !( iInitFlags & EThreadOpened ) ) + { + User::LeaveIfError( iThread.Open( iThreadId ) ); + iInitFlags |= EThreadOpened; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ThreadOpenL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::FbsDisconnect +// ----------------------------------------------------------------------------- +// +void CDisplaySink::FbsDisconnect() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::FbsDisconnect()<"), RThread().Id().operator TUint())); + if ( iInitFlags & EFbsSessionConnected ) + { + RFbsSession::Disconnect(); + iInitFlags &= ~EFbsSessionConnected; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::FbsDisconnect()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::ThreadClose +// ----------------------------------------------------------------------------- +// +void CDisplaySink::ThreadClose() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ThreadClose()<"), RThread().Id().operator TUint())); + if ( iInitFlags & EThreadOpened ) + { + iThread.Close(); + iInitFlags &= ~EThreadOpened; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::ThreadClose()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySink::SinkThreadLogonCleanup +// ----------------------------------------------------------------------------- +// +void CDisplaySink::SinkThreadLogonCleanup( TAny* aPtr ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogonCleanup()<"), RThread().Id().operator TUint())); + CDisplaySink* self = reinterpret_cast< CDisplaySink* >( aPtr ); + self->iVideoFrameQueue->ThreadLogoff(); + self->ThreadClose(); + self->FbsDisconnect(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySink::SinkThreadLogonCleanup()>"), RThread().Id().operator TUint())); + } + +// ================= OTHER EXPORTED FUNCTIONS ============== + +// ----------------------------------------------------------------------------- +// CreateSinkL +// ----------------------------------------------------------------------------- +// +EXPORT_C MDisplaySink* CreateSinkL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) + { + MDisplaySink* sink = NULL; + if (aParams.iFlags & TDisplaySinkParams::EDisplaySinkNGA) + { + sink = CDisplaySinkNGA::NewL( aParams, aInitData ); + } + else if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) && + ( aParams.iFlags & TDisplaySinkParams::EDisplaySinkDP ) ) + { + sink = CDisplaySinkDP::NewL( aParams, aInitData ); + } + else + { + sink = CDisplaySinkDSA::NewL( aParams, aInitData ); + } + return sink; + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CDisplaySinkDP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CDisplaySinkDP.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,309 @@ +/* +* Copyright (c) 2004 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: Display Sink subsystem for Display Posting. +* +*/ + + +// INCLUDE FILES + +#include "CDisplaySinkDP.h" +#include "vtyuvconverter.h" + +// MACROS + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::NewL +// ----------------------------------------------------------------------------- +// +CDisplaySinkDP* CDisplaySinkDP::NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::NewL()<"), RThread().Id().operator TUint())); + CDisplaySinkDP* self = new ( ELeave ) CDisplaySinkDP(); + CleanupStack::PushL( self ); + self->ConstructL( aParams, aInitData ); + CleanupStack::Pop(); // self + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::NewL()>"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::CDisplaySinkDP +// ----------------------------------------------------------------------------- +// +CDisplaySinkDP::CDisplaySinkDP() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::Ctor<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::Ctor>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::~CDisplaySinkDP +// ----------------------------------------------------------------------------- +// +CDisplaySinkDP::~CDisplaySinkDP() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::~<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::~>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConstructL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< const TDisplaySinkParamsDP& >( aParams ); + if ( !iNewParams.iPostingBuffer1 || !iNewParams.iPostingBuffer2 ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConstructL() posting buffer is NULL!"))); + User::Leave( KErrArgument ); + } + iBitmapTable[EFirstBitmap].iBuffer = iNewParams.iPostingBuffer1; + iBitmapTable[ESecondBitmap].iBuffer = iNewParams.iPostingBuffer2; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConstructL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseConvert +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkDP::BaseConvert( const TVtMMFDataBuffer& aBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert()<"), RThread().Id().operator TUint())); + + TBool consumed( ETrue ); + TBitmapNo bitmapNo( iBitmapTable[ EFirstBitmap ].iIsFree ? EFirstBitmap : ESecondBitmap ); + if ( iBitmapTable[ bitmapNo ].iIsFree && + !iReleased && + ( *iRequestStatusPtr == KRequestPending ) ) + { + CPostingSurface::TPostingBuff* postingBuffer = + *iBitmapTable[ bitmapNo ].iBuffer; + + TInt bufferLength( + postingBuffer->GetSize().iHeight * postingBuffer->GetStride() ); + + TPtr8 ptrBuffer( + static_cast< TUint8* >( postingBuffer->GetBuffer() ), + bufferLength, + bufferLength + ); + + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert(): buffer %d: $%x %d bytes"), RThread().Id().operator TUint(), bitmapNo, postingBuffer->GetBuffer(), bufferLength)); + + // Determine wether to convert or copy (420 will be just copied) + if ( iNewParams.iPostingFormat == + CPostingSurface::EYuv422LeBt601Range0 ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert(): converting to 422"), RThread().Id().operator TUint())); + VtYuvConverter::ConvertFrom420PlanarTo422Interleaved( + aBuffer.Data(), + aBuffer.GetFrameSize(), + ptrBuffer, + postingBuffer->GetStride() ); + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert(): copying as 420"), RThread().Id().operator TUint())); + ptrBuffer = aBuffer.Data(); + } + + iBitmapTable[ bitmapNo ].iIsFree = EFalse; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, bitmapNo ); + } + else + { + consumed = EFalse; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert(): could not find free buffer"), RThread().Id().operator TUint())); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseConvert()>"), RThread().Id().operator TUint())); + return consumed; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseSinkThreadLogonL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseSinkThreadLogonL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSinkThreadLogonL()<"), RThread().Id().operator TUint())); + UpdateExpectedFrameSizeL(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSinkThreadLogonL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseSinkThreadLogoff +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseSinkThreadLogoff() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSinkThreadLogoff()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSinkThreadLogoff()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseUpdateSinkParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseUpdateSinkParamsL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< const TDisplaySinkParamsDP& >( aParams ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseUpdateSinkParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseDoUpdateParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseDoUpdateParamsL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseDoUpdateParamsL()<"), RThread().Id().operator TUint())); + iBitmapTable[ EFirstBitmap ].iBuffer = iNewParams.iPostingBuffer1; + iBitmapTable[ ESecondBitmap ].iBuffer = iNewParams.iPostingBuffer2; + UpdateExpectedFrameSizeL(); + if( iNewParams.iFrameRateLimit != iFrameRateInterval ) + { + SetFrameRateLimit( iNewParams.iFrameRateLimit ); + ResetFrameRateLimitter(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseDoUpdateParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseSetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseSetVideoFrameSizeL( const TSize& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSetVideoFrameSizeL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSetVideoFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseSizesMatch +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkDP::BaseSizesMatch( const TSize& aSize ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSizesMatch()<"), RThread().Id().operator TUint())); + TBool sizesMatch( iExpectedFrameSize == aSize ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSizesMatch() %d>"), RThread().Id().operator TUint(), sizesMatch)); + return sizesMatch; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BitmapEntry +// ----------------------------------------------------------------------------- +// +CDisplaySink::TBitmapEntry& CDisplaySinkDP::BitmapEntry( TInt aIndex ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BitmapEntry(%d)<"), RThread().Id().operator TUint(), aIndex)); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BitmapEntry()>"), RThread().Id().operator TUint())); + return iBitmapTable[ aIndex ]; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseEmptyBufferL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseEmptyBufferL()<"), RThread().Id().operator TUint())); + if ( BaseConvert( aVTMMFBuffer ) ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + if ( iVideoFrameQueue->IsStored() || !IsOkToSendFrame() ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + iVideoFrameQueue->Store( *iSupplier, static_cast(aVTMMFBuffer.GetMMFBuffer()), aVTMMFBuffer.GetFrameSize(), aVTMMFBuffer.Data() ); + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + } + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseEmptyBufferL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseSetBitmapAvailable( TBitmapNo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSetBitmapAvailable()<"), RThread().Id().operator TUint())); + NextFrame(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseSetBitmapAvailable()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::BaseVideoFrameSizeChangedL( const TSize& ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::BaseVideoFrameSizeChangedL( const TSize& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseVideoFrameSizeChangedL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::BaseVideoFrameSizeChangedL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::NextFrame +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::NextFrame() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::NextFrame()<"), RThread().Id().operator TUint())); + if ( iVideoFrameQueue->IsStored() ) + { + if ( IsOkToSendFrame() ) + { + BaseConvert( iVideoFrameQueue->Buffer() ); + } + iVideoFrameQueue->Release(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::NextFrame()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::UpdateExpectedFrameSizeL() +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDP::UpdateExpectedFrameSizeL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::UpdateExpectedFrameSizeL()<"), RThread().Id().operator TUint())); + iExpectedFrameSize = iNewParams.iFrameSize; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDP::UpdateExpectedFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CDisplaySinkDSA.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CDisplaySinkDSA.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,464 @@ +/* +* Copyright (c) 2006 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: Display Sink subsystem for Direct Screen Access. +* +*/ + + +// INCLUDES + +#include +#include +#include "CDisplaySinkDSA.h" +#include "TDisplaySinkParamsDSA.h" + +// MACROS + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + +// ======================== CDisplaySinkDSA ============================== + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::NewL +// ----------------------------------------------------------------------------- +// +CDisplaySinkDSA* CDisplaySinkDSA::NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::NewL()<"), RThread().Id().operator TUint())); + CDisplaySinkDSA* self = new ( ELeave ) CDisplaySinkDSA(); + CleanupStack::PushL( self ); + self->ConstructL( aParams, aInitData ); + CleanupStack::Pop(); // self + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::NewL()>"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::CDisplaySinkDSA +// ----------------------------------------------------------------------------- +// +CDisplaySinkDSA::CDisplaySinkDSA() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::Ctor<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::Ctor>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::~CDisplaySinkDSA +// ----------------------------------------------------------------------------- +// +CDisplaySinkDSA::~CDisplaySinkDSA() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::~<"), RThread().Id().operator TUint())); + delete iRotator; + delete iYUVBitmapConverterVT; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::~>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConstructL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< TDisplaySinkParamsDSA& > ( aParams ); + if ( !iNewParams.iBitmap1Handle || !iNewParams.iBitmap2Handle ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConstructL() bitmap handle NULL!") )); + User::Leave( KErrArgument ); + } + iBitmapTable[EFirstBitmap].iHandle = iNewParams.iBitmap1Handle; + iBitmapTable[ESecondBitmap].iHandle = iNewParams.iBitmap2Handle; + iRotator = CVtImageRotator::NewL( *this ); + iRotationAngle = iNewParams.iRotationAngle; + iYUVBitmapConverterVT = CVTIYUVFbsBitmapConverter::NewL( + QCIF, iBitmapTable[EFirstBitmap].iHandle ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConstructL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseConvert +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkDSA::BaseConvert( const TVtMMFDataBuffer& aBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConvert()<"), RThread().Id().operator TUint())); + TBool converted( EFalse ); + TRAPD( err, ConvertL( aBuffer.Data(), converted ) ); + if ( err != KErrNone ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConvert() err=%d"), RThread().Id().operator TUint(), err)); + converted = EFalse; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseConvert() %d>"), RThread().Id().operator TUint(), converted)); + return converted; + } +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseSinkThreadLogonL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseSinkThreadLogonL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogonL()<"), RThread().Id().operator TUint())); + CVTYUVFbsBitmapConverter* converter1 = + CVTIYUVFbsBitmapConverter::NewL( + QCIF, + iBitmapTable[EFirstBitmap].iHandle ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogonL() 1"), RThread().Id().operator TUint())); + CleanupStack::PushL( converter1 ); + CVTYUVFbsBitmapConverter* converter2 = + CVTIYUVFbsBitmapConverter::NewL( + QCIF, + iBitmapTable[ESecondBitmap].iHandle ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogonL() 2"), RThread().Id().operator TUint())); + CleanupStack::PushL( converter2 ); + CleanupStack::Pop( 2 ); // converter1, converter2 + iYUVBitmapConverter1 = converter1; + iYUVBitmapConverter2 = converter2; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogonL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseSinkThreadLogoff +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseSinkThreadLogoff() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogoff()<"), RThread().Id().operator TUint())); + delete iYUVBitmapConverter1; + delete iYUVBitmapConverter2; + delete iSourceImg; iSourceImg = 0; + delete iTargetImg; iTargetImg = 0; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSinkThreadLogoff()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseUpdateSinkParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseUpdateSinkParamsL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< const TDisplaySinkParamsDSA& >( aParams ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseUpdateSinkParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseDoUpdateParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseDoUpdateParamsL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseDoUpdateParamsL()<"), RThread().Id().operator TUint())); + iRotationAngle = iNewParams.iRotationAngle; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseDoUpdateParamsL() handle1=%d"), RThread().Id().operator TUint(), iNewParams.iBitmap1Handle)); + iBitmapTable[ EFirstBitmap ].iHandle = iNewParams.iBitmap1Handle; + iBitmapTable[ EFirstBitmap ].iIsFree = ETrue; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseDoUpdateParamsL() handle2=%d"), RThread().Id().operator TUint(), iNewParams.iBitmap2Handle)); + iBitmapTable[ ESecondBitmap ].iHandle = iNewParams.iBitmap2Handle; + iBitmapTable[ ESecondBitmap ].iIsFree = EFalse; + UpdateExpectedFrameSizeL(); + iYUVBitmapConverter1->SetSourceSizeL( iExpectedFrameSize ); + iYUVBitmapConverter1->SetDestinationL( iNewParams.iBitmap1Handle ); + iYUVBitmapConverter2->SetSourceSizeL( iExpectedFrameSize ); + iYUVBitmapConverter2->SetDestinationL( iNewParams.iBitmap2Handle ); + if( iNewParams.iFrameRateLimit != iFrameRateInterval ) + { + SetFrameRateLimit( iNewParams.iFrameRateLimit ); + ResetFrameRateLimitter(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseDoUpdateParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseSetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseSetVideoFrameSizeL( const TSize& aSize ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetVideoFrameSizeL()<"), RThread().Id().operator TUint())); + TSize size( aSize ); + if( ( iRotationAngle == CVtImageRotator::E90DegreesClockwise ) || + ( iRotationAngle == CVtImageRotator::E270DegreesClockwise ) ) + { + size = TSize( aSize.iHeight, aSize.iWidth ); + } + iYUVBitmapConverter1->SetSourceSizeL( size ); + iYUVBitmapConverter2->SetSourceSizeL( size ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetVideoFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseSizesMatch +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkDSA::BaseSizesMatch( const TSize& aSize ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSizesMatch()<"), RThread().Id().operator TUint())); + TBool sizesMatch( iExpectedFrameSize == aSize ); + TBool rotateChangesDimension( + ( iRotationAngle == CVtImageRotator::E90DegreesClockwise ) || + ( iRotationAngle == CVtImageRotator::E270DegreesClockwise ) ); + if( rotateChangesDimension ) + { + sizesMatch = + ( iExpectedFrameSize.iWidth == aSize.iHeight ) && + ( iExpectedFrameSize.iHeight == aSize.iWidth ); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSizesMatch() %d>"), RThread().Id().operator TUint(), sizesMatch)); + return sizesMatch; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BitmapEntry +// ----------------------------------------------------------------------------- +// +CDisplaySink::TBitmapEntry& CDisplaySinkDSA::BitmapEntry( TInt aIndex ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BitmapEntry(%d)<"), RThread().Id().operator TUint(), aIndex)); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BitmapEntry()>"), RThread().Id().operator TUint())); + return iBitmapTable[ aIndex ]; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseEmptyBufferL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseEmptyBufferL()<"), RThread().Id().operator TUint())); + if( iRotationAngle != CVtImageRotator::ERotationNone ) + { + TSize size( aVTMMFBuffer.GetFrameSize() ); + TInt length( ( size.iWidth * size.iHeight * 12 ) / 8 ); + // Modifiable pointer descriptor needed, we don't want a copy of image! + TPtr8 ptrData( const_cast< TUint8* >( + aVTMMFBuffer.Data().Ptr() ), length, length ); + + if( iSourceImg == 0 ) + { + // If source image is not created -> create it + iSourceImg = CVtImageIYUV::NewL( size, ptrData ); + } + else + { + // otherwise just update the data + if( iSourceImg->Size() == size ) + { + iSourceImg->SetImageL( ptrData ); + } + else + { + delete iSourceImg; iSourceImg = 0; + iSourceImg = CVtImageIYUV::NewL( size, ptrData ); + } + } + iRotator->RotateL( *iSourceImg, *iTargetImg, iRotationAngle ); + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + } + else + { + if ( BaseConvert( aVTMMFBuffer ) ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + if ( iVideoFrameQueue->IsStored() || !IsOkToSendFrame() ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + iVideoFrameQueue->Store( *iSupplier, static_cast(aVTMMFBuffer.GetMMFBuffer()), aVTMMFBuffer.GetFrameSize(), aVTMMFBuffer.Data()); + CleanupStack::PopAndDestroy(); + } + } + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseEmptyBufferL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable()<"), RThread().Id().operator TUint())); + if ( iVideoFrameQueue->IsStored() ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable() buffer pending"), RThread().Id().operator TUint())); + if ( !iReleased && ( *iRequestStatusPtr == KRequestPending ) && IsOkToSendFrame() ) + { + TRAPD( result, { + iYUVBitmapConverterVT->SetDestinationL( + iBitmapTable[ aBitmapNo ].iHandle ); + iYUVBitmapConverterVT->SetSourceL( + iVideoFrameQueue->Buffer().Data() ); + iYUVBitmapConverterVT->ProcessL(); + } ); + if ( result == KErrNone ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable() conversion succeeded!"), RThread().Id().operator TUint())); + iBitmapTable[ aBitmapNo ].iIsFree = EFalse; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, aBitmapNo ); + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable() conversion failed!"), RThread().Id().operator TUint())); + // Drop frame + } + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable() dropping frame"), RThread().Id().operator TUint())); + // Drop frame + } + iVideoFrameQueue->Release(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseSetBitmapAvailable()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::BaseVideoFrameSizeChangedL( const TSize& aNewSize ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::BaseVideoFrameSizeChangedL( const TSize& aNewSize ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseVideoFrameSizeChangedL()<"), RThread().Id().operator TUint())); + iYUVBitmapConverterVT->SetSourceSizeL( aNewSize ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::BaseVideoFrameSizeChangedL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::UpdateExpectedFrameSizeL() +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::UpdateExpectedFrameSizeL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::UpdateExpectedFrameSizeL()<"), RThread().Id().operator TUint())); + CFbsBitmap* bm = new ( ELeave ) CFbsBitmap(); + CleanupStack::PushL( bm ); + User::LeaveIfError( bm->Duplicate( iBitmapTable[ EFirstBitmap ].iHandle ) ); + iExpectedFrameSize = bm->SizeInPixels(); + User::LeaveIfError( bm->Duplicate( iBitmapTable[ ESecondBitmap ].iHandle ) ); + if( iExpectedFrameSize != bm->SizeInPixels() ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::UpdateExpectedFrameSizeL(): EFirstBitmap size is different from ESecondBitmap size -> Leave()"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } + CleanupStack::PopAndDestroy(); // bm + delete iTargetImg; iTargetImg = 0; + iTargetImg = CVtImageIYUV::NewL( iExpectedFrameSize ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::UpdateExpectedFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::RotationFinished( TInt aError ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::RotationFinished( TInt aError ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::RotationFinished()<"), RThread().Id().operator TUint())); + // Rotation finished .. do something + if( aError == KErrNone ) + { + iBitmapCS.Wait(); + TBool converted( EFalse ); + TRAP( aError, ConvertL( iTargetImg->Image(), converted ) ); + iBitmapCS.Signal(); + TRAPD( aError2, iSupplier->BufferEmptiedL( iBuffer ) ); + if( ( aError != KErrNone ) || ( aError2 != KErrNone ) ) + { + *iRequestStatusPtr = KRequestPending; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, aError ); + } + } + else + { + *iRequestStatusPtr = KRequestPending; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, aError ); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::RotationFinished()>"), RThread().Id().operator TUint())); + } + + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::ConvertL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::ConvertL( const TPtrC8& aBuffer, TBool& aConverted ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::ConvertL()<"), RThread().Id().operator TUint())); + TBitmapNo bitmapNo( iBitmapTable[ EFirstBitmap ].iIsFree ? EFirstBitmap : ESecondBitmap ); + if ( iBitmapTable[ bitmapNo ].iIsFree && + !iReleased && + ( *iRequestStatusPtr == KRequestPending ) ) + { + DoConvertL( aBuffer, bitmapNo ); + aConverted = ETrue; + iBitmapTable[ bitmapNo ].iIsFree = EFalse; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, bitmapNo ); + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::ConvertL(): could not find free bitmap"), RThread().Id().operator TUint())); + aConverted = EFalse; + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::ConvertL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDSA::DoConvert +// ----------------------------------------------------------------------------- +// +void CDisplaySinkDSA::DoConvertL( const TPtrC8& aBuffer, TBitmapNo aBitmapNo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::DoConvertL()<"), RThread().Id().operator TUint())); + CVTYUVFbsBitmapConverter* c = 0; + switch( aBitmapNo ) + { + case EFirstBitmap: + c = iYUVBitmapConverter1; + break; + + case ESecondBitmap: + c = iYUVBitmapConverter2; + break; + + default: + User::Leave( KErrArgument ); + }; + c->SetSourceL( aBuffer ); + c->ProcessL(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkDSA::DoConvertL()>"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CDisplaySinkNGA.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CDisplaySinkNGA.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,818 @@ +/* +* Copyright (c) 2004-2006 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: Class for CDisplaySinkNGA. +* +*/ + +// INCLUDE FILES + +#include "CDisplaySinkNGA.h" + +// MACROS + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + + static const TUint8 NGA_COFF_TBL_64K[ 220 ]= + { + 0xe9,0x66,0x01,0x00, // KRedCrFactor + 0x1a,0x58,0x00,0x00, // KGreenCbFactor + 0xd2,0xb6,0x00,0x00, // KGreenCrFactor + 0xa2,0xc5,0x01,0x00, // KBlueCbFactor + + 0x00,0x00,0x00,0x00, // 5-bit + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03, + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + + 0x00,0x00,0x00,0x00, // 6-bit + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03, + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + 0x20,0x21,0x22,0x23, + 0x24,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x2b, + 0x2c,0x2d,0x2e,0x2f, + 0x30,0x31,0x32,0x33, + 0x34,0x35,0x36,0x37, + 0x38,0x39,0x3a,0x3b, + 0x3c,0x3d,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f + }; + + + const TUint8 NGA_COFF_TBL_16M[ 528 ] = + { + 0xe9,0x66,0x01,0x00, // KRedCrFactor + 0x1a,0x58,0x00,0x00, // KGreenCbFactor + 0xd2,0xb6,0x00,0x00, // KGreenCrFactor + 0xa2,0xc5,0x01,0x00, // KBlueCbFactor + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x01,0x02,0x03, // 8-bit + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + + 0x20,0x21,0x22,0x23, + 0x24,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x2b, + 0x2c,0x2d,0x2e,0x2f, + + 0x30,0x31,0x32,0x33, + 0x34,0x35,0x36,0x37, + 0x38,0x39,0x3a,0x3b, + 0x3c,0x3d,0x3e,0x3f, + + 0x40,0x41,0x42,0x43, + 0x44,0x45,0x46,0x47, + 0x48,0x49,0x4a,0x4b, + 0x4c,0x4d,0x4e,0x4f, + + 0x50,0x51,0x52,0x53, + 0x54,0x55,0x56,0x57, + 0x58,0x59,0x5a,0x5b, + 0x5c,0x5d,0x5e,0x5f, + + 0x60,0x61,0x62,0x63, + 0x64,0x65,0x66,0x67, + 0x68,0x69,0x6a,0x6b, + 0x6c,0x6d,0x6e,0x6f, + + 0x70,0x71,0x72,0x73, + 0x74,0x75,0x76,0x77, + 0x78,0x79,0x7a,0x7b, + 0x7c,0x7d,0x7e,0x7f, + + 0x80,0x81,0x82,0x83, + 0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x8b, + 0x8c,0x8d,0x8e,0x8f, + + 0x90,0x91,0x92,0x93, + 0x94,0x95,0x96,0x97, + 0x98,0x99,0x9a,0x9b, + 0x9c,0x9d,0x9e,0x9f, + + 0xa0,0xa1,0xa2,0xa3, + 0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xab, + 0xac,0xad,0xae,0xaf, + + 0xb0,0xb1,0xb2,0xb3, + 0xb4,0xb5,0xb6,0xb7, + 0xb8,0xb9,0xba,0xbb, + 0xbc,0xbd,0xbe,0xbf, + + 0xc0,0xc1,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7, + 0xc8,0xc9,0xca,0xcb, + 0xcc,0xcd,0xce,0xcf, + + 0xd0,0xd1,0xd2,0xd3, + 0xd4,0xd5,0xd6,0xd7, + 0xd8,0xd9,0xda,0xdb, + 0xdc,0xdd,0xde,0xdf, + + 0xe0,0xe1,0xe2,0xe3, + 0xe4,0xe5,0xe6,0xe7, + 0xe8,0xe9,0xea,0xeb, + 0xec,0xed,0xee,0xef, + + 0xf0,0xf1,0xf2,0xf3, + 0xf4,0xf5,0xf6,0xf7, + 0xf8,0xf9,0xfa,0xfb, + 0xfc,0xfd,0xfe,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff + }; + + + void ConvertFrom420PlanarToRGB_565( + const TDesC8& aSource, + const TSize& aSize, + TDes8& aTarget, + TInt aStride ) + { + TInt height( aSize.iHeight >> 1 ); + TInt width( aSize.iWidth ); + + TInt ySize = aSize.iWidth * aSize.iHeight; + TInt ySizeDiv4 = ( ySize >> 2 ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( aSource.Mid( 0, ySize ).Ptr() ); + const TUint32* u = reinterpret_cast< const TUint32* >( aSource.Mid( ySize, ySizeDiv4 ).Ptr() ); + const TUint32* v = reinterpret_cast< const TUint32* >( aSource.Mid( ySize + ySizeDiv4, ySizeDiv4 ).Ptr() ); + + TUint32 uintsPerDestRow = aStride >> 2; + + const TUint32* TargetPtr = reinterpret_cast< const TUint32* >( aTarget.Ptr() ); + + TUint32* d1 = const_cast< TUint32* >( TargetPtr ); + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TInt32 red; + TInt32 green; + TInt32 blue; + TUint32 r1; + const TUint8* clip = NGA_COFF_TBL_64K + 40; + + for( TInt y = 0; y < height; y++ ) + { + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 = green | ( red << 4 ); + r1 = blue | ( r1 << 4 ); + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 |= ( ( green | ( red << 4 ) ) << 4 | blue ) << 16; + + d1[ uintsPerDestRow ] = r1; + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 = green | ( red << 4 ); + r1 = blue | ( r1 << 4 ); + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 |= ( ( green | ( red << 4 ) ) << 4 | blue ) << 16; + + *d1++ = r1; + } + } + } + + y1 += ( width << 1 ); + d1 += uintsPerDestRow; + } + } + + + void ConvertFrom420PlanarToXRGB_8888( + const TDesC8& aSource, + const TSize& aSize, + TDes8& aTarget, + TInt aStride ) + { + + TInt height( aSize.iHeight >> 1 ); + TInt width( aSize.iWidth ); + + TInt ySize = aSize.iWidth * aSize.iHeight; + TInt ySizeDiv4 = ( ySize >> 2 ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( aSource.Mid( 0, ySize ).Ptr() ); + const TUint32* u = reinterpret_cast< const TUint32* >( aSource.Mid( ySize, ySizeDiv4 ).Ptr() ); + const TUint32* v = reinterpret_cast< const TUint32* >( aSource.Mid( ySize + ySizeDiv4, ySizeDiv4 ).Ptr() ); + + TUint32 uintsPerDestRow = aStride >> 2; + + const TUint32* TargetPtr = reinterpret_cast< const TUint32* >( aTarget.Ptr() ); + + TUint32* d1 = const_cast< TUint32* >( TargetPtr ); + + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TUint32 p; + const TUint8* clip = NGA_COFF_TBL_16M + 144; + + for( TInt y = 0; y < height; y++ ) + { + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 136 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 140 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 144 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 132 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + d1[ uintsPerDestRow ] = clip[ yy + cb ] | ( p << 8 ); + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + d1[ uintsPerDestRow + 1 ] = clip[ yy + cb ] | ( p << 8 ); + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + *d1++ = clip[ yy + cb ] | ( p << 8 ); + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + *d1++ = clip[ yy + cb ] | ( p << 8 ); + } + } + } + + y1 += ( width << 1 ); + d1 += uintsPerDestRow; + } + + } + + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::NewL +// ----------------------------------------------------------------------------- +// +CDisplaySinkNGA* CDisplaySinkNGA::NewL( TDisplaySinkParams& aParams, + const TDesC8& aInitData ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::NewL()<"), RThread().Id().operator TUint())); + CDisplaySinkNGA* self = new ( ELeave ) CDisplaySinkNGA(); + CleanupStack::PushL( self ); + self->ConstructL( aParams, aInitData ); + CleanupStack::Pop(); // self + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::NewL()>"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::CDisplaySinkNGA +// ----------------------------------------------------------------------------- +// +CDisplaySinkNGA::CDisplaySinkNGA() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::Ctor<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::Ctor>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::~CDisplaySinkNGA +// ----------------------------------------------------------------------------- +// +CDisplaySinkNGA::~CDisplaySinkNGA() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::~<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::~>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseConstructL( TDisplaySinkParams& aParams, + const TDesC8& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConstructL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< const TDisplaySinkParamsNGA& >( aParams ); + if ( !iNewParams.iSurfaceBuffer1 || !iNewParams.iSurfaceBuffer2 ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConstructL() surface buffer is NULL!"))); + User::Leave( KErrArgument ); + } + iBitmapTable[EFirstBitmap].iBuffer = iNewParams.iSurfaceBuffer1; + iBitmapTable[ESecondBitmap].iBuffer = iNewParams.iSurfaceBuffer2; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConstructL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseConvert +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkNGA::BaseConvert( const TVtMMFDataBuffer& aBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert()<"), RThread().Id().operator TUint())); + + TBool consumed( ETrue ); + TBitmapNo bitmapNo( iBitmapTable[ EFirstBitmap ].iIsFree ? EFirstBitmap : ESecondBitmap ); + if ( iBitmapTable[ bitmapNo ].iIsFree && + !iReleased && + ( *iRequestStatusPtr == KRequestPending ) ) + { +#if 1 + TInt bufferLength( + //iNewParams.iFrameSize.iHeight * ( iNewParams.iFrameSize.iWidth * 2 ) ); + iNewParams.iFrameSize.iHeight * ( iNewParams.iFrameSize.iWidth * 3/2 ) ); +#else + TInt bufferLength( + iNewParams.iFrameSize.iHeight * ( iNewParams.iFrameSize.iWidth * 4 ) ); +#endif + + TPtr8 ptrBuffer( + *iBitmapTable[ bitmapNo ].iBuffer, + bufferLength, + bufferLength + ); + + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert(): buffer %d: $%x %d bytes"), RThread().Id().operator TUint(), bitmapNo, *iBitmapTable[ bitmapNo ].iBuffer, bufferLength)); + + // Determine wether to convert or copy (420 will be just copied) + //if ( iNewParams.iSurfaceFormat == EUidPixelFormatRGB_565 ) + if ( iNewParams.iSurfaceFormat == EUidPixelFormatXRGB_8888 ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert(): converting to RGB565"), RThread().Id().operator TUint())); + + /* + ConvertFrom420PlanarToRGB_565( + aBuffer.Data(), + aBuffer.GetFrameSize(), + ptrBuffer, + iNewParams.iFrameSize.iWidth * 2 ); + */ + + ConvertFrom420PlanarToXRGB_8888( + aBuffer.Data(), + aBuffer.GetFrameSize(), + ptrBuffer, + iNewParams.iFrameSize.iWidth * 4 ); + + } + else + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert(): copying as 420"), RThread().Id().operator TUint())); + ptrBuffer = aBuffer.Data(); + } + + iBitmapTable[ bitmapNo ].iIsFree = EFalse; + TRequestStatus* statusP = iRequestStatusPtr; + iThread.RequestComplete( statusP, bitmapNo ); + } + else + { + consumed = EFalse; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert(): could not find free buffer"), RThread().Id().operator TUint())); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseConvert()>"), RThread().Id().operator TUint())); + return consumed; + + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseSinkThreadLogonL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseSinkThreadLogonL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSinkThreadLogonL()<"), RThread().Id().operator TUint())); + UpdateExpectedFrameSizeL(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSinkThreadLogonL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseSinkThreadLogoff +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseSinkThreadLogoff() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSinkThreadLogoff()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSinkThreadLogoff()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseUpdateSinkParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseUpdateSinkParamsL( const TDisplaySinkParams& aParams ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseUpdateSinkParamsL()<"), RThread().Id().operator TUint())); + iNewParams = static_cast< const TDisplaySinkParamsNGA& >( aParams ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseUpdateSinkParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseDoUpdateParamsL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseDoUpdateParamsL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseDoUpdateParamsL()<"), RThread().Id().operator TUint())); + iBitmapTable[ EFirstBitmap ].iBuffer = iNewParams.iSurfaceBuffer1; + iBitmapTable[ ESecondBitmap ].iBuffer = iNewParams.iSurfaceBuffer2; + UpdateExpectedFrameSizeL(); + if( iNewParams.iFrameRateLimit != iFrameRateInterval ) + { + SetFrameRateLimit( iNewParams.iFrameRateLimit ); + ResetFrameRateLimitter(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseDoUpdateParamsL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseSetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseSetVideoFrameSizeL( const TSize& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSetVideoFrameSizeL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSetVideoFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseSizesMatch +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkNGA::BaseSizesMatch( const TSize& aSize) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSizesMatch()<"), RThread().Id().operator TUint())); + TBool sizesMatch( iExpectedFrameSize == aSize ); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSizesMatch()>"), RThread().Id().operator TUint())); + return sizesMatch; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BitmapEntry +// ----------------------------------------------------------------------------- +// +CDisplaySink::TBitmapEntry& CDisplaySinkNGA::BitmapEntry( TInt aIndex ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BitmapEntry(%d)<"), RThread().Id().operator TUint(), aIndex)); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BitmapEntry()>"), RThread().Id().operator TUint())); + return iBitmapTable[ aIndex ]; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseEmptyBufferL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseEmptyBufferL( TVtMMFDataBuffer& aVTMMFBuffer ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseEmptyBufferL()<"), RThread().Id().operator TUint())); + if ( BaseConvert( aVTMMFBuffer ) ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + if ( iVideoFrameQueue->IsStored() || !IsOkToSendFrame() ) + { + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + iSupplier->BufferEmptiedL( iBuffer ); + } + else + { + iVideoFrameQueue->Store( *iSupplier, static_cast(aVTMMFBuffer.GetMMFBuffer()), aVTMMFBuffer.GetFrameSize(), aVTMMFBuffer.Data()); + CleanupStack::PopAndDestroy(); // iBitmapCS.Signal(); + } + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseEmptyBufferL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseSetBitmapAvailable( TBitmapNo aBitmapNo ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseSetBitmapAvailable( TBitmapNo ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSetBitmapAvailable()<"), RThread().Id().operator TUint())); + if ( iVideoFrameQueue->IsStored() ) + { + if ( IsOkToSendFrame() ) + { + BaseConvert( iVideoFrameQueue->Buffer() ); + } + iVideoFrameQueue->Release(); + } + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseSetBitmapAvailable()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::BaseVideoFrameSizeChangedL( const TSize& ) +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::BaseVideoFrameSizeChangedL( const TSize& ) + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseVideoFrameSizeChangedL()<"), RThread().Id().operator TUint())); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::BaseVideoFrameSizeChangedL()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkNGA::NextFrame +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::NextFrame() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::NextFrame()<"), RThread().Id().operator TUint())); + iBitmapCS.Wait(); + if ( iVideoFrameQueue->IsStored() ) + { + if ( IsOkToSendFrame() ) + { + BaseConvert( iVideoFrameQueue->Buffer() ); + } + iVideoFrameQueue->Release(); + } + iBitmapCS.Signal(); + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::NextFrame()>"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkDP::UpdateExpectedFrameSizeL() +// ----------------------------------------------------------------------------- +// +void CDisplaySinkNGA::UpdateExpectedFrameSizeL() + { + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::UpdateExpectedFrameSizeL()<"), RThread().Id().operator TUint())); + iExpectedFrameSize = iNewParams.iFrameSize; + _IFDBG(PRINT(_L("VideoSource[%d]: CDisplaySinkNGA::UpdateExpectedFrameSizeL()>"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImage.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include "cvtimage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtImage::Type() const +// ----------------------------------------------------------------------------- +// +EXPORT_C CVtImage::TVtImageType CVtImage::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// CVtImage::DisplayModeToVtDisplayMode( TDisplayMode aMode ) +// ----------------------------------------------------------------------------- +// +CVtImage::TVtDisplayMode CVtImage::DisplayModeToVtDisplayMode( + TDisplayMode aMode ) + { + TVtDisplayMode mode; + + switch( aMode ) + { + case EColor4K: + mode = EVtColor4K; + break; + + case EColor64K: + mode = EVtColor64K; + break; + + case EColor16M: + mode = EVtColor16M; + break; + + case EColor16MU: + mode = EVtColor16MU; + break; + + case EColor16MA: + mode = EVtColor16MA; + break; + + default: + mode = EVtColorNone; + break; + } + + return mode; + } + +// ----------------------------------------------------------------------------- +// CVtImage::CVtImage( TVtImageType aType ) +// ----------------------------------------------------------------------------- +// +CVtImage::CVtImage( TVtImageType aType ) +: iType( aType ) + { + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageBitmap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageBitmap.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageBitmap.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::NewL( TInt aBitmapHandle ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageBitmap* CVtImageBitmap::NewL( TInt aBitmapHandle ) + { + CVtImageBitmap* self = new ( ELeave ) CVtImageBitmap(); + CleanupStack::PushL( self ); + self->ConstructL( aBitmapHandle ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::NewL( const TSize& aSize, TDisplayMode aDisplayMode ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageBitmap* CVtImageBitmap::NewL( + const TSize& aSize, + TDisplayMode aDisplayMode ) + { + CVtImageBitmap* self = new ( ELeave ) CVtImageBitmap(); + CleanupStack::PushL( self ); + self->ConstructL( aSize, aDisplayMode ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::~CVtImageBitmap() +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageBitmap::~CVtImageBitmap() + { + delete iBitmap; + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::ResizeL( const TSize& aSize ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageBitmap::ResizeL( const TSize& aSize ) + { + User::LeaveIfError( iBitmap->Resize( aSize ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::SetBitmapL( TInt aBitmapHandle ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageBitmap::SetBitmapL( TInt aBitmapHandle ) + { + delete iBitmap; + iBitmap = 0; + ConstructL( aBitmapHandle ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::Bitmap() const +// ----------------------------------------------------------------------------- +EXPORT_C CFbsBitmap& CVtImageBitmap::Bitmap() const + { + return *iBitmap; + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::NeedHeapLock() const +// ----------------------------------------------------------------------------- +TBool CVtImageBitmap::NeedHeapLock() const + { + return iBitmap->IsLargeBitmap(); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::DisplayMode() const +// ----------------------------------------------------------------------------- +CVtImage::TVtDisplayMode CVtImageBitmap::DisplayMode() const + { + return CVtImage::DisplayModeToVtDisplayMode( iBitmap->DisplayMode() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::Size() const +// ----------------------------------------------------------------------------- +TSize CVtImageBitmap::Size() const + { + return iBitmap->SizeInPixels(); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::BytesPerRow() const +// ----------------------------------------------------------------------------- +TInt CVtImageBitmap::BytesPerRow() const + { + return iBitmap->ScanLineLength( Size().iWidth, iBitmap->DisplayMode() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::DataAddress() const +// ----------------------------------------------------------------------------- +TUint32* CVtImageBitmap::DataAddress() const + { + return iBitmap->DataAddress(); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::LineAddress( TInt aLine ) const +// ----------------------------------------------------------------------------- +TUint32* CVtImageBitmap::LineAddress( TInt aLine ) const + { + if( aLine < 0 ) + { + aLine = 0; + } + else if( aLine > Size().iHeight - 1 ) + { + aLine = Size().iHeight - 1; + } + return reinterpret_cast< TUint32* >( + reinterpret_cast< TUint8* >( DataAddress() ) + BytesPerRow() * aLine ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::CVtImageBitmap() +// ----------------------------------------------------------------------------- +CVtImageBitmap::CVtImageBitmap() +: CVtImage( CVtImage::EVtImageBitmap ) + { + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::ConstructL( const TSize& aSize, TDisplayMode aDisplayMode ) +// ----------------------------------------------------------------------------- +void CVtImageBitmap::ConstructL( const TSize& aSize, TDisplayMode aDisplayMode ) + { + iBitmap = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap->Create( aSize, aDisplayMode ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageBitmap::ConstructL( TInt aBitmapHandle ) +// ----------------------------------------------------------------------------- +void CVtImageBitmap::ConstructL( TInt aBitmapHandle ) + { + iBitmap = new ( ELeave ) CFbsBitmap(); + User::LeaveIfError( iBitmap->Duplicate( aBitmapHandle ) ); + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageConverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageConverter.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1876 @@ +/* +* Copyright (c) 2004 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: YUV to bitmap and bitmap to YUV conversion routines for VT +* +*/ + + +// INCLUDE FILES + +#include +#include +#include "CVtImageConverter.h" + +// LOCAL CONSTANTS AND MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// Calculates average for two integer values +#define AVG( a, b ) ( ( a + b ) >> 1 ) + +// MODULE DATA STRUCTURES + +/** +* Holds data for one YUV pixel +* +* @lib VTImageConverter.lib +*/ +struct TVSYCrCb + { + public: + // Y data + TInt iY; + + // Cb (U) data + TInt iCb; + + // Cr (V) data + TInt iCr; + }; + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// RGBtoYCbCr( TVSYCrCb* aYuv, const TRgb& aColor ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint8 RGBtoYCbCr( TVSYCrCb* aYuv, const TRgb& aColor ) + { + const TInt YRedFactor = 19595; // 0.299 << 16 + const TInt YGreenFactor = 38470; // 0.587 << 16 + const TInt YBlueFactor = 7471; // 0.114 << 16 + const TInt CbRedFactor = 11056; // 0.1687 << 16 + const TInt CbGreenFactor = 21712; // 0.3313 << 16 + const TInt CrGreenFactor = 27440; // 0.4187 << 16 + const TInt CrBlueFactor = 5328; // 0.0813 << 16 + + TInt red = aColor.Red(); + TInt green = aColor.Green(); + TInt blue = aColor.Blue(); + + aYuv->iY = ( YRedFactor * red ) + + ( YGreenFactor * green ) + + ( YBlueFactor * blue ); + aYuv->iCb = - ( CbRedFactor * red ) - + ( CbGreenFactor * green ) + + ( blue << 15 ); + aYuv->iCr = ( red << 15 ) - + ( CrGreenFactor * green ) - + ( CrBlueFactor * blue ); + + aYuv->iY >>= 16; + aYuv->iCb >>= 16; + aYuv->iCr >>= 16; + + aYuv->iCb += 128; + aYuv->iCr += 128; + + return static_cast< TUint8 >( aYuv->iY ); + } + +// ----------------------------------------------------------------------------- +// VSReadColor4K( TAny*& aSource ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TRgb VSReadColor4K( TAny*& aSource ) + { + TUint16* s = static_cast< TUint16* >( aSource ); + TRgb rgb( TRgb::Color4K( *s++ ) ); + aSource = s; + return rgb; + } + +// ----------------------------------------------------------------------------- +// VSReadColor64K( TAny*& aSource ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TRgb VSReadColor64K( TAny*& aSource ) + { + TUint16* s = static_cast< TUint16* >( aSource ); + TRgb rgb( TRgb::Color64K( *s++ ) ); + aSource = s; + return rgb; + } + +// ----------------------------------------------------------------------------- +// VSReadColor16M( TAny*& aSource ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TRgb VSReadColor16M( TAny*& aSource ) + { + TUint8* s = static_cast< TUint8* >( aSource ); + TRgb rgb( s[ 2 ], s[ 1 ], s[ 0 ] ); + aSource = s + 3; + return rgb; + } + +// ----------------------------------------------------------------------------- +// VSReadColor16MU( TAny*& aSource ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TRgb VSReadColor16MU( TAny*& aSource ) + { + TUint32* s = static_cast< TUint32* >( aSource ); + TRgb rgb( TRgb::Color16MU( *s++ ) ); + aSource = s; + return rgb; + } + +// ----------------------------------------------------------------------------- +// VSReadColor16MA( TAny*& aSource ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TRgb VSReadColor16MA( TAny*& aSource ) + { + TUint32* s = static_cast< TUint32* >( aSource ); + TRgb rgb( TRgb::Color16MA( *s++ ) ); + aSource = s; + return rgb; + } + +// ============================ MEMBER FUNCTIONS =============================== + +/** +* +*/ +const TUint8 CVTYUVFbsBitmapConverter::COFF_TBL_4K[ 80 ]= + { + 0xe9,0x66,0x01,0x00, // KRedCrFactor + 0x1a,0x58,0x00,0x00, // KGreenCbFactor + 0xd2,0xb6,0x00,0x00, // KGreenCrFactor + 0xa2,0xc5,0x01,0x00, // KBlueCbFactor + + 0x00,0x00,0x00,0x00, // 4-bit + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, // 5 + 0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03, + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, // 10 + 0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f, // 15 + 0x0f,0x0f,0x0f,0x0f + }; + +/** +* +*/ +const TUint8 CVTYUVFbsBitmapConverter::COFF_TBL_64K[ 220 ]= + { + 0xe9,0x66,0x01,0x00, // KRedCrFactor + 0x1a,0x58,0x00,0x00, // KGreenCbFactor + 0xd2,0xb6,0x00,0x00, // KGreenCrFactor + 0xa2,0xc5,0x01,0x00, // KBlueCbFactor + + 0x00,0x00,0x00,0x00, // 5-bit + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03, + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + 0x1f,0x1f,0x1f,0x1f, + + 0x00,0x00,0x00,0x00, // 6-bit + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03, + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + 0x20,0x21,0x22,0x23, + 0x24,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x2b, + 0x2c,0x2d,0x2e,0x2f, + 0x30,0x31,0x32,0x33, + 0x34,0x35,0x36,0x37, + 0x38,0x39,0x3a,0x3b, + 0x3c,0x3d,0x3e,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f + }; + +/** +* +*/ +const TUint8 CVTYUVFbsBitmapConverter::COFF_TBL_16M[ 528 ] = + { + 0xe9,0x66,0x01,0x00, // KRedCrFactor + 0x1a,0x58,0x00,0x00, // KGreenCbFactor + 0xd2,0xb6,0x00,0x00, // KGreenCrFactor + 0xa2,0xc5,0x01,0x00, // KBlueCbFactor + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, + + 0x00,0x01,0x02,0x03, // 8-bit + 0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b, + 0x0c,0x0d,0x0e,0x0f, + + 0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b, + 0x1c,0x1d,0x1e,0x1f, + + 0x20,0x21,0x22,0x23, + 0x24,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x2b, + 0x2c,0x2d,0x2e,0x2f, + + 0x30,0x31,0x32,0x33, + 0x34,0x35,0x36,0x37, + 0x38,0x39,0x3a,0x3b, + 0x3c,0x3d,0x3e,0x3f, + + 0x40,0x41,0x42,0x43, + 0x44,0x45,0x46,0x47, + 0x48,0x49,0x4a,0x4b, + 0x4c,0x4d,0x4e,0x4f, + + 0x50,0x51,0x52,0x53, + 0x54,0x55,0x56,0x57, + 0x58,0x59,0x5a,0x5b, + 0x5c,0x5d,0x5e,0x5f, + + 0x60,0x61,0x62,0x63, + 0x64,0x65,0x66,0x67, + 0x68,0x69,0x6a,0x6b, + 0x6c,0x6d,0x6e,0x6f, + + 0x70,0x71,0x72,0x73, + 0x74,0x75,0x76,0x77, + 0x78,0x79,0x7a,0x7b, + 0x7c,0x7d,0x7e,0x7f, + + 0x80,0x81,0x82,0x83, + 0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x8b, + 0x8c,0x8d,0x8e,0x8f, + + 0x90,0x91,0x92,0x93, + 0x94,0x95,0x96,0x97, + 0x98,0x99,0x9a,0x9b, + 0x9c,0x9d,0x9e,0x9f, + + 0xa0,0xa1,0xa2,0xa3, + 0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xab, + 0xac,0xad,0xae,0xaf, + + 0xb0,0xb1,0xb2,0xb3, + 0xb4,0xb5,0xb6,0xb7, + 0xb8,0xb9,0xba,0xbb, + 0xbc,0xbd,0xbe,0xbf, + + 0xc0,0xc1,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7, + 0xc8,0xc9,0xca,0xcb, + 0xcc,0xcd,0xce,0xcf, + + 0xd0,0xd1,0xd2,0xd3, + 0xd4,0xd5,0xd6,0xd7, + 0xd8,0xd9,0xda,0xdb, + 0xdc,0xdd,0xde,0xdf, + + 0xe0,0xe1,0xe2,0xe3, + 0xe4,0xe5,0xe6,0xe7, + 0xe8,0xe9,0xea,0xeb, + 0xec,0xed,0xee,0xef, + + 0xf0,0xf1,0xf2,0xf3, + 0xf4,0xf5,0xf6,0xf7, + 0xf8,0xf9,0xfa,0xfb, + 0xfc,0xfd,0xfe,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff + }; + +// ============================ CVTYUVFbsBitmapConverter ======================= + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::CVTYUVFbsBitmapConverter( +// const TSize& aSourceSize ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVTYUVFbsBitmapConverter::CVTYUVFbsBitmapConverter( const TSize& aSourceSize ) +: iSourceSize( aSourceSize ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::CVTYUVFbsBitmapConverter() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::CVTYUVFbsBitmapConverter() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter() >>"), RThread().Id().operator TUint())); + delete iDestination; + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::~CVTYUVFbsBitmapConverter() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::ProcessL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVFbsBitmapConverter::ProcessL() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ProcessL() >>"), RThread().Id().operator TUint())); + switch( iDestination->DisplayMode() ) + { + case EColor4K: + DoProcess4K(); + break; + + case EColor64K: + DoProcess64K(); + break; + + case EColor16M: + DoProcess16M(); + break; + + case EColor16MU: + case EColor16MA: // 16MU and 16MA are handled equally + DoProcess16MU16MA(); + break; + + default: + User::Leave( KErrNotSupported ); + break; + }; + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ProcessL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::SetDestinationL( +// const CFbsBitmap& aDestinationBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVFbsBitmapConverter::SetDestinationL( + const CFbsBitmap& aDestinationBitmap ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SetDestinationL() >>"), RThread().Id().operator TUint())); + SetDestinationL( aDestinationBitmap.Handle() ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SetDestinationL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::SetDestinationL( TInt aHandle ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVFbsBitmapConverter::SetDestinationL( TInt aHandle ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SetDestinationL() >>"), RThread().Id().operator TUint())); + ReConstructL( aHandle ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SetDestinationL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::ConstructL( TInt aBitmapHandle ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVFbsBitmapConverter::ConstructL( TInt aBitmapHandle ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ConstructL() >>"), RThread().Id().operator TUint())); + iDestination = new (ELeave) CFbsBitmap(); + ReConstructL( aBitmapHandle ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::ReConstructL( TInt aBitmapHandle ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVFbsBitmapConverter::ReConstructL( TInt aBitmapHandle ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ReConstructL() >>"), RThread().Id().operator TUint())); + User::LeaveIfError( iDestination->Duplicate( aBitmapHandle ) ); + // make sure that destination bitmap's displaymode is supported + if( ( iDestination->DisplayMode() != EColor4K ) && + ( iDestination->DisplayMode() != EColor64K ) && + ( iDestination->DisplayMode() != EColor16M ) && + ( iDestination->DisplayMode() != EColor16MU ) && + ( iDestination->DisplayMode() != EColor16MA ) + ) + { + User::Leave( KErrNotSupported ); + } + iDestinationSize = iDestination->SizeInPixels(); + SizeUpdateL(); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::ReConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVFbsBitmapConverter::SizeUpdateL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVFbsBitmapConverter::SizeUpdateL() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SizeUpdate() >>"), RThread().Id().operator TUint())); + if( ( SourceSize().iWidth < 2 ) || ( DestinationSize().iWidth < 2 ) ) + { + User::Leave( KErrNotSupported ); // !!!! + } + + iVSkipReal = TReal32( SourceSize().iHeight ) / + TReal32( DestinationSize().iHeight ); + iHSkipReal = TReal32( SourceSize().iWidth ) / + TReal32( DestinationSize().iWidth ); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVFbsBitmapConverter::SizeUpdate() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVTYUVPlanarFbsBitmapConverter =============================== + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::SetSourceSizeL( const TSize& aSize ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVPlanarFbsBitmapConverter::SetSourceSizeL( + const TSize& aSize ) + { + iSourceSize = aSize; + SizeUpdateL(); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::SetSourceL( +// const TSize& aSize, const TDesC8& aSourceData ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVPlanarFbsBitmapConverter::SetSourceL( + const TSize& aSize, + const TDesC8& aSourceData ) + { + iSourceSize = aSize; + SetSourceL( aSourceData ); + SizeUpdateL(); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::CVTYUVPlanarFbsBitmapConverter( +// const TSize& aSourceSize ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVTYUVPlanarFbsBitmapConverter::CVTYUVPlanarFbsBitmapConverter( + const TSize& aSourceSize ) +: CVTYUVFbsBitmapConverter( aSourceSize ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::CVTYUVPlanarFbsBitmapConverter() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::CVTYUVPlanarFbsBitmapConverter() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess4K() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess4K() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4K() >>"), RThread().Id().operator TUint())); + + // Vertical scaling needed? + if( ( iVSkipReal == 1 ) && ( iHSkipReal == 1 ) ) + { + // NO: Use really fast conversion + DoProcess4KNoScale(); + } + else + { + + // YES: Use slower conversion method + const TUint8* y = iY; + const TUint8* u = iU; + const TUint8* v = iV; + const TUint8* clip = COFF_TBL_4K + 40; + + TInt height = DestinationSize().iHeight; + TInt width = DestinationSize().iWidth; + + iDestination->LockHeap(); + TUint32* d = iDestination->DataAddress(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4K(): [%d, %d] for >>"), RThread().Id().operator TUint(), width, height )); + + for( TInt h = 0; h < height; h++ ) + { + TInt sourceY = TInt( TReal32( h ) * iVSkipReal ); + TInt hTimesW = sourceY * SourceSize().iWidth; + TInt uvIdx = ( sourceY >> 1 ) * ( SourceSize().iWidth >> 1 ); + for( TInt w = 0; w < width; w++ ) + { + TInt sourceX = TInt( TReal32( w ) * iHSkipReal ); + TInt uvIdxW( uvIdx + ( sourceX >> 1 ) ); + + TInt ay = y[ hTimesW + sourceX ]; + TInt cb = u[ uvIdxW ] - 128; + TInt cr = v[ uvIdxW ] - 128; + + TInt greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + TInt red = ay + cr; + TInt green = ay - greenCbCr; + TInt blue = ay + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + TUint32 s = green | ( red << 4 ); + s = blue | ( s << 4 ); + + w++; + sourceX = TInt( TReal32( w ) * iHSkipReal ); + uvIdxW = uvIdx + ( sourceX >> 1 ); + + ay = y[ hTimesW + sourceX ]; + cb = u[ uvIdxW ] - 128; + cr = v[ uvIdxW ] - 128; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + red = ay + cr; + green = ay - greenCbCr; + blue = ay + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + s |= ( ( green | ( red << 4 ) ) << 4 | blue ) << 16; + + *d++ = s; + } + } + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4K(): for <<"), RThread().Id().operator TUint())); + + iDestination->UnlockHeap(); + } + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4K() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess4KNoScale() +// When vertical and horizontal scaling is not required we can do two vertical +// lines in parallel in that case we need to calculate Cr and Cb values only +// once for four pixels. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess4KNoScale() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4KNoScale() >>"), RThread().Id().operator TUint())); + + TInt height( SourceSize().iHeight >> 1 ); + TInt width( SourceSize().iWidth ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( iY ); + const TUint32* u = reinterpret_cast< const TUint32* >( iU ); + const TUint32* v = reinterpret_cast< const TUint32* >( iV ); + + iDestination->LockHeap(); + + TUint32 uintsPerDestRow = CFbsBitmap::ScanLineLength + ( DestinationSize().iWidth, EColor4K ) >> 2; + + TUint32* d1 = iDestination->DataAddress(); + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TInt32 red; + TInt32 green; + TInt32 blue; + TUint32 r1; + const TUint8* clip = COFF_TBL_4K + 40; + + for( TInt y = 0; y < height; y++ ) + { + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 = green | ( red << 4 ); + r1 = blue | ( r1 << 4 ); + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 |= ( ( green | ( red << 4 ) ) << 4 | blue ) << 16; + + d1[ uintsPerDestRow ] = r1; + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 = green | ( red << 4 ); + r1 = blue | ( r1 << 4 ); + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 4 ]; + green = clip[ green >> 4 ]; + blue = clip[ blue >> 4 ]; + + // RGB_444 + r1 |= ( ( green | ( red << 4 ) ) << 4 | blue ) << 16; + + *d1++ = r1; + } + } + } + + y1 += ( width << 1 ); + d1 += uintsPerDestRow; + } + + iDestination->UnlockHeap(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess4KNoScale() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess64K() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess64K() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64K() >>"), RThread().Id().operator TUint())); + + // Vertical scaling needed? + if( ( iVSkipReal == 1 ) && ( iHSkipReal == 1 ) ) // !!! + { + // NO: Use really fast conversion + DoProcess64KNoScale(); + return; + } + else + { + // YES: Use slower conversion method + const TUint8* y = iY; + const TUint8* u = iU; + const TUint8* v = iV; + const TUint8* clip = COFF_TBL_64K + 40; + + TInt height = DestinationSize().iHeight; + TInt width = DestinationSize().iWidth; + + iDestination->LockHeap(); + TUint32* d = iDestination->DataAddress(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64K(): [%d, %d] for >>"), RThread().Id().operator TUint(), width, height )); + + for( TInt h = 0; h < height; h++ ) + { + TInt sourceY = TInt( TReal32( h ) * iVSkipReal ); + TInt hTimesW = sourceY * SourceSize().iWidth; + TInt uvIdx = ( sourceY >> 1 ) * ( SourceSize().iWidth >> 1 ); + for( TInt w = 0; w < width; w++ ) + { + TInt sourceX = TInt( TReal32( w ) * iHSkipReal ); + + TInt uvIdxW( uvIdx + ( sourceX >> 1 ) ); + + TInt ay = y[ hTimesW + sourceX ]; + TInt cb = u[ uvIdxW ] - 128; + TInt cr = v[ uvIdxW ] - 128; + + TInt greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) - + 0x1200000 + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + TInt red = ay + cr; + TInt green = ay - greenCbCr; + TInt blue = ay + cb; + + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + // RGB_565 + TUint32 s = green | ( red << 6 ); + s = blue | ( s << 5 ); + + w++; + sourceX = TInt( TReal32( w ) * iHSkipReal ); + + uvIdxW = uvIdx + ( sourceX >> 1 ); + + ay = y[ hTimesW + sourceX ]; + cb = u[ uvIdxW ] - 128; + cr = v[ uvIdxW ] - 128; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) - + 0x1200000 + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + red = ay + cr; + green = ay - greenCbCr; + blue = ay + cb; + + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + s |= ( ( green | ( red << 6 ) ) << 5 | blue ) << 16; + + *d++ = s; + } + } + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64K(): for <<"), RThread().Id().operator TUint())); + + iDestination->UnlockHeap(); + } + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64K() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess64KNoScale() +// Source YUV image must be even divisible by 8. +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess64KNoScale() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64KNoScale() >>"), RThread().Id().operator TUint())); + + TInt height( SourceSize().iHeight >> 1 ); + TInt width( SourceSize().iWidth ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( iY ); + const TUint32* u = reinterpret_cast< const TUint32* >( iU ); + const TUint32* v = reinterpret_cast< const TUint32* >( iV ); + + iDestination->LockHeap(); + + TUint32 uintsPerDestRow = CFbsBitmap::ScanLineLength + ( DestinationSize().iWidth, EColor64K ) >> 2; + + TUint32* d1 = iDestination->DataAddress(); + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TInt32 red; + TInt32 green; + TInt32 blue; + TUint32 r1; + const TUint8* clip = COFF_TBL_64K + 40; + + for( TInt y = 0; y < height; y++ ) + { + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 32 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 36 ) - + 0x1200000 + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 40 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 28 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + // RGB_565 + r1 = green | ( red << 6 ); + r1 = blue | ( r1 << 5 ); + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + // clear lowest 3 bits + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + // RGB_565 + r1 |= ( ( green | ( red << 6 ) ) << 5 | blue ) << 16; + + d1[ uintsPerDestRow ] = r1; + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + // RGB_565 + r1 = green | ( red << 6 ); + r1 = blue | ( r1 << 5 ); + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + red = yy + cr; + green = yy - greenCbCr; + blue = yy + cb; + + red = clip[ red >> 3 ]; + green = clip[ green >> 2 ]; + blue = clip[ blue >> 3 ]; + + // RGB_565 + r1 |= ( ( green | ( red << 6 ) ) << 5 | blue ) << 16; + + *d1++ = r1; + } + } + } + + y1 += ( width << 1 ); + d1 += uintsPerDestRow; + } + + iDestination->UnlockHeap(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess64KNoScale() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess16M() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess16M() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16M() >>"), RThread().Id().operator TUint())); + + // Vertical scaling needed? + if( ( iVSkipReal == 1 ) && ( iHSkipReal == 1 ) ) + { + // NO: Use really fast conversion + DoProcess16MNoScale(); + } + else + { + // YES: Use slower conversion method + + // YES: Use slower conversion method + const TUint8* y = iY; + const TUint8* u = iU; + const TUint8* v = iV; + const TUint8* clip = COFF_TBL_16M + 144; + + TInt height = DestinationSize().iHeight; + TInt width = DestinationSize().iWidth; + + iDestination->LockHeap(); + + TUint8* d = reinterpret_cast( iDestination->DataAddress() ); + TUint32 dPitch = iDestination->ScanLineLength( width, iDestination->DisplayMode() ); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16M(): [%d, %d] for >>"), RThread().Id().operator TUint(), width, height )); + + for( TInt h = 0; h < height; h++ ) + { + TInt sourceY = TInt( TReal32( h ) * iVSkipReal ); + TInt hTimesW = sourceY * SourceSize().iWidth; + TInt uvIdx = ( sourceY >> 1 ) * ( SourceSize().iWidth >> 1 ); + TUint8* dTemp = d; + for( TInt w = 0; w < width; w++ ) + { + TInt sourceX = TInt( TReal32( w ) * iHSkipReal ); + + TInt uvIdxW( uvIdx + ( sourceX >> 1 ) ); + + TInt ay = y[ hTimesW + sourceX ]; + TInt cb = u[ uvIdxW ] - 128; + TInt cr = v[ uvIdxW ] - 128; + + TInt greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 136 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 140 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 144 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 132 ) + ) >> 16; + + *dTemp++ = clip[ ay + cb ]; + *dTemp++ = clip[ ay - greenCbCr ]; + *dTemp++ = clip[ ay + cr ]; + } + d += dPitch; + } + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16M(): for <<"), RThread().Id().operator TUint())); + + iDestination->UnlockHeap(); + } + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16M() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess16MNoScale() +// When vertical and horizontal scaling is not required we can do two vertical +// lines in parallel in that case we need to calculate Cr and Cb values only +// once for four pixels. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess16MNoScale() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MNoScale() >>"), RThread().Id().operator TUint())); + + TInt height( SourceSize().iHeight >> 1 ); + TInt width( SourceSize().iWidth ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( iY ); + const TUint32* u = reinterpret_cast< const TUint32* >( iU ); + const TUint32* v = reinterpret_cast< const TUint32* >( iV ); + + iDestination->LockHeap(); + + TUint32 bytesPerDestRow = CFbsBitmap::ScanLineLength + ( DestinationSize().iWidth, EColor16M ); + + TUint8* d1 = reinterpret_cast< TUint8* >( iDestination->DataAddress() ); + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TInt32 idx1; + TInt32 idx2; + const TUint8* clip = COFF_TBL_16M + 144; + + for( TInt y = 0; y < height; y++ ) + { + idx1 = 0; + idx2 = bytesPerDestRow; + + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 136 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 140 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 144 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 132 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + d1[ idx2++ ] = clip[ yy + cb ]; + d1[ idx2++ ] = clip[ yy - greenCbCr ]; + d1[ idx2++ ] = clip[ yy + cr ]; + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + d1[ idx2++ ] = clip[ yy + cb ]; + d1[ idx2++ ] = clip[ yy - greenCbCr ]; + d1[ idx2++ ] = clip[ yy + cr ]; + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + d1[ idx1++ ] = clip[ yy + cb ]; + d1[ idx1++ ] = clip[ yy - greenCbCr ]; + d1[ idx1++ ] = clip[ yy + cr ]; + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + d1[ idx1++ ] = clip[ yy + cb ]; + d1[ idx1++ ] = clip[ yy - greenCbCr ]; + d1[ idx1++ ] = clip[ yy + cr ]; + } + } + } + + y1 += ( width << 1 ); + d1 += bytesPerDestRow * 2; + } + + iDestination->UnlockHeap(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MNoScale() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA() >>"), RThread().Id().operator TUint())); + + // Vertical scaling needed? + if( ( iVSkipReal == 1 ) && ( iHSkipReal == 1 ) ) + { + // NO: Use really fast conversion + DoProcess16MU16MANoScale(); + } + else + { + // YES: Use slower conversion method + const TUint8* y = iY; + const TUint8* u = iU; + const TUint8* v = iV; + const TUint8* clip = COFF_TBL_16M + 144; + + TInt height = DestinationSize().iHeight; + TInt width = DestinationSize().iWidth; + + iDestination->LockHeap(); + TUint32* d = iDestination->DataAddress(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA(): [%d, %d] for >>"), RThread().Id().operator TUint(), width, height )); + + for( TInt h = 0; h < height; h++ ) + { + TInt sourceY = TInt( TReal32( h ) * iVSkipReal ); + TInt hTimesW = sourceY * SourceSize().iWidth; + TInt uvIdx = ( sourceY >> 1 ) * ( SourceSize().iWidth >> 1 ); + for( TInt w = 0; w < width; w++ ) + { + TInt sourceX = TInt( TReal32( w ) * iHSkipReal ); + + TInt uvIdxW( uvIdx + ( sourceX >> 1 ) ); + + TInt ay = y[ hTimesW + sourceX ]; + TInt cb = u[ uvIdxW ] - 128; + TInt cr = v[ uvIdxW ] - 128; + + TInt greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 136 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 140 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 144 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 132 ) + ) >> 16; + + + // 0xffBBGG + TUint32 p = 0xff0000 | + ( clip[ ay + cr ] << 8 ) | clip[ ay - greenCbCr ]; + // 0xffBBGGRR + *d++ = clip[ ay + cb ] | ( p << 8 ); + } + } + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA(): for <<"), RThread().Id().operator TUint())); + + iDestination->UnlockHeap(); + } + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MA() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MANoScale() +// When vertical and horizontal scaling is not required we can do two vertical +// lines in parallel in that case we need to calculate Cr and Cb values only +// once for four pixels. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MANoScale() + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MANoScale() >>"), RThread().Id().operator TUint())); + + TInt height( SourceSize().iHeight >> 1 ); + TInt width( SourceSize().iWidth ); + + const TUint32* y1 = reinterpret_cast< const TUint32* >( iY ); + const TUint32* u = reinterpret_cast< const TUint32* >( iU ); + const TUint32* v = reinterpret_cast< const TUint32* >( iV ); + + iDestination->LockHeap(); + + TUint32 uintsPerDestRow = CFbsBitmap::ScanLineLength + ( DestinationSize().iWidth, EColor16MU ) >> 2; + + TUint32* d1 = iDestination->DataAddress(); + + TUint32 ywidth = width >> 2; + + width >>= 3; + + TInt32 cb; + TInt32 cr; + TInt32 greenCbCr; + TInt32 yy; + TUint32 p; + const TUint8* clip = COFF_TBL_16M + 144; + + for( TInt y = 0; y < height; y++ ) + { + for( TInt x = 0; x < width; x++ ) + { + TUint32 u1 = *u++; + TUint32 v1 = *v++; + + for( TInt c2 = 0; c2 < 2; c2++ ) + { + TUint32 yy2 = y1[ ywidth ]; + TUint32 yy1 = *y1++; + + for( TInt c = 0; c < 2; c++ ) + { + cb = TInt32( u1 & 0xff ) - 128; + u1 >>= 8; + cr = TInt32( v1 & 0xff ) - 128; + v1 >>= 8; + + greenCbCr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 136 ) + + cb * *reinterpret_cast< const TInt32* >( clip - 140 ) + ) >> 16; + cr = + ( + cr * *reinterpret_cast< const TInt32* >( clip - 144 ) + ) >> 16; + cb = + ( + cb * *reinterpret_cast< const TInt32* >( clip - 132 ) + ) >> 16; + + // lower left + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + d1[ uintsPerDestRow ] = clip[ yy + cb ] | ( p << 8 ); + + // lower right + yy = ( yy2 & 0xff ); + yy2 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + d1[ uintsPerDestRow + 1 ] = clip[ yy + cb ] | ( p << 8 ); + + // upper left + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + *d1++ = clip[ yy + cb ] | ( p << 8 ); + + // upper right + yy = ( yy1 & 0xff ); + yy1 >>= 8; + + // 0xffBBGG + p = 0xff0000 | + ( clip[ yy + cr ] << 8 ) | clip[ yy - greenCbCr ]; + // 0xffBBGGRR + *d1++ = clip[ yy + cb ] | ( p << 8 ); + } + } + } + + y1 += ( width << 1 ); + d1 += uintsPerDestRow; + } + + iDestination->UnlockHeap(); + + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYUVPlanarFbsBitmapConverter::DoProcess16MU16MANoScale() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVTYUVPlanarFbsBitmapConverter::SetSourceL( const TDesC8& aSourceData ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVTYUVPlanarFbsBitmapConverter::SetSourceL( + const TDesC8& aSourceData ) + { + // make sure dimension and buffer size match + if( aSourceData.Length() != + ( ( SourceSize().iWidth * SourceSize().iHeight * 12 ) / 8 ) ) + { + User::Leave( KErrArgument ); + } + SetYUVPtrs( aSourceData ); + } + +// ============================ CVTIYUVFbsBitmapConverter =============================== + +// ----------------------------------------------------------------------------- +// CVTIYUVFbsBitmapConverter::NewL( const TSize& aSourceSize, +// const CFbsBitmap& aDestinationBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVTIYUVFbsBitmapConverter* CVTIYUVFbsBitmapConverter::NewL( + const TSize& aSourceSize, + const CFbsBitmap& aDestinationBitmap ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::NewL() >>"), RThread().Id().operator TUint())); + CVTIYUVFbsBitmapConverter* self = NewL( + aSourceSize, aDestinationBitmap.Handle() ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTIYUVFbsBitmapConverter::NewL( const TSize& aSourceSize, +// TInt aBitmapHandle ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVTIYUVFbsBitmapConverter* CVTIYUVFbsBitmapConverter::NewL( + const TSize& aSourceSize, + TInt aBitmapHandle ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::NewL() >>"), RThread().Id().operator TUint())); + CVTIYUVFbsBitmapConverter* self = new (ELeave) + CVTIYUVFbsBitmapConverter( aSourceSize ); + CleanupStack::PushL( self ); + self->ConstructL( aBitmapHandle ); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTIYUVFbsBitmapConverter::SetYUVPtrs( const TDesC8& aSourceData ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTIYUVFbsBitmapConverter::SetYUVPtrs( const TDesC8& aSourceData ) + { + TInt ySize = SourceSize().iWidth * SourceSize().iHeight; + TInt ySizeDiv4 = ( ySize >> 2 ); + iY = aSourceData.Mid( 0, ySize ).Ptr(); + iU = aSourceData.Mid( ySize, ySizeDiv4 ).Ptr(); + iV = aSourceData.Mid( ySize + ySizeDiv4, ySizeDiv4 ).Ptr(); + } + +// ----------------------------------------------------------------------------- +// CVTIYUVFbsBitmapConverter::CVTIYUVFbsBitmapConverter( const TSize& +// aSourceSize ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVTIYUVFbsBitmapConverter::CVTIYUVFbsBitmapConverter( const TSize& aSourceSize ) +: CVTYUVPlanarFbsBitmapConverter( aSourceSize ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::CVTIYUVFbsBitmapConverter() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTIYUVFbsBitmapConverter::CVTIYUVFbsBitmapConverter() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVTYV12FbsBitmapConverter =============================== + +// ----------------------------------------------------------------------------- +// CVTYV12FbsBitmapConverter::NewL( const TSize& aSourceSize, +// const CFbsBitmap& aDestinationBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVTYV12FbsBitmapConverter* CVTYV12FbsBitmapConverter::NewL( + const TSize& aSourceSize, + const CFbsBitmap& aDestinationBitmap ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::NewL() >>"), RThread().Id().operator TUint())); + CVTYV12FbsBitmapConverter* self = NewL( + aSourceSize, aDestinationBitmap.Handle() ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTYV12FbsBitmapConverter::NewL( const TSize& aSourceSize, +// TInt aBitmapHandle ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVTYV12FbsBitmapConverter* CVTYV12FbsBitmapConverter::NewL( + const TSize& aSourceSize, + TInt aBitmapHandle ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::NewL() >>"), RThread().Id().operator TUint())); + CVTYV12FbsBitmapConverter* self = new (ELeave) + CVTYV12FbsBitmapConverter( aSourceSize ); + CleanupStack::PushL( self ); + self->ConstructL( aBitmapHandle ); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTYV12FbsBitmapConverter::SetYUVPtrs( const TDesC8& aSourceData ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVTYV12FbsBitmapConverter::SetYUVPtrs( const TDesC8& aSourceData ) + { + TInt ySize = SourceSize().iWidth * SourceSize().iHeight; + TInt ySizeDiv4 = ( ySize >> 2 ); + iY = aSourceData.Mid( 0, ySize ).Ptr(); + iV = aSourceData.Mid( ySize, ySizeDiv4 ).Ptr(); + iU = aSourceData.Mid( ySize + ySizeDiv4, ySizeDiv4 ).Ptr(); + } + +// ----------------------------------------------------------------------------- +// CVTYV12FbsBitmapConverter::CVTYV12FbsBitmapConverter( +// const TSize& aSourceSize ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVTYV12FbsBitmapConverter::CVTYV12FbsBitmapConverter( const TSize& aSourceSize ) +: CVTYUVPlanarFbsBitmapConverter( aSourceSize ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::CVTYV12FbsBitmapConverter() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVTYV12FbsBitmapConverter::CVTYV12FbsBitmapConverter() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVSFbsBitmapIYUVConverter =============================== + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::CVSFbsBitmapIYUVConverter() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVSFbsBitmapIYUVConverter::CVSFbsBitmapIYUVConverter() + { + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::NewL( const CFbsBitmap& aBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSFbsBitmapIYUVConverter* CVSFbsBitmapIYUVConverter::NewL( + const CFbsBitmap& aBitmap ) + { + CVSFbsBitmapIYUVConverter* self = new (ELeave) CVSFbsBitmapIYUVConverter(); + CleanupStack::PushL( self ); + self->ConstructL( aBitmap ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::~CVSFbsBitmapIYUVConverter() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSFbsBitmapIYUVConverter::~CVSFbsBitmapIYUVConverter() + { + delete iSource; + delete iYUVData; + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::SetSourceL( const CFbsBitmap& aBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVSFbsBitmapIYUVConverter::SetSourceL( const CFbsBitmap& aBitmap ) + { + ReConstructL( aBitmap ); + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::ProcessL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CVSFbsBitmapIYUVConverter::ProcessL() + { + switch( iSource->DisplayMode() ) + { + case EColor4K: + DoProcess( VSReadColor4K ); + break; + + case EColor64K: + DoProcess( VSReadColor64K ); + break; + + case EColor16M: + DoProcess( VSReadColor16M ); + break; + + case EColor16MU: + DoProcess( VSReadColor16MU ); + break; + + case EColor16MA: + DoProcess( VSReadColor16MA ); + break; + + default: + User::Leave( KErrNotSupported ); + break; + }; + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::YUVData() const +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C TPtrC8 CVSFbsBitmapIYUVConverter::YUVData() const + { + return *iYUVData; + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::ConstructL( const CFbsBitmap& aBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVSFbsBitmapIYUVConverter::ConstructL( const CFbsBitmap& aBitmap ) + { + iSource = new (ELeave) CFbsBitmap(); + ReConstructL( aBitmap ); + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::ReConstructL( const CFbsBitmap& aBitmap ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVSFbsBitmapIYUVConverter::ReConstructL( const CFbsBitmap& aBitmap ) + { + User::LeaveIfError( iSource->Duplicate( aBitmap.Handle() ) ); + + // make sure that source bitmap's displaymode is supported + if( ( iSource->DisplayMode() != EColor4K ) && + ( iSource->DisplayMode() != EColor64K ) && + ( iSource->DisplayMode() != EColor16M ) && + ( iSource->DisplayMode() != EColor16MU ) && + ( iSource->DisplayMode() != EColor16MA ) ) + { + User::Leave( KErrNotSupported ); + } + + if( !iYUVData || !( iSize == iSource->SizeInPixels() ) ) + { + iSize = iSource->SizeInPixels(); + delete iYUVData; iYUVData = 0; + TInt ySize = iSize.iWidth * iSize.iHeight; + iYUVData = HBufC8::NewMaxL( ySize + ( ySize >> 1 ) ); + iY.Set( iYUVData->Des().Mid( 0, ySize ) ); + iU.Set( iYUVData->Des().Mid( ySize, ySize >> 2 ) ); + iV.Set( iYUVData->Des().Mid( ySize + ( ySize >> 2 ), ySize >> 2 ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVSFbsBitmapIYUVConverter::DoProcess( TVSColorReadFunc aReadFunction ) +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVSFbsBitmapIYUVConverter::DoProcess( TVSColorReadFunc aReadFunction ) + { + TUint8* pY = const_cast( iY.Ptr() ); + TUint8* pU = const_cast( iU.Ptr() ); + TUint8* pV = const_cast( iV.Ptr() ); + TVSYCrCb yuv1, yuv2; + + iSource->LockHeap(); + TAny* s = iSource->DataAddress(); + for( TInt h = 0; h < iSize.iHeight; h++ ) + { + if( h&1 ) + { + // Note! width must be even divisible by 2 + for( TInt w = 0; w < iSize.iWidth >> 1; w++ ) + { + *pY++ = RGBtoYCbCr( &yuv1, aReadFunction( s ) ); + *pY++ = RGBtoYCbCr( &yuv2, aReadFunction( s ) ); + *pU++ = static_cast( AVG( yuv1.iCb, yuv2.iCb ) ); + *pV++ = static_cast( AVG( yuv1.iCr, yuv2.iCr ) ); + } + } + else + { + // Note! width must be even divisible by 2 + for( TInt w = 0; w < iSize.iWidth >> 1; w++ ) + { + *pY++ = RGBtoYCbCr( &yuv1, aReadFunction( s ) ); + *pY++ = RGBtoYCbCr( &yuv2, aReadFunction( s ) ); + *pU++ = static_cast( + AVG( *pU, AVG( yuv1.iCb, yuv2.iCb ) ) ); + *pV++ = static_cast( + AVG( *pV, AVG( yuv1.iCr, yuv2.iCr ) ) ); + } + // if even row -> decrease pU and pV, we will calculate average for + // those on odd rows + pU -= ( iSize.iWidth >> 1 ); + pV -= ( iSize.iWidth >> 1 ); + } + } + iSource->UnlockHeap(); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageIYUV.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageIYUV.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,294 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageIYUV.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::NewL( TInt aBitmapHandle ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageIYUV* CVtImageIYUV::NewL( const TSize& aSize ) + { + CVtImageIYUV* self = new ( ELeave ) CVtImageIYUV( aSize ); + CleanupStack::PushL( self ); + self->ConstructL( 0 ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::NewL( const TSize& aSize, TDisplayMode aDisplayMode, +// const TDesC8& aImage ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageIYUV* CVtImageIYUV::NewL( + const TSize& aSize, + const TDesC8& aImage ) + { + CVtImageIYUV* self = new ( ELeave ) CVtImageIYUV( aSize ); + CleanupStack::PushL( self ); + self->ConstructL( &aImage ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::NewL( const TSize& aSize, TDisplayMode aDisplayMode, +// TPtr8& aImage ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageIYUV* CVtImageIYUV::NewL( + const TSize& aSize, + TPtr8& aImage ) + { + CVtImageIYUV* self = new ( ELeave ) CVtImageIYUV( aSize ); + CleanupStack::PushL( self ); + self->ValidateSizeL( aSize ); + self->SetImageL( aImage ); // No constructor call! + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::~CVtImageIYUV() +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageIYUV::~CVtImageIYUV() + { + delete iImage; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::SetImageL( const TDesC8& aImage ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageIYUV::SetImageL( const TDesC8& aImage ) + { + CheckDescriptorSizeL( aImage ); + if( !iImage ) + { + ConstructL( &aImage ); + } + else + { + *iImage = aImage; + } + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::SetImageL( TPtr8& aImage ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageIYUV::SetImageL( TPtr8& aImage ) + { + CheckDescriptorSizeL( aImage ); + delete iImage; iImage = 0; + iPtrImage.Set( aImage ); + SetYUVPointers(); + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::Image() const +// ----------------------------------------------------------------------------- +EXPORT_C TPtrC8 CVtImageIYUV::Image() const + { + return iPtrImage; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::Y() const +// ----------------------------------------------------------------------------- +EXPORT_C TUint8* CVtImageIYUV::Y() const + { + return iY; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::U() const +// ----------------------------------------------------------------------------- +EXPORT_C TUint8* CVtImageIYUV::U() const + { + return iU; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::V() const +// ----------------------------------------------------------------------------- +EXPORT_C TUint8* CVtImageIYUV::V() const + { + return iV; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::UVPlaneWidth() const +// ----------------------------------------------------------------------------- +EXPORT_C TInt CVtImageIYUV::UVPlaneWidth() const + { + return iSize.iWidth / 2; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::UVPlaneHeight() const +// ----------------------------------------------------------------------------- +EXPORT_C TInt CVtImageIYUV::UVPlaneHeight() const + { + return iSize.iHeight / 2; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::NeedHeapLock() const +// ----------------------------------------------------------------------------- +TBool CVtImageIYUV::NeedHeapLock() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::DisplayMode() const +// ----------------------------------------------------------------------------- +CVtImage::TVtDisplayMode CVtImageIYUV::DisplayMode() const + { + return CVtImage::EVtColorIYUV; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::Size() const +// ----------------------------------------------------------------------------- +TSize CVtImageIYUV::Size() const + { + return iSize; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::BytesPerRow() const +// ----------------------------------------------------------------------------- +TInt CVtImageIYUV::BytesPerRow() const + { + return iSize.iWidth; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::DataAddress() const +// ----------------------------------------------------------------------------- +TUint32* CVtImageIYUV::DataAddress() const + { + return reinterpret_cast< TUint32* >( iY ); + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::LineAddress( TInt aLine ) const +// ----------------------------------------------------------------------------- +TUint32* CVtImageIYUV::LineAddress( TInt aLine ) const + { + if( aLine < 0 ) + { + aLine = 0; + } + else if( aLine > Size().iHeight - 1 ) + { + aLine = Size().iHeight - 1; + } + return reinterpret_cast< TUint32* >( + reinterpret_cast< TUint8* >( DataAddress() ) + BytesPerRow() * aLine ); + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::ImageSize() const +// ----------------------------------------------------------------------------- +TInt CVtImageIYUV::ImageSize() const + { + return UVPlaneWidth() * UVPlaneHeight() * 2 + BytesPerRow() * iSize.iHeight; + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::CVtImageIYUV( const TSize& aSize ) +// ----------------------------------------------------------------------------- +CVtImageIYUV::CVtImageIYUV( const TSize& aSize ) +: CVtImage( CVtImage::EVtImageIYUV ), iSize( aSize ), iPtrImage( 0, 0 ) + { + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::ConstructL( const TDesC8* aImage ) +// ----------------------------------------------------------------------------- +void CVtImageIYUV::ConstructL( const TDesC8* aImage ) + { + ValidateSizeL( iSize ); + if( !aImage ) + { + // empty image + TInt size( ImageSize() ); + iImage = HBufC8::NewL( size ); + iImage->Des().SetLength( size ); + } + else + { + // prefilled image + CheckDescriptorSizeL( *aImage ); + iImage = aImage->AllocL(); + } + // set ptr descriptor + iPtrImage.Set( iImage->Des() ); + // set YUV pointers + SetYUVPointers(); + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::ValidateSizeL( const TSize& aSize ) +// ----------------------------------------------------------------------------- +void CVtImageIYUV::ValidateSizeL( const TSize& aSize ) + { + if( ( aSize.iWidth & 1 ) || ( aSize.iHeight & 1 ) ) + { + User::Leave( KErrNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::CheckDescriptorSizeL( const TDesC8& aImage ) +// ----------------------------------------------------------------------------- +void CVtImageIYUV::CheckDescriptorSizeL( const TDesC8& aImage ) + { + if( aImage.Size() != ImageSize() ) + { + User::Leave( KErrArgument ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageIYUV::SetYUVPointers() +// ----------------------------------------------------------------------------- +void CVtImageIYUV::SetYUVPointers() + { + iY = const_cast< TUint8* >( iPtrImage.Ptr() ); + iU = iY + BytesPerRow() * iSize.iHeight; + iV = iU + UVPlaneWidth() * UVPlaneHeight(); + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageRotator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageRotator.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "cvtimagerotator.h" +#include "CVtImageRotatorImplMirrorFlip.h" +#include "CVtImageRotatorImplClockwise.h" + +// CONSTANTS + +_LIT( KModuleName, "CVtImageRotator" ); + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtImageRotator::NewL( MVtImageRotatorObserver& aObserver, +// TPriority aPriority ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageRotator* CVtImageRotator::NewL( + MVtImageRotatorObserver& aObserver, + TPriority aPriority) + { + CVtImageRotator* self = new ( ELeave ) CVtImageRotator( aObserver, aPriority ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::~CVtImageRotator() +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageRotator::~CVtImageRotator() + { + Cancel(); + delete iAsyncCallBack; + delete iHeapLock; + delete iRotatorImpl; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::ScaleL( const CVtImage& aSource, +// CVtImage& aTarget, const TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageRotator::RotateL( const CVtImage& aSource, + CVtImage& aTarget, const TRotationAngle& aAngle ) + { + if ( !IsActive() ) + { + CreateRotatorL( aAngle ); + iRotatorImpl->SetSourceTargetL( aSource, aTarget ); + iCancelled = EFalse; + Activate(); + iAsyncCallBack->CallBack(); + } + else + { + User::Panic( KModuleName(), EBusy ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::Rotate +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageRotator::Rotate( + const CVtImage& aSource, + CVtImage& aTarget, const TRotationAngle& aAngle ) + { + TRAPD( result, RotateL( aSource, aTarget, aAngle ) ); + if ( result != KErrNone ) + { + Activate(); + Signal( result ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::CVtImageRotator( MVtImageRotatorObserver& aObserver, +// TPriority aPriority ) +// ----------------------------------------------------------------------------- +CVtImageRotator::CVtImageRotator( MVtImageRotatorObserver& aObserver, + TPriority aPriority ) +: CActive( aPriority ), iObserver( aObserver ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::ConstructL() +// ----------------------------------------------------------------------------- +void CVtImageRotator::ConstructL() + { + iHeapLock = new ( ELeave ) CFbsBitmap(); + iHeapLock->Create( TSize( 1, 1 ), EColor256 ); + iAsyncCallBack = new ( ELeave ) + CAsyncCallBack( TCallBack( StaticRotate, this ), Priority() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::CreateRotatorL( const TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +void CVtImageRotator::CreateRotatorL( const TRotationAngle& aAngle ) + { + if( iRotatorImpl ) + { + if( iRotatorImpl->SupportsRotationAngle( aAngle ) ) + { + iRotatorImpl->SetAngle( aAngle ); + return; + } + delete iRotatorImpl; + iRotatorImpl = 0; + } + + switch( aAngle ) + { + case E90DegreesClockwise: + case E270DegreesClockwise: + iRotatorImpl = + new ( ELeave ) CVtImageRotatorImplClockwise( aAngle ); + break; + + case EMirrorHorizontalAxis: + case EFlipVerticalAxis: + case E180DegreesClockwise: + iRotatorImpl = + new ( ELeave ) CVtImageRotatorImplMirrorFlip( aAngle ); + break; + + default: + User::Leave( KErrNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::Activate +// ----------------------------------------------------------------------------- +void CVtImageRotator::Activate() + { + iStatus = KRequestPending; + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::Signal( TInt aError ) +// ----------------------------------------------------------------------------- +void CVtImageRotator::Signal( TInt aError ) + { + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, aError ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::RunL() +// ----------------------------------------------------------------------------- +void CVtImageRotator::RunL() + { + iObserver.RotationFinished( iStatus.Int() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::DoCancel() +// ----------------------------------------------------------------------------- +void CVtImageRotator::DoCancel() + { + if ( iStatus == KRequestPending ) + { + iCancelled = ETrue; + Signal( KErrCancel ); + iObserver.RotationFinished( KErrCancel ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::StaticRotate() +// ----------------------------------------------------------------------------- +TInt CVtImageRotator::StaticRotate( TAny* aPtr ) + { + CVtImageRotator* self = reinterpret_cast< CVtImageRotator* >( aPtr ); + self->DoRotate(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotator::DoRotate +// ----------------------------------------------------------------------------- +void CVtImageRotator::DoRotate() + { + if ( !iCancelled ) + { + TBool more; + TBool needsLock = iRotatorImpl->NeedHeapLock(); + if( needsLock ) + { + iHeapLock->LockHeap( ETrue ); + } + TInt result = iRotatorImpl->Rotate( more ); + if( needsLock ) + { + iHeapLock->UnlockHeap( ETrue ); + } + if( !more || ( result != KErrNone ) ) + { + Signal( result ); + } + else + { + iAsyncCallBack->CallBack(); + } + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageRotatorImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageRotatorImpl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageRotatorImpl.h" +#include "cvtimage.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ========================== CVtImageRotatorImpl ============================== + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImpl::SetSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImpl::SetSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + iSource = iTarget = 0; + ValidateSourceTargetL( aSource, aTarget ); + iSource = &aSource; + iTarget = &aTarget; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImpl::NeedHeapLock() const +// ----------------------------------------------------------------------------- +TBool CVtImageRotatorImpl::NeedHeapLock() const + { + return iSource->NeedHeapLock() || iTarget->NeedHeapLock(); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImpl::SetAngle( +// const CVtImageRotator::TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImpl::SetAngle( const CVtImageRotator::TRotationAngle& aAngle ) + { + iAngle = aAngle; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImpl::CVtImageRotatorImpl( +// const CVtImageRotator::TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +CVtImageRotatorImpl::CVtImageRotatorImpl( const CVtImageRotator::TRotationAngle& aAngle ) +: iAngle( aAngle ) + { + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplClockwise.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplClockwise.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,372 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageRotatorImplClockwise.h" +#include "cvtimage.h" +#include "CVtImageIYUV.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS =============================== + +// ======================= CVtImageRotatorImplClockwise ======================= + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplClockwise::CVtImageRotatorImplClockwise( +// const CVtImageRotator::TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +CVtImageRotatorImplClockwise::CVtImageRotatorImplClockwise( + const CVtImageRotator::TRotationAngle& aAngle ) : CVtImageRotatorImpl( aAngle ) + { + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplClockwise::Rotate( TBool& aContinue ) +// ----------------------------------------------------------------------------- +TInt CVtImageRotatorImplClockwise::Rotate( TBool& aContinue ) + { + __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplClockwise::Rotate() >>" ), RThread().Id().operator TUint() ) ); + + TInt result( KErrNone ); + + aContinue = EFalse; + + DoRotate(); + + __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplClockwise::Rotate() <<" ), RThread().Id().operator TUint() ) ); + + return result; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplClockwise::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplClockwise::ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + // SourceWidth == TargetHeight && SourceHeight == TargetWidth + if( ( aSource.Size().iWidth != aTarget.Size().iHeight ) || + ( aSource.Size().iHeight != aTarget.Size().iWidth ) ) + { + User::Leave( KErrNotSupported ); + } + + // Displaymodes must match + if( aSource.DisplayMode() != aTarget.DisplayMode() ) + { + User::Leave( KErrNotSupported ); + } + + // Check that displaymode is one of the supported + switch( aSource.DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + case CVtImage::EVtColor16M: + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + case CVtImage::EVtColorIYUV: + break; + + default: + User::Leave( KErrNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplClockwise::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +TBool CVtImageRotatorImplClockwise::SupportsRotationAngle( + const CVtImageRotator::TRotationAngle& aAngle ) + { + TBool result( EFalse ); + + if( ( aAngle == CVtImageRotator::E90DegreesClockwise ) || + ( aAngle == CVtImageRotator::E270DegreesClockwise ) ) + { + result = ETrue; + } + + return result; + } + +// ----------------------------------------------------------------------------- +// void CVtImageRotatorImplClockwise::DoRotate() +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplClockwise::DoRotate() + { + TInt bytesPerRow( iSource->BytesPerRow() ); + + TInt height( iSource->Size().iHeight ); + + TInt width( iSource->Size().iWidth ); + + TInt targetWidth( iTarget->Size().iWidth ); + + TInt targetHeight( iTarget->Size().iHeight ); + + TInt targetBytesPerRow( iTarget->BytesPerRow() ); + + switch( iSource->DisplayMode() ) + { + // DisplayMode: 4K and 64K + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TInt offsetPerRow( -2 ); + + if( iAngle == CVtImageRotator::E90DegreesClockwise ) + { + d += targetBytesPerRow - 2; + + if( targetWidth & 1 ) + { + d -= 2; + } + } + else + { + d += targetBytesPerRow * ( targetHeight - 1 ); + + targetBytesPerRow = -targetBytesPerRow; + + offsetPerRow = 2; + } + + targetBytesPerRow /= 2; // in loop we need 16-bit precalculated + + for( TInt y = height - 1; y >= 0; y-- ) + { + register const TUint16* tempS = reinterpret_cast< const TUint16* >( s ); + + register TUint16* tempD = reinterpret_cast< TUint16* >( d ); + + for( register TInt x = width - 1; x >= 0; x-- ) + { + *tempD = *tempS++; + tempD += targetBytesPerRow; + } + + s += bytesPerRow; + d += offsetPerRow; + } + } + break; + + // DisplayMode: 16M + case CVtImage::EVtColor16M: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TInt offsetPerRow( -3 ); + + if( iAngle == CVtImageRotator::E90DegreesClockwise ) + { + d += targetWidth * 3 - 3; + } + else + { + d += targetBytesPerRow * ( targetHeight - 1 ); + + targetBytesPerRow = -targetBytesPerRow; + + offsetPerRow = 3; + } + + for( TInt y = height - 1; y >= 0; y-- ) + { + register const TUint8* tempS = s; + + register TUint8* tempD = d; + + for( register TInt x = width - 1; x >= 0; x-- ) + { + tempD[ 0 ] = *tempS++; + tempD[ 1 ] = *tempS++; + tempD[ 2 ] = *tempS++; + tempD += targetBytesPerRow; + } + + s += bytesPerRow; + d += offsetPerRow; + } + } + break; + + // DisplayMode: 16MU and 16MA + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TInt offsetPerRow( -4 ); + + if( iAngle == CVtImageRotator::E90DegreesClockwise ) + { + d += targetBytesPerRow - 4; + } + else + { + d += targetBytesPerRow * ( targetHeight - 1 ); + + targetBytesPerRow = -targetBytesPerRow; + + offsetPerRow = 4; + } + + targetBytesPerRow /= 4; // in loop we need 32-bit precalculated + + for( TInt y = height - 1; y >= 0; y-- ) + { + register const TUint32* tempS = reinterpret_cast< const TUint32* >( s ); + + register TUint32* tempD = reinterpret_cast< TUint32* >( d ); + + for( register TInt x = width - 1; x >= 0; x-- ) + { + *tempD = *tempS++; + tempD += targetBytesPerRow; + } + + s += bytesPerRow; + d += offsetPerRow; + } + } + break; + + // DisplayMode: IYUV + case CVtImage::EVtColorIYUV: + { + const CVtImageIYUV* src = reinterpret_cast< const CVtImageIYUV* >( iSource ); + CVtImageIYUV* trg = reinterpret_cast< CVtImageIYUV* >( iTarget ); + RotatePlane + ( + src->Y(), + trg->Y(), + width, + height, + bytesPerRow, + targetHeight, + targetBytesPerRow + ); + + RotatePlane + ( + src->U(), + trg->U(), + src->UVPlaneWidth(), + src->UVPlaneHeight(), + src->UVPlaneWidth(), + trg->UVPlaneHeight(), + trg->UVPlaneWidth() + ); + + RotatePlane + ( + src->V(), + trg->V(), + src->UVPlaneWidth(), + src->UVPlaneHeight(), + src->UVPlaneWidth(), + trg->UVPlaneHeight(), + trg->UVPlaneWidth() + ); + + } + break; + + default: + break; + + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplClockwise::RotatePlane( +// const TUint8* aSource, +// TUint8* aTarget, +// TInt aSourceWidth, +// TInt aSourceHeight, +// TInt aSourceBytesPerRow, +// TInt aTargetHeight, +// TInt aTargetBytesPerRow ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplClockwise::RotatePlane( + const TUint8* aSource, + TUint8* aTarget, + TInt aSourceWidth, + TInt aSourceHeight, + TInt aSourceBytesPerRow, + TInt aTargetHeight, + TInt aTargetBytesPerRow ) + { + TInt offsetPerRow( -1 ); + + if( iAngle == CVtImageRotator::E90DegreesClockwise ) + { + aTarget += aTargetBytesPerRow - 1; + } + else + { + aTarget += aTargetBytesPerRow * ( aTargetHeight - 1 ); + aTargetBytesPerRow = -aTargetBytesPerRow; + offsetPerRow = -offsetPerRow; + } + + for( TInt y = aSourceHeight - 1; y >= 0; y-- ) + { + register const TUint8* tempS = aSource; + register TUint8* tempD = aTarget; + for( register TInt x = aSourceWidth - 1; x >= 0; x-- ) + { + *tempD = *tempS++; + tempD += aTargetBytesPerRow; + } + + aSource += aSourceBytesPerRow; + aTarget += offsetPerRow; + } + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplMirrorFlip.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplMirrorFlip.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,589 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageRotatorImplMirrorFlip.h" +#include "cvtimage.h" +#include "CVtImageIYUV.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +// ============================ MEMBER FUNCTIONS =============================== + +// ======================= CVtImageRotatorImplMirrorFlip ======================= + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::CVtImageRotatorImplMirrorFlip( +// const CVtImageRotator::TRotationAngle& aAngle ) +// ----------------------------------------------------------------------------- +CVtImageRotatorImplMirrorFlip::CVtImageRotatorImplMirrorFlip( + const CVtImageRotator::TRotationAngle& aAngle ) : CVtImageRotatorImpl( aAngle ) + { + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::Rotate( TBool& aContinue ) +// ----------------------------------------------------------------------------- +TInt CVtImageRotatorImplMirrorFlip::Rotate( TBool& aContinue ) + { + __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplMirrorFlip::Rotate() >>" ), RThread().Id().operator TUint() ) ); + + TInt result( KErrNone ); + + aContinue = EFalse; + + TBool isSameBitmap( iSource->DataAddress() == iTarget->DataAddress() ); + + if( iAngle == CVtImageRotator::EFlipVerticalAxis ) + { + // Are source and target referencing same bitmap? + if( isSameBitmap ) + { + // YES: Flip inside bitmap + Flip( *iTarget ); + } + else + { + // NO: Use flipping from source to target + Flip(); + } + } + else if( iAngle == CVtImageRotator::EMirrorHorizontalAxis ) + { + // Are source and target referencing same bitmap? + if( isSameBitmap ) + { + // YES: Mirror inside bitmap + Mirror( *iTarget ); + } + else + { + // NO: Mirror from source to target + Mirror(); + } + } + else if( iAngle == CVtImageRotator::E180DegreesClockwise ) + { + // Are source and target referencing same bitmap? + if( isSameBitmap ) + { + // YES: Mirror inside bitmap + Mirror( *iTarget ); + } + else + { + // NO: Mirror from source to target + Mirror(); + } + Flip( *iTarget ); + } + + __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplMirrorFlip::Rotate() <<" ), RThread().Id().operator TUint() ) ); + + return result; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + + + // Sizes must match + if( aSource.Size() != aTarget.Size() ) + { + User::Leave( KErrNotSupported ); + } + + // Displaymodes must match + if( aSource.DisplayMode() != aTarget.DisplayMode() ) + { + User::Leave( KErrNotSupported ); + } + + // Check that displaymode is one of the supported + switch( aSource.DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + case CVtImage::EVtColor16M: + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + case CVtImage::EVtColorIYUV: + break; + + default: + User::Leave( KErrNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +TBool CVtImageRotatorImplMirrorFlip::SupportsRotationAngle( + const CVtImageRotator::TRotationAngle& aAngle ) + { + TBool result( EFalse ); + + if( ( aAngle == CVtImageRotator::EMirrorHorizontalAxis ) || + ( aAngle == CVtImageRotator::EFlipVerticalAxis ) || + ( aAngle == CVtImageRotator::E180DegreesClockwise ) ) + { + result = ETrue; + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::Mirror() +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::Mirror() + { + TInt bytesPerRow( iSource->BytesPerRow() ); + + TInt height( iSource->Size().iHeight ); + + TInt width( iSource->Size().iWidth ); + + switch( iSource->DisplayMode() ) + { + // DisplayMode: 4K and 64K + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + d += bytesPerRow; + + if( width & 1 ) + { + d -= 2; + } + + for( TInt y = height - 1; y >= 0; y-- ) + { + register const TUint16* tempS = reinterpret_cast< const TUint16* >( s ); + + register TUint16* tempD = reinterpret_cast< TUint16* >( d ); + + for( register TInt x = width - 1; x >= 0; x-- ) + { + *--tempD = *tempS++; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // DisplayMode: 16M + case CVtImage::EVtColor16M: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + d += width * 3; + + for( TInt y = height - 1; y >= 0; y-- ) + { + const TUint8* tempS = s; + + TUint8* tempD = d - 3; + + for( TInt x = width - 1; x >= 0; x-- ) + { + tempD[ 0 ] = *tempS++; + tempD[ 1 ] = *tempS++; + tempD[ 2 ] = *tempS++; + tempD -= 3; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // DisplayMode: 16MU and 16MA + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + { + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + d += bytesPerRow; + + for( TInt y = height - 1; y >= 0; y-- ) + { + register const TUint32* tempS = reinterpret_cast< const TUint32* >( s ); + register TUint32* tempD = reinterpret_cast< TUint32* >( d ); + + for( TInt x = width - 1; x >= 0; x-- ) + { + *--tempD = *tempS++; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // IYUV + case CVtImage::EVtColorIYUV: + MirrorIYUV( reinterpret_cast< const CVtImageIYUV& >( *iSource ), reinterpret_cast< CVtImageIYUV& >( *iTarget ) ); + break; + + default: + break; + + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::Mirror( CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::Mirror( CVtImage& aTarget ) + { + TInt bytesPerRow( aTarget.BytesPerRow() ); + + TInt height( aTarget.Size().iHeight ); + + TInt width( aTarget.Size().iWidth ); + + switch( aTarget.DisplayMode() ) + { + // DisplayMode: 4K and 64K + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + { + TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() ); + + TUint8* s = reinterpret_cast< TUint8* >( d ); + + d += bytesPerRow; + + if( width & 1 ) + { + d -= 2; + } + + for( TInt y = height - 1; y >= 0; y-- ) + { + register TUint16* tempS = reinterpret_cast< TUint16* >( s ); + + register TUint16* tempD = reinterpret_cast< TUint16* >( d ); + + for( register TInt x = width/2 - 1; x >= 0; x-- ) + { + TUint16 p = *tempS; + *tempS++ = *--tempD; + *tempD = p; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // DisplayMode: 16M + case CVtImage::EVtColor16M: + { + TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() ); + + TUint8* s = reinterpret_cast< TUint8* >( d ); + + d += width * 3; + + for( TInt y = height - 1; y >= 0; y-- ) + { + TUint8* tempS = s; + + TUint8* tempD = d - 3; + + for( TInt x = width/2 - 1; x >= 0; x-- ) + { + TUint8 s = *tempS; + TUint8 t = *tempD; + *tempD++ = s; + *tempS++ = t; + + s = *tempS; + t = *tempD; + *tempD++ = s; + *tempS++ = t; + + s = *tempS; + t = *tempD; + *tempD++ = s; + *tempS++ = t; + + tempD -= 6; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // DisplayMode: 16MU and 16MA + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + { + TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() ); + + TUint8* s = reinterpret_cast< TUint8* >( d ); + + d += bytesPerRow; + + for( TInt y = height - 1; y >= 0; y-- ) + { + register TUint32* tempS = reinterpret_cast< TUint32* >( s ); + register TUint32* tempD = reinterpret_cast< TUint32* >( d ); + + for( TInt x = width/2 - 1; x >= 0; x-- ) + { + TUint32 p = *tempS; + *tempS++ = *--tempD; + *tempD = p; + } + + s += bytesPerRow; + + d += bytesPerRow; + } + } + break; + + // IYUV + case CVtImage::EVtColorIYUV: + MirrorIYUV( reinterpret_cast< const CVtImageIYUV& >( aTarget ), reinterpret_cast< CVtImageIYUV& >( aTarget ) ); + break; + + default: + break; + + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::MirrorIYUV( const CVtImageIYUV& aSource, +// CVtImageIYUV& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::MirrorIYUV( const CVtImageIYUV& aSource, + CVtImageIYUV& aTarget ) + { + MirrorPlane( aSource.Y(), aTarget.Y(), aSource.Size().iWidth, + aSource.Size().iHeight, aSource.BytesPerRow() ); + MirrorPlane( aSource.U(), aTarget.U(), aSource.UVPlaneWidth(), + aSource.UVPlaneHeight(), aSource.UVPlaneWidth() ); + MirrorPlane( aSource.V(), aTarget.V(), aSource.UVPlaneWidth(), + aSource.UVPlaneHeight(), aSource.UVPlaneWidth() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::MirrorPlane( TUint8* aSource, TUint8* aTarget, +// TInt aWidth, TInt aHeight, TInt aBytesPerRow ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::MirrorPlane( TUint8* aSource, + TUint8* aTarget, TInt aWidth, TInt aHeight, TInt aBytesPerRow ) + { + if( aSource != aTarget ) + { + aTarget += aBytesPerRow; + for( TInt y = aHeight - 1; y >= 0; y-- ) + { + register const TUint8* tempS = aSource; + register TUint8* tempD = aTarget; + for( TInt x = aWidth - 1; x >= 0; x-- ) + { + *--tempD = *tempS++; + } + aSource += aBytesPerRow; + aTarget += aBytesPerRow; + } + } + else + { + aTarget += aBytesPerRow; + for( TInt y = aHeight - 1; y >= 0; y-- ) + { + register TUint8* tempS = aSource; + register TUint8* tempD = aTarget; + for( TInt x = aWidth/2 - 1; x >= 0; x-- ) + { + TUint8 p = *tempS; + *tempS++ = *--tempD; + *tempD = p; + } + aSource += aBytesPerRow; + aTarget += aBytesPerRow; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::Flip() +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::Flip() + { + if( iSource->DisplayMode() == CVtImage::EVtColorIYUV ) + { + FlipIYUV + ( + reinterpret_cast< const CVtImageIYUV& >( *iSource ), + reinterpret_cast< CVtImageIYUV& >( *iTarget ) + ); + } + else + { + TInt bytesPerRow( iSource->BytesPerRow() ); + + TInt height( iSource->Size().iHeight ); + + const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() ); + + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + d += ( height - 1 ) * bytesPerRow; + + for( TInt y = height - 1; y >= 0; y-- ) + { + Mem::Copy( d, s, bytesPerRow ); + s += bytesPerRow; + d -= bytesPerRow; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::FlipIYUV() +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::FlipIYUV + ( + const CVtImageIYUV& aSource, + CVtImageIYUV& aTarget + ) + { + FlipPlane( aSource.Y(), aTarget.Y(), aSource.Size().iHeight, aSource.BytesPerRow() ); + FlipPlane( aSource.U(), aTarget.U(), aSource.UVPlaneHeight(), aSource.UVPlaneWidth() ); + FlipPlane( aSource.V(), aTarget.V(), aSource.UVPlaneHeight(), aSource.UVPlaneWidth() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::FlipPlane() +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::FlipPlane + ( + TUint8* aSource, + TUint8* aTarget, + TInt aHeight, + TInt aBytesPerRow + ) + { + TBool doSwap = ( aSource == aTarget ); + + aTarget += ( aHeight - 1 ) * aBytesPerRow; + + if( doSwap ) + { + for( TInt y = aHeight / 2 - 1; y >= 0; y-- ) + { + Mem::Swap( aTarget, aSource, aBytesPerRow ); + aSource += aBytesPerRow; + aTarget -= aBytesPerRow; + } + } + else + { + for( TInt y = aHeight - 1; y >= 0; y-- ) + { + Mem::Copy( aTarget, aSource, aBytesPerRow ); + aSource += aBytesPerRow; + aTarget -= aBytesPerRow; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageRotatorImplMirrorFlip::Flip( CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageRotatorImplMirrorFlip::Flip( CVtImage& aTarget ) + { + if( iSource->DisplayMode() == CVtImage::EVtColorIYUV ) + { + FlipIYUV + ( + reinterpret_cast< const CVtImageIYUV& >( aTarget ), + reinterpret_cast< CVtImageIYUV& >( aTarget ) + ); + } + else + { + TInt bytesPerRow( aTarget.BytesPerRow() ); + + TInt height( aTarget.Size().iHeight ); + + TUint8* s = reinterpret_cast< TUint8* >( aTarget.DataAddress() ); + + TUint8* d = s; + + d += ( height - 1 ) * bytesPerRow; + + for( TInt y = height / 2 - 1; y >= 0; y-- ) + { + Mem::Swap( d, s, bytesPerRow ); + s += bytesPerRow; + d -= bytesPerRow; + } + } + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageScaler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageScaler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageScaler.h" +#include "CVtImageScalerImpl.h" +#include "CVtImageScalerImplNearest.h" +#include "CVtImageScalerImplWeightedAverage.h" +#include "CVtImageScalerImplBilinear.h" + +// CONSTANTS + +_LIT( KModuleName, "CVtImageScaler" ); + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtImageScaler::NewL( MVtImageScalerObserver& aObserver, TQuality aQuality, +// TPriority aPriority ) +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageScaler* CVtImageScaler::NewL( + MVtImageScalerObserver& aObserver, + TQuality aQuality, + TPriority aPriority ) + { + CVtImageScaler* self = new ( ELeave ) CVtImageScaler( aObserver, aPriority ); + CleanupStack::PushL( self ); + self->ConstructL( aQuality ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::~CVtImageScaler() +// ----------------------------------------------------------------------------- +EXPORT_C CVtImageScaler::~CVtImageScaler() + { + Cancel(); + delete iAsyncCallBack; + delete iHeapLock; + delete iScalerImpl; + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::SetQualityL( TQuality aQuality ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageScaler::SetQualityL( TQuality aQuality ) + { + delete iScalerImpl; + iScalerImpl = 0; + + switch( aQuality ) + { + case ENearest: + iScalerImpl = new ( ELeave ) CVtImageScalerImplNearest(); + break; + + case EWeightedAverage: + iScalerImpl = new ( ELeave ) CVtImageScalerImplWeightedAverage(); + break; + + case EBilinear: + iScalerImpl = new ( ELeave ) CVtImageScalerImplBilinear(); + break; + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::ScaleL( const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageScaler::ScaleL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + if( !IsActive() ) + { + if( !iScalerImpl ) + { + User::Leave( KErrNotReady ); + } + iScalerImpl->SetSourceTargetL( aSource, aTarget ); + iCancelled = EFalse; + Activate(); + iAsyncCallBack->CallBack(); + } + else + { + User::Panic( KModuleName(), EBusy ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::Scale( const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageScaler::Scale( + const CVtImage& aSource, + CVtImage& aTarget ) + { + TRAPD( result, ScaleL( aSource, aTarget ) ); + if( result != KErrNone ) + { + Activate(); + Signal( result ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::ScaleNowL( const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +EXPORT_C void CVtImageScaler::ScaleNowL( + const CVtImage& aSource, CVtImage& aTarget ) + { + if( !iScalerImpl ) + { + User::Leave( KErrNotReady ); + } + + iScalerImpl->SetSourceTargetL( aSource, aTarget ); + + TInt result; + TBool more; + TBool needsLock( iScalerImpl->NeedHeapLock() ); + do + { + + if ( needsLock ) + { + iHeapLock->LockHeap( ETrue ); + } + + result = iScalerImpl->Scale( more ); + + if ( needsLock ) + { + iHeapLock->UnlockHeap( ETrue ); + } + + } while ( more && ( result == KErrNone ) ); + + User::LeaveIfError( result ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::CVtImageScaler() +// ----------------------------------------------------------------------------- +CVtImageScaler::CVtImageScaler( MVtImageScalerObserver& aObserver, TPriority aPriority ) +: CActive( aPriority ), iObserver( aObserver ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::ConstructL( TQuality aQuality ) +// ----------------------------------------------------------------------------- +void CVtImageScaler::ConstructL( TQuality aQuality ) + { + SetQualityL( aQuality ); + iHeapLock = new ( ELeave ) CFbsBitmap(); + iHeapLock->Create( TSize( 1, 1 ), EColor256 ); + iAsyncCallBack = new ( ELeave ) + CAsyncCallBack( TCallBack( StaticScale, this ), Priority() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::Activate +// ----------------------------------------------------------------------------- +void CVtImageScaler::Activate() + { + iStatus = KRequestPending; + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::Signal( TInt aError ) +// ----------------------------------------------------------------------------- +void CVtImageScaler::Signal( TInt aError ) + { + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, aError ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::RunL() +// ----------------------------------------------------------------------------- +void CVtImageScaler::RunL() + { + iObserver.ScalingFinished( iStatus.Int() ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::DoCancel() +// ----------------------------------------------------------------------------- +void CVtImageScaler::DoCancel() + { + if ( iStatus == KRequestPending ) + { + iCancelled = ETrue; + Signal( KErrCancel ); + iObserver.ScalingFinished( KErrCancel ); + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::StaticScale() +// ----------------------------------------------------------------------------- +TInt CVtImageScaler::StaticScale( TAny* aPtr ) + { + CVtImageScaler* self = reinterpret_cast< CVtImageScaler* >( aPtr ); + self->DoScale(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtImageScaler::DoScale +// ----------------------------------------------------------------------------- +void CVtImageScaler::DoScale() + { + if ( !iCancelled ) + { + TBool more; + TBool needsLock = iScalerImpl->NeedHeapLock(); + if ( needsLock ) + { + iHeapLock->LockHeap( ETrue ); + } + TInt result = iScalerImpl->Scale( more ); + if ( needsLock ) + { + iHeapLock->UnlockHeap( ETrue ); + } + if ( !more || ( result != KErrNone ) ) + { + Signal( result ); + } + else + { + iAsyncCallBack->CallBack(); + } + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageScalerImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageScalerImpl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageScalerImpl.h" +#include "cvtimage.h" +#include "CVtImageBitmap.h" + +// MACROS + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + + +// ============================ MEMBER FUNCTIONS =============================== + +// ========================== CVtImageScalerImpl ============================== + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::CVtImageScalerImpl() +// ----------------------------------------------------------------------------- +CVtImageScalerImpl::CVtImageScalerImpl() : CActive( EPriorityStandard ) + { + _IFDBG(PRINT( _L("ScaleImpl.Ctor<") )); + CActiveScheduler::Add( this ); + _IFDBG(PRINT( _L("ScaleImpl.Ctor>") )); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::~CVtImageScalerImpl() +// ----------------------------------------------------------------------------- +CVtImageScalerImpl::~CVtImageScalerImpl() + { + _IFDBG(PRINT( _L("ScaleImpl.~<") )); + Cancel(); + delete iScaler; + _IFDBG(PRINT( _L("ScaleImpl.~>") )); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::SetSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImpl::SetSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + iSource = iTarget = 0; + LeaveIfNotValidSizeL( aSource.Size(), TSize( 2, 2 ) ); + LeaveIfNotValidSizeL( aTarget.Size() ); + ValidateSourceTargetL( aSource, aTarget ); + iSource = &aSource; + iTarget = &aTarget; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::NeedHeapLock() const +// ----------------------------------------------------------------------------- +TBool CVtImageScalerImpl::NeedHeapLock() const + { + return iSource->NeedHeapLock() || iTarget->NeedHeapLock(); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::ScaleWithBitmapScalerL() +// ----------------------------------------------------------------------------- +void CVtImageScalerImpl::ScaleWithBitmapScalerL( + const CBitmapScaler::TQualityAlgorithm +#ifdef _DEBUG + aQuality +#endif // _DEBUG + ) + { + _IFDBG(PRINT( _L("ScaleImpl.ScaleWithBitmapScalerL<") )); + if ( IsActive() || iActiveSchedulerWait.IsStarted() ) + { + _IFDBG(PRINT( _L("ScaleImpl.ScaleWithBitmapScalerL LEAVE KErrInUse>") )); + User::Leave( KErrInUse ); + } + _IFDBG(PRINT( _L("ScaleImpl::ScaleWithBitmapScalerL aQuality = %d"), aQuality )); + CFbsBitmap& source( static_cast< CVtImageBitmap* >( + const_cast< CVtImage* >( iSource ) )->Bitmap() ); + CFbsBitmap& target( static_cast< CVtImageBitmap* >( iTarget )->Bitmap() ); + iScaler = CBitmapScaler::NewL(); + SetActive(); + iScaler->Scale( &iStatus, source, target, EFalse ); + iActiveSchedulerWait.Start(); + delete iScaler; iScaler = NULL; + _IFDBG(PRINT( _L("ScaleImpl.ScaleWithBitmapScalerL iStatus.Int() = %d"), iStatus.Int() )); + User::LeaveIfError( iStatus.Int() ); + _IFDBG(PRINT( _L("ScaleImpl.ScaleWithBitmapScalerL>") )); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::LeaveIfNotValidSizeL( +// const TSize& aSize, const TSize aMinSize ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImpl::LeaveIfNotValidSizeL( + const TSize& aSize, + const TSize aMinSize ) + { + _IFDBG(PRINT( _L("ScaleImpl.LeaveIfNotValidSizeL<") )); + if( ( aSize.iWidth < aMinSize.iWidth ) || + ( aSize.iHeight < aMinSize.iHeight ) ) + { + User::Leave( KErrNotSupported ); + } + _IFDBG(PRINT( _L("ScaleImpl.LeaveIfNotValidSizeL>") )); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::RunL() +// ----------------------------------------------------------------------------- +void CVtImageScalerImpl::RunL() + { + _IFDBG(PRINT( _L("CVtImageScalerImpl.RunL") )); + iActiveSchedulerWait.AsyncStop(); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImpl::RunL() +// ----------------------------------------------------------------------------- +void CVtImageScalerImpl::DoCancel() + { + _IFDBG(PRINT( _L("CVtImageScalerImpl.DoCancel") )); + iScaler->Cancel(); + iActiveSchedulerWait.AsyncStop(); + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageScalerImplBilinear.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageScalerImplBilinear.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1462 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageScalerImplBilinear.h" +#include "cvtimage.h" +#include "CVtImageScalerMacros.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +const TUint32 KDecimalBits = 14; // 18.14 pseudo real format, + // this must be lower than 15! + +// ============================ MEMBER FUNCTIONS =============================== + +// ======================= CVtImageScalerImplBilinear ========================== + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale( TBool& aContinue ) +// ----------------------------------------------------------------------------- +TInt CVtImageScalerImplBilinear::Scale( TBool& aContinue ) + { + TInt result( KErrNone ); + + aContinue = EFalse; + + // this implementation does not support different display modes for source + // and target + if( iSource->DisplayMode() != iTarget->DisplayMode() ) + { + return KErrNotSupported; + } + + // if sizes are same, just copy the data + if( iSource->Size() == iTarget->Size() ) + { + Mem::Copy( + iTarget->DataAddress(), + iSource->DataAddress(), + iTarget->BytesPerRow() * iTarget->Size().iHeight ); + } + else if ( ( iSource->Size().iHeight * 2 == iTarget->Size().iHeight ) + && ( iSource->Size().iWidth * 2 == iTarget->Size().iWidth ) ) + { + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + Scale2x4K64K( 0xeee ); // 0000ggggbbbbrrrr -> + break; // mask = %0000111011101110 = 0xeee + + case CVtImage::EVtColor64K: + Scale2x4K64K( 0xf7de ); // bbbbbggggggrrrrr -> + break; // mask = %1111011111011110 = 0xf7de + + case CVtImage::EVtColor16M: + Scale2x16M(); + break; + + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + Scale2x16MU16MA(); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMaximumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + else + { + Initialize(); + + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + Scale4K(); + break; + + case CVtImage::EVtColor64K: + Scale64K(); + break; + + case CVtImage::EVtColor16M: + Scale16M(); + break; + + case CVtImage::EVtColor16MU: + Scale16MU(); + break; + + case CVtImage::EVtColor16MA: + Scale16MA(); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMaximumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + if( aSource.DisplayMode() != aTarget.DisplayMode() ) + { + User::Leave( KErrNotSupported ); + } + + switch( aSource.DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + case CVtImage::EVtColor16M: + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + break; + + default: + // Scaling for bitmaps is supported for other display modes + if ( !( aSource.Type() == CVtImage::EVtImageBitmap && + aTarget.Type() == CVtImage::EVtImageBitmap ) ) + { + User::Leave( KErrNotSupported ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Initialize() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Initialize() + { + iU = ( 1 << KDecimalBits ) * iSource->Size().iWidth / + iTarget->Size().iWidth; + iV = ( 1 << KDecimalBits ) * iSource->Size().iHeight / + iTarget->Size().iHeight; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale4K() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale4K() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale4K() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint16* t = reinterpret_cast< TUint16* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + TUint32 b11( 0 ); + TUint32 g11( 0 ); + TUint32 r11( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint16* s = reinterpret_cast< TUint16* >( + iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint16* snext = reinterpret_cast< TUint16* >( + iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + TUint32 x0prev( TUint32( -1 ) ); + + TInt x; + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch + // pixels from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_4K_BLUE( p0 ); + g00 = UNPACK_4K_GREEN( p0 ); + r00 = UNPACK_4K_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_4K_BLUE( p0 ); + g01 = UNPACK_4K_GREEN( p0 ); + r01 = UNPACK_4K_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_4K_BLUE( p0 ); + g10 = UNPACK_4K_GREEN( p0 ); + r10 = UNPACK_4K_RED( p0 ); + + p0 = *( snext + x0 + 1 ); + + b11 = UNPACK_4K_BLUE( p0 ); + g11 = UNPACK_4K_GREEN( p0 ); + r11 = UNPACK_4K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t = 0; + + *t++ = PACK_4K_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_4K_BLUE( p0 ); + g01 = g00 = UNPACK_4K_GREEN( p0 ); + r01 = r00 = UNPACK_4K_RED( p0 ); + + p0 = *( snext + x0 ); + b11 = b10 = UNPACK_4K_BLUE( p0 ); + g11 = g10 = UNPACK_4K_GREEN( p0 ); + r11 = r10 = UNPACK_4K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_4K_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // if width is not even -> then we need to skip one additional byte + if( width & 1 ) + { + t++; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale4K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale64K() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale64K() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale64K() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint16* t = reinterpret_cast< TUint16* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + TUint32 b11( 0 ); + TUint32 g11( 0 ); + TUint32 r11( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint16* s = reinterpret_cast< TUint16* >( + iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint16* snext = reinterpret_cast< TUint16* >( + iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + TUint32 x0prev( TUint32( -1 ) ); + + TInt x; + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_64K_BLUE( p0 ); + g00 = UNPACK_64K_GREEN( p0 ); + r00 = UNPACK_64K_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_64K_BLUE( p0 ); + g01 = UNPACK_64K_GREEN( p0 ); + r01 = UNPACK_64K_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_64K_BLUE( p0 ); + g10 = UNPACK_64K_GREEN( p0 ); + r10 = UNPACK_64K_RED( p0 ); + + p0 = *( snext + x0 + 1 ); + + b11 = UNPACK_64K_BLUE( p0 ); + g11 = UNPACK_64K_GREEN( p0 ); + r11 = UNPACK_64K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_64K_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_64K_BLUE( p0 ); + g01 = g00 = UNPACK_64K_GREEN( p0 ); + r01 = r00 = UNPACK_64K_RED( p0 ); + + p0 = *( snext + x0 ); + b11 = b10 = UNPACK_64K_BLUE( p0 ); + g11 = g10 = UNPACK_64K_GREEN( p0 ); + r11 = r10 = UNPACK_64K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_64K_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // if width is not even -> then we need to skip one additional byte + if( width & 1 ) + { + t++; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale16M() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale16M() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16M() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32 t_pitch = iTarget->BytesPerRow(); + + TUint8* t = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + TUint32 b11( 0 ); + TUint32 g11( 0 ); + TUint32 r11( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint8* s = reinterpret_cast< TUint8* >( + iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint8* snext = reinterpret_cast< TUint8* >( + iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + TUint32 x0prev( TUint32( -1 ) ); + + TInt x; + + TUint8* d = t; + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = ( sourceX >> KDecimalBits ) * 3; + + if( x0 != x0prev ) + { + TUint8* tempSrc = s + x0; + + b00 = *tempSrc++; + g00 = *tempSrc++; + r00 = *tempSrc++; + + b01 = *tempSrc++; + g01 = *tempSrc++; + r01 = *tempSrc++; + + tempSrc = snext + x0; + + b10 = *tempSrc++; + g10 = *tempSrc++; + r10 = *tempSrc++; + + b11 = *tempSrc++; + g11 = *tempSrc++; + r11 = *tempSrc++; + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *d++ = static_cast< TUint8 >( bres >> KDecimalBits ); + *d++ = static_cast< TUint8 >( gres >> KDecimalBits ); + *d++ = static_cast< TUint8 >( rres >> KDecimalBits ); + + sourceX += iU; + } + + // last columns + for( ; x < width; x++ ) + { + TUint32 x0 = ( sourceX >> KDecimalBits ) * 3; + + if( x0 != x0prev ) + { + TUint8* tempSrc = s + x0; + + b01 = b00 = *tempSrc++; + g01 = g00 = *tempSrc++; + r01 = r00 = *tempSrc++; + + tempSrc = snext + x0; + + b11 = b10 = *tempSrc++; + g11 = g10 = *tempSrc++; + r11 = r10 = *tempSrc++; + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *d++ = static_cast< TUint8 >( bres >> KDecimalBits ); + *d++ = static_cast< TUint8 >( gres >> KDecimalBits ); + *d++ = static_cast< TUint8 >( rres >> KDecimalBits ); + + sourceX += iU; + } + + t += t_pitch; + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale16MU() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale16MU() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16MU() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32* t = iTarget->DataAddress(); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + TUint32 b11( 0 ); + TUint32 g11( 0 ); + TUint32 r11( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint32* s = iSource->LineAddress( sourceY >> KDecimalBits ); + TUint32* snext = iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + TUint32 x0prev( TUint32( -1 ) ); + + TInt x; + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_16MU_BLUE( p0 ); + g00 = UNPACK_16MU_GREEN( p0 ); + r00 = UNPACK_16MU_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_16MU_BLUE( p0 ); + g01 = UNPACK_16MU_GREEN( p0 ); + r01 = UNPACK_16MU_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_16MU_BLUE( p0 ); + g10 = UNPACK_16MU_GREEN( p0 ); + r10 = UNPACK_16MU_RED( p0 ); + + p0 = *( snext + x0 + 1 ); + + b11 = UNPACK_16MU_BLUE( p0 ); + g11 = UNPACK_16MU_GREEN( p0 ); + r11 = UNPACK_16MU_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_16MU_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_16MU_BLUE( p0 ); + g01 = g00 = UNPACK_16MU_GREEN( p0 ); + r01 = r00 = UNPACK_16MU_RED( p0 ); + + p0 = *( snext + x0 ); + b11 = b10 = UNPACK_16MU_BLUE( p0 ); + g11 = g10 = UNPACK_16MU_GREEN( p0 ); + r11 = r10 = UNPACK_16MU_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_16MU_BGR( + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16MU() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale16MA() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale16MA() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16MA() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32* t = iTarget->DataAddress(); + + TUint32 sourceY( 0 ); + + TUint32 a00( 0 ); + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 a01( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 a10( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + TUint32 a11( 0 ); + TUint32 b11( 0 ); + TUint32 g11( 0 ); + TUint32 r11( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint32* s = iSource->LineAddress( sourceY >> KDecimalBits ); + TUint32* snext = iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + TUint32 x0prev( TUint32( -1 ) ); + + TInt x; + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + a00 = UNPACK_16MA_ALPHA( p0 ); + b00 = UNPACK_16MA_BLUE( p0 ); + g00 = UNPACK_16MA_GREEN( p0 ); + r00 = UNPACK_16MA_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + a01 = UNPACK_16MA_ALPHA( p0 ); + b01 = UNPACK_16MA_BLUE( p0 ); + g01 = UNPACK_16MA_GREEN( p0 ); + r01 = UNPACK_16MA_RED( p0 ); + + p0 = *( snext + x0 ); + + a10 = UNPACK_16MA_ALPHA( p0 ); + b10 = UNPACK_16MA_BLUE( p0 ); + g10 = UNPACK_16MA_GREEN( p0 ); + r10 = UNPACK_16MA_RED( p0 ); + + p0 = *( snext + x0 + 1 ); + + a11 = UNPACK_16MA_ALPHA( p0 ); + b11 = UNPACK_16MA_BLUE( p0 ); + g11 = UNPACK_16MA_GREEN( p0 ); + r11 = UNPACK_16MA_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 ares = w1 * a00 + w2 * a01 + w3 * a10 + w4 * a11; + ares += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_16MA_ABGR( + ares >> KDecimalBits, + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + // last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + // If the source is still same then we don't have to fetch pixels + // from memory and unpack them again + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + a01 = a00 = UNPACK_16MA_ALPHA( p0 ); + b01 = b00 = UNPACK_16MA_BLUE( p0 ); + g01 = g00 = UNPACK_16MA_GREEN( p0 ); + r01 = r00 = UNPACK_16MA_RED( p0 ); + + p0 = *( snext + x0 ); + a11 = a10 = UNPACK_16MA_ALPHA( p0 ); + b11 = b10 = UNPACK_16MA_BLUE( p0 ); + g11 = g10 = UNPACK_16MA_GREEN( p0 ); + r11 = r10 = UNPACK_16MA_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 w1 = ( du * dv ) >> KDecimalBits; + TUint32 w2 = ( invdu * dv ) >> KDecimalBits; + TUint32 w3 = ( du * invdv ) >> KDecimalBits; + TUint32 w4 = ( invdu * invdv ) >> KDecimalBits; + + TUint32 ares = w1 * a00 + w2 * a01 + w3 * a10 + w4 * a11; + ares += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 bres = w1 * b00 + w2 * b01 + w3 * b10 + w4 * b11; + bres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 gres = w1 * g00 + w2 * g01 + w3 * g10 + w4 * g11; + gres += ( 1 << ( KDecimalBits - 1 ) ); + TUint32 rres = w1 * r00 + w2 * r01 + w3 * r10 + w4 * r11; + rres += ( 1 << ( KDecimalBits - 1 ) ); + + *t++ = PACK_16MA_ABGR( + ares >> KDecimalBits, + bres >> KDecimalBits, + gres >> KDecimalBits, + rres >> KDecimalBits ); + + sourceX += iU; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale16MA() <<" ), RThread().Id().operator TUint() ) ); + } + + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale2x4K64K( TUint32 aMask ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale2x4K64K( TUint32 aMask ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x4K64K() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint32* s = iSource->DataAddress(); + TUint32* d = iTarget->DataAddress(); + TInt y; + + // first average source rows + for( y = 0; y < sheight; y++ ) + { + TUint32* s1 = s; + TUint32* d1 = d; + + TUint32 p = *s1++; // 2 pixels + TUint32 p1 = p & 0xffff; + TUint32 p2 = ( p >> 16 ) & 0xffff; + TInt x; + + for( x = 0; x < swidth/2 - 1; x++ ) + { + TUint32 p1a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + *d1++ = p1 | ( p1a << 16 ); + + p = *s1++; // 2 pixels + + p1 = p & 0xffff; + TUint32 p2a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + *d1++ = p2 | ( p2a << 16 ); + + p2 = ( p >> 16 ) & 0xffff; + } + + TUint32 p1a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + *d1++ = p1 | ( p1a << 16 ); + + if( swidth & 1 ) + { + p = *s1; // 2 pixels + p1 = p & 0xffff; + TUint32 p2a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + *d1++ = p2 | ( p2a << 16 ); + + p = *--s1; // 2 pixels + p2 = ( p >> 16 ) & 0xffff; + *d1++ = p1 | ( p1 << 16 ); + } + else + { + p = *--s1; // 2 pixels + p2 = ( p >> 16 ) & 0xffff; + *d1++ = p2 | ( p2 << 16 ); + } + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + s = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( s ) + spitch ); + } + + // then average rows between + d = iTarget->DataAddress(); + + TUint32 mask32bit = aMask | ( aMask << 16 ); + + for( y = 0; y < sheight - 1; y++ ) + { + TUint32* d1 = reinterpret_cast< TUint32* >( d ); + TUint32* d2 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d1 ) + dpitch ); + TUint32* d3 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d2 ) + dpitch ); + + for( TInt x = 0; x < swidth; x++ ) + { + TUint32 p1 = *d1++; + TUint32 p2 = *d3++; + *d2++ = ( ( ( p1 ^ p2 ) & mask32bit ) >> 1 ) + ( p1 & p2 ); + } + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x4K64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale2x16M() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale2x16M() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x16M() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint8* s = reinterpret_cast< TUint8* >( iSource->DataAddress() ); + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TInt y; + + for( y = 0; y < sheight; y++ ) + { + TUint8* s2 = s; + TUint8* d1 = d; + + TUint32 g1 = 0; + TUint32 b1 = 0; + TUint32 r1 = 0; + + TUint32 g2 = 0; + TUint32 b2 = 0; + TUint32 r2 = 0; + + for( TInt x = 0; x < swidth - 1; x++ ) + { + g1 = *s2++; + b1 = *s2++; + r1 = *s2++; + + *d1++ = static_cast< TUint8 >( g1 ); + *d1++ = static_cast< TUint8 >( b1 ); + *d1++ = static_cast< TUint8 >( r1 ); + + g2 = s2[ 0 ]; + b2 = s2[ 1 ]; + r2 = s2[ 2 ]; + + *d1++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + } + + *d1++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + + *d1++ = static_cast< TUint8 >( g2 ); + *d1++ = static_cast< TUint8 >( b2 ); + *d1++ = static_cast< TUint8 >( r2 ); + + d += dpitch * 2; + s += spitch; + } + + // then average rows between + d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + for( y = 0; y < sheight - 1; y++ ) + { + TUint8* d1 = d; + TUint8* d2 = d1 + dpitch; + TUint8* d3 = d2 + dpitch; + + for( TInt x = 0; x < swidth; x++ ) + { + TUint32 g1 = *d1++; + TUint32 g2 = *d3++; + *d2++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + + TUint32 b1 = *d1++; + TUint32 b2 = *d3++; + *d2++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + + TUint32 r1 = *d1++; + TUint32 r2 = *d3++; + *d2++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + + g1 = *d1++; + g2 = *d3++; + *d2++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + + b1 = *d1++; + b2 = *d3++; + *d2++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + + r1 = *d1++; + r2 = *d3++; + *d2++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + } + + d += dpitch * 2; + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplBilinear::Scale2x16MU16MA() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplBilinear::Scale2x16MU16MA() + { + +#if defined ( __MARM_ARMI__ ) && defined ( NDEBUG ) && defined ( __USE_ASM_OPTS ) // From urel + + asm("stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, r11, r12, lr} "); + asm("ldr r11, .L1_671"); + asm("sub sp, sp, #24 "); + asm("mov r6, r0 "); + asm("ldr r1, [r6, #4] "); + asm("ldr r3, [r1, #0] "); + asm("add r0, sp, #16 "); + asm("ldr ip, [r3, #20] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("ldr r7, [sp, #20] "); + asm("ldr r1, [r6, #4] "); + asm("ldr r3, [r1, #0] "); + asm("add r0, sp, #8 "); + asm("ldr ip, [r3, #20] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("ldr r9, [sp, #8] "); + asm("str r9, [sp, #0] "); + asm("ldr r0, [r6, #4] "); + asm("ldr r3, [r0, #0] "); + asm("ldr ip, [r3, #24] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("str r0, [sp, #4] "); + asm("ldr r0, [r6, #8] "); + asm("ldr r3, [r0, #0] "); + asm("ldr ip, [r3, #24] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("mov sl, r0 "); + asm("ldr r0, [r6, #4] "); + asm("ldr r3, [r0, #0] "); + asm("ldr ip, [r3, #28] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("mov r4, r0 "); + asm("ldr r0, [r6, #8] "); + asm("ldr r3, [r0, #0] "); + asm("ldr ip, [r3, #28] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("mov r5, r0 "); + asm("subs r8, r7, #1 "); + asm("bmi .L1_654 "); + +asm(" .L1_656: "); + asm("mov ip, r5 "); + asm("mov lr, r4 "); + asm("ldr r1, [lr], #4 "); + asm("ldr r9, [sp, #0] "); + asm("cmp r9, #4"); + asm("bhi .L1_658_1"); + + // picture width lower or equal to 4 + asm("subs r0, r9, #2"); + asm("bmi .L1_658"); + + asm("ldr r9, [lr], #4 "); + asm("eor r2, r9, r1 "); + asm("and r2, r2, r11 "); + asm("and r3, r9, r1 "); + asm("add r3, r3, r2, lsr #1 "); + asm("str r1, [ip], #4"); + asm("str r3, [ip], #4"); + + asm("subs r0, r0, #1"); + asm("strmi r9, [ip], #4"); + asm("strmi r9, [ip], #4"); + asm("bmi .L1_658"); + + asm("ldr r1, [lr], #4 "); + asm("eor r2, r9, r1 "); + asm("and r2, r2, r11 "); + asm("and r3, r9, r1 "); + asm("add r3, r3, r2, lsr #1 "); + asm("str r9, [ip], #4"); + asm("str r3, [ip], #4"); + + asm("subs r0, r0, #1"); + asm("strmi r1, [ip], #4"); + asm("strmi r1, [ip], #4"); + asm("bmi .L1_658"); + + asm("ldr r9, [lr], #4 "); + asm("eor r2, r9, r1 "); + asm("and r2, r2, r11 "); + asm("and r3, r9, r1 "); + asm("add r3, r3, r2, lsr #1 "); + asm("str r1, [ip], #4"); + asm("str r3, [ip], #4"); + + asm("b .L1_658"); + + // picture width higher than 4 +asm(" .L1_658_1:"); + asm("mov r9, r9, lsr #1 "); + asm("subs r0, r9, #2 "); + asm("bmi .L1_658 "); + +asm(" .L1_660: "); + asm("ldr r9, [lr], #4 "); + asm("eor r2, r9, r1 "); + asm("and r2, r2, r11 "); + asm("and r3, r9, r1 "); + asm("add r3, r3, r2, lsr #1 "); + asm("stmia ip!, { r1, r3, r9 } "); + asm("sub r0, r0, #1 "); + asm("ldr r1, [lr], #4 "); + asm("eor r2, r9, r1 "); + asm("and r2, r2, r11 "); + asm("and r3, r9, r1 "); + asm("add r3, r3, r2, lsr #1 "); + asm("str r3, [ip], #4"); + asm("cmp r0,#0"); + asm("bge .L1_660 "); + +asm(" .L1_658: "); + asm("str r1, [ip], #4 "); + asm("str r1, [ip, #0] "); + asm("add r5, r5, sl, asl #1 "); + asm("ldr r9, [sp, #4] "); + asm("add r4, r4, r9 "); + asm("subs r8, r8, #1 "); + asm("bpl .L1_656 "); + +asm(" .L1_654: "); + asm("ldr r0, [r6, #8] "); + asm("ldr r3, [r0, #0] "); + asm("ldr ip, [r3, #28] "); + asm("mov lr, pc "); + asm("bx ip "); + asm("mov r5, r0 "); + asm("subs r8, r7, #2 "); + asm("bmi .L1_664 "); + +asm(" .L1_666: "); + asm("mov r7, r5 "); + asm("add r4, r5, sl "); + asm("add r6, r4, sl "); + asm("ldr r9, [sp, #0] "); + asm("subs lr, r9, #1 "); + asm("bmi .L1_668 "); + +asm(" .L1_670: "); + asm("ldr r1, [r7], #4 "); + asm("ldr r2, [r7], #4 "); + asm("ldr r0, [r6], #4 "); + asm("ldr ip, [r6], #4 "); + asm("eor r3, r1, r0 "); + asm("and r3, r3, r11 "); + asm("and r1, r1, r0 "); + asm("add r1, r1, r3, lsr #1 "); + asm("str r1, [r4], #4 "); + asm("eor r3, r2, ip "); + asm("and r3, r3, r11 "); + asm("and r2, r2, ip "); + asm("add r2, r2, r3, lsr #1 "); + asm("str r2, [r4], #4 "); + asm("subs lr, lr, #1 "); + asm("bpl .L1_670 "); + +asm(" .L1_668: "); + asm("add r5, r5, sl, asl #1 "); + asm("subs r8, r8, #1 "); + asm("bpl .L1_666 "); + +asm(" .L1_664: "); + asm("add r0, r5, sl "); + asm("mov r1, r5 "); + asm("mov r2, sl "); + asm("bl Copy__3MemPvPCvi "); + asm("add sp, sp, #24 "); + asm("ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, r11, r12, lr} "); + asm("bx lr "); + +asm(" .align 0 "); +asm(" .L1_671: "); +asm(" .word 0x00fefefe "); + +#else + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x16MU16MA() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint32 mask = 0xfefefefe; + TUint32* s = iSource->DataAddress(); + TUint32* d = iTarget->DataAddress(); + TInt y; + + TUint32 p1; + TUint32 p2; + TUint32 p3; + TUint32 p4; + + // first average source rows + for( y = sheight - 1; y >= 0; y-- ) + { + TUint32* s1 = s; + TUint32* d1 = d; + + TUint32 p2 = *s1++; + TUint32 p1 = 0; + + for( TInt x = swidth - 2; x >= 0; x-- ) + { + *d1++ = p2; + p1 = p2; + p2 = *s1++; + *d1++ = ( ( ( p1 ^ p2 ) & mask ) >> 1 ) + ( p1 & p2 ); + } + + *d1++ = p2; + *d1++ = p2; + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + s = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( s ) + spitch ); + } + + // then average rows between + d = iTarget->DataAddress(); + + for( y = sheight - 2; y >= 0; y-- ) + { + TUint32* d1 = reinterpret_cast< TUint32* >( d ); + TUint32* d2 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d1 ) + dpitch ); + TUint32* d3 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d2 ) + dpitch ); + + for( TInt x = swidth - 1; x >= 0; x-- ) + { + p1 = *d1++; + p2 = *d3++; + *d2++ = ( ( ( p1 ^ p2 ) & mask ) >> 1 ) + ( p1 & p2 ); + p3 = *d1++; + p4 = *d3++; + *d2++ = ( ( ( p3 ^ p4 ) & mask ) >> 1 ) + ( p3 & p4 ); + } + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplBilinear::Scale2x16MU16MA() <<" ), RThread().Id().operator TUint() ) ); + +#endif + + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageScalerImplNearest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageScalerImplNearest.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,522 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageScalerImplNearest.h" +#include "cvtimage.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +const TUint32 KDecimalBits = 16; // 16.16 pseudo real format + +// ============================ MEMBER FUNCTIONS =============================== + +// ======================= CVtImageScalerImplNearest ======================= + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale( TBool& aContinue ) +// ----------------------------------------------------------------------------- +TInt CVtImageScalerImplNearest::Scale( TBool& aContinue ) + { + TInt result( KErrNone ); + + aContinue = EFalse; + + // this implementation does not support different display modes for source + // and target + if( iSource->DisplayMode() != iTarget->DisplayMode() ) + { + return KErrNotSupported; + } + + // if sizes are same, just copy the data + if( iSource->Size() == iTarget->Size() ) + { + Mem::Copy( + iTarget->DataAddress(), + iSource->DataAddress(), + iTarget->BytesPerRow() * iTarget->Size().iHeight ); + } + else if( ( iSource->Size().iHeight * 2 == iTarget->Size().iHeight ) && + ( iSource->Size().iWidth * 2 == iTarget->Size().iWidth ) ) + { + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + Scale2x4K64K(); + break; + + case CVtImage::EVtColor16M: + Scale2x16M(); + break; + + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + Scale2x16MU16MA(); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMinimumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + else + { + Initialize(); + + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + Scale4K( + reinterpret_cast< const TUint16* >( + iSource->DataAddress() ), + iSource->BytesPerRow(), + reinterpret_cast< TUint16* >( iTarget->DataAddress() ), + iTarget->Size().iWidth, + iTarget->Size().iHeight, + iU, + iV ); + break; + + case CVtImage::EVtColor64K: + Scale64K( + reinterpret_cast< const TUint16* >( + iSource->DataAddress() ), + iSource->BytesPerRow(), + reinterpret_cast< TUint16* >( iTarget->DataAddress() ), + iTarget->Size().iWidth, + iTarget->Size().iHeight, + iU, + iV ); + break; + + case CVtImage::EVtColor16M: + Scale16M( + reinterpret_cast< const TUint8* >( + iSource->DataAddress() ), + iSource->BytesPerRow(), + reinterpret_cast< TUint8* >( iTarget->DataAddress() ), + iTarget->Size().iWidth, + iTarget->Size().iHeight, + iTarget->BytesPerRow(), + iU, + iV ); + break; + + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + Scale16MU16MA( + iSource->DataAddress(), + iSource->BytesPerRow(), + iTarget->DataAddress(), + iTarget->Size().iWidth, + iTarget->Size().iHeight, + iU, + iV ); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMinimumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + if( aSource.DisplayMode() != aTarget.DisplayMode() ) + { + User::Leave( KErrNotSupported ); + } + + switch( aSource.DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + case CVtImage::EVtColor16M: + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + break; + + default: + // Scaling for bitmaps is supported for other display modes + if ( !( aSource.Type() == CVtImage::EVtImageBitmap && + aTarget.Type() == CVtImage::EVtImageBitmap ) ) + { + User::Leave( KErrNotSupported ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Initialize() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Initialize() + { + iU = ( 1 << KDecimalBits ) * iSource->Size().iWidth / + iTarget->Size().iWidth + 1; + iV = ( 1 << KDecimalBits ) * iSource->Size().iHeight / + iTarget->Size().iHeight + 1; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale4K( +// const TUint16* aSrcPtr, TUint32 aSrcWidth, TUint16* aTrgPtr, +// TUint32 aTrgWidth, TUint32 aTrgHeight, TUint32 aDx, TUint32 aDy ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale4K( + const TUint16* aSrcPtr, + TUint32 aSrcWidth, + TUint16* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale4K() >>" ), RThread().Id().operator TUint() ) ); + // scaling 4K and 64K is equal procedure + Scale64K( aSrcPtr, aSrcWidth, aTrgPtr, aTrgWidth, aTrgHeight, aDx, aDy ); + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale4K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale64K( +// const TUint16* aSrcPtr, TUint32 aSrcPitch, TUint16* aTrgPtr, +// TUint32 aTrgWidth, TUint32 aTrgHeight, TUint32 aDx, TUint32 aDy ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale64K( + const TUint16* aSrcPtr, + TUint32 aSrcPitch, + TUint16* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale64K() >>" ), RThread().Id().operator TUint() ) ); + + TUint32 sy( 0 ); + + for( TUint32 y = 0; y < aTrgHeight; y++ ) + { + const TUint16* srow = + aSrcPtr + ( sy >> KDecimalBits ) * ( aSrcPitch >> 1 ); + + TUint32 sx( 0 ); + + TUint32 x( 0 ); + + // loop unrolled with 8 + for( ; x < ( aTrgWidth >> 3 ); x++ ) + { + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + } + + // handle remaining columns + for( x = 0; x < ( aTrgWidth & 7 ); x++ ) + { + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + } + + // if target width is not even aligning is needed + if( aTrgWidth & 1 ) + { + aTrgPtr++; + } + + sy += aDy; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale16M( +// const TUint8* aSrcPtr, TUint32 aSrcPitch, TUint8* aTrgPtr, +// TUint32 aTrgWidth, TUint32 aTrgHeight, TUint32 aTrgPitch, TUint32 aDx, TUint32 aDy ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale16M( + const TUint8* aSrcPtr, + TUint32 aSrcPitch, + TUint8* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aTrgPitch, + TUint32 aDx, + TUint32 aDy ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale16M() >>" ), RThread().Id().operator TUint() ) ); + + TUint32 sy( 0 ); + + for( TUint32 y = 0; y < aTrgHeight; y++ ) + { + const TUint8* s = aSrcPtr + ( sy >> KDecimalBits ) * aSrcPitch; + + TUint8* d = aTrgPtr; + + TUint32 sx( 0 ); + + TUint32 x( 0 ); + + for( ; x < aTrgWidth; x++ ) + { + const TUint8* tempSrc = s + ( sx >> KDecimalBits ) * 3; + *d++ = *tempSrc++; + *d++ = *tempSrc++; + *d++ = *tempSrc++; + sx += aDx; + } + + aTrgPtr += aTrgPitch; + + sy += aDy; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale16MU16MA( const TUint32* aSrcPtr, +// TUint32 aSrcPitch, TUint32* aTrgPtr, TUint32 aTrgWidth, TUint32 aTrgHeight, +// TUint32 aDx, TUint32 aDy ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale16MU16MA( + const TUint32* aSrcPtr, + TUint32 aSrcPitch, + TUint32* aTrgPtr, + TUint32 aTrgWidth, + TUint32 aTrgHeight, + TUint32 aDx, + TUint32 aDy ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale16MU16MA() >>" ), RThread().Id().operator TUint() ) ); + + TUint32 sy( 0 ); + + for( TUint32 y = 0; y < aTrgHeight; y++ ) + { + const TUint32* srow = + aSrcPtr + ( sy >> KDecimalBits ) * ( aSrcPitch >> 2 ); + + TUint32 sx( 0 ); + + TUint32 x( 0 ); + + // loop unrolled with 8 + for( ; x < ( aTrgWidth >> 3 ); x++ ) + { + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + } + + // handle remaining columns + for( x = 0; x < ( aTrgWidth & 7 ); x++ ) + { + *aTrgPtr++ = srow[ sx >> KDecimalBits ]; + sx += aDx; + } + + sy += aDy; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale16MU16MA() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale2x4K64K() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale2x4K64K() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x4K64K() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint16* s = reinterpret_cast< TUint16* >( iSource->DataAddress() ); + TUint32* d = iTarget->DataAddress(); + + for( TInt y = 0; y < sheight; y++ ) + { + TUint16* s2 = s; + TUint32* d1 = d; + for( TInt x = 0; x < swidth; x++ ) + { + TUint32 p = *s2++; + p |= ( p << 16 ); + *d1++ = p; + } + d = reinterpret_cast< TUint32* >( + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ) ); + s = reinterpret_cast< TUint16* >( + reinterpret_cast< TUint8* >( s ) + spitch ); + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x4K64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale2x16M() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale2x16M() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x16M() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint8* s = reinterpret_cast< TUint8* >( iSource->DataAddress() ); + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + for( TInt y = 0; y < sheight; y++ ) + { + TUint8* s2 = s; + TUint8* d1 = d; + for( TInt x = 0; x < swidth; x++ ) + { + TUint8 g = *s2++; + TUint8 b = *s2++; + TUint8 r = *s2++; + + *d1++ = g; + *d1++ = b; + *d1++ = r; + + *d1++ = g; + *d1++ = b; + *d1++ = r; + } + d = Mem::Copy( d + dpitch, d, dpitch ); + s += spitch; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplNearest::Scale2x16MU16MA() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplNearest::Scale2x16MU16MA() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x16MU16MA() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint32* s = iSource->DataAddress(); + TUint32* d = iTarget->DataAddress(); + + for( TInt y = 0; y < sheight; y++ ) + { + TUint32* s2 = s; + TUint32* d1 = d; + for( TInt x = 0; x < swidth; x++ ) + { + TUint32 p = *s2++; + *d1++ = p; + *d1++ = p; + } + d = reinterpret_cast< TUint32* >( + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ) ); + s = reinterpret_cast< TUint32* >( + reinterpret_cast< TUint8* >( s ) + spitch ); + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplNearest::Scale2x16MU16MA() <<" ), RThread().Id().operator TUint() ) ); + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/CVtImageScalerImplWeightedAverage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/CVtImageScalerImplWeightedAverage.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1183 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVtImageScalerImplWeightedAverage.h" +#include "cvtimage.h" +#include "CVtImageScalerMacros.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +const TUint32 KDecimalBits = 16; // 16.16 pseudo real format + +// ============================ MEMBER FUNCTIONS =============================== + +// ======================= CVtImageScalerImplWeightedAverage =================== + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale( TBool& aContinue ) +// ----------------------------------------------------------------------------- +TInt CVtImageScalerImplWeightedAverage::Scale( TBool& aContinue ) + { + TInt result( KErrNone ); + + aContinue = EFalse; + + // this implementation does not support different display modes for source + // and target + if( iSource->DisplayMode() != iTarget->DisplayMode() ) + { + return KErrNotSupported; + } + + // if sizes are same, just copy the data + if( iSource->Size() == iTarget->Size() ) + { + Mem::Copy( + iTarget->DataAddress(), + iSource->DataAddress(), + iTarget->BytesPerRow() * iTarget->Size().iHeight ); + } + else if ( ( iSource->Size().iHeight * 2 == iTarget->Size().iHeight ) + && ( iSource->Size().iWidth * 2 == iTarget->Size().iWidth ) ) + { + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + Scale2x4K64K( 0xeee ); // 0000ggggbbbbrrrr -> + break; // mask = %0000111011101110 = 0xeee + + case CVtImage::EVtColor64K: + Scale2x4K64K( 0xf7de ); // bbbbbggggggrrrrr -> + break; // mask = %1111011111011110 = 0xf7de + + case CVtImage::EVtColor16M: + Scale2x16M(); + break; + + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + Scale2x16MU16MA(); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMediumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + else + { + Initialize(); + + switch( iSource->DisplayMode() ) + { + case CVtImage::EVtColor4K: + Scale4K(); + break; + + case CVtImage::EVtColor64K: + Scale64K(); + break; + + case CVtImage::EVtColor16M: + Scale16M(); + break; + + case CVtImage::EVtColor16MU: + Scale16MU(); + break; + + case CVtImage::EVtColor16MA: + Scale16MA(); + break; + + default: + if ( iSource->Type() == CVtImage::EVtImageBitmap && + iTarget->Type() == CVtImage::EVtImageBitmap ) + { + TRAPD( error, + ScaleWithBitmapScalerL( + CBitmapScaler::EMediumQuality ) ); + result = error; + } + else + { + result = KErrNotSupported; + } + } + } + + return result; + } + + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::ValidateSourceTargetL( +// const CVtImage& aSource, CVtImage& aTarget ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::ValidateSourceTargetL( + const CVtImage& aSource, + CVtImage& aTarget ) + { + // source and target must have same displaymode + if( aSource.DisplayMode() != aTarget.DisplayMode() ) + { + User::Leave( KErrNotSupported ); + } + + // only 4K, 64K, 16M and 16MU modes are supported + switch( aSource.DisplayMode() ) + { + case CVtImage::EVtColor4K: + case CVtImage::EVtColor64K: + case CVtImage::EVtColor16M: + case CVtImage::EVtColor16MU: + case CVtImage::EVtColor16MA: + break; + + default: + // Scaling for bitmaps is supported for other display modes + if ( !( aSource.Type() == CVtImage::EVtImageBitmap && + aTarget.Type() == CVtImage::EVtImageBitmap ) ) + { + User::Leave( KErrNotSupported ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Initialize() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Initialize() + { + iU = ( 1 << KDecimalBits ) * iSource->Size().iWidth / + iTarget->Size().iWidth; + iV = ( 1 << KDecimalBits ) * iSource->Size().iHeight / + iTarget->Size().iHeight; + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale4K() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale4K() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale4K() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint16* t = reinterpret_cast< TUint16* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint16* s = reinterpret_cast< TUint16* >( + iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint16* snext = reinterpret_cast< TUint16* >( + iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + + TInt x; + + TUint32 x0prev( TUint32( -1 ) ); + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_4K_BLUE( p0 ); + g00 = UNPACK_4K_GREEN( p0 ); + r00 = UNPACK_4K_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_4K_BLUE( p0 ); + g01 = UNPACK_4K_GREEN( p0 ); + r01 = UNPACK_4K_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_4K_BLUE( p0 ); + g10 = UNPACK_4K_GREEN( p0 ); + r10 = UNPACK_4K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_4K_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // handle last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_4K_BLUE( p0 ); + g01 = g00 = UNPACK_4K_GREEN( p0 ); + r01 = r00 = UNPACK_4K_RED( p0 ); + + p0 = *( snext + x0 ); + b10 = UNPACK_4K_BLUE( p0 ); + g10 = UNPACK_4K_GREEN( p0 ); + r10 = UNPACK_4K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_4K_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // if width is not even -> then we need to skip one additional byte + if( width & 1 ) + { + t++; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale4K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale64K() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale64K() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale64K() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint16* t = reinterpret_cast< TUint16* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint16* s = reinterpret_cast< TUint16* > + ( iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint16* snext = reinterpret_cast< TUint16* > + ( iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + + TInt x; + + TUint32 x0prev( TUint32( -1 ) ); + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_64K_BLUE( p0 ); + g00 = UNPACK_64K_GREEN( p0 ); + r00 = UNPACK_64K_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_64K_BLUE( p0 ); + g01 = UNPACK_64K_GREEN( p0 ); + r01 = UNPACK_64K_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_64K_BLUE( p0 ); + g10 = UNPACK_64K_GREEN( p0 ); + r10 = UNPACK_64K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_64K_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // handle last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_64K_BLUE( p0 ); + g01 = g00 = UNPACK_64K_GREEN( p0 ); + r01 = r00 = UNPACK_64K_RED( p0 ); + + p0 = *( snext + x0 ); + b10 = UNPACK_64K_BLUE( p0 ); + g10 = UNPACK_64K_GREEN( p0 ); + r10 = UNPACK_64K_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_64K_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // if width is not even -> then we need to skip one additional byte + if( width & 1 ) + { + t++; + } + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale16M() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale16M() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16M() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32 t_pitch = iTarget->BytesPerRow(); + + TUint8* t = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint8* s = reinterpret_cast< TUint8* >( + iSource->LineAddress( sourceY >> KDecimalBits ) ); + TUint8* snext = reinterpret_cast< TUint8* >( + iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ) ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + + TInt x; + + TUint32 x0prev( TUint32( -1 ) ); + + TUint8* d = t; + + // first columns + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = ( sourceX >> KDecimalBits ) * 3; + + if( x0 != x0prev ) + { + TUint8* tempSrc = s + x0; + + b00 = *tempSrc++; + g00 = *tempSrc++; + r00 = *tempSrc++; + + b01 = *tempSrc++; + g01 = *tempSrc++; + r01 = *tempSrc++; + + tempSrc = snext + x0; + + b10 = *tempSrc++; + g10 = *tempSrc++; + r10 = *tempSrc++; + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *d++ = static_cast< TUint8 >( bres >> ( KDecimalBits + 1 ) ); + *d++ = static_cast< TUint8 >( gres >> ( KDecimalBits + 1 ) ); + *d++ = static_cast< TUint8 >( rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // handle last columns + for( ; x < width; x++ ) + { + TUint32 x0 = ( sourceX >> KDecimalBits ) * 3; + + if( x0 != x0prev ) + { + TUint8* tempSrc = s + x0; + + b01 = b00 = *tempSrc++; + g01 = g00 = *tempSrc++; + r01 = r00 = *tempSrc++; + + tempSrc = snext + x0; + + b10 = *tempSrc++; + g10 = *tempSrc++; + r10 = *tempSrc++; + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *d++ = static_cast< TUint8 >( bres >> ( KDecimalBits + 1 ) ); + *d++ = static_cast< TUint8 >( gres >> ( KDecimalBits + 1 ) ); + *d++ = static_cast< TUint8 >( rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + t += t_pitch; + + sourceY += iV; + } + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale16MU() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale16MU() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16MU() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32* t = iTarget->DataAddress(); + + TUint32 sourceY( 0 ); + + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint32* s = iSource->LineAddress( sourceY >> KDecimalBits ); + TUint32* snext = iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + + TInt x; + + TUint32 x0prev( TUint32( -1 ) ); + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + b00 = UNPACK_16MU_BLUE( p0 ); + g00 = UNPACK_16MU_GREEN( p0 ); + r00 = UNPACK_16MU_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + b01 = UNPACK_16MU_BLUE( p0 ); + g01 = UNPACK_16MU_GREEN( p0 ); + r01 = UNPACK_16MU_RED( p0 ); + + p0 = *( snext + x0 ); + + b10 = UNPACK_16MU_BLUE( p0 ); + g10 = UNPACK_16MU_GREEN( p0 ); + r10 = UNPACK_16MU_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_16MU_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // handle last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + b01 = b00 = UNPACK_16MU_BLUE( p0 ); + g01 = g00 = UNPACK_16MU_GREEN( p0 ); + r01 = r00 = UNPACK_16MU_RED( p0 ); + + p0 = *( snext + x0 ); + b10 = UNPACK_16MU_BLUE( p0 ); + g10 = UNPACK_16MU_GREEN( p0 ); + r10 = UNPACK_16MU_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_16MU_BGR( + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + sourceY += iV; + } + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16MU() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale16MA() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale16MA() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16MA() >>" ), RThread().Id().operator TUint() ) ); + + TInt width = iTarget->Size().iWidth; + + TInt height = iTarget->Size().iHeight; + + TInt mod_width = width - ( ( 1 << KDecimalBits ) / iU ); + + TUint32* t = iTarget->DataAddress(); + + TUint32 sourceY( 0 ); + + TUint32 a00( 0 ); + TUint32 b00( 0 ); + TUint32 g00( 0 ); + TUint32 r00( 0 ); + TUint32 a01( 0 ); + TUint32 b01( 0 ); + TUint32 g01( 0 ); + TUint32 r01( 0 ); + TUint32 a10( 0 ); + TUint32 b10( 0 ); + TUint32 g10( 0 ); + TUint32 r10( 0 ); + + for( TInt y = 0; y < height; y++ ) + { + TUint32* s = iSource->LineAddress( sourceY >> KDecimalBits ); + TUint32* snext = iSource->LineAddress( ( sourceY >> KDecimalBits ) + 1 ); + + TUint32 invdv = sourceY & ( ( 1 << KDecimalBits ) - 1 ); // decimal part + TUint32 dv = ( 1 << KDecimalBits ) - invdv; // 1 - decimal part + + TUint32 sourceX( 0 ); + + TInt x; + + TUint32 x0prev( TUint32( -1 ) ); + + for( x = 0; x < mod_width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + + a00 = UNPACK_16MA_ALPHA( p0 ); + b00 = UNPACK_16MA_BLUE( p0 ); + g00 = UNPACK_16MA_GREEN( p0 ); + r00 = UNPACK_16MA_RED( p0 ); + + p0 = *( s + x0 + 1 ); + + a01 = UNPACK_16MA_ALPHA( p0 ); + b01 = UNPACK_16MA_BLUE( p0 ); + g01 = UNPACK_16MA_GREEN( p0 ); + r01 = UNPACK_16MA_RED( p0 ); + + p0 = *( snext + x0 ); + + a10 = UNPACK_16MA_ALPHA( p0 ); + b10 = UNPACK_16MA_BLUE( p0 ); + g10 = UNPACK_16MA_GREEN( p0 ); + r10 = UNPACK_16MA_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 ares = ( du + dv ) * a00 + invdu * a01 + invdv * a10; + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_16MA_ABGR( + ares >> ( KDecimalBits + 1 ), + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + // handle last columns + for( ; x < width; x++ ) + { + TUint32 x0 = sourceX >> KDecimalBits; + + if( x0 != x0prev ) + { + TUint32 p0 = *( s + x0 ); + a01 = a00 = UNPACK_16MA_ALPHA( p0 ); + b01 = b00 = UNPACK_16MA_BLUE( p0 ); + g01 = g00 = UNPACK_16MA_GREEN( p0 ); + r01 = r00 = UNPACK_16MA_RED( p0 ); + + p0 = *( snext + x0 ); + a10 = UNPACK_16MA_ALPHA( p0 ); + b10 = UNPACK_16MA_BLUE( p0 ); + g10 = UNPACK_16MA_GREEN( p0 ); + r10 = UNPACK_16MA_RED( p0 ); + + x0prev = x0; + } + + TUint32 invdu = sourceX & ( ( 1 << KDecimalBits ) - 1 ); // decimal + TUint32 du = ( 1 << KDecimalBits ) - invdu; // 1 - decimal part + + TUint32 ares = ( du + dv ) * a00 + invdu * a01 + invdv * a10; + TUint32 bres = ( du + dv ) * b00 + invdu * b01 + invdv * b10; + TUint32 gres = ( du + dv ) * g00 + invdu * g01 + invdv * g10; + TUint32 rres = ( du + dv ) * r00 + invdu * r01 + invdv * r10; + + *t++ = PACK_16MA_ABGR( + ares >> ( KDecimalBits + 1 ), + bres >> ( KDecimalBits + 1 ), + gres >> ( KDecimalBits + 1 ), + rres >> ( KDecimalBits + 1 ) ); + + sourceX += iU; + } + + sourceY += iV; + } + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale16MA() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale2x4K64K( TUint32 aMask ) +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale2x4K64K( TUint32 aMask ) + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x4K64K() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint32* s = iSource->DataAddress(); + TUint32* d = iTarget->DataAddress(); + TInt y; + + // first average source rows + for( y = 0; y < sheight; y++ ) + { + TUint32* s1 = s; + TUint32* d1 = d; + + TUint32 p = *s1++; // 2 pixels + TUint32 p1 = p & 0xffff; + TUint32 p2 = ( p >> 16 ) & 0xffff; + TInt x; + + for( x = 0; x < swidth/2 - 1; x++ ) + { + TUint32 p1a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + p1a = ( ( ( p1 ^ p1a ) & aMask ) >> 1 ) + ( p1 & p1a ); + *d1++ = p1 | ( p1a << 16 ); + + p = *s1++; // 2 pixels + + p1 = p & 0xffff; + TUint32 p2a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + p2a = ( ( ( p2a ^ p2 ) & aMask ) >> 1 ) + ( p2a & p2 ); + *d1++ = p2 | ( p2a << 16 ); + + p2 = ( p >> 16 ) & 0xffff; + } + + TUint32 p1a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + p1a = ( ( ( p1 ^ p1a ) & aMask ) >> 1 ) + ( p1 & p1a ); + *d1++ = p1 | ( p1a << 16 ); + + if( swidth & 1 ) + { + p = *s1; // 2 pixels + p1 = p & 0xffff; + TUint32 p2a = ( ( ( p1 ^ p2 ) & aMask ) >> 1 ) + ( p1 & p2 ); + p2a = ( ( ( p2a ^ p2 ) & aMask ) >> 1 ) + ( p2a & p2 ); + *d1++ = p2 | ( p2a << 16 ); + + p = *--s1; // 2 pixels + p2 = ( p >> 16 ) & 0xffff; + *d1++ = p1 | ( p1 << 16 ); + } + else + { + p = *--s1; // 2 pixels + p2 = ( p >> 16 ) & 0xffff; + *d1++ = p2 | ( p2 << 16 ); + } + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + s = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( s ) + spitch ); + } + + // then average rows between + d = iTarget->DataAddress(); + + for( y = 0; y < sheight - 1; y++ ) + { + TUint32* d1 = reinterpret_cast< TUint32* >( d ); + TUint32* d2 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d1 ) + dpitch ); + TUint32* d3 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d2 ) + dpitch ); + + TUint32 p1 = *d1++; + for( TInt x = 0; x < swidth - 1; x++ ) + { + TUint32 p11 = p1 & 0xffff; + TUint32 p3 = *d3++; + TUint32 p31 = p3 & 0xffff; + + TUint32 r1 = ( ( ( p11 ^ p31 ) & aMask ) >> 1 ) + ( p11 & p31 ); + r1 = ( ( ( p11 ^ r1 ) & aMask ) >> 1 ) + ( p11 & r1 ); + + p1 = *d1++; // read ahead + TUint32 p21 = p1 & 0xffff; + TUint32 r2 = ( ( ( p21 ^ p31 ) & aMask ) >> 1 ) + ( p21 & p31 ); + r2 = ( ( ( p11 ^ r2 ) & aMask ) >> 1 ) + ( p11 & r2 ); + + *d2++ = r1 | ( r2 << 16 ); + } + + TUint32 p11 = p1 & 0xffff; + TUint32 p3 = *d3++; + TUint32 p31 = p3 & 0xffff; + TUint32 r1 = ( ( ( p11 ^ p31 ) & aMask ) >> 1 ) + ( p11 & p31 ); + r1 = ( ( ( p11 ^ r1 ) & aMask ) >> 1 ) + ( p11 & r1 ); + *d2++ = r1 | ( r1 << 16 ); + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x4K64K() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale2x16M() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale2x16M() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x16M() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint8* s = reinterpret_cast< TUint8* >( iSource->DataAddress() ); + TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + TInt y; + + for( y = 0; y < sheight; y++ ) + { + TUint8* s2 = s; + TUint8* d1 = d; + + TUint32 g1 = 0; + TUint32 b1 = 0; + TUint32 r1 = 0; + + TUint32 g2 = 0; + TUint32 b2 = 0; + TUint32 r2 = 0; + + for( TInt x = 0; x < swidth - 1; x++ ) + { + g1 = *s2++; + b1 = *s2++; + r1 = *s2++; + + *d1++ = static_cast< TUint8 >( g1 ); + *d1++ = static_cast< TUint8 >( b1 ); + *d1++ = static_cast< TUint8 >( r1 ); + + g2 = s2[ 0 ]; + b2 = s2[ 1 ]; + r2 = s2[ 2 ]; + + *d1++ = static_cast< TUint8 >( ( g1 + ( ( g1 + g2 ) >> 1 ) ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( b1 + ( ( b1 + b2 ) >> 1 ) ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( r1 + ( ( r1 + r2 ) >> 1 ) ) >> 1 ); + } + + *d1++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + *d1++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + + *d1++ = static_cast< TUint8 >( g2 ); + *d1++ = static_cast< TUint8 >( b2 ); + *d1++ = static_cast< TUint8 >( r2 ); + + d += dpitch * 2; + s += spitch; + } + + // then average rows between + d = reinterpret_cast< TUint8* >( iTarget->DataAddress() ); + + for( y = 0; y < sheight - 1; y++ ) + { + TUint8* d1 = d; + TUint8* d2 = d1 + dpitch; + TUint8* d3 = d2 + dpitch; + + for( TInt x = 0; x < swidth; x++ ) + { + TUint32 g1 = *d1++; + TUint32 g2 = *d3++; + *d2++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + + TUint32 b1 = *d1++; + TUint32 b2 = *d3++; + *d2++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + + TUint32 r1 = *d1++; + TUint32 r2 = *d3++; + *d2++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + + g1 = *d1++; + g2 = *d3++; + *d2++ = static_cast< TUint8 >( ( g1 + g2 ) >> 1 ); + + b1 = *d1++; + b2 = *d3++; + *d2++ = static_cast< TUint8 >( ( b1 + b2 ) >> 1 ); + + r1 = *d1++; + r2 = *d3++; + *d2++ = static_cast< TUint8 >( ( r1 + r2 ) >> 1 ); + } + + d += dpitch * 2; + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x16M() <<" ), RThread().Id().operator TUint() ) ); + } + +// ----------------------------------------------------------------------------- +// CVtImageScalerImplWeightedAverage::Scale2x16MU16MA() +// ----------------------------------------------------------------------------- +void CVtImageScalerImplWeightedAverage::Scale2x16MU16MA() + { + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x16MU16MA() >>" ), RThread().Id().operator TUint() ) ); + + TInt sheight = iSource->Size().iHeight; + TInt swidth = iSource->Size().iWidth; + TInt spitch = iSource->BytesPerRow(); + TInt dpitch = iTarget->BytesPerRow(); + + TUint32 mask = 0xfefefefe; + TUint32* s = iSource->DataAddress(); + TUint32* d = iTarget->DataAddress(); + TInt y; + + // first average source rows + for( y = 0; y < sheight; y++ ) + { + TInt x; + TUint32* s1 = s; + TUint32* d1 = d; + TUint32 p2 = *s1++; + TUint32 p1 = 0; + for( x = 0; x < swidth - 1; x++ ) + { + p1 = p2; + *d1++ = p1; + p2 = *s1++; + TUint32 p1a = ( ( ( p1 ^ p2 ) & mask ) >> 1 ) + ( p1 & p2 ); + p1a = ( ( ( p1 ^ p1a ) & mask ) >> 1 ) + ( p1 & p1a ); + *d1++ = p1a; + } + + if( swidth & 1 ) + { + TUint32 p2a = ( ( ( p1 ^ p2 ) & mask ) >> 1 ) + ( p1 & p2 ); + p2a = ( ( ( p2a ^ p2 ) & mask ) >> 1 ) + ( p2a & p2 ); + *d1++ = p2a; + *d1++ = p2; + } + else + { + p2 = *--s1; + *d1++ = p2; + *d1++ = p2; + } + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + s = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( s ) + spitch ); + } + + // then average rows between + d = iTarget->DataAddress(); + + for( y = 0; y < sheight - 1; y++ ) + { + TUint32* d1 = reinterpret_cast< TUint32* >( d ); + TUint32* d2 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d1 ) + dpitch ); + TUint32* d3 = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d2 ) + dpitch ); + + TUint32 p1 = *d1++; + + for( TInt x = 0; x < swidth - 1; x++ ) + { + TUint32 p3 = *d3++; + d3++; + + TUint32 r1 = ( ( ( p1 ^ p3 ) & mask ) >> 1 ) + ( p1 & p3 ); + r1 = ( ( ( p1 ^ r1 ) & mask ) >> 1 ) + ( p1 & r1 ); + + *d2++ = r1; + + d1++; + TUint32 p2 = *d1++; + + TUint32 r2 = ( ( ( p2 ^ p3 ) & mask ) >> 1 ) + ( p2 & p3 ); + r2 = ( ( ( p1 ^ r2 ) & mask ) >> 1 ) + ( p1 & r2 ); + + *d2++ = r2; + + p1 = p2; + } + + TUint32 p3 = *d3++; + TUint32 r1 = ( ( ( p1 ^ p3 ) & mask ) >> 1 ) + ( p1 & p3 ); + r1 = ( ( ( p1 ^ r1 ) & mask ) >> 1 ) + ( p1 & r1 ); + *d2++ = r1; + *d2++ = r1; + + d = reinterpret_cast< TUint32* > + ( reinterpret_cast< TUint8* >( d ) + dpitch * 2 ); + } + + // last row is just copy of previous row, because we cannot calculate + // average + Mem::Copy( reinterpret_cast< TUint8* >( d ) + dpitch, d, dpitch ); + + __IF_DEBUG( Print( _L( "ImageScaler [%d]: CVtImageScalerImplWeightedAverage::Scale2x16MU16MA() <<" ), RThread().Id().operator TUint() ) ); + } + +// End of File + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/src/vtyuvconverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/src/vtyuvconverter.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2005-2006 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: YUV format transcoder. +* +*/ + + +#include "vtyuvconverter.h" + +#ifdef _DEBUG + #include + #define PRINT RDebug::Print + #define _IFDBG(a) a +#else + #define PRINT + #define _IFDBG(a) +#endif + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// VtYuvConverter::ConvertFrom420PlanarTo422Interleaved +// --------------------------------------------------------------------------- +// +TInt VtYuvConverter::ConvertFrom420PlanarTo422Interleaved( + const TDesC8& aSource, + const TSize& aSize, + TDes8& aTarget, + TInt aStride ) + { + _IFDBG(PRINT( _L( "VtYuvConverter::ConvertFrom420PlanarTo422Interleaved<" ) )); + + if ( aTarget.MaxLength() < ByteSize422Interleaved( aSize ) ) + { + _IFDBG(PRINT( _L( "VtYuvConverter::ConvertFrom420PlanarTo422Interleaved> TargetMaxLength < ByteSize422" ) )); + return KErrUnderflow; + } + + if ( aSource.Size() != ByteSize420Planar( aSize ) ) + { + _IFDBG(PRINT( _L( "VtYuvConverter::ConvertFrom420PlanarTo422Interleaved> 420SourceSize != ByteSize420" ) )); + return KErrArgument; + } + + TInt planeSize( aSize.iWidth * aSize.iHeight ); + const TUint8* sy = aSource.Ptr(); + const TUint8* su = sy + planeSize; + const TUint8* sv = su + ( planeSize >> 2 ); + TUint8* t = const_cast< TUint8* >( aTarget.Ptr() ); + + TUint8* tsave = t; + for ( TInt y = ( aSize.iHeight >> 1 ) - 1; y >= 0; y-- ) + { + const TUint8* susave = su; + const TUint8* svsave = sv; + for ( TInt x = ( aSize.iWidth >> 1 ) - 1; x >= 0; x-- ) + { + *t++ = *su++; + *t++ = *sy++; + *t++ = *sv++; + *t++ = *sy++; + } + tsave = t = tsave + aStride; + su = susave; + sv = svsave; + for ( TInt x = ( aSize.iWidth >> 1 ) - 1; x >= 0; x-- ) + { + *t++ = *su++; + *t++ = *sy++; + *t++ = *sv++; + *t++ = *sy++; + } + tsave = t = tsave + aStride; + } + + _IFDBG(PRINT( _L( "VtYuvConverter::ConvertFrom420PlanarTo422Interleaved>" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// VtYuvConverter::ByteSize420Planar +// --------------------------------------------------------------------------- +// +TInt VtYuvConverter::ByteSize420Planar( const TSize& aSizeInPixels ) + { + TInt planeSize( aSizeInPixels.iWidth * aSizeInPixels.iHeight ); + return planeSize + planeSize / 2; + } + +// --------------------------------------------------------------------------- +// VtYuvConverter::ByteSize422Interleaved +// --------------------------------------------------------------------------- +// +TInt VtYuvConverter::ByteSize422Interleaved( const TSize& aSizeInPixels ) + { + TInt planeSize( aSizeInPixels.iWidth * aSizeInPixels.iHeight ); + return planeSize * 2; + } diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/EABI/VideoSourceU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/EABI/VideoSourceU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,38 @@ +EXPORTS + _ZN13CVSController4NewLEP21MVSControllerObserver @ 1 NONAME + _ZN14CVsFrameBuffer4NewLEi @ 2 NONAME + _ZN14CVsFrameBufferD0Ev @ 3 NONAME + _ZN14CVsFrameBufferD1Ev @ 4 NONAME + _ZN14CVsFrameBufferD2Ev @ 5 NONAME + _ZN16CVSMMFDataBuffer4NewLEi @ 6 NONAME + _ZN16CVSMMFDataBuffer4NewLEv @ 7 NONAME + _ZN16CVSMMFDataBufferD0Ev @ 8 NONAME + _ZN16CVSMMFDataBufferD1Ev @ 9 NONAME + _ZN16CVSMMFDataBufferD2Ev @ 10 NONAME + _ZTI14CVsFrameBuffer @ 11 NONAME ; ## + _ZTI15CVSDataProvider @ 12 NONAME ; ## + _ZTI16CVSControllerImp @ 13 NONAME ; ## + _ZTI16CVSDataSourceImp @ 14 NONAME ; ## + _ZTI16CVSMMFDataBuffer @ 15 NONAME ; ## + _ZTI17CVSFrameRateTimer @ 16 NONAME ; ## + _ZTI18CSyncCameraReserve @ 17 NONAME ; ## + _ZTI19CVSProviderSwitchAO @ 18 NONAME ; ## + _ZTI21CVSCameraDataProvider @ 19 NONAME ; ## + _ZTI23CVSDataSourceObserverAO @ 20 NONAME ; ## + _ZTI24CProviderErrorNotifierAO @ 21 NONAME ; ## + _ZTI25CVSStillImageDataProvider @ 22 NONAME ; ## + _ZTI28CVSOnboardCameraDataProvider @ 23 NONAME ; ## + _ZTV14CVsFrameBuffer @ 24 NONAME ; ## + _ZTV15CVSDataProvider @ 25 NONAME ; ## + _ZTV16CVSControllerImp @ 26 NONAME ; ## + _ZTV16CVSDataSourceImp @ 27 NONAME ; ## + _ZTV16CVSMMFDataBuffer @ 28 NONAME ; ## + _ZTV17CVSFrameRateTimer @ 29 NONAME ; ## + _ZTV18CSyncCameraReserve @ 30 NONAME ; ## + _ZTV19CVSProviderSwitchAO @ 31 NONAME ; ## + _ZTV21CVSCameraDataProvider @ 32 NONAME ; ## + _ZTV23CVSDataSourceObserverAO @ 33 NONAME ; ## + _ZTV24CProviderErrorNotifierAO @ 34 NONAME ; ## + _ZTV25CVSStillImageDataProvider @ 35 NONAME ; ## + _ZTV28CVSOnboardCameraDataProvider @ 36 NONAME ; ## + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/bmarm/VIDEOSOURCEU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/bmarm/VIDEOSOURCEU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,4 @@ +EXPORTS + NewL__13CVSControllerP21MVSControllerObserver @ 1 NONAME R3UNUSED ; CVSController::NewL(MVSControllerObserver *) + SwitchDataProviderL__16CVSDataSourceImpP15CVSDataProvider @ 2 NONAME R3UNUSED ; CVSDataSourceImp::SwitchDataProviderL(CVSDataProvider *) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/bwins/VIDEOSOURCEU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/bwins/VIDEOSOURCEU.DEF Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,8 @@ +EXPORTS + ??1CVSMMFDataBuffer@@UAE@XZ @ 1 NONAME ; CVSMMFDataBuffer::~CVSMMFDataBuffer(void) + ??1CVsFrameBuffer@@UAE@XZ @ 2 NONAME ; CVsFrameBuffer::~CVsFrameBuffer(void) + ?NewL@CVSController@@SAPAV1@PAVMVSControllerObserver@@@Z @ 3 NONAME ; class CVSController * CVSController::NewL(class MVSControllerObserver *) + ?NewL@CVSMMFDataBuffer@@SAPAV1@H@Z @ 4 NONAME ; class CVSMMFDataBuffer * CVSMMFDataBuffer::NewL(int) + ?NewL@CVSMMFDataBuffer@@SAPAV1@XZ @ 5 NONAME ; class CVSMMFDataBuffer * CVSMMFDataBuffer::NewL(void) + ?NewL@CVsFrameBuffer@@SAPAV1@H@Z @ 6 NONAME ; class CVsFrameBuffer * CVsFrameBuffer::NewL(int) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/data/videosource_stub.SIS Binary file vtprotocolplugins/VideoSource/data/videosource_stub.SIS has changed diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/data/videosource_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/data/videosource_stub.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -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: +; +; Languages +&EN + +; Header +#{"videosource"}, (0x101F8692), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +;Files +""-"z:\sys\bin\videosource.dll" diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/group/CApiVideoSource.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/group/CApiVideoSource.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2004 - 2006 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 definition file for Video Source subsystem +* +*/ + + +#include +#include "../inc/VideoSourceUids.hrh" + +TARGET videosource.dll +TARGETTYPE dll +VENDORID VID_DEFAULT + +UID KSharedLibraryUidDefine KUidVideoSourceLibrary + +SOURCEPATH ../src +SOURCE CVSController.cpp +SOURCE CVSControllerImp.cpp +SOURCE CVSDataProvider.cpp +SOURCE CVSStillImageDataProvider.cpp +SOURCE CVSCameraDataProvider.cpp +SOURCE CVSOnboardCameraDataProvider.cpp +SOURCE CVSDataSourceImp.cpp +SOURCE CVSMMFDataBuffer.cpp + +SOURCE cmultiframeloopao.cpp +SOURCE cmultiframeprovider.cpp +SOURCE cmultiframedataao.cpp +USERINCLUDE ../inc +SYSTEMINCLUDE ../../../inc +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/mmf/server +SYSTEMINCLUDE /epoc32/include/mmf/common + +LIBRARY euser.lib +LIBRARY fbscli.lib +LIBRARY mmfcontrollerframework.lib +LIBRARY ecam.lib +LIBRARY efsrv.lib +LIBRARY bafl.lib +LIBRARY bitgdi.lib +LIBRARY imageconversion.lib +LIBRARY vtimageconverter.lib +LIBRARY vtimagetransforms.lib +LIBRARY featmgr.lib +LIBRARY phoneclient.lib +LIBRARY ws32.lib +LIBRARY ecamadvsettings.lib + +CAPABILITY CAP_GENERAL_DLL + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2004 - 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: Component definition file for Video Source subsystem +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/CApiVideoSource.h |../../../inc/capivideosource.h +../inc/capivideosource.inl |../../../inc/capivideosource.inl + +// Export SIS stub file +../data/videosource_stub.SIS /epoc32/data/z/system/install/videosource_stub.sis + +// Export IBY file +../rom/VideoSource.iby CORE_APP_LAYER_IBY_EXPORT_PATH(videosource.iby) + +PRJ_MMPFILES +CApiVideoSource.mmp + +// End of File \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CApiVideoSource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CApiVideoSource.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,922 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CAPIVIDEOSOURCE_H +#define CAPIVIDEOSOURCE_H + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include + +// FORWARD DECLARATIONS + +class MVSControllerObserver; +class MVSDataSourceObserver; +class MVSDataProviderObserver; +class CVSDataSource; +class CVSDataProvider; +class TVSDataProviderInfo; +class CVSDataSourceImp; +class CProviderErrorNotifierAO; + +class MFrameBuffer; +class RWsSession; +class CWsScreenDevice; +class RWindowBase; +class CFbsBitmap; +class MDataSink; +class MDataSource; +class MAsyncEventHandler; +class TMMFPrioritySettings; +class TMMFMessage; +class CDesC8Array; +class CVSMMFDataBuffer; + +// Camera lost during VT error +const TInt KVsErrCameraNoLongerReserved = 666; +// CLASS DECLARATION + +/** +* Initialization settings class for still image provider. +* +* @lib videosource.lib +*/ +class TVSStillImageDataProviderParams + { + public: + /** + * Enumeration that defines different initialization + * types. + */ + enum TInitialize + { + /** Created as blank image */ + EInitializeAsBlankImage, + /** Image will be load from General Settings */ + EInitializeFromGeneralSettings, + /** Image will be from file */ + EInitializeFromFile, + /** Imge will be load from phone server */ + EInitializeAsDefaultStillImage + }; + + public: + /** + * Constructor, set iInitialize to EInitializeAsBlankImage. iFileName + * is initialized as an empty descriptor. + */ + inline TVSStillImageDataProviderParams(); + + /** + * Constructor. iFileName is initialized as an empty descriptor. + * @param aInitialize Defines how provider must be initialized. + */ + inline TVSStillImageDataProviderParams( const TInitialize aInitialize ); + + /** + * Constructor. iInitialize is set to EInitializeFromFile. + * @param aFileName Name of the file from which this instance will + * be initialized. + */ + inline TVSStillImageDataProviderParams( const TFileName& aFileName ); + + public: + // Initialization type + TInitialize iInitialize; + + // Filename for EInitializeFromFile + TFileName iFileName; + }; + +typedef TPckgBuf< TVSStillImageDataProviderParams > TVSStillImageDataProviderParamsBuf; + +/** +* An interface to access free MMF buffers. +* +* @lib videosource.lib +*/ +class MVSBufferPool + { + public: + + /** + * Pure virtual function to get next free buffer from free buffer pool. + * @param "aRemove" Boolean flag. If ETrue buffer will be removed from + * the pool. + * @exception Can leave with one of the system wide error codes. + * @return Returns pointer to next available buffer in free buffers + * queue or NULL if no buffers in queue are available. + */ + virtual CVSMMFDataBuffer* GetBufferL( TBool aRemove ) = 0; + + /** + * Frees buffer that was previously got using GetBufferL(). + * @param "aBuffer" Buffer to be freed. + * @exception Can leave with one of the system wide error codes. + */ + virtual void FreeBufferL( CVSMMFDataBuffer* aBuffer ) = 0; + }; + +/** +* An interface to a controller callback functions. +* +* @lib videosource.lib +*/ +class MVSControllerObserver + { + public: + + /** + * Called when provider count has been changed. + * @param "aAttached" ETrue if provider attached, else EFalse. + */ + virtual void vsProvidersChanged( TBool aAttached ) = 0; + }; + +/** +* Controller interface. +* +* @lib videosource.lib +*/ +class CVSController : public CBase + { + public: // Constructor and destructor + + /** + * Static factory function to create instance of this class. + * @param "aObserver" Pointer to controller observer. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + IMPORT_C static CVSController* NewL( MVSControllerObserver* aObserver ); + + /** + * Pure virtual function to create data source instance. + * @param "aObserver" Pointer to data source observer. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new data source instance. + */ + virtual CVSDataSource* CreateDataSourceL( + MVSDataSourceObserver* aObserver ) = 0; + + public: // New functions + + /** + * Pure virtual function to return provider count and provider index. + * @return Number of providers available. Count also acts as zero based + * provider index. + */ + virtual TInt ProvidersAvailable() = 0; + + /** + * Pure virtual function to return provider information. + * @param "aProviderIndex" Index of the provider to return information + * for. + * @param "aInfo" Reference to the variable where the provider + * information is copied. + * @exception Can leave with one of the system wide error codes. + */ + virtual void ProviderInfoL( + TInt aProviderIndex, + TVSDataProviderInfo& aInfo ) = 0; + + /** + * Pure virtual function to create provider instance. + * @param "aProviderIndex" Index of the provider to be created. + * @param "aObserver" Pointer to provider observer. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new provider instance. + */ + virtual CVSDataProvider* CreateDataProviderL( + TInt aProviderIndex, + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) = 0; + + public: // Constructor and destructor + + public: // Functions from base classes + + protected: // New functions + + /** + * C++ default constructor. + */ + CVSController(); + + /** + * Inliner to return reference to the controller observer. + * @return Reference to the controller observer. + */ + inline MVSControllerObserver& Observer() const; + + protected: // Constructor and destructor + + /** + * 2nd phase constructor. + * @param "aObserver" Pointer to controller observer + * @exception Can leave with one of the system wide error codes. + */ + virtual void ConstructL( MVSControllerObserver* aObserver ) = 0; + + protected: // Functions from base classes + + public: // Data + + protected: // Data + + // Pointer to controller observer + MVSControllerObserver* iObserver; + + private: // Data + + }; + +/** +* An interface to a provider callback functions. +* +* @lib videosource.lib +*/ +class MVSDataProviderObserver + { + public: + + /** + * Called when an error occurred in provider. + * @param "aError" of the system wide error codes. + */ + virtual void vsProviderError( TInt aError ) = 0; + + /** + * Called when provider is initalized. + */ + virtual void vsProviderReady() = 0; + + /** + * Called when provider has view finder bitmap ready. + * @param "aFrame" Reference to the view finder bitmap. + */ + virtual void vsViewFinderFrameReady( CFbsBitmap& aFrame ) = 0; + }; + +/** +* Extension to standard ECam TCameraInfo class. +* +* @lib videosource.lib +*/ +class TVSDataProviderInfo : public TCameraInfo + { + public: // Data + + // ETrue if the Freeze() is supported. + TBool iFreezeSupported; + + // Pointer to extension information. + TAny* iExtension; + + // A bitfield of suported colortones + TUint32 iSupportedColorTones; + }; + +/** +* Provider interface. +* +* @lib videosource.lib +*/ +class CVSDataProvider : public CBase + { + public: // Constructor and destructor + + /** + * Static factory function to create instance of this class. + * @param "aProviderIndex" Index of the provider to be created. + * @param "aObserver" Pointer to data provider observer. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CVSDataProvider* NewL( + TInt aProviderIndex, + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + /** + * Destructor. + */ + ~CVSDataProvider(); + + public: // New functions + + /** + * Static function get provider count and provider index. + * @return Number of providers available. Count also acts as zero based + * provider index. + */ + static TInt ProvidersAvailable(); + + /** + * Static function to return provider information. + * @param "aProviderIndex" Index of the provider to return information + * for. + * @param "aInfo" Reference to the variable to where the provider + * information is copied. + * @exception Can leave with one of the system wide error codes. + */ + static void ProviderInfoL( + TInt aProviderIndex, + TVSDataProviderInfo& aInfo ); + + /** + * Pure virtual function to initialize provider. + * @param "aInitParams" Reference to the initialization parameters. + * @exception Can leave with one of the system wide error codes. + */ + virtual void InitializeL( const TDesC8& aInitParams ) = 0; + + /** + * Pure virtual function to cancel initialization of provider. + */ + virtual void CancelInitializing() = 0; + + /** + * Pure virtual function to return digital zoom factor. + * @return Digital zoom factor. + */ + virtual TInt DigitalZoomFactor() const = 0; + + /** + * Pure virtual function to set digital zoom factor. + * @param "aDigitalZoomFactor" Digital zoom factor. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetDigitalZoomFactorL( TInt aDigitalZoomFactor = 0 ) = 0; + + /** + * Pure virtual function to start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize ) = 0; + + /** + * Pure virtual function to start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @param "aClipRect" Required clip rectangle. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( + TSize& aSize, + TRect& aClipRect ) = 0; + + /** + * Pure virtual function to start view finder bitmaps using direct + * screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect ) = 0; + + /** + * Pure virtual function to start view finder bitmaps using direct + * screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @param "aClipRect" The rectangle to which the screen will be clipped. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect, + TRect& aClipRect ) = 0; + + /** + * Pure virtual function to test if view finder is active. + * @return ETrue if view finder active. + */ + virtual TBool ViewFinderActive() const = 0; + + /** + * Pure virtual function to stop view finder bitmaps. + */ + virtual void StopViewFinder() = 0; + + /** + * Pure virtual function to return provider information. + * @param "aInfo" Reference to the variable to where the provider + * information is copied. + */ + virtual void ProviderInfo( TVSDataProviderInfo& aInfo ) = 0; + + /** + * Used to switch between what the camera sees and what you would see + * if the device were a mirror. + * @param "aMirror" ETrue to set mirroring on, EFalse to set mirroring off. + * @exception May leave with KErrNotSupported. + */ + virtual void SetViewFinderMirrorL( TBool aMirror ) = 0; + + /** + * Gets whether view finder mirroring is active. + * @return ETrue if mirroring is set, EFalse if mirroring is not set. + */ + virtual TBool ViewFinderMirror() const = 0; + + /** + * Freezes video (i.e. starts sending the last frame until provider is + * unfrozen). + * @exception May leave with KErrNotSupported if freezing is not supported + * by the provider. + */ + virtual void FreezeL() = 0; + + /** + * Unfreezes video (i.e. starts sending actual frames). + * @exception May leave with KErrNotSupported if freezing + * is not supported + * by the provider. + */ + virtual void UnfreezeL()= 0; + + /** + * Gets whether freeze is active. + * @return ETrue if video is frozen, EFalse otherwise. + */ + virtual TBool IsFrozen() const = 0; + + /** + * Sets the contrast adjustment of the device. + * This must be in the range of -100 to +100 or EContrastAuto. + * May leave with KErrNotSupported if the specified contrast value + * is out of range. + * @since S60 v3.2 + * @param aContrast + */ + virtual void SetContrastL( TInt aContrast ) = 0; + + /** + * Gets the currently set contrast value. + * @since S60 v3.2 + * @param aContrast The currently set contrast value. + * @return indication if method succeed or not. + */ + virtual TInt GetContrast( TInt& aContrast ) const = 0; + + /** + * Sets the brightness adjustment of the device. + * This must be in the range of -100 to +100 or EBrightnessAuto. + * May leave with KErrNotSupported if the brightness adjustment + * is out of range. + * @since S60 v3.2 + * @param aBrightness The required brightness adjustment. + */ + virtual void SetBrightnessL( TInt aBrightness ) = 0; + + /** + * Gets the currently set brightness adjustment value. + * @since S60 v3.2 + * @param aBrightness The currently set brightness adjustment value. + * @return indication if method succeed or not. + */ + virtual TInt GetBrightness( TInt& aBrightness ) const = 0; + + /** + * Sets the white balance adjustment of the device. + * No effect if this is not supported, see + * TCameraInfo::iWhiteBalanceModesSupported. + * @since S60 v3.2 + * @param aWhiteBalance The required white balance adjustment. + * @leave KErrNotSupported if the specified white balance adjustment + * is invalid. + */ + virtual void SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance = CCamera::EWBAuto) = 0; + + /** + * Gets the currently set white balance adjustment value. + * @since S60 v3.2 + * @param aWhiteBalance The currently set white balance adjustment value. + * @return indication if method succeed or not. + */ + virtual TInt GetWhiteBalance( + CCamera::TWhiteBalance& aWhiteBalance ) const = 0; + + /** + * Gives the current color tone setting value + * @since S60 v3.2 + * @param aColorTone The currently set color tone adjustment value. + * @return indication if method succeed or not. + */ + virtual TInt GetColorTone( + CCamera::CCameraImageProcessing::TEffect& aColorTone ) const = 0; + + /** + * Sets color tone + * @since S60 v3.2 + * @param aValue new color tone + */ + virtual void SetColorToneL( + CCamera::CCameraImageProcessing::TEffect aValue ) = 0; + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + /** + * See MDataSource for description. + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ) = 0; + + /** + * See MDataSource for description. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ) = 0; + + /** + * See MDataSource for description. + */ + virtual void SourceThreadLogoff() = 0; + + /** + * See MDataSource for description. + */ + virtual void SourcePrimeL() = 0; + + /** + * See MDataSource for description. + */ + virtual void SourcePlayL() = 0; + + /** + * See MDataSource for description. + */ + virtual void SourcePauseL() = 0; + + /** + * See MDataSource for description. + */ + virtual void SourceStopL() = 0; + + private: // New functions + + /** + * See MVTVideoInput for description. + */ + virtual void SetFormatL( const TDesC8& aFormat ) = 0; + + /** + * See MVTVideoInput for description. + */ + virtual void SetFrameRateL( TReal32 aFrameRate ) = 0; + + /** + * See MVTVideoInput for description. + */ + virtual void SetVideoFrameSizeL( const TSize& aSize ) = 0; + + /** + * See MVTVideoInput for description. + */ + virtual void GetVideoFrameSizeL( TSize& aSize ) const = 0; + + private: // Functions from base classes + + protected: // New functions + + /** + * This version of prime method will be called when a provider + * is being switched. + * @exception Can leave with one of the system wide error codes. + */ + virtual void PrimeL() = 0; + + /** + * Inliner to test if FillBufferL call is active. + * @return ETrue if FillBufferL call is ongoing, else EFalse. + */ + inline TBool FillBufferActive() const; + + /** + * Inliner to return the sink that will empty the buffer. + * @return Pointer to sink. + */ + inline MVTVideoSink* Consumer() const; + + /** + * Inliner to return sink media ID that is used. + * @return Media ID identifiyng the stream that is used. + */ + inline TMediaId MediaId() const; + + /** + * Inliner to return reference to the provider observer. + * @return Reference to the provider observer. + */ + inline MVSDataProviderObserver& Observer() const; + + /** + * Saves input parameters given in FillBufferL call. + * @param "aConsumer" Pointer to sink that will empty the filled buffer. + * @param "aMediaId" Media ID for source/provider stream that is used. + */ + virtual void SetFillBufferParams( + MVTVideoSink* aConsumer, + TMediaId aMediaId ); + + /** + * Notify observer about provider error. + * @param "aError" Error code + */ + void NotifyError( TInt aError ); + + /** + * Inliner to return reference to the buffer pool. + * @return Reference to the buffer pool. + */ + inline MVSBufferPool& BufferPool() const; + + protected: // Constructor and destructor + + /** + * C++ default constructor. + */ + CVSDataProvider(); + + /** + * Constructor. + * @param "aObserver" Pointer to provider observer. + */ + CVSDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + /** + * 2nd phase constructor. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL(); + + /** + * Returns microseconds from the first SourcePlayL() call. + */ + const TTimeIntervalMicroSeconds& TimeToPlay(); + + /** + * Resets start time (the time when SourcePlayL() was called). + * iStartTime is set to TTime::HomeTime(). + */ + void ResetStartTime(); + + private: // New functions + + /** + * + */ + static TInt CamerasAvailable(); + + /** + * Sets timestamp for first SourcePlayL() call. This method + * is called by the CVSDataSource when data provider is switched. + */ + void SwitchFrom( const CVSDataProvider& anOldProvider ); + + /** + * Enumerate all providers and create a set of formats that is supported + * by all of them. + */ + static void EnumerateVideoFrameFormatsL( + CDesC8Array* aSupportedFormats ); + + /** + * Enumerate all providers and create a set of video frame sizes that + * is supported by all of them. + */ + static void EnumerateVideoFrameSizesL( + RArray& aSupportedSizes, + const TDesC8& aFormat ); + + /** + * Enumerate all providers and create a set of video frame rates that + * is supported by all of them. + */ + static void EnumerateVideoFrameRatesL( + RArray& aSupportedRates, + const TDesC8& aFormat, + const TSize& aSize ); + + protected: // New functions + + /** + * Get video frame size. Implemented in each provider. + */ + virtual void GetVideoFrameSize( + TSize& aSize, + TInt aSizeIndex, + const TDesC8& aFormat ) = 0; + + /** + * Get video frame rate. Implemented in each provider. + */ + virtual void GetVideoFrameRate( + TReal32& aRate, + TInt aRateIndex, + const TDesC8& aFormat, + const TSize& aSize ) = 0; + + public: // Data + + protected: // Data + + // Boolean that is ETrue when FillBufferL call is active. + TBool iFillBufferActive; + + // Sink that empties the buffer filled with video frame. Not owned. + MVTVideoSink* iConsumer; + + // Provider's media ID identifying media stream used. + TMediaId iMediaId; + + private: // Data + + // Pointer to provider observer. + MVSDataProviderObserver* iObserver; + + // Pointer to AO that reports provider errors to provider observer, + // used through NotifyError call. + CProviderErrorNotifierAO* iErrorNotifier; + + // Pointer to buffer pool + MVSBufferPool* iPool; + + // Previous TimeToPlay interval + TTimeIntervalMicroSeconds iPreviousTimeToPlay; + + // Start time (time when SourcePlayL() was called) + TTime iStartTime; + + private: // Data + + // Source is friend because it's MDataSource and MVTVideoInput derived + // calls are forwarded to provider. + friend class CVSDataSource; + + // Source is friend because it's MDataSource and MVTVideoInput derived + // calls are forwarded to provider. + friend class CVSDataSourceImp; + }; + +/** +* An interface to a data source callback functions. +* +* @lib videosource.lib +*/ +class MVSDataSourceObserver + { + public: + + /** + * Called when provider switch completed. + * @param "aOldProvider" Pointer provider that was previously active. + */ + virtual void vsProviderSwitchDone( CVSDataProvider* aOldProvider ) = 0; + }; + +/** +* Data source interface. +* +* @lib videosource.lib +*/ +class CVSDataSource : + public CBase, + public MVTVideoSource, + public MVSBufferPool + { + public: // Constructor and destructor + + /** + * Static factory function to create data source instance. + * @param "aObserver" Pointer to data source observer. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to data source instance. + */ + static CVSDataSource* NewSourceL( MVSDataSourceObserver* aObserver ); + + public: // New functions + + /** + * Pure virtual function to switch active provider for source. + * @param "aNewProvider" Pointer to provider instance. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SwitchDataProviderL( CVSDataProvider* aNewProvider ) = 0; + + /** + * Temporarily pause video sending. Used during initialization. + */ + virtual void PauseSending() = 0; + + /** + * Resume video sending. Used during initialization. + */ + virtual void ResumeSending() = 0; + + public: // Functions from base classes + + protected: // New functions + + /** + * Inliner to return reference to the data source observer. + * @return Reference to the data source observer. + */ + inline MVSDataSourceObserver& Observer() const; + + /** + * Inliner to return reference to the provider that is active. + * @return Reference to the provider. + */ + inline CVSDataProvider& DataProvider() const; + + /** + * Inliner to update member variable holding pointer to provider with + * new provider pointer. + * @param "aNewProvider" Pointer to (new) provider. + * @return Pointer to (old) provider. + */ + inline CVSDataProvider* SwitchProvider( CVSDataProvider* aNewProvider ); + + protected: // Constructor and destructor + + /** + * Constructor. + */ + CVSDataSource(); + + private: // Constructor and destructor + + /** + * 2nd phase consturctor. + * @param "aObserver" Pointer to data source observer. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( MVSDataSourceObserver* aObserver ); + + private: // New functions + + private: // Functions from base classes + + public: // Data + + protected: // Data + + private: // Data + + // Pointer to data source observer. + MVSDataSourceObserver* iObserver; + + // Pointer to active provider. + CVSDataProvider* iProvider; + }; + +#include "capivideosource.inl" + +#endif // CAPIVIDEOSOURCE_H diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,517 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSCAMERADATAPROVIDER_H +#define CVSCAMERADATAPROVIDER_H + +// INCLUDE FILES + +#include "CApiVideoSource.h" + +#include +#include +// CLASS FORWARDS + +class CVsFrameBuffer; + +// CLASS DECLARATION + +/** +* Internal MFrameBuffer API. +* +* @lib videosource.lib +* @since 5.0 +*/ +class MVsFrameBuffer + { + +public: + + /** + * Copies properties from the given frame buffer. + * @param "aSource" Source frame buffer from which propreties will + * be copied. + */ + virtual void CopyProperties( MFrameBuffer* aSource ) = 0; + + /** + * Copies properties from the given camera buffer. + * @param "aSource" Source camera buffer from which propreties will + * be copied. + */ + virtual void CopyProperties( MCameraBuffer* aSource ) = 0; + + /** + * Copies frame data and properties from the given frame buffer. + * @param "aSource" Source frame buffer from which propreties and + * frame data will be copied. + */ + virtual void CopyFrameL( MFrameBuffer* aSource ) = 0; + + /** + * Copies frame data and properties from the given camera buffer. + * @param "aSource" Source camera buffer from which propreties and + * frame data will be copied. + */ + virtual void CopyFrameL( MCameraBuffer* aSource ) = 0; + + }; + +/** +* Internal MFrameBuffer implementation. +* +* @lib videosource.lib +*/ +class CVsFrameBuffer : public CBase, public MVsFrameBuffer, + public MFrameBuffer, public MCameraBuffer + { + public: + + /** + * Constructor. + * @param "sSize" Size of stored frame in bytes. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C static CVsFrameBuffer* NewL( TInt aSize ); + + /** + * Destructor. + */ + IMPORT_C ~CVsFrameBuffer(); + + public: // from MVsFrameBuffer + + /** + * @see MVsFrameBuffer::CopyProperties + */ + virtual void CopyProperties( MFrameBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyProperties + */ + virtual void CopyProperties( MCameraBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyFrameL + */ + virtual void CopyFrameL( MFrameBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyFrameL + */ + virtual void CopyFrameL( MCameraBuffer* aSource ); + + public: // from MFrameBuffer + + /** + * @see MFrameBuffer::DataL or MCameraBuffer::DataL + */ + TDesC8* DataL( TInt aIndex ); + + /** + * @see MFrameBuffer::FrameL or MCameraBuffer::FrameL + */ + CFbsBitmap* FrameL( TInt aIndex ); + + /** + * @see MFrameBuffer::Release or MCameraBuffer::Release + */ + void Release(); + + /** + * @see MCameraBuffer::FrameSize + */ + TInt FrameSize(TInt aFrameIndex); + + /** + * @see MCameraBuffer::ChunkOffsetL + */ + TInt ChunkOffsetL(TInt aFrameIndex); + + /** + * @see MCameraBuffer::ChunkL + */ + RChunk& ChunkL(); + + /** + * @see MCameraBuffer::BitmapL + */ + CFbsBitmap& BitmapL(TInt aFrameIndex); + + /** + * @see MCameraBuffer::NumFrames + */ + TInt NumFrames(); + + private: + + /** + * Constructor. + */ + CVsFrameBuffer(); + + /** + * Second phase constructor. + * @param "aSize" Size of the frame in bytes. + */ + void ConstructL( TInt aSize ); + + private: + + HBufC8* iBuffer; + + TPtr8 iPtr; + + }; + +/** +* Internal implementation of onboard camera data provider base class. This +* class is inherited from public provider interface. +* +* @lib videosource.lib +*/ +class CVSCameraDataProvider : public CVSDataProvider, public MCameraObserver, public MVtImageScalerObserver, public MCameraObserver2 + { + public: // Constructor and destructor + + /** + * Factory function to create instance of onboard camera data provider. + * @param "aObserver" Pointer to provider observer. + * @param "aProviderIndex" Index of the provider to be created. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new provider instance. + */ + static CVSCameraDataProvider* NewL( + MVSDataProviderObserver* aObserver, + TInt aProviderIndex, + MVSBufferPool* aPool ); + + /** + * Destructor. + */ + ~CVSCameraDataProvider(); + + public: // New functions + + public: // Functions from base classes + + /** + * Initialize provider. + * @param "aInitParams" Initialization parameters. + * @exception Can leave with one of the system wide error codes. + */ + void InitializeL( const TDesC8& aInitParams ); + + /** + * Cancel initialization of camera provider. + */ + void CancelInitializing(); + + /** + * Return digital zoom factor. + * @return Digital zoom factor. + */ + virtual TInt DigitalZoomFactor() const; + + /** + * Set digital zoom factor. + * @param "aDigitalZoomFactor" Digital zoom factor. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetDigitalZoomFactorL( TInt aDigitalZoomFactor = 0 ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @param "aClipRect" Required clip rectangle. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize,TRect& aClipRect ); + + /** + * Stop view finder bitmaps. + */ + virtual void StopViewFinder(); + + /** + * Test if view finder is active. + * @return ETrue if view finder active. + */ + virtual TBool ViewFinderActive() const; + + /** + * Start view finder bitmaps using direct screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect ); + + /** + * Start view finder bitmaps using direct screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @param "aClipRect" The rectangle to which the screen will be clipped. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect, + TRect& aClipRect ); + + /** + * Return provider information. + * @param @param "aInfo" Reference to variable to where the provider + * information is copied. + */ + virtual void ProviderInfo( TVSDataProviderInfo& aInfo ); + + /** + * See CVSDataProvider for description. + */ + virtual void SetViewFinderMirrorL( TBool aMirror ); + + /** + * See CVSDataProvider for description. + */ + virtual TBool ViewFinderMirror() const; + + /** + * See CVSDataProvider for description. + */ + virtual void FreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual void UnfreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual TBool IsFrozen() const; + + /** + * @see CVSDataProvider::SetContrastL for description. + */ + virtual void SetContrastL( TInt aContrast ); + + /** + * @see CVSDataProvider::GetContrast + */ + virtual TInt GetContrast( TInt& aContrast ) const; + + /** + * @see CVSDataProvider::SetBrightnessL for description. + */ + virtual void SetBrightnessL( TInt aBrightness ); + + /** + * @see CVSDataProvider::GetBrightness for description. + */ + virtual TInt GetBrightness( TInt& aBrightness ) const; + + /** + * @see CVSDataProvider::SetWhiteBalanceL for description. + */ + virtual void SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance = CCamera::EWBAuto ); + + /** + * @see CVSDataProvider::GetWhiteBalance for description. + */ + virtual TInt GetWhiteBalance( + CCamera::TWhiteBalance& aWhiteBalance ) const; + + /** + * @see CVSDataProvider::GetColorTone for description. + */ + virtual TInt GetColorTone( + CCamera::CCameraImageProcessing::TEffect& aColorTone ) const; + + /** + * @see CVSDataProvider::SetColorToneL for description. + */ + virtual void SetColorToneL( + CCamera::CCameraImageProcessing::TEffect aValue ); + + protected: // from MCameraObserver + + /** + * @see MCameraObserver::ImageReady + */ + virtual void ImageReady( CFbsBitmap* aBitmap, HBufC8* aData, + TInt aError ); + + /** + * @see MCameraObserver::PowerOnComplete + */ + virtual void PowerOnComplete( TInt aError ); + + /** + * @see MCameraObserver::ViewFinderFrameReady + */ + virtual void ViewFinderFrameReady( CFbsBitmap& aFrame ); + + protected: // from MVtImageScalerObserver + + /** + * @see MVtImageScalerObserver::ScalingFinished( TInt aError ) + */ + virtual void ScalingFinished( TInt aError ); + + protected: // from MCameraObserver2 + + /** + * @see MCameraObserver2::ImageBufferReady + */ + virtual void ImageBufferReady( MCameraBuffer& aCameraBuffer, + TInt aError ); + + protected: // New functions + + /** + * Inliner to return reference to the onboard camera handle. + * @return Reference to the onboard camera handle. + */ + inline CCamera& Camera() const; + + protected: // Constructors and destructor + + /** + * Constructor. + * @param "aObserver" Pointer to provider observer. + */ + CVSCameraDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + private: // Constructors and destructors + + /** + * 2nd phase constructor. + * @param "aProviderIndex" Index of the provider to be created. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( TInt aProviderIndex ); + + void FreezeViewFinderFrame( CFbsBitmap& aFrame ); + + void ScaleFrozenBitmapL( TSize& aSize ); + + private: // New functions + + /** + * Return provider information. + */ + void ProviderInfoExL( TVSDataProviderInfo& aInfo ); + + private: // Functions from base classes + + public: // Data + + protected: // Data + + enum TFreezePendingFlags + { + EViewFinderFreezePending = ( 1 << 0 ), + EVideoFrameFreezePending = ( 1 << 1 ) + }; + + // Camera handle number. + TInt iCameraHandle; + + // ETrue after ReserveComplete for iCamera + TBool iReserverComplete; + + // ETrue after PowerOnComplete for iCamera + TBool iPowerOnComplete; + + // ETrue after Freeze + TBool iFrozen; + + // Contains pending freeze flags after Freeze + TUint iFreezePendingFlags; + + // has frozen viewfinder frame copy + TBool iHasFrozenVFFrameCopyCreated; + + CVsFrameBuffer* iFrozenFrame; + + RCriticalSection iFreezeCS; + + private: // Data + + // Camera handle. + CCamera* iCamera; + + // owned: Copy of frozen VF frame + CFbsBitmap* iFrozenVFFrameCopy; + + // + CVtImageBitmap* iSource; + + // owned: Scaled version of frozen VF frame (this is sent) + CFbsBitmap* iFrozenVFFrameToBeSent; + + // + CVtImageBitmap* iTarget; + + // owned: Scaler instance + CVtImageScaler* iScaler; + + // ETrue when frozen VF frame is ready to be sent EFalse otherwise + TBool iFrozenVfFrameReady; + + // Camera image processing + CCamera::CCameraImageProcessing* iCamImgProc; + + private: // friends + + // Stif test module must be set as friend to be able to call protected + // and private methods + friend class CstiffVideoSourceAPICases; + + }; + +#include "CVSCameraDataProvider.inl" + +#endif // CVSCAMERADATAPROVIDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::Camera +// ----------------------------------------------------------------------------- +// +inline CCamera& CVSCameraDataProvider::Camera() const + { + return *iCamera; + } + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSControllerImp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSControllerImp.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSCONTROLLERIMP_H +#define CVSCONTROLLERIMP_H + +// INCLUDE FILES +#include "CApiVideoSource.h" + +// CLASS DECLARATIONS + +/** +* Internal implementation of controller. This class is inherited from +* public controller interface. +* +* @lib videosource.lib +*/ +class CVSControllerImp : public CVSController + { + public: // Constructors and destructor + + /** + * Static factory function to create controller instance. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new controller instance. + */ + static CVSControllerImp* NewL(); + + /** + * Destructor. + */ + ~CVSControllerImp(); + + public: // New functions + + public: // Functions from base classes + + /** + * Create data source instance. + * @param "aObserver" Pointer to data source observer. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new data source instance. + */ + virtual CVSDataSource* CreateDataSourceL( + MVSDataSourceObserver* aObserver ); + + /** + * Return provider count and provider index. + * @return Number of providers available. Count also acts as zero + * based provider index. + */ + virtual TInt ProvidersAvailable(); + + /** + * Return provider information. + * @param "aProviderIndex" Index of the provider to return information + * for. + * @param "aInfo" Reference to the variable where the provider + * information is copied. + * @exception Can leave with one of the system wide error codes. + */ + virtual void ProviderInfoL( + TInt aProviderIndex, + TVSDataProviderInfo& aInfo ); + + /** + * Create provider instance. + * @param "aProviderIndex" Index of the provider to be created. + * @param "aObserver" Pointer to provider observer. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new provider instance. + */ + virtual CVSDataProvider* CreateDataProviderL( + TInt aProviderIndex, + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + protected: // New functions + + protected: // Functions from base classes + + private: // Constructors and destructor + + /** + * 2nd phase constructor. + * @param "aObserver" Pointer to controller observer + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( MVSControllerObserver* aObserver ); + + private: // New functions + + private: // Functions from base classes + + public: // Data + + protected: // Data + + private: // Data + + }; + +#endif // CVSCONTROLLERIMP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSDataSourceImp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSDataSourceImp.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,577 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSDATASOURCEIMP_H +#define CVSDATASOURCEIMP_H + +// INCLUDE FILES + +#include "CApiVideoSource.h" + +// FORWARD DECLARATIONS + +class CVSDataSourceImp; +class CVSMMFDataBuffer; + +// CLASS DECLARATION + +/** +* Active Object that handles switch of active provider for data source. +* +* @lib videosource.lib +*/ +class CVSProviderSwitchAO : public CActive + { + public: // Constructors and destructor + + /** + * Leave safe static constructor. + * @param "aDataSourceImp" Pointer to VSDataSourceImp instance. + */ + static CVSProviderSwitchAO* NewL( CVSDataSourceImp* aDataSourceImp ); + + /** + * Destructor. + */ + ~CVSProviderSwitchAO(); + + public: // New functions + + /** + * Adds this instance to calling thread's active scheduler. + * @param "aEventHandler" Reference to asynchronous event handler. This + * will be given to provider that will be switched as active provider + * in SourceThreadLogon() call. + * @return Possible error code. + */ + TInt ThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * Removes this instance from calling thread's active scheduler. + */ + void ThreadLogoff(); + + /** + * Initializes provider switch. + * @param "aNewProvider" Pointer to CVSDataProvider instance that will + * be set as active provider. + */ + void InitiateProviderSwitch( CVSDataProvider* aNewProvider ); + + /** + * Return reference to event handler. + */ + inline MAsyncEventHandler& EventHandler() { return *iEventHandler; } + + /** + * Return pointer to new provider. + */ + inline CVSDataProvider*& NewDataProvider() { return iNewProvider; } + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + /** + * Constructor. + * @param "aDataSourceImp" Pointer to VSDataSourceImp instance. + */ + CVSProviderSwitchAO( CVSDataSourceImp* aDataSourceImp ); + + /** + * Leave safe construtor + */ + void ConstructL(); + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + /** + * From CActive. See CActive for description. + */ + void DoCancel(); + + private: // New functions + + /** + * Signals this active object with given error code. + * @param "aError" Error code with which active object will be signalled. + */ + void Signal( TInt aError ); + + public: // Data + + protected: // Data + + private: // Data + + // Pointer to data source implementation. + CVSDataSourceImp* iDataSourceImp; // not owned + + // Pointer to data provider that will be switched. + CVSDataProvider* iNewProvider; // not owned + + // Id of thread whose active scheduler this instance is added into. + TThreadId iThreadId; + + // Pointer to async handler that will be given to the new provider in + // SourceThreadLogon() call. + MAsyncEventHandler* iEventHandler; // not owned + + // Critical section for switch handling + RCriticalSection iSwitchCs; + + }; + +/** +* Data source observer active object. This AO is needed because we want to +* call vsProviderSwitchDone() callback +* in correct thread context. +* +* @lib videosource.lib +*/ +class CVSDataSourceObserverAO : public CActive + { + public: // Constructors and destructor + + /** + * Constructor. + */ + CVSDataSourceObserverAO(); + + /** + * Destructor. + */ + ~CVSDataSourceObserverAO(); + + public: // New functions + + /** + * This method is called when CVSProviderSwitchAO has completed provider + * switching. + * @param "aObserver" Observer that will signalled when RunL() is called. + * @param "aOldProvider" Pointer to provider that was active before the + * provider switch was done. + */ + void vsProviderSwitchDone( + MVSDataSourceObserver& aObserver, + CVSDataProvider* aOldProvider ); + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + /** + * From CActive. See CActive for description. + */ + void DoCancel(); + + private: // New functions + + /** + * Signals this active object with given error code. + * @param "aError" Error code with which active object will be signalled. + */ + void Signal( TInt aError ); + + public: // Data + + protected: // Data + + private: // Data + + // Data source observer pointer + MVSDataSourceObserver* iObserver; // not owned + + // Previous active provider + CVSDataProvider* iOldProvider; // not owned + + // Thread Id whose active scheduler this instance is added into + TThreadId iThreadId; + }; + + + +/** +* Internal implementation of data source. This class is inherited from +* public data source interface. Some of the implemented MVTVideoSource, +* MVTVideoInput calls are forwarded to active data provider, +* some are processed here. +* +* @lib videosource.lib +*/ +class CVSDataSourceImp : public CVSDataSource + { + public: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CVSDataSourceImp* NewSourceL(); + + public: // New functions + + public: // Functions from base classes + + /** + * Switch active provider for source. + * @param "aNewProvider" Pointer to provider instance. + * @exception Can leave with one of the system wide error codes. + */ + void SwitchDataProviderL( CVSDataProvider* aNewProvider ); + + /** + * @see CVSDataSource::PauseSending + */ + void PauseSending(); + + /** + * @see CVSDataSource::ResumeSending + */ + void ResumeSending(); + + public: // Constructors and destructor + + /** + * Destructor. + */ + ~CVSDataSourceImp(); + + public: // Functions from base classes + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + void BufferEmptiedL( CMMFBuffer* aBuffer ); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TBool CanCreateSourceBuffer(); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + TBool &aReference ); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + CMMFBuffer& aSinkBuffer, + TBool &aReference ); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual void SourceThreadLogoff(); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TInt SourcePrimeL(); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TInt SourcePlayL(); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TInt SourcePauseL(); + + /** + * From MVTVideoSource / MDataSource. See MDataSource for description. + */ + virtual TInt SourceStopL(); + + protected: // New functions + + protected: // Functions from base classes + + /** + * From MDataSource. See MDataSource for description. + */ + virtual void ConstructSourceL(const TDesC8& aInitData); + + public: // Functions from base classes + + + virtual const RArray& GetMultimediaTypesL() const; + + + + public: // Functions from base classes + + /** + * From MVTVideoInput. See MVTVideoInput for description. + */ + virtual void SetFormatL( const TDesC8& aFormat ); + + /** + * From MVTVideoInput. See MVTVideoInput for description. + */ + virtual void SetFrameRateL( TReal32 aFrameRate ); + + /** + * From MVTVideoInput. See MVTVideoInput for description. + */ + virtual void SetVideoFrameSizeL( const TSize& aSize ); + + /** + * From MVTVideoInput. See MVTVideoInput for description. + */ + virtual void GetVideoFrameSizeL( TSize& aSize ) const; + + private: // New functions + + /** + * Starts provider switching. Switching must be done in correct thread + * context. + * @param "aNewProvider" Pointer to provider that will be switched as + * active. + * @param "aEventHandler" Reference to asynchronous event handler. + * @exception Can leave with one of the system wide error codes. + */ + void DoProviderSwitchL( + CVSDataProvider* aNewProvider, + MAsyncEventHandler& aEventHandler ); + + /** + * Test if provider switch operation is ongoing. + * @return ETrue if provider switch operation was suspended because + * buffers were not free. + */ + inline TBool SwitchPending() { return iSwitchPending; }; + + /** + * Notifies provider observer about error occurred in provider switch. + * @param "aError" Standard Symbian error code + */ + void ProviderSwitchError( TInt aError ); + + private: // Constructors and destructor + + /** + * Constructor. + */ + CVSDataSourceImp(); + + private: // Functions from base classes + + /** + * From MVSBufferPool. See MVSBufferPool for description. + */ + virtual CVSMMFDataBuffer* GetBufferL( TBool aRemove ); + + /** + * From MVSBufferPool. See MVSBufferPool for description. + */ + virtual void FreeBufferL( CVSMMFDataBuffer* aBuffer ); + + private: // New functions + + /** + * Add buffer to free buffer pool without locking queue cs. + * @return One of the system wide error codes or KErrNone if no error + * happens. + * @param "aBuffer" A pointer to buffer to add to free buffer pool. + * If buffer pointer is found from active buffer pool it is first + * removed from there. + */ + TInt FreeBufferNoWait( CVSMMFDataBuffer* aBuffer ); + + public: // Data + + protected: // Data + + private: // Data + + // Data source state + enum TDataSourceState + { + EStopped, + EPrimed, + EPlaying + }; + + // Data source method call flags + enum TCallFlags + { + // SetVideoFrameSizeL() was called + ESetSizeCalled = ( 1 << 0 ), + + // SetFrameRateL() was called + ESetFrameRateCalled = ( 1 << 1 ), + + // SetFormatL() was called + ESetFormatCalled = ( 1 << 2 ) + }; + + // Data source state + TDataSourceState iDSState; + + // Call flags + TUint32 iCallFlags; + + + // Provider switch AO pointer + CVSProviderSwitchAO* iProviderSwitchAO; + + // Data source observer AO pointer + CVSDataSourceObserverAO* iDataSourceObserverAO; // owned + + // Format heap descriptor pointer + HBufC8* iFormat; // owned + + // Frame rate + TReal32 iFrameRate; + + // Frame size + TSize iSize; + + // SourceThreadLogon() called flag + TBool iThreadLogonCalled; + + // Array to return in response to GetMultimediaTypesL call + // (supported video frame formats). + RArray iProtoMimeTypes; + + // Video frame formats supported by all providers. + CDesC8Array* iSupportedVideoFormats; + + // Video frame sizes for each format supported by all providers + class TVSFrameSize + { + public: + TPtrC8 iFormat; // Primary key, 1st field + TSize iSize; + }; + RArray iSupportedVideoSizes; + + // Video frame rates for each format and frame size supported by all + // providers. + class TVSFrameRate + { + public: + TPtrC8 iFormat; // Primary key, 1st field + TSize iSize; // Primary key, 2nd field + TReal32 iRate; + }; + + RArray iSupportedFrameRates; + + private: // Data + + // Needs to be friend + friend class CVSProviderSwitchAO; + + // MIME type holder + TBuf8<128> iYuv420PlanarDesc; + + private: // Data + + // Critical section for queue handling + RCriticalSection iQueueCs; + + // Critical section for queue handling + RCriticalSection iPauseCs; + + // Queue for buffers that are free for use + RPointerArray iFreeQueue; + + // Queue for buffers that are being used by the Protocol + RPointerArray iActiveQueue; + + // All buffers allocated by CreateSourceBufferL() + RPointerArray iAllocatedBuffers; + + // Number of buffer requests by CreateSourceBufferL() + TInt iRequestedBufferCount; + + // Set to ETrue when protocol is initializing (From + // SourceThreadLogon to SourcePlayL) + TBool iProtoInitOngoing; + + // Set to ETrue if provider switch operation was suspended because + // protocol was initializing + TBool iProviderSwitchRequestDuringProtoInit; + + // Temporary save pointer, not owned + CVSDataProvider* iNewProvider; + + // Critical section for synchronizing access to + // iProviderSwitchRequestDuringProtoInit and iProtoInitOngoing + RCriticalSection iProtoInitCS; + + // Set to ETrue during DoProviderSwitchL + TBool iSwitchOngoing; + + // Set to ETrue when DoProviderSwitchL is needed + TBool iSwitchPending; + + // Set to ETrue when video sending is paused to Protocol + // Guarded by: iPauseCs + TBool iSendingPaused; + + // If true then FBS was started during SourceThreadLogon() and + // thus should be stopped in SourceThreadLogoff() + TBool iFbsStarted; + }; + +#endif // CVSDATASOURCEIMP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSMMFDataBuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSMMFDataBuffer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,239 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSMMFDATABUFFER_H +#define CVSMMFDATABUFFER_H + +// INCLUDE FILES + +#include + +// FORWARD DECLARATIONS + +class MFrameBuffer; +class MCameraBuffer; + +/** +* API of data buffer that allows provider's buffer contents to +* be given to consumer without copying. +* +* @lib videosource.lib +* @since 5.0 +*/ +class MVSMMFDataBuffer + { + +public: + + /** + * Sets the ECAM frame buffer. + * @param "aFrameBuffer" MFrameBuffer pointer. + */ + virtual void SetFrameBufferL( MFrameBuffer* aFrameBuffer ) = 0; + + /** + * Sets the ECAM camera buffer. + * @param "aFrameBuffer" MFrameBuffer pointer. + */ + virtual void SetFrameBufferL( MCameraBuffer* aCameraBuffer ) = 0; + + /** + * Calls Release() for MFrameBuffer and sets aFrameBuffer to NULL. + */ + virtual void ReleaseL() = 0; + + /** + * Sets start offset and length of internal iPtr variable (when + * pointing to iData). + */ + virtual void SetBufferOffset( TInt aOffset ) = 0; + + /** + * Reallocates the max size in bytes. + * @param "aMaxBufferSize" New size in bytes. + * @exception Can leave with one of the system wide error codes. + */ + virtual void ReAllocBufferL( TInt aMaxBufferSize ) = 0; + + /** + * Checks whether buffer needs reset or not. + * @return ETrue if buffer needs reset, EFalse otherwise. + */ + virtual TBool NeedsReset() const = 0; + + /** + * Sets needs reset state. + * @param aNeedsReset New reset state. + */ + virtual void SetNeedsReset( TBool aNeedsReset ) = 0; + + /** + * Resets buffer (i.e. clears data). + */ + virtual void Reset() = 0; + + }; + +/** +* Implementation of data buffer that allows provider's buffer contents to +* be given to consumer without copying. +* +* @lib videosource.lib +*/ +class CVSMMFDataBuffer : public CMMFDataBuffer, public MVSMMFDataBuffer + { + public: // new methods + + /** + * Static factory function to create instance of this class. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + IMPORT_C static CVSMMFDataBuffer* NewL(); + + /** + * Static factory function to create instance of this class. + * @param "aMaxBufferSize" Buffer size + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + IMPORT_C static CVSMMFDataBuffer* NewL( TInt aMaxBufferSize ); + + /** + * Destructor. + */ + IMPORT_C ~CVSMMFDataBuffer(); + + public: // from CMMFDataBuffer + + /** + * @see CMMFDataBuffer::Data + */ + virtual TDes8& Data(); + + /** + * @see CMMFDataBuffer::Data + */ + virtual const TDesC8& Data() const; + + /** + * @see CMMFDataBuffer::SetStatus + */ + virtual void SetStatus( TBufferStatus aStatus ); + + /** + * @see CMMFDataBuffer::SetRequestSizeL + */ + virtual void SetRequestSizeL( TInt aSize ); + + /** + * @see CMMFDataBuffer::BufferSize + */ + virtual TUint BufferSize() const; + + /** + * @see CMMFDataBuffer::SetPosition + */ + virtual void SetPosition( TUint aPosition ); + + public: // from MVSMMFDataBuffer + + /** + * @see MVSMMFDataBuffer::SetFrameBufferL + */ + void SetFrameBufferL( MFrameBuffer* aFrameBuffer ); + + /** + * @see MVSMMFDataBuffer::SetFrameBufferL + */ + void SetFrameBufferL( MCameraBuffer* aCameraBuffer ); + + /** + * @see MVSMMFDataBuffer::ReleaseL + */ + void ReleaseL(); + + /** + * @see MVSMMFDataBuffer::SetBufferOffset + */ + void SetBufferOffset( TInt aOffset ); + + /** + * @see MVSMMFDataBuffer::ReAllocBufferL + */ + void ReAllocBufferL( TInt aMaxBufferSize ); + + /** + * @see MVSMMFDataBuffer::NeedsReset + */ + TBool NeedsReset() const; + + /** + * @see MVSMMFDataBuffer::SetNeedsReset + */ + void SetNeedsReset( TBool aNeedsReset ); + + /** + * @see MVSMMFDataBuffer::Reset + */ + void Reset(); + + + private: // Constructors and destructor + + /** + * Constructor. + */ + CVSMMFDataBuffer(); + + /** + * 2nd phase constructor. + * @param "aMaxBufferSize" Buffer size in bytes. + */ + void ConstructL( TInt aMaxBufferSize ); + + public: // Data + + protected: // Data + + private: // Data + + // Pointer to ECAM buffer + MFrameBuffer* iFrameBuffer; + + // Pointer to ECAM buffer + MCameraBuffer* iCameraBuffer; + + // Pointer to data buffer ( n/a for ECAM ) + TUint8* iData; + + // TPtr8 pointing to iData or ECAM buffer data content + TPtr8 iPtr; + + // Max buffer size ( n/a for ECAM ) + TInt iMaxBufferSize; + + // ETrue if buffers needs reset, EFalse otherwise + TBool iNeedsReset; + + // ETrue if buffer is set, EFalse otherwise + TBool iIsBufferSet; + + }; + +#endif // CVSMMFDATABUFFER_H diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSOnboardCameraDataProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSOnboardCameraDataProvider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,387 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSONBOARDCAMERADATAPROVIDER_H +#define CVSONBOARDCAMERADATAPROVIDER_H + +// INCLUDE FILES + +#include "CVSCameraDataProvider.h" + +// CLASS DECLARATION + +/** +* Handles provider error notification using interface to provider callback +* functions. Provider errors can occur in two threads and this class provides +* error notification in the same thread context that the provider was created. +* +* @lib videosource.lib +*/ +class CProviderErrorNotifierAO : public CActive + { + public: // New functions + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CProviderErrorNotifierAO* NewL(); + + /** + * Destructor. + */ + ~CProviderErrorNotifierAO(); + + private: // New functions + + /** + * Notify provider observer about error. + * @param "aObserver" Pointer to provider observer to notify. + * @param "aError" Error code. + */ + void NotifyError( MVSDataProviderObserver* aObserver, TInt aError ); + + private: // Constructors and destructor + + /** + * Constructor. + */ + CProviderErrorNotifierAO(); + + /** + * 2nd phase constructor. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL(); + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void DoCancel(); + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + public: // Data + + protected: // Data + + private: // Data + + // Pointer to provider observer that will receive the error + // notification. + MVSDataProviderObserver* iObserver; + + // Error code. + TInt iError; + + // Critical section to synchronize access to this object. + RCriticalSection iCS; + + // Thread id of the thread in which this object was created. + TThreadId iThreadId; + + private: // Data + + // This class is private to CVSDataProvider. + friend class CVSDataProvider; + }; + +/** +* Makes onboard camera Reserve and PowerOn function calls synchronous. +* +* @lib videosource.lib +*/ +class CSyncCameraReserve : public CActive + { + public: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CSyncCameraReserve* NewL(); + + public: // New functions + + /** + * Starts waiting and returns when RunL is called. + * @exception Can leave with one of the system wide error codes. + */ + void StartL(); + + private: // Constructors and destructor + + /** + * Constructor. + */ + CSyncCameraReserve(); + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void DoCancel(); + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + private: // Data + + // Active scheduler loop owner. See CActiveSchedulerWait for + // description. + CActiveSchedulerWait iWait; + }; + +/** +* Internal implementation of onboard camera data provider. This +* class is inherited from onboard camera data provider base class. +* +* @lib videosource.lib +*/ +class CVSOnboardCameraDataProvider : public CVSCameraDataProvider + { + public: // Constructors and destructor + + /** + * Constructor. + * @param "aObserver" Pointer to provider observer. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + */ + CVSOnboardCameraDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + /** + * Destructor. + */ + ~CVSOnboardCameraDataProvider(); + + public: // New functions + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + /** + * See CVSDataProvider for description. + */ + void PrimeL(); + + private: // Functions from base classes + + /** + * See MDataSource for description. + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ); + + /** + * See MDataSource for description. + */ + virtual void BufferEmptiedL( CMMFBuffer* aBuffer ); + + /** + * See MDataSource for description. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * See MDataSource for description. + */ + virtual void SourceThreadLogoff(); + + /** + * See MDataSource for description. + */ + virtual void SourcePrimeL(); + + /** + * See MDataSource for description. + */ + virtual void SourcePlayL(); + + /** + * See MDataSource for description. + */ + virtual void SourcePauseL(); + + /** + * See MDataSource for description. + */ + virtual void SourceStopL(); + + private: // Functions from base classes + + /** + * See MVTVideoInput for description. + */ + virtual void SetFormatL( const TDesC8& aFormat ); + + /** + * See MVTVideoInput for description. + */ + virtual void SetFrameRateL( TReal32 aFrameRate ); + + /** + * See MVTVideoInput for description. + */ + virtual void SetVideoFrameSizeL( const TSize& aSize ); + + /** + * See MVTVideoInput for description. + */ + virtual void GetVideoFrameSizeL( TSize& aSize ) const; + + private: // from MCameraObserver + + /** + * @see MCameraObserver::ReserveComplete + */ + virtual void ReserveComplete( TInt aError ); + + /** + * @see MCameraObserver::FrameBufferReady + */ + virtual void FrameBufferReady( MFrameBuffer* aFrameBuffer, + TInt aError ); + + private: // from MCameraObserver2 + + /** + * @see MCameraObserver2::HandleEvent + */ + virtual void HandleEvent(const TECAMEvent& aEvent); + + /** + * @see MCameraObserver2::ViewFinderReady + */ + virtual void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError); + + /** + * @see MCameraObserver2::VideoBufferReady + */ + virtual void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError); + + private: // Functions from base classes + + /** + * Get video frame size. + */ + virtual void GetVideoFrameSize( + TSize& aSize, + TInt aSizeIndex, + const TDesC8& aFormat ); + + /** + * Get video frame rate. + */ + virtual void GetVideoFrameRate( + TReal32& aRate, + TInt aRateIndex, + const TDesC8& aFormat, + const TSize& aSize ); + + void FreezeFrame( MFrameBuffer* aFrameBuffer ); + + void FreezeFrame( MCameraBuffer* aCameraBuffer ); + + public: // Data + + protected: // Data + + private: // Data + + // Onboard camera dublicate for the second thread. Owned. + CCamera* iCameraDuplicate; + + // MMF controller framwork mixin for event handling + MAsyncEventHandler* iEventHandler; + + // Enumerated values for possible states this class can have. + enum TState + { + EStopped, + EPrimed, + EPlaying + }; + + // One of the enumerated states. + TState iState; + + // ECAM frame rate index. + TInt iFrameRateIndex; + + // ECAM frame size index. + TInt iFrameSizeIndex; + + // Frame size. + TSize iFrameSize; + + // ECAM Video frame format. + CCamera::TFormat iFormat; + + // Pointer to AO that makes iCameraDuplicate.Reserve() and PowerOn() + // synchronous. Owned. These are called in SourcePrimeL and because + // it is synchronous, reserve & poweron must be too. + CSyncCameraReserve* iSyncReserve; + + // + TBool iAsynchronousReserveIssued; + + // Pointer to dublicated camera bitmap + CFbsBitmap* iDublicatedBitmap; + + // Camera lost by force indicator + TBool iCameraLost; + + private: // friends + + // Stif test module must be set as friend to be able to call protected + // and private methods + friend class CstiffVideoSourceAPICases; + + }; + +#endif // CVSONBOARDCAMERADATAPROVIDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSStillImageDataProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSStillImageDataProvider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,532 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +#ifndef CVSSTILLIMTAGEDATAPROVIDER_H +#define CVSSTILLIMTAGEDATAPROVIDER_H + +// INCLUDE FILES + +#include +#include "CApiVideoSource.h" +#include "cvtimagescaler.h" +#include + +#include "cactivewait.h" +#include "mmultiframeprovider.h" + +// FORWARD DECLARATIONS + +class CImageDecoder; +class CVSStillImageDataProvider; +class CVSFrameRateTimer; +class CVtImageBitmap; +class CMultiframeProvider; + + +// CLASS DECLARATION + +/** +* Internal implementation of still image data provider. This +* class is inherited from from public provider interface. +* +* @lib videosource.lib +*/ +class CVSStillImageDataProvider : public CVSDataProvider, MMultiframeprovider + { + public: // Constructors and destructor + + /** + * Static factory function create instance of this class. + * @param "aObserver" Pointer to provider observer. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CVSStillImageDataProvider* NewL( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + /** + * Destructor. + */ + ~CVSStillImageDataProvider(); + + public: // New functions + + public: // Functions from base classes + + /** + * Initialize provider. + * @param "aInitParams" Reference to the initialization parameters. + * @exception Can leave with one of the system wide error codes. + */ + void InitializeL( const TDesC8& aInitParams ); + + /** + * Cancel initialization of still image provider. + */ + void CancelInitializing(); + + /** + * Return digital zoom factor. + * @return Digital zoom factor. + */ + virtual TInt DigitalZoomFactor() const; + + /** + * Set digital zoom factor. + * @param "aDigitalZoomFactor" Digital zoom factor. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetDigitalZoomFactorL( TInt aDigitalZoomFactor = 0 ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @param "aClipRect" Required clip rectangle. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize,TRect& aClipRect ); + + /** + * Stop view finder bitmaps. + */ + virtual void StopViewFinder(); + + /** + * Test if view finder is active. + * @return ETrue if view finder active. + */ + virtual TBool ViewFinderActive() const; + + /** + * Start view finder bitmaps using direct screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect ); + + /** + * Start view finder bitmaps using direct screen access. + * @param "aWs" Window server session. + * @param "aScreenDevice" Screen device. + * @param "aWindow" Displayable window. + * @param "aScreenRect" Portion of the screen to which view finder data + * is to be transferred. + * @param "aClipRect" The rectangle to which the screen will be clipped. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect, + TRect& aClipRect ); + + /** + * Return provider information. + * @param @param "aInfo" Reference to variable to where the provider + * information is copied. + */ + virtual void ProviderInfo( TVSDataProviderInfo& aInfo ); + + /** + * See CVSDataProvider for description. + */ + virtual void SetViewFinderMirrorL( TBool aMirror ); + + /** + * See CVSDataProvider for description. + */ + virtual TBool ViewFinderMirror() const; + + /** + * See CVSDataProvider for description. + */ + virtual void FreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual void UnfreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual TBool IsFrozen() const; + + /** + * @See CVSDataProvider::SetContrastL for description. + */ + virtual void SetContrastL( TInt aContrast ); + + /** + * @See CVSDataProvider::GetContrast for description. + */ + virtual TInt GetContrast( TInt& aContrast ) const; + + /** + * @See CVSDataProvider::SetBrightnessL for description. + */ + virtual void SetBrightnessL( TInt aBrightness ); + + /** + * @See CVSDataProvider::GetBrightness for description. + */ + virtual TInt GetBrightness( TInt& aBrightness ) const; + + /** + * @See CVSDataProvider::SetWhiteBalanceL for description. + */ + virtual void SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance = CCamera::EWBAuto); + + /** + * @See CVSDataProvider::GetWhiteBalance for description. + */ + virtual TInt GetWhiteBalance( + CCamera::TWhiteBalance& aWhiteBalance ) const; + + /** + * @See CVSDataProvider::GetColorTone for description. + */ + virtual TInt GetColorTone( + CCamera::CCameraImageProcessing::TEffect& aColorTone) const; + + /** + * @See CVSDataProvider::SetColorToneL for description. + */ + virtual void SetColorToneL( + CCamera::CCameraImageProcessing::TEffect aValue ); + + protected: // New functions + + protected: // Functions from base classes + + private: // New functions + + /** + * See CVSDataProvider for description. + */ + void PrimeL(); + + private: + + private: // Functions from base classes + + /** + * See MDataSource for description. + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ); + + private: + + /** + * See MDataSource for description. + */ + virtual void BufferEmptiedL( CMMFBuffer* aBuffer ); + + /** + * See MDataSource for description. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * See MDataSource for description. + */ + virtual void SourceThreadLogoff(); + + /** + * See MDataSource for description. + */ + virtual void SourcePrimeL(); + + /** + * See MDataSource for description. + */ + virtual void SourcePlayL(); + + /** + * See MDataSource for description. + */ + virtual void SourcePauseL(); + + /** + * See MDataSource for description. + */ + virtual void SourceStopL(); + + private: // Functions from base classes + + /** + * See MVTVideoInput for description. + */ + virtual void SetFormatL( const TDesC8& aFormat ); + + /** + * See MVTVideoInput for description. + */ + virtual void SetFrameRateL( TReal32 aFrameRate ); + + /** + * See MVTVideoInput for description. + */ + virtual void SetVideoFrameSizeL( const TSize& aSize ); + + /** + * See MVTVideoInput for description. + */ + virtual void GetVideoFrameSizeL( TSize& aSize ) const; + + private: // New functions + + /** + * Common initialization of the provider (initializes features + * that are always needed by the provider). + * @exception Can leave with one of the system wide error codes. + */ + void CommonInitializeL(); + + /** + * Undo common initialization of still image data provider. + */ + void UndoCommonInitialized(); + + /** + * Loads image that was set in General Settings application. + * @param aType Type of of the general settings image. + * @exception Can leave with one of the system wide error codes. + */ + void GeneralSettingsInitializeL( const TGeneralSettingsImageType aType ); + + /** + * Initializes this instance as blank image instance. + * @exception Can leave with one of the system wide error codes. + */ + void BlankImageInitializeL(); + + /** + * Initializes this instance from image file. + * @param aFileName Name of the file from which this intance will be + * initialized. + * @exception Can leave with one of the system wide error codes. + */ + void FileImageInitializeL( const TFileName& aFileName ); + + /** + * View finder timer callback. This method is called when view finder + * needs updating. + */ + void VFTimer(); + + /** + * protocol timer callback. This method is called when new frame + * will be sent to consumer. + */ + void ProtoTimer(); + + /** + * Method for creating timer for protocol. This method is called + * in Proto thread context. + * @exception Can leave with one of the system wide error codes. + */ + void CreateProtoTimerL(); + + /** + * Releases protocol timer. This method is called in Protocol thread + * context. + */ + void ReleaseProtoTimer(); + + /** + * Creates YUV buffer from still image. This method is called in Protocol + * thread context. + * @exception Can leave with one of the system wide error codes. + */ + void CreateYUVDataL(); + + /** + * Release YUV buffer. This method is called in Protocol thread context. + */ + void ReleaseYUVData(); + + private: // Constructors and destructor + + /** + * Constructor. + * @param "aObserver" Pointer to provider observer. + */ + CVSStillImageDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + /** + * 2nd phase constructor. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL(); + + private: // Functions from base classes + + /** + * Get video frame size. + */ + virtual void GetVideoFrameSize( + TSize& aSize, + TInt aSizeIndex, + const TDesC8& aFormat ); + + /** + * Get video frame rate. + */ + virtual void GetVideoFrameRate( + TReal32& aRate, + TInt aRateIndex, + const TDesC8& aFormat, + const TSize& aSize ); + + /** + * Returns current screen display mode. + */ + TDisplayMode DisplayMode() const; + + private: + + // from MMultiframeprovider + /** + * @See MMultiframeprovider for description. + */ + virtual void InitializeReady(); + + /** + * @See MMultiframeprovider for description. + */ + virtual void RefreshYUVData( TImageShareDataBuffer& aYUVBitMap ); + + /** + * @See MMultiframeprovider for description. + */ + virtual void RefreshViewFinder( TImageShareDataBuffer& aVFBitMap ); + + /** + * @See MMultiframeprovider for description. + */ + virtual void NotifyImageHandlingError( TInt aError ); + + public: // Data + + protected: // Data + RCriticalSection iFreezeCS; + private: // Data + + // Provider state + enum TProviderState + { + EPSUninitialized, // Provider is uninitialized + EPSStopped, // Provider is initialized and stopped + EPSPrimed, // Provider is initialized and ready for playing + EPSPlaying, // Provider is playing + EPSInitializing, // Provider is initializing + EPSUndoInitializing // Provider is undoinitializing + }; + + // Provider state + TProviderState iPSState; + + // View finder state + enum TViewFinderState + { + EVFStopped, // View finder is not started + EVFPlaying // View finder started + }; + + // View finder state + TViewFinderState iVFState; + + // Source bitmap's name + TFileName iBitmapFileName; + + // Pointer to view finder timer instance + CVSFrameRateTimer* iVFTimer; // owned + + // Pointer to protocol timer instance + CVSFrameRateTimer* iProtoTimer; // owned, created in Proto thread context! + + // Target image for CVtImageScaler + CVtImageBitmap* iScaled; + CVtImageBitmap* iYUVBitMap; + + // Pointer to selected view finder image + CVtImageBitmap* iVFCurrent; + CVtImageBitmap* iVFBitmap; + + // Pointer to active waiter instance + CVSActiveWait< CVSStillImageDataProvider >* iActiveWait; // owned + + // Heap descriptor pointer that contains image as YUV + HBufC8* iYUVBuffer; // owned, created in Protocol thread context! + + // Frame counter + TUint32 iFrameCount; + + // protocol timer update rate + TInt iProtoUpdateRate; + + // Rescaling recuirement flag + TBool iVFRescalingRequired; + + // FireServer session instance + RFs iFs; + + // Current display mode + TDisplayMode iDisplayMode; + + // Viewer instance + CMultiframeProvider* iViewer; //owned + + // Traget VF size + TSize iTargetSize; + + //Record TVSStillImageDataProviderParams::iInitialize in InitializeL(), + //used in CancelInitializing call + TVSStillImageDataProviderParams::TInitialize iInitType; + + }; + +#endif // CVSSTILLIMTAGEDATAPROVIDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/VSPanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/VSPanic.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2006 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: Panic definitions for videosource module. +* +*/ + + +#ifndef VSPANIC_H +#define VSPANIC_H + +// INCLUDES +#include + +// CONSTANTS +_LIT( KVSPanicCategory, "VideoSource" ); + +// DATA TYPES +enum TVSPanic + { + EVSPanicSwitchAlreadyPending, // 0 + EVSPanicProviderNotSet, // 1 + EVSPanicProviderAlreadyInitialized, // 2 + EVSPanicProviderNotReady, // 3 + EVSPanicOperationNotSupported, // 4 + EVSPanicThreadOpenFailure // 5 + }; + +// FUNCTION PROTOTYPES +extern void Panic( TVSPanic aPanicCode ); + +#endif // VSPANIC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/VideoSourceUids.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/VideoSourceUids.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 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: Uid definition file for Video Source subsystem +* +*/ + + + +#ifndef __VIDEOSOURCEUIDS_HRH__ +#define __VIDEOSOURCEUIDS_HRH__ + +#define KSharedLibraryUidDefine 0x1000008D +#define KUidVideoSourceLibrary 0x101F8692 + +#endif \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/cactivewait.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/cactivewait.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,95 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +#ifndef C_ACTIVEWAIT_H +#define C_ACTIVEWAIT_H + +// INCLUDE FILES +#include +#include +/** +* Active waiter class for waiting any active request. When asynchronous +* request has been completed a given callback method will be called. +* +* @lib videosource.lib +*/ +template < class R > class CVSActiveWait: public CActive + { + private : + + typedef void ( R::*TVSActiveWaitCallback) ( TInt ); + + public : // Constructors and destructor + + /** + * Constructor. + * @param "aRequester" ?description + */ + inline CVSActiveWait( R* aRequester ); + + /** + * Destructor. + */ + inline ~CVSActiveWait(); + + /** + * Initializes the waiter class. + * @param "aCallback" Pointer to callback method that will be called + * when asynchronous request has been completed. + */ + inline void InitializeWaiter( TVSActiveWaitCallback aCallback ); + + /** + * Returns pointer to this active object's TRequestStatus member + * (iStatus). + * @return Pointer to this classes TRequestStatus member (iStatus). + */ + inline TRequestStatus* RequestStatus(); + + /** + * Signals waiter with given error code. + * @param aError Integer error code. + */ + inline void Signal( TInt aError ); + + private : // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + inline void RunL(); + + /** + * From CActive. See CActive for description. + */ + inline void DoCancel(); + + private : // Data + + // Pointer to requester. Callback method call will be made in this + // context. + R* iRequester; // not owned + + // Pointer to callback method. + TVSActiveWaitCallback iCallback; + }; + +#include "cactivewait.inl" + +#endif // C_ACTIVEWAIT_H + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/cactivewait.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/cactivewait.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,127 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ CVSActiveWait =============================== + +// ----------------------------------------------------------------------------- +// CVSActiveWait::~CVSActiveWait() +// ----------------------------------------------------------------------------- +// +template +CVSActiveWait< R >::~CVSActiveWait() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::~CVSActiveWait() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::~CVSActiveWait() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::RequestStatus() +// ----------------------------------------------------------------------------- +// +template +TRequestStatus* CVSActiveWait< R >::RequestStatus() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RequestStatus() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RequestStatus() <<"), RThread().Id().operator TUint())); + return &iStatus; + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::Signal( TInt aError ) +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::Signal( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::Signal() >>"), RThread().Id().operator TUint())); + if( IsActive() ) + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, aError ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::Signal() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::RunL() +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::RunL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RunL() >>"), RThread().Id().operator TUint())); + (iRequester->*iCallback)( iStatus.Int() ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RunL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::DoCancel() +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::DoCancel() >>"), RThread().Id().operator TUint())); + if ( iStatus == KRequestPending ) + { + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, KErrCancel ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::CVSActiveWait( CAnimatedImageViewer* aRequester ) +// ----------------------------------------------------------------------------- +// +template < class R > +CVSActiveWait< R >::CVSActiveWait( R* aRequester ) +: CActive( EPriorityHigh ), iRequester( aRequester ) + { + __IF_DEBUG(Print(_L("CVSActiveWait::CVSActiveWait() >>"))); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("CVSActiveWait::CVSActiveWait() <<"))); + } +// ----------------------------------------------------------------------------- +// CVSActiveWait::InitializeWaiter( TVSActiveWaitCallback aCallback ) +// ----------------------------------------------------------------------------- +// +template < class R > +void CVSActiveWait< R >::InitializeWaiter( TVSActiveWaitCallback aCallback ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::InitializeWaiter() >>"), RThread().Id().operator TUint())); + if ( !IsActive() ) + { + iStatus = KRequestPending; + iCallback = aCallback; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::InitializeWaiter() SetActive"), RThread().Id().operator TUint())); + SetActive(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::InitializeWaiter() <<"), RThread().Id().operator TUint())); + } + + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/capivideosource.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/capivideosource.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,146 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +/* + * CVSController +*/ + +// ----------------------------------------------------------------------------- +// CVSController::Observer +// ----------------------------------------------------------------------------- +// +inline MVSControllerObserver& CVSController::Observer() const + { + return *iObserver; + } + +/* + * CVSDataProvider +*/ + +// ----------------------------------------------------------------------------- +// CVSDataProvider::Observer +// ----------------------------------------------------------------------------- +// +inline MVSDataProviderObserver& CVSDataProvider::Observer() const + { + return *iObserver; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::BufferPool +// ----------------------------------------------------------------------------- +// +inline MVSBufferPool& CVSDataProvider::BufferPool() const + { + return *iPool; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::FillBufferActive +// ----------------------------------------------------------------------------- +// +inline TBool CVSDataProvider::FillBufferActive() const + { + return iFillBufferActive; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::Consumer +// ----------------------------------------------------------------------------- +// +inline MVTVideoSink* CVSDataProvider::Consumer() const + { + return iConsumer; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::MediaId +// ----------------------------------------------------------------------------- +// +inline TMediaId CVSDataProvider::MediaId() const + { + return iMediaId; + } + +/* + * CVSDataSource +*/ + +// ----------------------------------------------------------------------------- +// CVSDataSource::Observer +// ----------------------------------------------------------------------------- +// +inline MVSDataSourceObserver& CVSDataSource::Observer() const + { + return *iObserver; + } + +// ----------------------------------------------------------------------------- +// CVSDataSource::DataProvider +// ----------------------------------------------------------------------------- +// +inline CVSDataProvider& CVSDataSource::DataProvider() const + { + return *iProvider; + } + +// ----------------------------------------------------------------------------- +// CVSDataSource::SwitchProvider +// ----------------------------------------------------------------------------- +// +inline CVSDataProvider* CVSDataSource::SwitchProvider( + CVSDataProvider* aNewProvider ) + { + CVSDataProvider* oldProvider = iProvider; + iProvider = aNewProvider; + return oldProvider; + } + +/* + * TVSStillImageDataProviderParams + */ + +// ----------------------------------------------------------------------------- +// TVSStillImageDataProviderParams::TVSStillImageDataProviderParams +// ----------------------------------------------------------------------------- +// +TVSStillImageDataProviderParams::TVSStillImageDataProviderParams() + : iInitialize( EInitializeAsBlankImage ), iFileName( TPtrC() ) + { + } + +// ----------------------------------------------------------------------------- +// TVSStillImageDataProviderParams::TVSStillImageDataProviderParams +// ----------------------------------------------------------------------------- +// +TVSStillImageDataProviderParams::TVSStillImageDataProviderParams( + const TInitialize aInitialize ) + : iInitialize( aInitialize ), iFileName( TPtrC() ) + { + } + +// ----------------------------------------------------------------------------- +// TVSStillImageDataProviderParams::TVSStillImageDataProviderParams +// ----------------------------------------------------------------------------- +// +TVSStillImageDataProviderParams::TVSStillImageDataProviderParams( + const TFileName& aFileName ) + : iInitialize( EInitializeFromFile ), iFileName( aFileName ) + { + } diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/cmultiframedataao.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/cmultiframedataao.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,128 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + +#ifndef C_MULTIFRAMEDATAAO_H +#define C_MULTIFRAMEDATAAO_H + +// INCLUDE FILES +#include +#include "mmultiframeprovider.h" +// FORWARD DECLARATIONS +class CMultiframeProvider; + +// MACROS + +/** +* @lib videosource.lib +*/ +// ============================ CMultiframeDataAO =============================== +NONSHARABLE_CLASS( CMultiframeDataAO ) : public CTimer + { + public: // Constructors and destructor + + /** + * Constructor. + * @param "aRequester" instance to requester + */ + CMultiframeDataAO( CMultiframeProvider* aRequester ); + + /** + * Destructor. + */ + ~CMultiframeDataAO(); + + public: // New functions + + /** + * Sets observer. + * @param "aObserever" instance to observer + */ + void SetObserver( MMultiframeprovider* aObserver ); + + /** + * Activates CTimer + * @param "aUpdateTime" expiration time + */ + void Activate( TTimeIntervalMicroSeconds aUpdateTime, TBool aInit, TBool aVFUpdate ); + + /** + * Updates local buffer. + * @param "aLocalBuffer" local buffer + */ + void LocalBuffer( CVtImageBitmap* aLocalBuffer ); + + /** + * Updates remote buffer. + * @param "aRemoteBuffer" remote buffer + */ + void RemoteBuffer ( CVtImageBitmap* aRemoteBuffer ); + + /** + * Cancels looping and completes request in correct thread. + */ + void CancelTimeLoop(); + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + private: // Data + + // Pointer to observer. + MMultiframeprovider* iObserver; // not owned + + // Pointer to requester + CMultiframeProvider* iRequester; + + // For updating ViewFinder buffer + TImageShareDataBuffer iLocalBuffer; + // For updating remote buffer + TImageShareDataBuffer iRemoteBuffer; + + // For updating remote buffer if activated when active + TImageShareDataBuffer iRemoteSecondBuffer; + + // For updating ViewFinder buffer if activated when active + TImageShareDataBuffer iLocalSecondBuffer; + + // Initialization flag + TBool iInit; + + // Delta calc ref point + TTimeIntervalMicroSeconds iTime; + + // VF update flag + TBool iVFUpdate; + + // Id of thread whose active scheduler this instance is added into. + TThreadId iThreadId; + + // A flag to indecate loop ao must be stopped + TBool iRequireStopping; + }; + +#endif //C_MULTIFRAMEDATAAO_H + +// End of File + + + + + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/cmultiframeloopao.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/cmultiframeloopao.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,113 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +#ifndef C_MULTIFRAMELOOPAO_H +#define C_MULTIFRAMELOOPAO_H + +// INCLUDE FILES +#include + +// FORWARD DECLARATIONS +class CMultiframeProvider; + +// MACROS + +/** +* @lib videosource.lib +* Handles data looping in multi frame sharing case. +*/ +NONSHARABLE_CLASS( CMultiframeloopAO ) : public CActive + { + public: // Constructors and destructor + + /** + * Constructor. + * @param "aRequester" instance to requester + */ + CMultiframeloopAO( CMultiframeProvider* aRequester ); + + /** + * Destructor. + */ + ~CMultiframeloopAO(); + + /** + * Decreases number of free bitmaps + * @param "aCount" count how many bitmaps to be removed + */ + void RemoveFreeBitmaps( TInt aCount ); + + /** + * Increases number of free bitmaps + * @param "aCount" count how many bitmaps to be increased + */ + void SetFreeBitmaps( TInt aCount ); + + /** + * Cancels looping and completes request in correct thread. + */ + void CancelDataLoop(); + + public: // New functions + + /** + * Activates looping and completes request in correct thread. + */ + void Signal( ); + + /** + * Sets frame count. + * @param "aCount" frame count + */ + void SetFrameCount( TInt aCount ); + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + /** + * From CActive. See CActive for description. + */ + void DoCancel(); + + private: // Data + + // Pointer to requester. + CMultiframeProvider* iRequester; // not owned + + // Index of frame to be handled + TInt iIndex; + + // Total nuber of frames + TInt iFramecount; + + // Number of free bitmaps + TInt iFreeBMCount; + + // Id of thread whose active scheduler this instance is added into. + TThreadId iThreadId; + + // A flag to indecate loop ao must be stopped + TBool iRequireStopping; + }; +#endif //C_MULTIFRAMELOOPAO_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/cmultiframeprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/cmultiframeprovider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,395 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +#ifndef C_MULTIFRAMEPROVIDER_H +#define C_MULTIFRAMEPROVIDER_H + +// INCLUDE FILES +#include +#include +#include "cactivewait.h" +#include "cvtimagescaler.h" +#include "mmultiframeprovider.h" + +// FORWARD DECLARATIONS + +class CVtImageBitmap; +class CImageDecoder; +class CMultiframeloopAO; +class TScalingMediator; +class CMultiframeProvider; +class CMultiframeDataAO; + +const TInt KFirstFrameIndx = 0; + +// CLASS DECLARATION +// ============================ TScalingMediator =============================== +/** +* Internal implementation of still scaling mediator +* @lib videosource.lib +*/ + +NONSHARABLE_CLASS( TScalingMediator) : public MVtImageScalerObserver + { + public : + TScalingMediator(); + public : + /** + * @see MVtImageScalerObserver::ScalingFinished( TInt aError ) + */ + void ScalingFinished( TInt aError ); + + /** + * Sets waiter observer + */ + void SetWaiter( CVSActiveWait< CMultiframeProvider >* aWait ); + private : + CVSActiveWait< CMultiframeProvider >* iWait; + }; + + +// ============================ CMultiframeProvider =============================== +/** +* Internal implementation of multiframe provider +* @lib videosource.lib +*/ +NONSHARABLE_CLASS( CMultiframeProvider ) : public CBase + { + + public : // Constructors and destructor + + /** + * Static factory function create instance of this class. + * @param "aObserver" Pointer to data provider observer. + * @param aDisplayMode current display mode + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CMultiframeProvider* NewL( MMultiframeprovider* aObserver, TDisplayMode aDisplayMode ); + + /** + * Destructor. + */ + ~CMultiframeProvider(); + + + public : // Functions from base classes + + /** + * Initializes this instance from image or multiframe file. + * @param aFileName Name of the file from which this intance will be + * initialized. + * @exception Can leave with one of the system wide error codes. + */ + void InitializeL( const TFileName* aFileName ); + + /** + * Cancel initialization of multiframe provider. + * @return ETrue if don't need to wait a error message. + */ + TBool CancelInitializing(); + + /** + * Initializes this instance for blank image bitmap. + */ + void IniatializeBlankL(); + + /** + * Initializes this instance for Generalsettings image bitmap. + */ + void IniatializeGSL( const TGeneralSettingsImageType aType ); + /** + * Sets ViewFinder size + * @param aSize size of target bitmap (view finder) + */ + void SetVFScalingTargetSize( TSize aSize ); + + /** + * Decodes and scales initialized image or multiframe file + * @param aFrameindex index of frame to be decoded and scaled + */ + void ConvertAndScaleL( TInt aFrameIndex ); + + /** + * Scales and copies decoded frame for view finder display + * @param aSize size of target bitmap ( view fiender ) + */ + void ScaleCopy( TSize& aSize, TBool aVFUpdate = EFalse ); + + /** + * Signals looping AO to proceed to next frame + */ + void NextFrame(); + + /** + * Clears ViewFinder size + */ + void ClearVFScalingTargetSize(); + + /** + * Increases number of data consumers by one + */ + void IncreaseDataConsumer(); + + /** + * Decreases number of data consumers by one + * and if number is less than one it cancels data looping + * mechanism + */ + void DecreaseDataConsumer(); + + /** + * Adds used bitmap to free queue + */ + void AddBitmapToFreeQueue(); + + /** + * Indicates that second VF buffer needs to be used + */ + void UseSecondVfBuffer(); + + /** + * Indicates that VF has been stopped + */ + TBool IsVFStopped(); + + /** + * Set ViewFinder of Multiframe provider to stop + */ + void SetVFStop(); + + /** + * Wait for converting function exit + */ + void WaitForConverting(); + + /** + * Release converting flag + */ + void ReleaseForConverting(); + + private : // Constructors and destructor + + /** + * Constructor. + * @param "aObserver" Pointer to data provider observer. + * @param aDisplayMode current display mode + */ + CMultiframeProvider( MMultiframeprovider* aObserver, TDisplayMode aDisplayMode ); + + /** + * 2nd phase constructor. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL(); + + /** + * Image conversion finished callback. This method is called when image + * conversion is done. + * @param "aError" Error code. KErrNone if no error happened, one of the + * system wide error codes. + * otherwise. + */ + void ConversionFinished( TInt aError ); + + /** + * Image scaling finished callback. This method is called when image + * scaling is done. + * @param "aError" Error code. KErrNone if no error happened, one of + * the system wide error codes. + */ + void BMSScalingFinished( TInt aError ); + + /** + * Scales VF to new size. + * @param "aSize" New VF size. + * the system wide error codes. + */ + void ScaleVF( const TSize& aSize ); + + /** + * When view finder frame must be rescaled (wanted view finder size is + * neither QCIF nor QQQCIF) this callback will be called when the + * rescaling has finished. + * @param "aError" Error code. KErrNone if no error happened, one of + * the system wide error codes. + */ + void VFRescalingFinished( TInt aError ); + + /** + * When view finder frames are rescaled this callback method will be + * called. + * @param "aError" Error code. KErrNone if no error happened, one of + * the system wide error codes. + */ + void VFScalingReady(); + + /** + * Creates blank bitmap with given size, color mode and color. + * @param "aBitmap" Bitmap pointer reference into which pointer to new + * isntance will be copied. + * @param "aSize" Size of the blank bitmap to be created. + * @param "aMode" Color mode for created bitmap. + * @param "aColor" Color of created bitmap. + * @exception Can leave with one of the system wide error codes. + */ + void CreateBlankBitmapL( CFbsBitmap*& aBitmap, const TSize& aSize, const TDisplayMode& aMode, const TRgb& aColor ); + + public : // Data + + TBool iAnimation; + + TBool iConvertAndScale; + + protected: // Data + + RCriticalSection iFreezeCS; + + private : //Data + + + // Source image for CVtImageScaler + CVtImageBitmap* iConverted; + + // Target image for CVtImageScaler + CVtImageBitmap* iScaled; + CVtImageBitmap* iBuffer1; + CVtImageBitmap* iBuffer2; + + // Pointer to remote image + CVtImageBitmap* iYUVBitMap; + + // Pointer to QCIF sized view finder image + CVtImageBitmap* iVFbitmap; + CVtImageBitmap* iFirstVfBuf; + CVtImageBitmap* iSecondVfBuf; + + // Boolean values of VF buffer validation + TBool iSecondVFBuffer; + TBool iFirstVFBuffer; + + // Pointer to bitmap loaded from GS + CVtImageBitmap* iGSBitmap; + + // Pointer to selected view finder image + CVtImageBitmap* iVFCurrent; + + // Viewer AO instance + CMultiframeloopAO* iLoopAo;// owned + + // Initalisation scaling mediator + TScalingMediator iInitMediator; + + // ViewFinder scaling scaling mediator + TScalingMediator iScalingMediator; + + // Waiter instance for initialisation + CVSActiveWait< CMultiframeProvider >* iActiveWaitInit;// owned + + // Waiter instance for scaling + CVSActiveWait< CMultiframeProvider >* iActiveWaitScale;// owned + + // Waiter instance for scaling + CVSActiveWait< CMultiframeProvider >* iActiveWaitInitScale; // owned + + // VT image scaler instance for initialisation + CVtImageScaler* iVtImageScalerInit; // owned + + // VT image scaler instance for scaling + CVtImageScaler* iVtImageScalerScale; // owned + + // Image decoder instance + CImageDecoder* iImageDecoder; // owned + + // Wanted view finder size + TSize iWantedVFSize; + + // FireServer session instance + RFs iFs; + + // Current display mode + TDisplayMode iDisplayMode; + + // Rescaling recuirement flag + TBool iVFRescalingRequired; + + // Multiframe observer instance + MMultiframeprovider* iObserver; + + // VF bitmap size + TSize iTargetSize; + + // Is blank image share + TBool iBlank; + + // Is GS image share + TBool iGSImage; + + // Is second bitmap in use + TBool iOldBM; + + // Pointer to old bitmap + CVtImageBitmap* iOldBitmap; + + // Frame count + TInt iCount; + + // Is initialization ongoing flag + TBool iInitialization; + + // Frame delay + TTimeIntervalMicroSeconds iDelay; + + // Start time for image conversion + TTime iStartTime; + + // Data timer expiration / Frame update time + TTimeIntervalMicroSeconds iFrameUpdateTime; + + // Pointer to data timer AO + CMultiframeDataAO* iDataTimer; + + // Number of data consumers + TInt iNumOfConsumers; + + // Queue for bitmaps that are free for use + RPointerArray iFreeQueue; + + // Pointer to bitmap mask + CFbsBitmap* iMask; + + // Pointer to temporary bitmap + CVtImageBitmap* iTempBM; + + TSize iVFSize; + + // Boolean value of VF buffer update + TBool iVFUpdate; + + // file handle to default VT image + RFile iDefaultImageFile; + // Boolean value of VF buffer stopping + TBool iIsVfStopped; + + // Boolean value of VF buffer stopping + TBool iWaitForConverting; + }; + +#endif // C_MULTIFRAMEPROVIDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/mmultiframeprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/mmultiframeprovider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,82 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +#ifndef M_MULTIFRAMEPROVIDER_H +#define M_MULTIFRAMEPROVIDER_H + +// INCLUDE FILES +#include + +// FORWARD DECLARATIONS +class CVtImageBitmap; + +// ============================ TImageShareDataBuffer =============================== +/** +* Share buffer class +* @lib videosource.lib +*/ +NONSHARABLE_CLASS( TImageShareDataBuffer) + { + public : + CVtImageBitmap* iBitmap; + TBool iIsBitmapFree; + }; + + // General Settings image type + enum TGeneralSettingsImageType + { + EGSStillImage, + EGSDefaultStillImage + }; + +// ============================ MMultiframeprovider =============================== +/** +* Multiframe observer API +* Interface for receiving data and acknowledgements from multiframe provider. +* @lib videosource.lib +*/ +class MMultiframeprovider + { + public: + /** + * Indicates when initialization of multiframeprovider has finished + */ + virtual void InitializeReady() = 0; + + /** + * Refresh YUV data + * @param "aYUVBitMap" reference new YUV data. + */ + virtual void RefreshYUVData( TImageShareDataBuffer& aYUVBitMap ) = 0; + + /** + * Refresh VF data + * @param "aVFBitMap" reference new VF data. + */ + virtual void RefreshViewFinder( TImageShareDataBuffer& aVFBitMap ) = 0; + + /** + * Notifies if error occures in multiframeprovider + * @param "aError" symbian wide error code. + */ + virtual void NotifyImageHandlingError( TInt aError ) = 0; + + }; +#endif //M_MULTIFRAMEPROVIDER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/rom/VideoSource.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/rom/VideoSource.iby Mon Nov 23 14:47:47 2009 +0200 @@ -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: +* IBY file for VideoSource +* +* +*/ + + +#ifndef __VIDEOSOURCE_IBY__ +#define __VIDEOSOURCE_IBY__ + +#ifdef __CS_VIDEO_TELEPHONY + +file=ABI_DIR\BUILD_DIR\VideoSource.dll SHARED_LIB_DIR\VideoSource.dll + +// Enabler for eclipsing ROM binary +data=ZSYSTEM\install\videosource_stub.sis system\install\videosource_stub.sis + +#endif + +#endif diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSCameraDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSCameraDataProvider.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,864 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include + +#include "CVSCameraDataProvider.h" +#include "CVSOnboardCameraDataProvider.h" +#include "VSPanic.h" + +// EXTERNAL FUNCTION PROTOTYPES + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +static const TInt KQcifWidth = 176; +static const TInt KQcifHeight = 144; +static const TReal32 KFrameRate = 15.0; +static const TInt KFrozenFrameBufferSize = ( KQcifWidth * KQcifHeight ) + ( KQcifWidth * KQcifHeight ) / 2; +static const TInt KCCameraPriority = 80; + +// ============================ MEMBER FUNCTIONS =============================== + +// ============================= CVsFrameBuffer ================================ + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::NewL( TInt aSize ) +// ----------------------------------------------------------------------------- +// +EXPORT_C CVsFrameBuffer* CVsFrameBuffer::NewL( TInt aSize ) + { + CVsFrameBuffer* self = new ( ELeave ) CVsFrameBuffer(); + CleanupStack::PushL( self ); + self->ConstructL( aSize ); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::~CVsFrameBuffer() +// ----------------------------------------------------------------------------- +// +EXPORT_C CVsFrameBuffer::~CVsFrameBuffer() + { + delete iBuffer; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::CopyProperties( MFrameBuffer* aSource ) +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::CopyProperties( MFrameBuffer* aSource ) + { + MFrameBuffer::iIndexOfFirstFrameInBuffer = aSource->iIndexOfFirstFrameInBuffer; + MFrameBuffer::iElapsedTime = aSource->iElapsedTime; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::CopyProperties( MCameraBuffer* aSource ) +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::CopyProperties( MCameraBuffer* aSource ) + { + MCameraBuffer::iIndexOfFirstFrameInBuffer = aSource->iIndexOfFirstFrameInBuffer; + MCameraBuffer::iElapsedTime = aSource->iElapsedTime; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::CopyFrameL( MFrameBuffer* aSource ) +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::CopyFrameL( MFrameBuffer* aSource ) + { + iPtr = *( aSource->DataL( 0 ) ); + CopyProperties( aSource ); + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::CopyFrameL( MCameraBuffer* aSource ) +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::CopyFrameL( MCameraBuffer* aSource ) + { + iPtr = *( aSource->DataL( 0 ) ); + CopyProperties( aSource ); + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::DataL( TInt aIndex ) +// ----------------------------------------------------------------------------- +// +TDesC8* CVsFrameBuffer::DataL( TInt aIndex ) + { + if( aIndex != 0 ) + { + User::Leave( KErrNotSupported ); + } + + return &iPtr; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::FrameL( TInt aIndex ) +// ----------------------------------------------------------------------------- +// +CFbsBitmap* CVsFrameBuffer::FrameL( TInt aIndex ) + { + ( void ) aIndex; + User::Leave( KErrNotSupported ); + return 0; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::Release() +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::Release() + { + // Nothing to do + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::FrameSize() +// ----------------------------------------------------------------------------- +// +TInt CVsFrameBuffer::FrameSize( TInt /*aFrameIndex*/ ) + { + return KErrNotSupported; + } +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::ChunkOffsetL() +// ----------------------------------------------------------------------------- +// +TInt CVsFrameBuffer::ChunkOffsetL( TInt /*aFrameIndex*/ ) + { + User::Leave( KErrNotSupported ); + return KErrNotSupported; + } +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::ChunkL() +// ----------------------------------------------------------------------------- +// +RChunk& CVsFrameBuffer::ChunkL() + { + User::Leave( KErrNotSupported ); + RChunk* help = NULL; + return *help; + } +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::BitmapL() +// ----------------------------------------------------------------------------- +// +CFbsBitmap& CVsFrameBuffer::BitmapL(TInt /*aFrameIndex*/ ) + { + CFbsBitmap* helpbit = new (ELeave) CFbsBitmap; + CleanupStack::PushL( helpbit ); + User::Leave( KErrNotSupported ); + CleanupStack::Pop( helpbit ); + delete helpbit; + return *helpbit; + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::NumFrames() +// ----------------------------------------------------------------------------- +// +TInt CVsFrameBuffer::NumFrames() + { + return KErrNotSupported; + } +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::CVsFrameBuffer() +// ----------------------------------------------------------------------------- +// +CVsFrameBuffer::CVsFrameBuffer() +: iPtr( 0, 0 ) + { + } + +// ----------------------------------------------------------------------------- +// CVsFrameBuffer::ConstructL( TInt aSize ) +// ----------------------------------------------------------------------------- +// +void CVsFrameBuffer::ConstructL( TInt aSize ) + { + iBuffer = HBufC8::NewL( aSize ); + iPtr.Set( iBuffer->Des() ); + } + +// ========================= CVSCameraDataProvider ============================= + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::NewL +// ----------------------------------------------------------------------------- +// +CVSCameraDataProvider* CVSCameraDataProvider::NewL( + MVSDataProviderObserver* aObserver, + TInt aProviderIndex, + MVSBufferPool* aPool ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::NewL() >>"), RThread().Id().operator TUint())); + CVSCameraDataProvider* self = + new (ELeave) CVSOnboardCameraDataProvider( aObserver, aPool ); + CleanupStack::PushL( self ); + self->ConstructL( aProviderIndex ); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::~CVSCameraDataProvider +// ----------------------------------------------------------------------------- +// +CVSCameraDataProvider::~CVSCameraDataProvider() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::~CVSCameraDataProvider() >>"), RThread().Id().operator TUint())); + delete iFrozenFrame; + delete iFrozenVFFrameCopy; + delete iSource; + delete iFrozenVFFrameToBeSent; + delete iTarget; + delete iScaler; + delete iCamImgProc; + if ( &Camera() != NULL ) + { + Camera().Release(); + } + delete iCamera; + iFreezeCS.Close(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::~CVSCameraDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::InitializeL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::InitializeL( const TDesC8& /*aInitParams*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::InitializeL() >>"), RThread().Id().operator TUint())); + Camera().Reserve(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::InitializeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::DigitalZoomFactor +// ----------------------------------------------------------------------------- +// +TInt CVSCameraDataProvider::DigitalZoomFactor() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::DigitalZoomFactor() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::DigitalZoomFactor() <<"), RThread().Id().operator TUint())); + return Camera().DigitalZoomFactor(); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetDigitalZoomFactorL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetDigitalZoomFactorL( TInt aDigitalZoomFactor) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetDigitalZoomFactorL() >>"), RThread().Id().operator TUint())); + Camera().SetDigitalZoomFactorL( aDigitalZoomFactor ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetDigitalZoomFactorL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::StartViewFinderBitmapsL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::StartViewFinderBitmapsL( TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StartViewFinderBitmapsL() >>"), RThread().Id().operator TUint())); + TCameraInfo info; + Camera().CameraInfo( info ); + if ( !(info.iOptionsSupported & TCameraInfo::EViewFinderBitmapsSupported) ) + { + User::Leave( KErrNotSupported ); + } + if( IsFrozen()&& iHasFrozenVFFrameCopyCreated ) + { + ScaleFrozenBitmapL( aSize ); + } + Camera().StartViewFinderBitmapsL( aSize ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StartViewFinderBitmapsL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::StartViewFinderBitmapsL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::StartViewFinderBitmapsL( TSize&, TRect& ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StartViewFinderBitmapsL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::StopViewFinder +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::StopViewFinder() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StopViewFinder() >>"), RThread().Id().operator TUint())); + Camera().StopViewFinder(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StopViewFinder() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ViewFinderActive +// ----------------------------------------------------------------------------- +// +TBool CVSCameraDataProvider::ViewFinderActive() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ViewFinderActive() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ViewFinderActive() <<"), RThread().Id().operator TUint())); + return Camera().ViewFinderActive(); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::StartViewFinderDirectL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::StartViewFinderDirectL( RWsSession&, + CWsScreenDevice&, RWindowBase&, TRect& ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StartViewFinderDirectL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::StartViewFinderDirectL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::StartViewFinderDirectL( RWsSession&, + CWsScreenDevice&, RWindowBase&, TRect&, TRect& ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::StartViewFinderDirectL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ProviderInfo +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ProviderInfo( TVSDataProviderInfo& aInfo ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfo() >>"), RThread().Id().operator TUint())); + Camera().CameraInfo( static_cast< TCameraInfo& >( aInfo ) ); + aInfo.iFreezeSupported = ETrue; + TRAP_IGNORE( ProviderInfoExL( aInfo ) ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfo() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetViewFinderMirrorL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetViewFinderMirrorL( TBool aMirror ) + { + Camera().SetViewFinderMirrorL( aMirror ); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ViewFinderMirror +// ----------------------------------------------------------------------------- +// +TBool CVSCameraDataProvider::ViewFinderMirror() const + { + return Camera().ViewFinderMirror(); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::FreezeL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::FreezeL() + { + iFreezeCS.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::FreezeL() >>"), RThread().Id().operator TUint())); + if( !IsFrozen() ) + { + iFrozen = ETrue; + iFrozenVfFrameReady = EFalse; + iFreezePendingFlags = EViewFinderFreezePending | EVideoFrameFreezePending; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::FreezeL() <<"), RThread().Id().operator TUint())); + iFreezeCS.Signal(); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::UnfreezeL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::UnfreezeL() + { + iFreezeCS.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::UnfreezeL() >>"), RThread().Id().operator TUint())); + if( IsFrozen() ) + { + iFrozen = EFalse; + iFreezePendingFlags = 0; + iHasFrozenVFFrameCopyCreated = EFalse; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::UnfreezeL() <<"), RThread().Id().operator TUint())); + iFreezeCS.Signal(); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::IsFrozen +// ----------------------------------------------------------------------------- +// +TBool CVSCameraDataProvider::IsFrozen() const + { + return iFrozen; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ImageReady +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ImageReady( + CFbsBitmap* /*aBitmap*/, HBufC8* /*aData*/, TInt /*aError*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ImageReady() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ImageReady() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::PowerOnComplete +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::PowerOnComplete( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::PowerOnComplete() >>"), RThread().Id().operator TUint())); + if ( !iPowerOnComplete ) + { + if ( aError == KErrNone ) + { + iPowerOnComplete = ETrue; + iCameraHandle = Camera().Handle(); + // Setup ECAM so that the returned image is ok even if view finder + // is asked before video + TCameraInfo info; + Camera().CameraInfo( info ); + if ( !(info.iOptionsSupported & + TCameraInfo::EViewFinderBitmapsSupported) ) + { + NotifyError( KErrNotSupported ); + return; // End debug print is missed + } + TInt sizeIndex, rateIndex; + sizeIndex = rateIndex = 0; + for ( + sizeIndex = 0; + sizeIndex < info.iNumVideoFrameSizesSupported; + sizeIndex++ ) + { + TSize size; + Camera().EnumerateVideoFrameSizes( + size, + sizeIndex, + CCamera::EFormatYUV420Planar ); + if ( size == TSize( KQcifWidth, KQcifHeight ) ) + { + TReal32 rate; + for ( + rateIndex = 0; + rateIndex < info.iNumVideoFrameRatesSupported; + rateIndex++ ) + { + Camera().EnumerateVideoFrameRates( + rate, + rateIndex, + CCamera::EFormatYUV420Planar, + sizeIndex ); + if ( KFrameRate == rate ) + { + TRAPD( + err, + Camera().PrepareVideoCaptureL( + CCamera::EFormatYUV420Planar, + sizeIndex, + rateIndex, + 2, + 1) ); + if ( err != KErrNone ) + { + NotifyError( err ); + return; // End debug print is missed + } + break; + } + } + break; + } + } + Observer().vsProviderReady(); + } + else + { + NotifyError( aError ); + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::PowerOnComplete() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ViewFinderFrameReady +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ViewFinderFrameReady( CFbsBitmap& aFrame ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ViewFinderFrameReady() >>"), RThread().Id().operator TUint())); + if( iFreezePendingFlags & EViewFinderFreezePending ) + { + FreezeViewFinderFrame( aFrame ); + } + if( IsFrozen() && !( iFreezePendingFlags & EViewFinderFreezePending ) && iFrozenVfFrameReady ) + { + Observer().vsViewFinderFrameReady( *iFrozenVFFrameToBeSent ); + } + else if( !IsFrozen() ) + { + Observer().vsViewFinderFrameReady( aFrame ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ViewFinderFrameReady() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ImageBufferReady +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ImageBufferReady(MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ImageBufferReady() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ImageBufferReady() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ScalingFinished +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ScalingFinished( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ScalingFinished() >>"), RThread().Id().operator TUint())); + if( aError == KErrNone ) + { + iFrozenVfFrameReady = ETrue; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ScalingFinished() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::CVSCameraDataProvider +// ----------------------------------------------------------------------------- +// +CVSCameraDataProvider::CVSCameraDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) : + CVSDataProvider( aObserver, aPool ) + { + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ConstructL( TInt aProviderIndex ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ConstructL() >>"), RThread().Id().operator TUint())); + CVSDataProvider::ConstructL(); + // New CCamera API imp + // Check which API is suported + TRAPD( error, iCamera = + CCamera::New2L( *this, aProviderIndex, KCCameraPriority ) ); + // try to create using API + if ( error ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ConstructL() New2L failed, using NewL instead"), RThread().Id().operator TUint())); + iCamera = CCamera::NewL( *this, aProviderIndex ); + } + iFrozenVFFrameCopy = new ( ELeave ) CFbsBitmap(); + iFrozenVFFrameToBeSent = new ( ELeave ) CFbsBitmap(); + iScaler = CVtImageScaler::NewL( *this ); + iFrozenFrame = CVsFrameBuffer::NewL( KFrozenFrameBufferSize ); + + iHasFrozenVFFrameCopyCreated = EFalse; + + // Camera image processing + TRAP( error, iCamImgProc = + CCamera::CCameraImageProcessing::NewL( *iCamera ) ); + User::LeaveIfError( iFreezeCS.CreateLocal() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::FreezeViewFinderFrame +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::FreezeViewFinderFrame( CFbsBitmap& aFrame ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::FreezeViewFinderFrame() >>"), RThread().Id().operator TUint())); + + TSize frameSize( aFrame.SizeInPixels() ); + + TUint scanlineLength( CFbsBitmap::ScanLineLength( frameSize.iWidth, aFrame.DisplayMode() ) ); + + TInt result = iFrozenVFFrameCopy->Create( frameSize, aFrame.DisplayMode() ); + + if( result != KErrNone ) + { + Observer().vsProviderError( result ); + return; + } + + iFrozenVFFrameCopy->LockHeap(); + const TUint8* source = reinterpret_cast< TUint8* >( aFrame.DataAddress() ); + TUint8* dest = reinterpret_cast< TUint8* >( iFrozenVFFrameCopy->DataAddress() ); + for( TInt y = frameSize.iHeight - 1; y >= 0; y-- ) + { + Mem::Copy( dest, source, scanlineLength ); + dest += scanlineLength; + source += scanlineLength; + } + iFrozenVFFrameCopy->UnlockHeap(); + TRAP( result, ScaleFrozenBitmapL( frameSize ) ); + iFreezePendingFlags &= ~EViewFinderFreezePending; + iHasFrozenVFFrameCopyCreated = ETrue; + if( result != KErrNone ) + { + Observer().vsProviderError( result ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::FreezeViewFinderFrame() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ScaleFrozenBitmapL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ScaleFrozenBitmapL( TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ScaleFrozenBitmapL() >>"), RThread().Id().operator TUint())); + iFrozenVfFrameReady = EFalse; + delete iSource; iSource = 0; + iSource = CVtImageBitmap::NewL( iFrozenVFFrameCopy->Handle() ); + User::LeaveIfError( iFrozenVFFrameToBeSent->Create( aSize, iFrozenVFFrameCopy->DisplayMode() ) ); + delete iTarget; iTarget = 0; + iTarget = CVtImageBitmap::NewL( iFrozenVFFrameToBeSent->Handle() ); + iScaler->Cancel(); + iScaler->ScaleL( *iSource, *iTarget ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ScaleFrozenBitmapL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::ProviderInfoExL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::ProviderInfoExL( TVSDataProviderInfo& aInfo ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfoExL() >>"), RThread().Id().operator TUint())); + aInfo.iSupportedColorTones = CCamera::CCameraImageProcessing::EEffectNone; + // Check if colortone is suported and set colortone values + if ( iCamImgProc ) + { + RArray< TUid > uids; + CleanupClosePushL( uids ); + iCamImgProc->GetSupportedTransformationsL( uids ); + if ( uids.Find( KUidECamEventImageProcessingEffect ) != KErrNotFound ) + { + TValueInfo type; + RArray< TInt > values; + CleanupClosePushL( values ); + iCamImgProc->GetTransformationSupportedValuesL( + KUidECamEventImageProcessingEffect, values, type ); + if ( ( type == EBitField ) && ( values.Count() > 0 ) ) + { + aInfo.iSupportedColorTones = values[ 0 ]; + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfoExL() valueType is NOT bitfield, fix me"), RThread().Id().operator TUint())); + } + CleanupStack::PopAndDestroy(); // values.Close() + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfoExL() camera image processing not supported"), RThread().Id().operator TUint())); + } + CleanupStack::PopAndDestroy(); // uids.Close() + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::ProviderInfoExL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetContrastL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetContrastL( TInt aContrast ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetContrastL() >>"), RThread().Id().operator TUint())); + Camera().SetContrastL(aContrast); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetContrastL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::GetContrast +// ----------------------------------------------------------------------------- +// +TInt CVSCameraDataProvider::GetContrast( TInt& aContrast ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetContrast() >>"), RThread().Id().operator TUint())); + TInt result( KErrNotSupported ); + TCameraInfo info; + Camera().CameraInfo( info ); + if ( info.iOptionsSupported & TCameraInfo::EContrastSupported ) + { + aContrast = Camera().Contrast(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetContrast() %d"), RThread().Id().operator TUint(), aContrast)); + result = KErrNone; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetContrast() <<"), RThread().Id().operator TUint())); + return result; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetBrightnessL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetBrightnessL( TInt aBrightness ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetBrightnessL() >>"), RThread().Id().operator TUint())); + Camera().SetBrightnessL( aBrightness ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetBrightnessL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::GetBrightness +// ----------------------------------------------------------------------------- +// +TInt CVSCameraDataProvider::GetBrightness( TInt& aBrightness ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetBrightness() >>"), RThread().Id().operator TUint())); + TInt result( KErrNotSupported ); + TCameraInfo info; + Camera().CameraInfo( info ); + if ( info.iOptionsSupported & TCameraInfo::EBrightnessSupported ) + { + aBrightness = Camera().Brightness(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetBrightness() %d"), aBrightness)); + result = KErrNone; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetBrightness() <<"), RThread().Id().operator TUint())); + return result; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetWhiteBalanceL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetWhiteBalanceL( CCamera::TWhiteBalance + aWhiteBalance ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetWhiteBalanceL() >>"), RThread().Id().operator TUint())); + Camera().SetWhiteBalanceL( aWhiteBalance ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetWhiteBalanceL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::GetWhiteBalance +// ----------------------------------------------------------------------------- +// +TInt CVSCameraDataProvider::GetWhiteBalance( CCamera::TWhiteBalance& + aWhiteBalance) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetWhiteBalance() >>"),RThread().Id().operator TUint() ) ); + aWhiteBalance = Camera().WhiteBalance(); + __IF_DEBUG(Print(_L("WhiteBalance[%d]: CVSCameraDataProvider::GetWhiteBalance() %d"), aWhiteBalance ) ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetWhiteBalance() <<"), RThread().Id().operator TUint() ) ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::SetColorToneL +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::SetColorToneL( + CCamera::CCameraImageProcessing::TEffect aValue ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetColorToneL() >>"), RThread().Id().operator TUint())); + if ( iCamImgProc ) + { + iCamImgProc->SetTransformationValue( KUidECamEventImageProcessingEffect, aValue ); + } + else + { + //Set colortone that is not suported -> Leave + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetColorToneL() LEAVE"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::SetColorToneL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::GetColorTone +// ----------------------------------------------------------------------------- +// +TInt CVSCameraDataProvider::GetColorTone( + CCamera::CCameraImageProcessing::TEffect& aColorTone ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetColorTone() >>"), RThread().Id().operator TUint())); + TInt result( KErrNotSupported ); + if ( iCamImgProc ) + { + aColorTone = + static_cast< CCamera::CCameraImageProcessing::TEffect >( + iCamImgProc->TransformationValue( + KUidECamEventImageProcessingEffect ) ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetColorTone() %d"), RThread().Id().operator TUint(), aColorTone)); + result = KErrNone; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::GetColorTone() <<"), RThread().Id().operator TUint())); + return result; + } + +// ----------------------------------------------------------------------------- +// CVSCameraDataProvider::CancelInitializing +// ----------------------------------------------------------------------------- +// +void CVSCameraDataProvider::CancelInitializing() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::CancelInitializing() >>"), RThread().Id().operator TUint())); + //There is a blank implemention. + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSCameraDataProvider::CancelInitializing() <<"), RThread().Id().operator TUint())); + return; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSController.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSController.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include "CApiVideoSource.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVSController::CVSController() +// ----------------------------------------------------------------------------- +// +CVSController::CVSController() + { + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSControllerImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSControllerImp.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include + +#include "CVSControllerImp.h" +#include "VSPanic.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Panics current thread. +// ----------------------------------------------------------------------------- +// +void Panic( TVSPanic aPanicCode ) + { + User::Panic( KVSPanicCategory(), aPanicCode ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVSController::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSController* CVSController::NewL( MVSControllerObserver* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource: CVSController::NewL() entering"))); + if ( aObserver == NULL ) + { + User::Leave( KErrArgument ); + } + CVSController* self = CVSControllerImp::NewL(); + CleanupStack::PushL( self ); + self->ConstructL( aObserver ); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource: CVSController::NewL() returning"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSControllerImp::ConstructL( MVSControllerObserver* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ConstructL() entering"))); + iObserver = aObserver; + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ConstructL() returning"))); + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::NewL +// ----------------------------------------------------------------------------- +// +CVSControllerImp* CVSControllerImp::NewL() + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::NewL() entering"))); + CVSControllerImp* self = new (ELeave) CVSControllerImp; + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::NewL() returning"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::~CVSControllerImp +// ----------------------------------------------------------------------------- +// +CVSControllerImp::~CVSControllerImp() + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::~CVSControllerImp() entering"))); + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::~CVSControllerImp() returning"))); + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::CreateDataSourceL +// ----------------------------------------------------------------------------- +// +CVSDataSource* CVSControllerImp::CreateDataSourceL( MVSDataSourceObserver* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::CreateDataSourceL() entering"))); + CVSDataSource* p = CVSDataSource::NewSourceL( aObserver ); + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::CreateDataSourceL() returning"))); + return p; + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::ProvidersAvailable +// ----------------------------------------------------------------------------- +// +TInt CVSControllerImp::ProvidersAvailable() + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ProvidersAvailable() entering"))); + TInt count = CVSDataProvider::ProvidersAvailable(); + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ProvidersAvailable() returning"))); + return count; + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::ProviderInfoL +// ----------------------------------------------------------------------------- +// +void CVSControllerImp::ProviderInfoL( + TInt aProviderIndex, + TVSDataProviderInfo& aInfo ) + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ProviderInfo() entering"))); + if (aProviderIndex >= ProvidersAvailable() || aProviderIndex < 0) + { + User::Leave( KErrNotSupported ); + } + CVSDataProvider::ProviderInfoL( aProviderIndex, aInfo ); + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::ProviderInfo() returning"))); + } + +// ----------------------------------------------------------------------------- +// CVSControllerImp::CreateDataProviderL +// ----------------------------------------------------------------------------- +// +CVSDataProvider* CVSControllerImp::CreateDataProviderL( + TInt aProviderIndex, + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) + { + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::CreateDataProviderL() entering"))); + if (aProviderIndex >= ProvidersAvailable() || aProviderIndex < 0) + { + User::Leave( KErrArgument ); + } + if ( aObserver == NULL ) + { + User::Leave( KErrArgument ); + } + CVSDataProvider* p = + CVSDataProvider::NewL( aProviderIndex, aObserver, aPool ); + __IF_DEBUG(Print(_L("VideoSource: CVSControllerImp::CreateDataProviderL() returning"))); + return p; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSDataProvider.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,543 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include "CApiVideoSource.h" +#include "CVSCameraDataProvider.h" +#include "CVSStillImageDataProvider.h" +#include "CVSOnboardCameraDataProvider.h" + +// EXTERNAL FUNCTION PROTOTYPES + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +class TSizeCount + { + public: + TInt iCount; + TSize iSize; + }; + +class TRateCount + { + public: + TInt iCount; + TReal32 iRate; + }; + +// LOCAL FUNCTION PROTOTYPES + +static TInt TSizeCountTLinearOrderFunc( + const TSizeCount& aSizeCount1, const TSizeCount& aSizeCount2 ); +static TBool TSizeCountTIdentityRelationFunc( + const TSizeCount& aSizeCount1, const TSizeCount& aSizeCount2 ); +static TInt TRateCountTLinearOrderFunc( + const TRateCount& aRateCount1, const TRateCount& aRateCount2 ); +static TBool TRateCountTIdentityRelationFunc( + const TRateCount& aRateCount1, const TRateCount& aRateCount2 ); + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TSizeCountTLinearOrderFunc: Used in RArray aRateCount2.iRate ) + { + return 1; + } + + if ( aRateCount1.iRate < aRateCount2.iRate ) + { + return -1; + } + + return 0; + } + +// ----------------------------------------------------------------------------- +// TRateCountTIdentityRelationFunc: Used in RArray>"), RThread().Id().operator TUint(), aProviderIndex)); + + CVSDataProvider* self = NULL; + + // Is it ecam + TInt count = CamerasAvailable(); + + // < 0 == error + if( count < 0 ) + { + User::Leave( count ); + } + + if ( aProviderIndex < count ) + { + self = CVSCameraDataProvider::NewL( aObserver, aProviderIndex, aPool ); + } + else + { + // Is it still image + count += 1; + + if ( aProviderIndex == ( count - 1) ) + { + self = CVSStillImageDataProvider::NewL( aObserver, aPool ); + } + else + { + User::Leave( KErrNotSupported ); + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::~CVSDataProvider +// ----------------------------------------------------------------------------- +// +CVSDataProvider::~CVSDataProvider() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::~CVSDataProvider() >>"), RThread().Id().operator TUint())); + delete iErrorNotifier; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::~CVSDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::ProvidersAvailable +// ----------------------------------------------------------------------------- +// +TInt CVSDataProvider::ProvidersAvailable() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ProvidersAvailable() >>"), RThread().Id().operator TUint())); + + // Count ecams + TInt numProviders = CamerasAvailable(); + + // < 0 == error + if ( numProviders < 0 ) + { + numProviders = 1; // only still image provider + } + else + { + numProviders += 1; // add still + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ProvidersAvailable() [numProviders = %d] <<"), RThread().Id().operator TUint(), numProviders)); + + return numProviders; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::ProviderInfoL +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::ProviderInfoL( + TInt aProviderIndex, + TVSDataProviderInfo& aInfo ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ProviderInfoL() >>"), RThread().Id().operator TUint())); + CVSDataProvider* provider = NewL( aProviderIndex, NULL, NULL); + provider->ProviderInfo( aInfo ); + delete provider; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ProviderInfoL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::SetFillBufferParams +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::SetFillBufferParams( + MVTVideoSink* aConsumer, + TMediaId aMediaId ) + { + iConsumer = aConsumer; + iMediaId = aMediaId; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::NotifyError +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::NotifyError( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::NotifyError() >>"), RThread().Id().operator TUint())); + iErrorNotifier->NotifyError( &Observer(), aError ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::NotifyError() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::CVSDataProvider +// ----------------------------------------------------------------------------- +// +CVSDataProvider::CVSDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) : + iObserver( aObserver ), + iPool ( aPool ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::CVSDataProvider() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::CVSDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::ConstructL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ConstructL() >>"), RThread().Id().operator TUint())); + iErrorNotifier = CProviderErrorNotifierAO::NewL(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ConstructL() <<"), RThread().Id().operator TUint())); + } + + +// ----------------------------------------------------------------------------- +// CVSDataProvider::TimeToPlay +// ----------------------------------------------------------------------------- +// +const TTimeIntervalMicroSeconds& CVSDataProvider::TimeToPlay() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::TimeToPlay() >>"), RThread().Id().operator TUint())); + + TTime now; + now.HomeTime(); + + TTimeIntervalMicroSeconds timeToPlay( now.MicroSecondsFrom( iStartTime ) ); + + if( timeToPlay <= iPreviousTimeToPlay ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::TimeToPlay(): *WARNING* Time warp backwards! Correcting.."), RThread().Id().operator TUint())); + iPreviousTimeToPlay = + TTimeIntervalMicroSeconds( iPreviousTimeToPlay.Int64() + 1 ); + } + else + { + iPreviousTimeToPlay = timeToPlay; + } + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::TimeToPlay() <<"), RThread().Id().operator TUint())); + return iPreviousTimeToPlay; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::ResetStartTime +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::ResetStartTime() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ResetStartTime() >>"), RThread().Id().operator TUint())); + iStartTime.HomeTime(); + iPreviousTimeToPlay = iStartTime.MicroSecondsFrom( iStartTime ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::ResetStartTime() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::CamerasAvailable() +// ----------------------------------------------------------------------------- +// +TInt CVSDataProvider::CamerasAvailable() + { + TRAPD( result, FeatureManager::InitializeLibL() ); + + if( result != KErrNone ) + { + return result; + } + + TInt count( 0 ); + + if( FeatureManager::FeatureSupported( KFeatureIdCamera ) ) + { + count = CCamera::CamerasAvailable(); + } + + FeatureManager::UnInitializeLib(); + + return count; + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::SwitchFrom +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::SwitchFrom( const CVSDataProvider& anOldProvider ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::SwitchFrom() >>"), RThread().Id().operator TUint())); + iStartTime = anOldProvider.iStartTime; + iPreviousTimeToPlay = anOldProvider.iPreviousTimeToPlay; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::SwitchFrom() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::EnumerateVideoFrameFormatsL +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::EnumerateVideoFrameFormatsL( + CDesC8Array* aSupportedFormats ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameFormats() >>"), RThread().Id().operator TUint())); + TInt providerCount = ProvidersAvailable(); + TInt countOfProvidersThatSupportYUV420Planar = 0; + for ( TInt i = 0; i < providerCount; i++ ) + { + TVSDataProviderInfo info; + ProviderInfoL( i, info ); + if ( info.iVideoFrameFormatsSupported & CCamera::EFormatYUV420Planar ) + { + countOfProvidersThatSupportYUV420Planar++; + } + } + if( providerCount > 0 && + providerCount <= countOfProvidersThatSupportYUV420Planar ) + { + aSupportedFormats->AppendL( KVtVideoMIMETypeYUV420 ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameFormats() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::EnumerateVideoFrameSizesL +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::EnumerateVideoFrameSizesL( + RArray& aSupportedSizes, + const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameSizes() >>"), RThread().Id().operator TUint())); + RArray sizeCountArray; + CleanupClosePushL( sizeCountArray ); + TInt providerCount = ProvidersAvailable(); + for ( TInt i = 0; i < providerCount; i++ ) + { + CVSDataProvider* p = CVSDataProvider::NewL( i, NULL, NULL ); + CleanupStack::PushL( p ); + TVSDataProviderInfo info; + ProviderInfoL( i, info ); + for ( TInt j = 0; j < info.iNumVideoFrameSizesSupported; j++ ) + { + TSize size; + p->GetVideoFrameSize( size, j, aFormat ); + if ( size != TSize(0,0) ) + { + TSizeCount sizeCount; + sizeCount.iCount = 1; + sizeCount.iSize = size; + TInt err = sizeCountArray.InsertInOrder( + sizeCount, + TLinearOrder( TSizeCountTLinearOrderFunc ) ); + if ( err == KErrAlreadyExists ) + { + TInt idx = sizeCountArray.Find( + sizeCount, + TIdentityRelation( + TSizeCountTIdentityRelationFunc ) ); + if ( idx == KErrNotFound ) + { + User::Leave( KErrUnknown ); + } + else + { + // Increment count of providers that supports the size + sizeCountArray[idx].iCount++; + } + } + else + { + User::LeaveIfError( err ); + } + } + } + CleanupStack::PopAndDestroy(); // p + } + aSupportedSizes.Reset(); + for ( TInt k = 0; k < sizeCountArray.Count(); k++ ) + { + // Do all providers support the size + if ( providerCount > 0 && providerCount <= sizeCountArray[k].iCount ) + { + User::LeaveIfError( + aSupportedSizes.Append( sizeCountArray[k].iSize ) ); + } + } + CleanupStack::PopAndDestroy( ); // sizeCountArray + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameSizes() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataProvider::EnumerateVideoFrameRatesL +// ----------------------------------------------------------------------------- +// +void CVSDataProvider::EnumerateVideoFrameRatesL( + RArray& aSupportedRates, + const TDesC8& aFormat, + const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameRates() >>"), RThread().Id().operator TUint())); + RArray rateCountArray; + CleanupClosePushL( rateCountArray ); + TInt providerCount = ProvidersAvailable(); + __IF_DEBUG(Print(_L(" LOOKING FOR COMMON SUPPORTED RATES, PROVIDER COUNT: %d"), providerCount)); + for ( TInt i = 0; i < providerCount; i++ ) + { + __IF_DEBUG(Print(_L(" PROVIDER %d"), i)); + CVSDataProvider* p = CVSDataProvider::NewL( i, NULL, NULL ); + CleanupStack::PushL( p ); + TVSDataProviderInfo info; + ProviderInfoL( i, info ); + __IF_DEBUG(Print(_L(" info.iNumVideoFrameRatesSupported: %d"), info.iNumVideoFrameRatesSupported)); + for ( TInt j = 0; j < info.iNumVideoFrameRatesSupported; j++ ) + { + TReal32 rate = 0.0; + p->GetVideoFrameRate( rate, j, aFormat, aSize ); + __IF_DEBUG(Print(_L(" RATE FOR RATE INDEX %d IS %f"), j, rate)); + if ( rate != 0.0 ) + { + TRateCount rateCount; + rateCount.iCount = 1; + rateCount.iRate = rate; + TInt err = rateCountArray.InsertInOrder( + rateCount, + TLinearOrder( TRateCountTLinearOrderFunc ) ); + if ( err == KErrAlreadyExists ) + { + TInt idx = rateCountArray.Find( + rateCount, + TIdentityRelation( + TRateCountTIdentityRelationFunc ) ); + if ( idx == KErrNotFound ) + { + User::Leave( KErrUnknown ); + } + else + { + // Increment count of providers that supports the rate + rateCountArray[idx].iCount++; + } + } + else + { + User::LeaveIfError( err ); + } + } + } + CleanupStack::PopAndDestroy(); // p + } + aSupportedRates.Reset(); + for ( TInt k = 0; k < rateCountArray.Count(); k++ ) + { + // Do all providers support the rate + if ( providerCount > 0 && providerCount <= rateCountArray[k].iCount ) + { + User::LeaveIfError( + aSupportedRates.Append( rateCountArray[k].iRate ) ); + } + } + CleanupStack::PopAndDestroy( ); // rateCountArray + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataProvider::EnumerateVideoFrameRates() <<"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSDataSourceImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSDataSourceImp.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1315 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include + +#include "CVSMMFDataBuffer.h" +#include "CVSDataSourceImp.h" +#include "VSPanic.h" + +// EXTERNAL FUNCTION PROTOTYPES + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +static const TInt KQcifWidth = 176; +static const TInt KQcifHeight = 144; + + // 4:2:0 planar and 32 bytes extra + static const TInt KSourceBufferSize = + ( KQcifWidth * KQcifHeight ) + ( ( KQcifWidth * KQcifHeight ) / 2 ) + 12; + +// Granularity for video frame format array +static const TInt KNoOfSupportedFormats = 4; + +// How many sequential FillBufferL calls is supported +static const TInt KNoOfSupportedBuffers = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ============================ CVSProviderSwitchAO ============================ + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::NewL +// ----------------------------------------------------------------------------- +// +CVSProviderSwitchAO* CVSProviderSwitchAO::NewL( + CVSDataSourceImp* aDataSourceImp ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::NewL() >>"), RThread().Id().operator TUint())); + CVSProviderSwitchAO* self = + new ( ELeave ) CVSProviderSwitchAO( aDataSourceImp ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::ConstructL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ConstructL() >>"), RThread().Id().operator TUint())); + User::LeaveIfError( iSwitchCs.CreateLocal() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::CVSProviderSwitchAO +// ----------------------------------------------------------------------------- +// +CVSProviderSwitchAO::CVSProviderSwitchAO( CVSDataSourceImp* aDataSourceImp ) +: CActive( EPriorityStandard ), iDataSourceImp( aDataSourceImp ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::CVSProviderSwitchAO() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::CVSProviderSwitchAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::~CVSProviderSwitchAO +// ----------------------------------------------------------------------------- +// +CVSProviderSwitchAO::~CVSProviderSwitchAO() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::~CVSProviderSwitchAO() >>"), RThread().Id().operator TUint())); + iSwitchCs.Close(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::~CVSProviderSwitchAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::ThreadLogon +// ----------------------------------------------------------------------------- +// +TInt CVSProviderSwitchAO::ThreadLogon( MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ThreadLogon() >>"), RThread().Id().operator TUint())); + iEventHandler = &aEventHandler; + RThread me; + iThreadId = me.Id(); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ThreadLogon() <<"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::ThreadLogoff +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::ThreadLogoff() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ThreadLogoff() >>"), RThread().Id().operator TUint())); + if( RThread().Id().operator TUint() == iThreadId ) + { + Deque(); + iThreadId = 0; + iNewProvider = NULL; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::ThreadLogoff() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::InitiateProviderSwitch +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::InitiateProviderSwitch( + CVSDataProvider* aNewProvider ) + { + iSwitchCs.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::InitiateProviderSwitch() >>"), RThread().Id().operator TUint())); + iNewProvider = aNewProvider; + iStatus = KRequestPending; + SetActive(); + Signal( KErrNone ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::InitiateProviderSwitch() <<"), RThread().Id().operator TUint())); + iSwitchCs.Signal(); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::RunL +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::RunL() + { + iSwitchCs.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::RunL() >>"), RThread().Id().operator TUint())); + if( iStatus.Int() == KErrNone ) + { + if ( iDataSourceImp->SwitchPending() ) + { + Panic( EVSPanicSwitchAlreadyPending ); + } + TRAPD( + leaveCode, + iDataSourceImp->DoProviderSwitchL( iNewProvider, *iEventHandler ) ); + if ( leaveCode != KErrNone ) + { + iDataSourceImp->ProviderSwitchError( leaveCode ); + } + } + else + { + iNewProvider = NULL; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::RunL() <<"), RThread().Id().operator TUint())); + iSwitchCs.Signal(); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::DoCancel +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::DoCancel() >>"), RThread().Id().operator TUint())); + // Nothing to do here. This AO is always signalled when it's activated. + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSProviderSwitchAO::Signal +// ----------------------------------------------------------------------------- +// +void CVSProviderSwitchAO::Signal( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::Signal() >>"), RThread().Id().operator TUint())); + if( IsActive() ) + { + TRequestStatus* pStatus = &iStatus; + RThread me; + if( me.Id() == iThreadId ) + { + User::RequestComplete( pStatus, aError ); + } + else + { + if( me.Open( iThreadId ) == KErrNone ) + { + *pStatus = KRequestPending; + me.RequestComplete( pStatus, aError ); + me.Close(); + } + else + { + Panic( EVSPanicThreadOpenFailure ); + } + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSProviderSwitchAO::Signal() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVSDataSourceObserverAO ======================== + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::CVSDataSourceObserverAO +// ----------------------------------------------------------------------------- +// +CVSDataSourceObserverAO::CVSDataSourceObserverAO() +: CActive( EPriorityStandard ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::CVSDataSourceObserverAO() >>"), RThread().Id().operator TUint())); + RThread me; + iThreadId = me.Id(); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::CVSDataSourceObserverAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::~CVSDataSourceObserverA +// ----------------------------------------------------------------------------- +// +CVSDataSourceObserverAO::~CVSDataSourceObserverAO() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::~CVSDataSourceObserverAO() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::~CVSDataSourceObserverAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::vsProviderSwitchDone +// ----------------------------------------------------------------------------- +// +void CVSDataSourceObserverAO::vsProviderSwitchDone( + MVSDataSourceObserver& aObserver, + CVSDataProvider* aOldProvider ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::vsProviderSwitchDone() >>"), RThread().Id().operator TUint())); + iObserver = &aObserver; + iOldProvider = aOldProvider; + iStatus = KRequestPending; + SetActive(); + Signal( KErrNone ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::vsProviderSwitchDone() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::RunL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceObserverAO::RunL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::RunL() >>"), RThread().Id().operator TUint())); + if( iStatus.Int() == KErrNone ) + { + iObserver->vsProviderSwitchDone( iOldProvider ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::RunL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::DoCancel +// ----------------------------------------------------------------------------- +// +void CVSDataSourceObserverAO::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::DoCancel() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceObserverAO::Signal +// ----------------------------------------------------------------------------- +// +void CVSDataSourceObserverAO::Signal( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::Signal() >>"), RThread().Id().operator TUint())); + TRequestStatus* pStatus = &iStatus; + RThread me; + if( me.Id() == iThreadId ) + { + User::RequestComplete( pStatus, aError ); + } + else + { + if( me.Open( iThreadId ) == KErrNone ) + { + *pStatus = KRequestPending; + me.RequestComplete( pStatus, aError ); + me.Close(); + } + else + { + Panic( EVSPanicThreadOpenFailure ); + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceObserverAO::Signal() <<"), RThread().Id().operator TUint())); + } + + + +// =============================== CVSDataSource =============================== + +// ----------------------------------------------------------------------------- +// CVSDataSource::NewSourceL +// ----------------------------------------------------------------------------- +// +CVSDataSource* CVSDataSource::NewSourceL( MVSDataSourceObserver* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::NewSourceL() >>"), RThread().Id().operator TUint())); + if ( aObserver == NULL ) + { + User::Leave( KErrArgument ); + } + CVSDataSource* self = CVSDataSourceImp::NewSourceL(); + CleanupStack::PushL( self ); + self->ConstructL( aObserver ); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::NewSourceL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSDataSource::CVSDataSource +// ----------------------------------------------------------------------------- +// +CVSDataSource::CVSDataSource() : MVTVideoSource( KNullUid ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::CVSDataSource() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::CVSDataSource() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSource::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSDataSource::ConstructL( MVSDataSourceObserver* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::ConstructL() >>"), RThread().Id().operator TUint())); + iObserver = aObserver; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSource::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::NewSourceL +// ----------------------------------------------------------------------------- +// +CVSDataSourceImp* CVSDataSourceImp::NewSourceL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::NewSourceL() >>"), RThread().Id().operator TUint())); + CVSDataSourceImp* self = new (ELeave) CVSDataSourceImp; + CleanupStack::PushL( self ); + self->ConstructSourceL( KNullDesC8 ); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::NewSourceL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SwitchDataProviderL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::SwitchDataProviderL( + CVSDataProvider* aNewProvider ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SwitchDataProviderL() >>"), RThread().Id().operator TUint())); + if ( aNewProvider == NULL ) + { + __IF_DEBUG(Print(_L("SwitchDataProviderL(): NULL argument, leaving."))); + User::Leave( KErrArgument ); + } + // Is new provider same as old, then no need to change provider + if ( aNewProvider == &DataProvider() ) + { + __IF_DEBUG(Print(_L("SwitchDataProviderL(): New provider same as old: 0x%x"), aNewProvider)); + Observer().vsProviderSwitchDone( aNewProvider ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SwitchDataProvider() <<"), RThread().Id().operator TUint())); + return; + } + // If Protocol is in the currently initializing itself then complete this switch + // request when Protocol ready (from SourcePlayL). No need to protect + // iProtoInitOngoing test with CS. + if ( iProtoInitOngoing ) + { + __IF_DEBUG(Print(_L("PROTOCOL INIT ONGOING, PENDING SWITCH FOR A WHILE"))); + iProtoInitCS.Wait(); + iProviderSwitchRequestDuringProtoInit = ETrue; + iNewProvider = aNewProvider; + iProtoInitCS.Signal(); + return; + } + // Switch provider + if ( iThreadLogonCalled ) + { + iProviderSwitchAO->InitiateProviderSwitch( aNewProvider ); + } + else + { + CVSDataProvider* oldProvider = SwitchProvider( aNewProvider ); + Observer().vsProviderSwitchDone( oldProvider ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SwitchDataProviderL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::PauseSending +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::PauseSending() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::PauseSending() >>"), RThread().Id().operator TUint())); + iPauseCs.Wait(); + iSendingPaused = ETrue; + iPauseCs.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::PauseSending() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::ResumeSending +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::ResumeSending() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::ResumeSending() >>"), RThread().Id().operator TUint())); + iPauseCs.Wait(); + iSendingPaused = EFalse; + iPauseCs.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::ResumeSending() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::~CVSDataSourceImp +// ----------------------------------------------------------------------------- +// +CVSDataSourceImp::~CVSDataSourceImp() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::~CVSDataSourceImp() >>"), RThread().Id().operator TUint())); + delete iDataSourceObserverAO; + delete iProviderSwitchAO; + iProtoMimeTypes.Close(); + delete iSupportedVideoFormats; + iSupportedVideoSizes.Close(); + iSupportedFrameRates.Close(); + // Assuming no need to use critical section here + iFreeQueue.Close(); + iActiveQueue.Close(); + iAllocatedBuffers.ResetAndDestroy(); + iQueueCs.Close(); + iPauseCs.Close(); + iProtoInitCS.Close(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::~CVSDataSourceImp() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::FillBufferL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL() >>"), RThread().Id().operator TUint())); + + if ( aBuffer == NULL || aConsumer == NULL ) + { + User::Leave( KErrArgument ); + } + + if ( aBuffer->Type() != KUidMmfDataBuffer ) + { + User::Leave( KErrArgument ); + } + + DataProvider().SetFillBufferParams( aConsumer, aMediaId ); + + iPauseCs.Wait(); + const TBool sendingPaused( iSendingPaused ); + iPauseCs.Signal(); + + if( iSwitchOngoing ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL(): Switch ongoing"), RThread().Id().operator TUint())); + // queues are locked by us -> it's safe to modify queues without + // locking + User::LeaveIfError( + FreeBufferNoWait( static_cast( aBuffer ) ) ); + } + else if( iSwitchPending ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL(): Switch pending"), RThread().Id().operator TUint())); + FreeBufferL( static_cast( aBuffer ) ); + TRAPD( + err, + DoProviderSwitchL( + iProviderSwitchAO->NewDataProvider(), + iProviderSwitchAO->EventHandler() ) ); + if( err != KErrNone ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL(): Error in switch = %d"), RThread().Id().operator TUint(), err)); + // Not leaving from here (it was provider switch related error), + // let VT take care of the rest + ProviderSwitchError( err ); + } + } + else if( sendingPaused ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL(): Sending Paused"), RThread().Id().operator TUint())); + // queues are locked by us -> it's safe to modify queues without + // locking + User::LeaveIfError( + FreeBufferNoWait( static_cast( aBuffer ) ) ); + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL(): No switch -> normal FillBufferL()"), RThread().Id().operator TUint())); + FreeBufferL( static_cast( aBuffer ) ); + DataProvider().FillBufferL( aBuffer, aConsumer, aMediaId ); + } + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FillBufferL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::BufferEmptiedL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::BufferEmptiedL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::BufferEmptiedL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::CanCreateSourceBuffer +// ----------------------------------------------------------------------------- +// +TBool CVSDataSourceImp::CanCreateSourceBuffer() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CanCreateSourceBuffer() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CanCreateSourceBuffer) <<"), RThread().Id().operator TUint())); + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::CreateSourceBufferL +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CVSDataSourceImp::CreateSourceBufferL( + TMediaId /*aMediaId*/, + TBool &aReference ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL() >>"), RThread().Id().operator TUint())); + if ( iRequestedBufferCount >= KNoOfSupportedBuffers ) + { + User::Leave( KErrOverflow ); + } + aReference = ETrue; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL(): Returning buffer: %d [0x%08x]"), RThread().Id().operator TUint(), iRequestedBufferCount + 1, iAllocatedBuffers[ iRequestedBufferCount ])); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL() <<"), RThread().Id().operator TUint())); + return iAllocatedBuffers[ iRequestedBufferCount++ ]; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::CreateSourceBufferL +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CVSDataSourceImp::CreateSourceBufferL( + TMediaId /*aMediaId*/, + CMMFBuffer& /*aSinkBuffer*/, + TBool &aReference ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL() >>"), RThread().Id().operator TUint())); + if ( iRequestedBufferCount >= KNoOfSupportedBuffers ) + { + User::Leave( KErrOverflow ); + } + aReference = ETrue; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL(): Returning buffer: %d [0x%08x]"), RThread().Id().operator TUint(), iRequestedBufferCount + 1, iAllocatedBuffers[ iRequestedBufferCount ])); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CreateSourceBufferL() <<"), RThread().Id().operator TUint())); + return iAllocatedBuffers[ iRequestedBufferCount++ ]; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourceThreadLogon +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::SourceThreadLogon( MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceThreadLogon() >>"), RThread().Id().operator TUint())); + __ASSERT_DEBUG( (&DataProvider()) != NULL, + Panic( EVSPanicProviderNotSet ) ); + TInt err( KErrNone ); + if( !iFbsStarted ) + { + // Caller does not start the FBS server when compiled on proxy mode + // so we have to take care of that by ourself. + err = FbsStartup(); + if( err == KErrNone ) + { + err = RFbsSession::Connect(); + if( err == KErrNone ) + { + iFbsStarted = ETrue; + } + } + } + if( !iThreadLogonCalled && ( err == KErrNone ) ) + { + err = DataProvider().SourceThreadLogon( aEventHandler ); + if (err != KErrNone) + { + return err; + } + iProviderSwitchAO->ThreadLogon( aEventHandler ); + iThreadLogonCalled = ETrue; + iProtoInitOngoing = ETrue; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceThreadLogon() <<"), RThread().Id().operator TUint())); + return err; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourceThreadLogoff +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::SourceThreadLogoff() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceThreadLogoff() >>"), RThread().Id().operator TUint())); + + iThreadLogonCalled = EFalse; + + if ( iProviderSwitchRequestDuringProtoInit ) + { + __IF_DEBUG(Print(_L("PROTOCOL INIT FAILED, NOW COMPLETING THE SWITCH REQUEST WITH ERROR"))); + iProviderSwitchRequestDuringProtoInit = EFalse; + ProviderSwitchError( KErrAbort ); + } + + if( &DataProvider() ) + { + DataProvider().SourceThreadLogoff(); + } + + iSwitchOngoing = iSwitchPending = EFalse; + + iProtoInitOngoing = EFalse; + + // If provider switch ongoing complete it + if ( iProviderSwitchAO->NewDataProvider() != NULL ) + { + CVSDataProvider* oldProvider = + SwitchProvider( iProviderSwitchAO->NewDataProvider() ); + Observer().vsProviderSwitchDone( oldProvider ); + } + + iProviderSwitchAO->ThreadLogoff(); + + delete iFormat; iFormat = 0; + + iCallFlags = 0; + + // Clear iFreeQueue + while( iFreeQueue.Count() ) + { + iFreeQueue.Remove( 0 ); + } + + // Clear iActiveQueue + while( iActiveQueue.Count() ) + { + iActiveQueue.Remove( 0 ); + } + + // Set frame buffer to NULL for all buffers + for( TInt i = 0; i < iRequestedBufferCount; i++ ) + { + TInt err = KErrNone; + // Does not leave when framebuffer is set to NULL + // Both type of buffers needs to be nulled + TRAP( err, iAllocatedBuffers[i]->SetFrameBufferL( ( MCameraBuffer* )NULL )); + TRAP( err, iAllocatedBuffers[i]->SetFrameBufferL( ( MFrameBuffer* )NULL )); } + + // All pre-created buffers are free again + iRequestedBufferCount = 0; + + if( iFbsStarted ) + { + RFbsSession::Disconnect(); + iFbsStarted = EFalse; + } + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceThreadLogoff() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourcePrimeL +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::SourcePrimeL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePrimeL() >>"), RThread().Id().operator TUint())); + TRAPD( result, DataProvider().SourcePrimeL() ); + if( ( result == KErrNone ) || ( result == KRequestPending ) ) + { + iDSState = CVSDataSourceImp::EPrimed; + } + else + { + User::Leave( result ); + } + iProtoInitOngoing = EFalse; + // If provider switch was requested when Proto was initializing itself then + // fill switch request now + iProtoInitCS.Wait(); + if ( iProviderSwitchRequestDuringProtoInit ) + { + __IF_DEBUG(Print(_L("PROTOCOL INIT READY, NOW COMPLETING THE SWITCH REQUEST"))); + iProviderSwitchRequestDuringProtoInit = EFalse; + iProviderSwitchAO->InitiateProviderSwitch( iNewProvider ); + iNewProvider = NULL; + } + iProtoInitCS.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePrimeL() <<"), RThread().Id().operator TUint())); + return result; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourcePlayL +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::SourcePlayL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePlayL() >>"), RThread().Id().operator TUint())); + if( !iSwitchOngoing ) + { + DataProvider().SourcePlayL(); + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePlayL(): Switch ongoing -> updating state only, play will be called after switch"), RThread().Id().operator TUint())); + } + iDSState = CVSDataSourceImp::EPlaying; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePlayL() <<"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourcePauseL +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::SourcePauseL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePauseL() >>"), RThread().Id().operator TUint())); + if( !iSwitchOngoing ) + { + DataProvider().SourcePauseL(); + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePlayL(): Switch ongoing -> updating state only"), RThread().Id().operator TUint())); + } + iDSState = CVSDataSourceImp::EPrimed; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePauseL() <<"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SourceStopL +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::SourceStopL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceStopL() >>"), RThread().Id().operator TUint())); + if( !iSwitchOngoing ) + { + DataProvider().SourceStopL(); + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourcePlayL(): Switch ongoing -> updating state only"), RThread().Id().operator TUint())); + } + iDSState = CVSDataSourceImp::EStopped; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SourceStopL() <<"), RThread().Id().operator TUint())); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::ConstructSourceL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::ConstructSourceL( const TDesC8& /*aInitData*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::ConstructSourceL() >>"), RThread().Id().operator TUint())); + iYuv420PlanarDesc.Zero(); + iYuv420PlanarDesc.Append( KVtVideoMIMETypeYUV420 ); + User::LeaveIfError( iProtoMimeTypes.Append( &iYuv420PlanarDesc ) ); + iProviderSwitchAO = CVSProviderSwitchAO::NewL( this ); + iDataSourceObserverAO = new (ELeave) CVSDataSourceObserverAO(); + iSupportedVideoFormats = + new (ELeave) CDesC8ArrayFlat( KNoOfSupportedFormats ); + // Get formats supported by all providers + CVSDataProvider::EnumerateVideoFrameFormatsL( iSupportedVideoFormats ); + // Get video frame sizes for specified format supported by all providers + TInt i, j; + i = j = 0; + for ( i = 0; i < iSupportedVideoFormats->Count(); i++ ) + { + TPtrC8 format = iSupportedVideoFormats->MdcaPoint( i ); + RArray sizeArray; + CleanupClosePushL( sizeArray ); + CVSDataProvider::EnumerateVideoFrameSizesL( sizeArray, format ); + for ( j = 0; j < sizeArray.Count(); j++ ) + { + TVSFrameSize sizePerFormat; + sizePerFormat.iFormat.Set( format ); + sizePerFormat.iSize = sizeArray[j]; + User::LeaveIfError( iSupportedVideoSizes.Append( sizePerFormat ) ); + } + CleanupStack::PopAndDestroy(); // sizeArray + } + // Get video frame rates for specified frame format and size supported + // by all providers + for ( i = 0; i < iSupportedVideoSizes.Count(); i++ ) + { + RArray rateArray; + CleanupClosePushL( rateArray ); + CVSDataProvider::EnumerateVideoFrameRatesL( + rateArray, + iSupportedVideoSizes[i].iFormat, + iSupportedVideoSizes[i].iSize ); + for ( j = 0; j < rateArray.Count(); j++ ) + { + TVSFrameRate framePerSizeAndFormat; + framePerSizeAndFormat.iFormat.Set( + iSupportedVideoSizes[i].iFormat ); + framePerSizeAndFormat.iSize = iSupportedVideoSizes[i].iSize; + framePerSizeAndFormat.iRate = rateArray[j]; + User::LeaveIfError( iSupportedFrameRates.Append( + framePerSizeAndFormat ) ); + } + CleanupStack::PopAndDestroy(); // rateArray + } + // Create queue criticalsection + User::LeaveIfError( iQueueCs.CreateLocal() ); + // Create VTEng-Protocol guard + User::LeaveIfError( iPauseCs.CreateLocal() ); + // Pre-create buffers + for( i = 0; i < KNoOfSupportedBuffers; i++ ) + { + User::LeaveIfError( iFreeQueue.Append( 0 ) ); + User::LeaveIfError( iActiveQueue.Append( 0 ) ); + CVSMMFDataBuffer* buffer = CVSMMFDataBuffer::NewL( KSourceBufferSize ); + CleanupStack::PushL( buffer ); + User::LeaveIfError( iAllocatedBuffers.Append( buffer ) ); + CleanupStack::Pop(); // buffer + } + for( i = 0; i < KNoOfSupportedBuffers; i++ ) + { + iFreeQueue.Remove( 0 ); + iActiveQueue.Remove( 0 ); + } + // Init critical sections + User::LeaveIfError( iProtoInitCS.CreateLocal() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::ConstructSourceL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::GetMultimediaTypesL +// ----------------------------------------------------------------------------- +// +const RArray& CVSDataSourceImp::GetMultimediaTypesL() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetMultimediaTypeL() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetMultimediaTypeL() <<"), RThread().Id().operator TUint())); + return iProtoMimeTypes; + } + + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SetFormatL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::SetFormatL( const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetFormatL() >>"), RThread().Id().operator TUint())); + if ( &DataProvider() == NULL ) + { + User::Leave( KErrBadHandle ); + } + TBool supported = EFalse; + for ( TInt i = 0; i < iSupportedVideoFormats->Count(); i++ ) + { + TPtrC8 format = iSupportedVideoFormats->MdcaPoint( i ); + if ( aFormat == format ) + { + supported = ETrue; + break; + } + } + if ( !supported ) + { + User::Leave( KErrNotSupported ); + } + DataProvider().SetFormatL( aFormat ); + delete iFormat; iFormat = 0; + iFormat = aFormat.AllocL(); + iCallFlags |= ESetFormatCalled; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetFormatL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SetFrameRateL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::SetFrameRateL( TReal32 aFrameRate ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetFrameRateL() >>"), RThread().Id().operator TUint())); + if ( &DataProvider() == NULL ) + { + User::Leave( KErrBadHandle ); + } + TBool supported = EFalse; + for ( TInt i = 0; i < iSupportedFrameRates.Count(); i++ ) + { + TVSFrameRate rate = iSupportedFrameRates[i]; + if ( rate.iFormat == iFormat->Des() && rate.iSize == iSize) + { + if ( aFrameRate == rate.iRate ) + { + supported = ETrue; + break; + } + } + } + if ( !supported ) + { + User::Leave( KErrNotSupported ); + } + DataProvider().SetFrameRateL( aFrameRate ); + iFrameRate = aFrameRate; + iCallFlags |= ESetFrameRateCalled; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetFrameRateL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::SetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::SetVideoFrameSizeL( const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetVideoFrameSizeL() >>"), RThread().Id().operator TUint())); + if ( &DataProvider() == NULL ) + { + User::Leave( KErrBadHandle ); + } + TBool supported = EFalse; + for ( TInt i = 0; i < iSupportedVideoSizes.Count(); i++ ) + { + TVSFrameSize size = iSupportedVideoSizes[i]; + if ( size.iFormat == iFormat->Des() ) + { + if ( aSize == size.iSize ) + { + supported = ETrue; + break; + } + } + } + if ( !supported ) + { + User::Leave( KErrNotSupported ); + } + DataProvider().SetVideoFrameSizeL( aSize ); + iSize = aSize; + iCallFlags |= ESetSizeCalled; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::SetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::GetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::GetVideoFrameSizeL( TSize& aSize ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetVideoFrameSizeL() >>"), RThread().Id().operator TUint())); + if ( &DataProvider() == NULL ) + { + User::Leave( KErrBadHandle ); + } + DataProvider().GetVideoFrameSizeL( aSize ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::DoProviderSwitchL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::DoProviderSwitchL( + CVSDataProvider* aNewProvider, + MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::DoProviderSwitchL() >>"), RThread().Id().operator TUint())); + + iQueueCs.Wait(); + + // If there are entries in iActiveQueue wait until they are freed by Protocol + if ( iActiveQueue.Count() > 0 ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::DoProviderSwitchL(): activequeue count > 0, <<"), RThread().Id().operator TUint())); + iSwitchPending = ETrue; + iQueueCs.Signal(); + return; + } + else + { + iSwitchPending = EFalse; + } + + iSwitchOngoing = ETrue; + + /* + * THE FOLLOWING CALLS USE CActiveSchedulerWait WHICH MEANS SOME OTHER + * OBJECT MAY RUN IN BETWEEN THE FOLLOWING CALLS I.E. THESE CALLS ARE NOT + * SYNCHRONOUS. + */ + + User::LeaveIfError( aNewProvider->SourceThreadLogon( aEventHandler ) ); + + // Is format set by the Protocol + if ( iCallFlags & ESetFormatCalled ) + { + aNewProvider->SetFormatL( *iFormat ); + } + // Is size set by the Protocol + if ( iCallFlags & ESetSizeCalled ) + { + aNewProvider->SetVideoFrameSizeL( iSize ); + } + // Is framerate set by the Protocol + if ( iCallFlags & ESetFrameRateCalled ) + { + aNewProvider->SetFrameRateL( iFrameRate ); + } + // Stop old provider + if ( &DataProvider() != NULL ) + { + switch( iDSState ) + { + case EPlaying: + DataProvider().SourcePauseL(); + DataProvider().SourceStopL(); + break; + + case EPrimed: + DataProvider().SourceStopL(); + break; + + default: + break; + }; + DataProvider().SourceThreadLogoff(); + } + + // Set new provider state according to current state + switch ( iDSState ) + { + case EStopped: + break; + + case EPrimed: + case EPlaying: + aNewProvider->PrimeL(); + + // check if SourcePlayL() was called during prime + if( iDSState == EPlaying ) + { + aNewProvider->SourcePlayL(); + aNewProvider->SwitchFrom( DataProvider() ); + } + // or SourceStopL() + else if( iDSState == EStopped ) + { + aNewProvider->SourceStopL(); + } + break; + } + /* + * THE FOLLOWING CALLS ARE SUPPOSED TO BE SYNCHRONOUS IN THAT THEY DO NOT + * LET ACTIVE SCHEDULER RUN SOME OTHER OBJECT. + */ + + // Complete switch + CVSDataProvider* oldProvider = SwitchProvider( aNewProvider ); + + // Set consumer and media id + DataProvider().SetFillBufferParams( + oldProvider->Consumer(), + oldProvider->MediaId() ); + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::DoProviderSwitchL(): iFreeQueue.Count() = %d, iActiveQueue.Count() = %d"), RThread().Id().operator TUint(), iFreeQueue.Count(), iActiveQueue.Count() )); + + // If old provider has pending FillBufferL() calls -> call FillBufferL() + // for new provider if it is in Playing state. + if( iDSState == EPlaying ) + { + for ( TInt i = 0; i < iFreeQueue.Count(); i++ ) + { + iFreeQueue[ i ]->Reset(); + DataProvider().FillBufferL( + iFreeQueue[i], + DataProvider().Consumer(), + DataProvider().MediaId() ); + } + } + + // Buffers that are being used by Protocol are set to be needing a reset + for ( TInt i = 0; i < iActiveQueue.Count(); i++ ) + { + iActiveQueue[ i ]->SetNeedsReset( ETrue ); + } + + iSwitchOngoing = EFalse; + + iQueueCs.Signal(); + + iDataSourceObserverAO->vsProviderSwitchDone( Observer(), oldProvider ); + iProviderSwitchAO->NewDataProvider() = NULL; + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::DoProviderSwitchL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::CVSDataSourceImp +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::ProviderSwitchError( TInt aError ) + { + DataProvider().NotifyError( aError ); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::CVSDataSourceImp +// ----------------------------------------------------------------------------- +// +CVSDataSourceImp::CVSDataSourceImp() +: iFreeQueue( KNoOfSupportedBuffers ), iActiveQueue( KNoOfSupportedBuffers ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CVSDataSourceImp() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::CVSDataSourceImp() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::GetBufferL +// ----------------------------------------------------------------------------- +// +CVSMMFDataBuffer* CVSDataSourceImp::GetBufferL( TBool aRemove ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetBufferL() >>"), RThread().Id().operator TUint())); + if( !iQueueCs.IsBlocked() ) + { + iPauseCs.Wait(); + const TBool sendingPaused( iSendingPaused ); + iPauseCs.Signal(); + + iQueueCs.Wait(); + + // while switch is pending, always return NULL we don't want to let + // buffer float around + if( iSwitchPending || sendingPaused ) + { + iQueueCs.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetBufferL(): Switch pending or sending paused -> returning NULL"), RThread().Id().operator TUint())); + return 0; + } + + // If no buffers in free (FillBufferL is called) queue -> return NULL + if( !iFreeQueue.Count() ) + { + iQueueCs.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetBufferL(): NO free buffers -> returning NULL"), RThread().Id().operator TUint())); + return 0; + } + // Otherwise get first buffer + CVSMMFDataBuffer* temp = iFreeQueue[ 0 ]; + // Move to active (BufferFilledL is called) queue if requested + if( aRemove ) + { + iFreeQueue.Remove( 0 ); + TInt err = iActiveQueue.Append( temp ); + if ( err != KErrNone ) + { + iQueueCs.Signal(); + User::Leave( err ); + } + } + iQueueCs.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetBufferL() returning [$%x]"), RThread().Id().operator TUint(), temp)); + return temp; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::GetBufferL(): blocked, returning [$%08x]"), RThread().Id().operator TUint(), 0)); + return 0; + } + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::FreeBufferL +// ----------------------------------------------------------------------------- +// +void CVSDataSourceImp::FreeBufferL( CVSMMFDataBuffer* aBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FreeBufferL() >>"), RThread().Id().operator TUint())); + iQueueCs.Wait(); + TInt err = FreeBufferNoWait( aBuffer ); + iQueueCs.Signal(); + User::LeaveIfError( err ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FreeBufferL() <<"), RThread().Id().operator TUint())); + } + + +// ----------------------------------------------------------------------------- +// CVSDataSourceImp::FreeBufferNoWait( CVSMMFDataBuffer* aBuffer ) +// ----------------------------------------------------------------------------- +// +TInt CVSDataSourceImp::FreeBufferNoWait( CVSMMFDataBuffer* aBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FreeBufferNoWait() >>"), RThread().Id().operator TUint())); + + // Append buffer into free (FillBufferL is called) queue + TInt err( KErrNone ); + + // Try finding buffer from active (BufferFilledL is called) queue + TInt actIdx = iActiveQueue.Find( aBuffer ); + + // If it is found, remove it from there + if( actIdx != KErrNotFound ) + { + iActiveQueue.Remove( actIdx ); + TRAP( err, aBuffer->ReleaseL() ); + if( err != KErrNone ) + { + return err; + } + } + + if( iFreeQueue.Find( aBuffer ) == KErrNotFound ) + { + err = iFreeQueue.Append( aBuffer ); + } + +#ifdef _DEBUG + TBuf<256> b; + TInt i; + b = _L("Active: "); + for( i = 0; i < iActiveQueue.Count(); i++ ) + { + if( i > 0 ) + { + b.Append( _L(", ") ); + } + TBuf<16> b1; + b1.Format( _L("[$%08x]"), iActiveQueue[i] ); + b.Append( b1 ); + } + RDebug::Print( b ); + + b = _L("Free : "); + for( i = 0; i < iFreeQueue.Count(); i++ ) + { + if( i > 0 ) + { + b.Append( _L(", ") ); + } + TBuf<16> b1; + b1.Format( _L("[$%08x]"), iFreeQueue[i] ); + b.Append( b1 ); + } + RDebug::Print( b ); +#endif + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSDataSourceImp::FreeBufferNoWait() <<"), RThread().Id().operator TUint())); + + return err; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSMMFDataBuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSMMFDataBuffer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,343 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include "CVSMMFDataBuffer.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ CVSMMFDataBuffer =============================== + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSMMFDataBuffer* CVSMMFDataBuffer::NewL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::NewL() >>"), RThread().Id().operator TUint())); + CVSMMFDataBuffer* self = new ( ELeave ) CVSMMFDataBuffer; + CleanupStack::PushL(self); + self->ConstructL( KMMFDataBufferDefaultBufferSize ); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::NewL <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSMMFDataBuffer* CVSMMFDataBuffer::NewL( TInt aMaxBufferSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::NewL() >>"), RThread().Id().operator TUint())); + CVSMMFDataBuffer* self = new ( ELeave ) CVSMMFDataBuffer; + CleanupStack::PushL(self); + self->ConstructL( aMaxBufferSize ); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::NewL <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::~CVSMMFDataBuffer +// ----------------------------------------------------------------------------- +// +EXPORT_C CVSMMFDataBuffer::~CVSMMFDataBuffer() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::~CVSMMFDataBuffer() >>"), RThread().Id().operator TUint())); + delete[] iData; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::~CVSMMFDataBuffer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::ReAllocBufferL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::ReAllocBufferL( TInt aMaxBufferSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::ReAllocBufferL() >>"), RThread().Id().operator TUint())); + if ( !iIsBufferSet ) + { + TUint8* tmp = new (ELeave) TUint8[aMaxBufferSize]; + delete[] iData; + iData = tmp; + iPtr.Set( iData, 0, aMaxBufferSize ); + iMaxBufferSize = aMaxBufferSize; + } + else + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::ReAllocBufferL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::NeedsReset +// ----------------------------------------------------------------------------- +// +TBool CVSMMFDataBuffer::NeedsReset() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::NeedsReset() ><"), RThread().Id().operator TUint())); + return iNeedsReset; + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetNeedsReset +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetNeedsReset( TBool aNeedsReset ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetNeedsReset() >>"), RThread().Id().operator TUint())); + iNeedsReset = aNeedsReset; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetNeedsReset() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::Reset +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::Reset() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Reset() >>"), RThread().Id().operator TUint())); + iPtr.Zero(); + SetNeedsReset( EFalse ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Reset() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::Data +// ----------------------------------------------------------------------------- +// +TDes8& CVSMMFDataBuffer::Data() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Data() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Data() <<"), RThread().Id().operator TUint())); + return iPtr; + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::Data +// ----------------------------------------------------------------------------- +// +const TDesC8& CVSMMFDataBuffer::Data() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Data() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Data() <<"), RThread().Id().operator TUint())); + return iPtr; + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetStatus +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetStatus( TBufferStatus aStatus ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetStatus() >>"), RThread().Id().operator TUint())); + CMMFBuffer::SetStatus( aStatus ); + if ( iStatus == EBeingFilled ) + { + Reset(); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetStatus() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetRequestSizeL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetRequestSizeL( TInt aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetRequestSizeL() >>"), RThread().Id().operator TUint())); + if ( aSize < 0 ) + { + User::Leave( KErrUnderflow ); + } + else if ( aSize > iPtr.MaxLength() ) + { + User::Leave( KErrOverflow ); + } + else + { + iRequestSize = aSize; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetRequestSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::BufferSize +// ----------------------------------------------------------------------------- +// +TUint CVSMMFDataBuffer::BufferSize() const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::BufferSize() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::BufferSize() <<"), RThread().Id().operator TUint())); + return iPtr.Length(); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetPosition +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetPosition( TUint aPosition ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetPosition() >>"), RThread().Id().operator TUint())); + if ( aPosition <= (TUint)iPtr.Length() ) + { + iPosition = aPosition; + } + else + { + iPosition = (TUint)iPtr.Length(); // Tried to position beyond end of + // data + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetPosition() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetFrameBufferL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetFrameBufferL( MFrameBuffer* aFrameBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetFrameBuffer() >>"), RThread().Id().operator TUint())); + iFrameBuffer = aFrameBuffer; + //Buffer is valid + iIsBufferSet = ETrue; + if ( aFrameBuffer == NULL ) + { + iPtr.Set( iData, 0, iMaxBufferSize ); + } + else + { + Reset(); + TPtrC8 ptr( *iFrameBuffer->DataL( 0 ) ); + iPtr.Set((TUint8*)ptr.Ptr(), ptr.Size(), ptr.Size()); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetFrameBuffer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetFrameBufferL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetFrameBufferL( MCameraBuffer* aCameraBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetFrameBuffer() >>"), RThread().Id().operator TUint())); + iCameraBuffer = aCameraBuffer; + //Buffer is valid + iIsBufferSet = ETrue; + if ( aCameraBuffer == NULL ) + { + iPtr.Set( iData, 0, iMaxBufferSize ); + } + else + { + Reset(); + // Take the latest frame data from buffer should be always 0, + // but if buffer contains more than 1 frame could be something else + TPtrC8 ptr( *iCameraBuffer->DataL( iCameraBuffer->NumFrames() - 1 ) ); + iPtr.Set((TUint8*)ptr.Ptr(), ptr.Size(), ptr.Size()); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetFrameBuffer() <<"), RThread().Id().operator TUint())); + } + + + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::ReleaseL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::ReleaseL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Release() >>"), RThread().Id().operator TUint())); + if( iFrameBuffer ) + { + iFrameBuffer->Release(); + SetFrameBufferL( (MFrameBuffer*)NULL ); + } + else if( iCameraBuffer ) + { + iCameraBuffer->Release(); + SetFrameBufferL( (MCameraBuffer*)NULL ); + } + else + { + if ( iPtr.Ptr() != iData ) + { + iPtr.Set( iData, 0, iMaxBufferSize ); + } + if( NeedsReset() ) + { + Reset(); + } + } + + //Buffer is no longer valid + iIsBufferSet = EFalse; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::Release() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::SetBufferOffset +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::SetBufferOffset( TInt aOffset ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetBufferOffset() >>"), RThread().Id().operator TUint())); + if ( !iIsBufferSet ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetBufferOffset(): Length = %d, Offset = %d"), RThread().Id().operator TUint(), iPtr.Length(), aOffset)); + iPtr.Set( iData + aOffset, iPtr.Length() - aOffset, iMaxBufferSize ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::SetBufferOffset() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::CVSMMFDataBuffer +// ----------------------------------------------------------------------------- +// +CVSMMFDataBuffer::CVSMMFDataBuffer() : + CMMFDataBuffer( KUidMmfDataBuffer ), iPtr(0,0,0), iIsBufferSet(EFalse) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::CVSMMFDataBuffer() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::CVSMMFDataBuffer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSMMFDataBuffer::ConstructL +// ----------------------------------------------------------------------------- +// +void CVSMMFDataBuffer::ConstructL( TInt aMaxBufferSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::ConstructL() >>"), RThread().Id().operator TUint())); + iData = new (ELeave) TUint8[aMaxBufferSize]; + iPtr.Set( iData, 0, aMaxBufferSize ); + iMaxBufferSize = aMaxBufferSize; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSMMFDataBuffer::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSOnboardCameraDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSOnboardCameraDataProvider.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1007 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "CVSOnboardCameraDataProvider.h" +#include "CVSDataSourceImp.h" +#include "VSPanic.h" +#include "CVSMMFDataBuffer.h" + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +const TInt KQCIFWidth = 176; +const TInt KQCIFHeight = 144; + +// MACROS +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ============================ CProviderErrorNotifierAO ======================= + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::NewL +// ----------------------------------------------------------------------------- +// +CProviderErrorNotifierAO* CProviderErrorNotifierAO::NewL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::NewL() >>"), RThread().Id().operator TUint())); + CProviderErrorNotifierAO* self = new ( ELeave ) CProviderErrorNotifierAO(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::~CProviderErrorNotifierAO +// ----------------------------------------------------------------------------- +// +CProviderErrorNotifierAO::~CProviderErrorNotifierAO() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::~CProviderErrorNotifierAO() >>"), RThread().Id().operator TUint())); + Cancel(); + iCS.Close(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::~CProviderErrorNotifierAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::NotifyError +// ----------------------------------------------------------------------------- +// +void CProviderErrorNotifierAO::NotifyError( + MVSDataProviderObserver* aObserver, + TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::NotifyError() >>"), RThread().Id().operator TUint())); + iCS.Wait(); + iObserver = aObserver; + iError = aError; + TRequestStatus* statusP = &iStatus; + RThread thread; + if( thread.Open( iThreadId ) == KErrNone ) + { + *statusP = KRequestPending; + thread.RequestComplete( statusP, KErrNone ); + thread.Close(); + } + else + { + Panic( EVSPanicThreadOpenFailure ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::NotifyError() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::CProviderErrorNotifierAO +// ----------------------------------------------------------------------------- +// +CProviderErrorNotifierAO::CProviderErrorNotifierAO() : + CActive( EPriorityNormal ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::CProviderErrorNotifierAO() >>"), RThread().Id().operator TUint())); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::CProviderErrorNotifierAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::ConstructL +// ----------------------------------------------------------------------------- +// +void CProviderErrorNotifierAO::ConstructL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::ConstructL() >>"), RThread().Id().operator TUint())); + iCS.CreateLocal(); + iThreadId = RThread().Id(); + iStatus = KRequestPending; + SetActive(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::DoCancel +// ----------------------------------------------------------------------------- +// +void CProviderErrorNotifierAO::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::DoCancel() >>"), RThread().Id().operator TUint())); + if( iStatus == KRequestPending ) + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrCancel ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CProviderErrorNotifierAO::RunL +// ----------------------------------------------------------------------------- +// +void CProviderErrorNotifierAO::RunL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::RunL() >>"), RThread().Id().operator TUint())); + TInt err = iStatus.Int(); + if ( err == KErrCancel ) + { + return; + } + if ( iObserver != NULL ) + { + iObserver->vsProviderError( iError ); + } + iStatus = KRequestPending; + SetActive(); + iCS.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CProviderErrorNotifierAO::RunL() <<"), RThread().Id().operator TUint())); + } + +// ============================ CSyncCameraReserve ============================= + +// ----------------------------------------------------------------------------- +// CSyncCameraReserve::CSyncCameraReserve +// ----------------------------------------------------------------------------- +// +CSyncCameraReserve::CSyncCameraReserve() : CActive( EPriorityNormal ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::CSyncCameraReserve() >>"), RThread().Id().operator TUint())); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::CSyncCameraReserve() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CSyncCameraReserve::StartL +// ----------------------------------------------------------------------------- +// +void CSyncCameraReserve::StartL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::StartL() >>"), RThread().Id().operator TUint())); + SetActive(); + iStatus = KRequestPending; + iWait.Start(); + User::LeaveIfError( iStatus.Int() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::StartL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CSyncCameraReserve::NewL +// ----------------------------------------------------------------------------- +// +CSyncCameraReserve* CSyncCameraReserve::NewL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::NewL() >>"), RThread().Id().operator TUint())); + CSyncCameraReserve* self = new ( ELeave ) CSyncCameraReserve(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CSyncCameraReserve::DoCancel +// ----------------------------------------------------------------------------- +// +void CSyncCameraReserve::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::DoCancel() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CSyncCameraReserve::RunL +// ----------------------------------------------------------------------------- +// +void CSyncCameraReserve::RunL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::RunL() >>"), RThread().Id().operator TUint())); + iWait.AsyncStop(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CSyncCameraReserve::RunL() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVSOnboardCameraDataProvider =================== + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::CVSOnboardCameraDataProvider +// ----------------------------------------------------------------------------- +// +CVSOnboardCameraDataProvider::CVSOnboardCameraDataProvider( + MVSDataProviderObserver* aObserver, MVSBufferPool* aPool ) : + CVSCameraDataProvider( aObserver, aPool ),iCameraLost( EFalse ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::CVSOnboardCameraDataProvider() >>"), RThread().Id().operator TUint())); + iState = EStopped; + iFormat = CCamera::EFormatYUV420Planar; + iDublicatedBitmap = new CFbsBitmap(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::CVSOnboardCameraDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::~CVSOnboardCameraDataProvider +// ----------------------------------------------------------------------------- +// +CVSOnboardCameraDataProvider::~CVSOnboardCameraDataProvider() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::~CVSOnboardCameraDataProvider() >>"), RThread().Id().operator TUint())); + delete iDublicatedBitmap; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::~CVSOnboardCameraDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::PrimeL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::PrimeL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::PrimeL() >>"), RThread().Id().operator TUint())); + + const TBool primeable( iCameraDuplicate && ( iState == EStopped ) ); + + if ( !primeable ) + { + User::Leave( KErrNotReady ); + } + + iAsynchronousReserveIssued = EFalse; + iCameraDuplicate->Reserve(); + iSyncReserve->StartL(); // Returns when from ReserveComplete() has been + // signalled iSyncReserve + + // Reserve ok, prepare capture next + iCameraDuplicate->PrepareVideoCaptureL( + iFormat, + iFrameSizeIndex, + iFrameRateIndex, + 2, + 1 ); + + SetVideoFrameSizeL( TSize( KQCIFWidth, KQCIFHeight ) ); + + iState = EPrimed; + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::PrimeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::FillBufferL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::FillBufferL( + CMMFBuffer* /*aBuffer*/, + MVTVideoSink* /*aConsumer*/, + TMediaId /*aMediaId*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::FillBufferL() >>"), RThread().Id().operator TUint())); + if ( iState != EPlaying ) + { + User::Leave( KErrNotReady ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::FillBufferL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::BufferEmptiedL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::BufferEmptiedL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::BufferEmptiedL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourceThreadLogon +// ----------------------------------------------------------------------------- +// +TInt CVSOnboardCameraDataProvider::SourceThreadLogon( + MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceThreadLogon() >>"), RThread().Id().operator TUint())); + TInt err = KErrNone; + iEventHandler = &aEventHandler; + if ( iCameraDuplicate ) + { + Panic( EVSPanicProviderAlreadyInitialized ); + } + TRAP( err, iCameraDuplicate = + CCamera::NewDuplicate2L( (MCameraObserver2&)*this, iCameraHandle) ); + + if ( err != KErrNone ) + { + TRAP( err, iCameraDuplicate = + CCamera::NewDuplicateL( (MCameraObserver&)*this, iCameraHandle) ); + if (err != KErrNone) + { + return err; + } + } + iCameraLost = EFalse; + + TCameraInfo info; + iCameraDuplicate->CameraInfo( info ); + if ( !(info.iOptionsSupported & TCameraInfo::EVideoCaptureSupported) ) + { + delete iCameraDuplicate; + iCameraDuplicate = NULL; + return KErrNotSupported; + } + if ( iSyncReserve == NULL ) + { + TRAP( err, iSyncReserve = CSyncCameraReserve::NewL() ); + if ( err != KErrNone ) + { + delete iCameraDuplicate; + iCameraDuplicate = NULL; + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceThreadLogon() <<"), RThread().Id().operator TUint())); + return err; + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourceThreadLogoff +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SourceThreadLogoff() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceThreadLogoff() >>"), RThread().Id().operator TUint())); + delete iCameraDuplicate; + iCameraDuplicate = NULL; + iState = EStopped; + delete iSyncReserve; + iSyncReserve = NULL; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceThreadLogoff() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourcePrimeL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SourcePrimeL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePrimeL() >>"), RThread().Id().operator TUint())); + const TBool primeable( iCameraDuplicate && ( iState == EStopped ) ); + if ( !primeable ) + { + User::Leave( KErrNotReady ); + } + iAsynchronousReserveIssued = ETrue; + iCameraDuplicate->Reserve(); + User::Leave( KRequestPending ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePrimeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourcePlayL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SourcePlayL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePlayL() >>"), RThread().Id().operator TUint())); + if ( iState != EPrimed ) + { + User::Leave( KErrNotReady ); + } + ResetStartTime(); + iCameraDuplicate->StartVideoCapture(); + iState = EPlaying; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePlayL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourcePauseL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SourcePauseL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePauseL() >>"), RThread().Id().operator TUint())); + if ( iState != EPlaying ) + { + return; + } + iCameraDuplicate->StopVideoCapture(); + iState = EPrimed; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourcePauseL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SourceStopL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SourceStopL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceStopL() >>"), RThread().Id().operator TUint())); + if ( iState == EStopped ) + { + return; + } + SourcePauseL(); + iCameraDuplicate->Release(); + iState = EStopped; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SourceStopL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SetFormatL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SetFormatL( const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetFormatL() >>"), RThread().Id().operator TUint())); + if ( !iCameraDuplicate ) + { + User::Leave( KErrBadHandle ); + } + TCameraInfo info; + iCameraDuplicate->CameraInfo( info ); + if ( aFormat == KVtVideoMIMETypeYUV420 ) + { + if ( info.iVideoFrameFormatsSupported & CCamera::EFormatYUV420Planar ) + { + iFormat = CCamera::EFormatYUV420Planar; + } + else + { + User::Leave( KErrNotSupported ); + } + } + else + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetFormatL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SetFrameRateL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SetFrameRateL( TReal32 aFrameRate ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetFrameRateL() >>"), RThread().Id().operator TUint())); + if ( !iCameraDuplicate ) + { + User::Leave( KErrBadHandle ); + } + TCameraInfo info; + iCameraDuplicate->CameraInfo( info ); + TBool found = EFalse; + for ( TInt i = 0; i < info.iNumVideoFrameRatesSupported; i++ ) + { + TReal32 rate = 0; + iCameraDuplicate->EnumerateVideoFrameRates( + rate, + i, + iFormat, + iFrameSizeIndex ); + if ( rate == aFrameRate ) + { + iFrameRateIndex = i; + found = ETrue; + break; + } + } + if ( !found ) + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetFrameRateL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::SetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::SetVideoFrameSizeL( const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetVideoFrameSizeL() >>"), RThread().Id().operator TUint())); + if ( !iCameraDuplicate ) + { + User::Leave( KErrBadHandle ); + } + TCameraInfo info; + iCameraDuplicate->CameraInfo( info ); + TBool found = EFalse; + for ( TInt i = 0; i < info.iNumVideoFrameSizesSupported; i++ ) + { + TSize size; + iCameraDuplicate->EnumerateVideoFrameSizes( size, i, iFormat ); + if ( size == aSize ) + { + iFrameSizeIndex = i; + iFrameSize = size; + found = ETrue; + break; + } + } + if ( !found ) + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::SetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::GetVideoFrameSizeL +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::GetVideoFrameSizeL( TSize& aSize ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::GetVideoFrameSizeL() >>"), RThread().Id().operator TUint())); + aSize = iFrameSize; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::GetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::ReserveComplete +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::ReserveComplete( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ReserveComplete() >>"), RThread().Id().operator TUint())); + if ( !iReserverComplete ) + { + if ( aError == KErrNone ) + { + iReserverComplete = ETrue; + Camera().PowerOn(); + } + else + { + NotifyError( aError ); + } + } + else + { + if( iAsynchronousReserveIssued ) + { + iAsynchronousReserveIssued = EFalse; + + if( aError == KErrNone && iCameraDuplicate ) + { + // Reserve ok, prepare capture next + TRAP( + aError, + iCameraDuplicate->PrepareVideoCaptureL( + iFormat, + iFrameSizeIndex, + iFrameRateIndex, + 2, + 1 ) ); + + if( aError == KErrNone ) + { + TRAP( aError, SetVideoFrameSizeL( TSize( KQCIFWidth, KQCIFHeight ) ) ); + + if( aError == KErrNone ) + { + // Everything ok in PrimeL() + iState = EPrimed; + } + } + } + TMMFEvent event( TUid::Uid( KVtUidDataSrcPrime ), aError ); + iEventHandler->SendEventToClient( event ); + } + else + { + TRequestStatus* statusP = &iSyncReserve->iStatus; + User::RequestComplete( statusP, aError ); + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ReserveComplete() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::FrameBufferReady +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::FrameBufferReady( + MFrameBuffer* aFrameBuffer, + TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::FrameBufferReady() >>"), RThread().Id().operator TUint())); + + iFreezeCS.Wait(); + + if ( aError == KErrNone ) + { + if( iFreezePendingFlags & EVideoFrameFreezePending ) + { + FreezeFrame( aFrameBuffer ); + } + + CVSMMFDataBuffer* buffer = NULL; + + TRAPD( err, buffer = BufferPool().GetBufferL( ETrue ) ); + + if( err == KErrNone ) + { + if ( buffer ) + { + MFrameBuffer* frameBufferToBeUsed = aFrameBuffer; + + if( IsFrozen() && !( iFreezePendingFlags & EVideoFrameFreezePending ) ) + { + iFrozenFrame->CopyProperties( aFrameBuffer ); + aFrameBuffer->Release(); + frameBufferToBeUsed = iFrozenFrame; + } + + TRAP( err, buffer->SetFrameBufferL( frameBufferToBeUsed ) ); + + if ( err != KErrNone ) + { + TInt leaveCode = KErrNone; + TRAP( leaveCode, BufferPool().FreeBufferL( buffer ) ); + } + else + { + buffer->SetTimeToPlay( TimeToPlay() ); + buffer->SetFrameNumber( aFrameBuffer->iIndexOfFirstFrameInBuffer ); + TRAP( err, Consumer()->BufferFilledL( buffer ) ); + if ( err != KErrNone ) + { + TInt leaveCode = KErrNone; + TRAP( leaveCode, BufferPool().FreeBufferL( buffer ) ); + } + } + } + else + { + aFrameBuffer->Release(); + } + } + + if( err != KErrNone ) + { + NotifyError( err ); + } + } + else + { + NotifyError( aError ); + } + + iFreezeCS.Signal(); + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::FrameBufferReady() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::GetVideoFrameSize +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::GetVideoFrameSize( + TSize& aSize, + TInt aSizeIndex, + const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::GetVideoFrameSize() >>"), RThread().Id().operator TUint())); + TCameraInfo info; + Camera().CameraInfo( info ); + if ( aFormat == KVtVideoMIMETypeYUV420 ) + { + if ( info.iVideoFrameFormatsSupported & CCamera::EFormatYUV420Planar ) + { + Camera().EnumerateVideoFrameSizes( aSize, aSizeIndex, CCamera::EFormatYUV420Planar ); + } + else + { + aSize.SetSize( 0, 0 ); + } + } + else + { + aSize.SetSize( 0, 0 ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::GetVideoFrameSize() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::GetVideoFrameRate +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::GetVideoFrameRate( + TReal32& aRate, + TInt aRateIndex, + const TDesC8& aFormat, + const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::GetVideoFrameRate() >>"), RThread().Id().operator TUint())); + TCameraInfo info; + Camera().CameraInfo( info ); + if ( aFormat == KVtVideoMIMETypeYUV420 ) + { + if ( info.iVideoFrameFormatsSupported & CCamera::EFormatYUV420Planar ) + { + TBool found = EFalse; + for ( TInt i = 0; i < info.iNumVideoFrameSizesSupported; i++ ) + { + TSize size; + Camera().EnumerateVideoFrameSizes( + size, + i, + CCamera::EFormatYUV420Planar ); + if ( size == aSize ) + { + Camera().EnumerateVideoFrameRates( + aRate, + aRateIndex, + CCamera::EFormatYUV420Planar, + i ); + found = ETrue; + break; + } + } + if ( !found ) + { + aRate = 0.0; + } + } + else + { + aRate = 0.0; + } + } + else + { + aRate = 0.0; + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::GetVideoFrameRate() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::FreezeFrame +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::FreezeFrame( MFrameBuffer* aFrameBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::FreezeFrame() >>"), RThread().Id().operator TUint())); + + TRAPD( error, iFrozenFrame->CopyFrameL( aFrameBuffer ) ); + + if( error != KErrNone ) + { + Observer().vsProviderError( error ); + } + else + { + iFreezePendingFlags &= ~EVideoFrameFreezePending; + } + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::FreezeFrame() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::FreezeFrame +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::FreezeFrame( MCameraBuffer* aCameraBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::FreezeFrame() >>"), RThread().Id().operator TUint())); + + TRAPD( error, iFrozenFrame->CopyFrameL( aCameraBuffer ) ); + + if( error != KErrNone ) + { + Observer().vsProviderError( error ); + } + else + { + iFreezePendingFlags &= ~EVideoFrameFreezePending; + } + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::FreezeFrame() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::HandleEvent +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::HandleEvent( const TECAMEvent& aEvent ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::HandleEvent() event %d>>"), + RThread().Id().operator TUint(), aEvent.iEventType )); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::HandleEvent() iErrorCode %d>"), + RThread().Id().operator TUint(), aEvent.iErrorCode )); + //Needs to handled first + if( aEvent.iEventType == KUidECamEventCameraNoLongerReserved ) + { + iCameraLost = ETrue; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::HandleEvent() Camera lost>>"), + RThread().Id().operator TUint())); + NotifyError( KVsErrCameraNoLongerReserved ); + } + //Do not care errors that occures if camera is lost + if ( aEvent.iErrorCode != KErrNone ) + { + if ( iCameraLost ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::HandleEvent() Camera lost error<<"), + RThread().Id().operator TUint())); + return; + } + } + // Gets called twice for both threads + if ( aEvent.iEventType == KUidECamEventReserveComplete ) + { + ReserveComplete( aEvent.iErrorCode ); + } + else if( aEvent.iEventType == KUidECamEventPowerOnComplete ) + { + PowerOnComplete( aEvent.iErrorCode ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSOnboardCameraDataProvider::HandleEvent() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::ViewFinderReady +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::ViewFinderReady( MCameraBuffer& aCameraBuffer,TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ViewFinderReady() error %d >>"), RThread().Id().operator TUint(), aError )); + // If error occures notify observer + if ( aError != KErrNone && !iCameraLost ) + { + NotifyError( aError ); + return; + } + // If camera has been lost do nothing + // because event to indicate cameralost has come or is coming + else if ( iCameraLost ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ViewFinderReady() Camera lost<<"), + RThread().Id().operator TUint())); + return; + } + // If there is more than 1 frame in buffer + // something has went wrong and error (-38) has occured + if ( aCameraBuffer.NumFrames() > 1 ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ViewFinderReady() FRAMES [%d] IN BUFFER >>"), + RThread().Id().operator TUint(), aCameraBuffer.NumFrames())); + } + + //Duplicate camera buffers the newest bitmap + //In case of error release buffer and notify observer + if ( !iDublicatedBitmap ) + { + aCameraBuffer.Release(); + NotifyError( KErrBadDescriptor ); + return; + } + iDublicatedBitmap->BeginDataAccess(); + TRAPD( err, iDublicatedBitmap->Duplicate( aCameraBuffer.BitmapL( aCameraBuffer.NumFrames() - 1 ).Handle() ) ); + iDublicatedBitmap->EndDataAccess(); + if( err != KErrNone ) + { + aCameraBuffer.Release(); + NotifyError( KErrBadDescriptor ); + return; + } + + // Send dublicated bitmap to UI + ViewFinderFrameReady( *iDublicatedBitmap ); + + //Release camera buffer for further usage + aCameraBuffer.Release(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::ViewFinderReady() <<"), + RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSOnboardCameraDataProvider::VideoBufferReady +// ----------------------------------------------------------------------------- +// +void CVSOnboardCameraDataProvider::VideoBufferReady( MCameraBuffer& aCameraBuffer,TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::VideoBufferReady() >>"), RThread().Id().operator TUint())); + + iFreezeCS.Wait(); + + // If there is more than 1 frame in buffer + // print it out + // calculate delta which indicates how many frames are skipped + TInt delta = 0; + if ( aCameraBuffer.NumFrames() > 1 ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::VideoBufferReady() FRAMES [%d] IN BUFFER >>"), + RThread().Id().operator TUint(), aCameraBuffer.NumFrames())); + delta = aCameraBuffer.NumFrames() - 1; + } + + if ( aError == KErrNone ) + { + if( iFreezePendingFlags & EVideoFrameFreezePending ) + { + FreezeFrame( &aCameraBuffer ); + } + + CVSMMFDataBuffer* buffer = NULL; + + TRAPD( err, buffer = BufferPool().GetBufferL( ETrue ) ); + + if( err == KErrNone ) + { + if ( buffer ) + { + MCameraBuffer* cameraBufferToBeUsed = &aCameraBuffer; + + if( IsFrozen() && !( iFreezePendingFlags & EVideoFrameFreezePending ) ) + { + iFrozenFrame->CopyProperties( &aCameraBuffer ); + ( &aCameraBuffer )->Release(); + cameraBufferToBeUsed = iFrozenFrame; + } + + TRAP( err, buffer->SetFrameBufferL( cameraBufferToBeUsed ) ); + + if ( err != KErrNone ) + { + TInt leaveCode = KErrNone; + TRAP( leaveCode, BufferPool().FreeBufferL( buffer ) ); + } + else + { + buffer->SetTimeToPlay( TimeToPlay() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::VideoBufferReady() iIndexOfFirstFrameInBuffer [%d]>>"), + RThread().Id().operator TUint(), aCameraBuffer.iIndexOfFirstFrameInBuffer + delta)); + buffer->SetFrameNumber( ( &aCameraBuffer )->iIndexOfFirstFrameInBuffer + delta ); + TRAP( err, Consumer()->BufferFilledL( buffer ) ); + if ( err != KErrNone ) + { + TInt leaveCode = KErrNone; + TRAP( leaveCode, BufferPool().FreeBufferL( buffer ) ); + } + } + } + else + { + ( &aCameraBuffer )->Release(); + } + } + else + { + NotifyError( err ); + } + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::VideoBufferReady() Camera lost"), + RThread().Id().operator TUint())); + if ( !iCameraLost ) + { + NotifyError( aError ); + } + } + iFreezeCS.Signal(); + + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSOnboardCameraDataProvider::VideoBufferReady() <<"), RThread().Id().operator TUint())); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/CVSStillImageDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/CVSStillImageDataProvider.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1190 @@ +/* +* Copyright (c) 2006 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include + +#include "CVSStillImageDataProvider.h" +#include "CVSDataSourceImp.h" +#include "VSPanic.h" +#include "cvtimagebitmap.h" +#include "CVSMMFDataBuffer.h" + +#include "cmultiframeprovider.h" + +// EXTERNAL FUNCTION PROTOTYPES + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// LOCAL CONSTANTS AND MACROS + +static const TInt KMinZoom = 0; +static const TInt KMaxZoom = 0; +static const TInt KMaxDigitalZoom = 0; +static const TReal32 KMinZoomFactor = 0.0; +static const TReal32 KMaxZoomFactor = 0.0; +static const TReal32 KMaxDigitalZoomFactor = 1.0; +static const TInt KNumVideoSizesSupported = 1; +static const TInt KNumVideoFrameSizesSupported = 1; +static const TInt KNumVideoFrameRatesSupported = 1; +static const TInt KMaxFramesPerBufferSupported = 1; +static const TInt KQcifWidth = 176; +static const TInt KQcifHeight = 144; +static const TReal32 KFrameRate = 15.0; +static const TUint32 KVSViewFinderUpdateRate = 1000000/15; // 15 times per second + +// TYPE DEFINITIONS + +// Timer expired callback + +typedef void (CVSStillImageDataProvider::*TTimerElapsed) (); + +// INTERNAL CLASSES + +/** +* Timer class that calls given callback method when timer request has been +* completed. If the timer request is cancelled then callback will not be +* called. +* +* @lib videosource.lib +*/ +class CVSFrameRateTimer : public CTimer + { + public: // Constructors and destructor + + /** + * Static factory function to create instance of this class. + * @param "aRequester" ?description + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new instance. + */ + static CVSFrameRateTimer* NewL( CVSStillImageDataProvider* aRequester ); + + public: // New functions + + public: // Functions from base classes + + /** + * Starts timer request. When timer request has been completed given + * callback method will be called. + * @param "anInterval" Interval after which event is to occur, + * in microseconds. + * @param "aFunction" Callback method that will be called when timer + * request has been completed. + */ + void After( + TTimeIntervalMicroSeconds32 anInterval, + TTimerElapsed aFunction ); + + public: // Constructors and destructor + + /** + * Destructor. + */ + ~CVSFrameRateTimer(); + + protected: // New functions + + protected: // Functions from base classes + + private: // Constructors and destrcutor + + /** + * Constructor. + * @param "aRequester" ?description + */ + CVSFrameRateTimer( CVSStillImageDataProvider* aRequester ); + + private: // New functions + + private: // Functions from base classes + + /** + * From CActive. See CActive for description. + */ + void RunL(); + + public: // Data + + protected: // Data + + private: // Data + + // Pointer to requester (i.e. through which callback call will be made) + CVSStillImageDataProvider* iRequester; // not owned + + // Pointer to callback method. + TTimerElapsed iFunction; + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ============================ CVSFrameRateTimer ============================== + +// ----------------------------------------------------------------------------- +// CVSFrameRateTimer::NewL( CVSStillImageDataProvider* aRequester ) +// ----------------------------------------------------------------------------- +// +CVSFrameRateTimer* CVSFrameRateTimer::NewL( + CVSStillImageDataProvider* aRequester ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::NewL() >>"), RThread().Id().operator TUint())); + CVSFrameRateTimer* self = new (ELeave) CVSFrameRateTimer( aRequester ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSFrameRateTimer::CVSFrameRateTimer( CVSStillImageDataProvider* aRequester ) +// ----------------------------------------------------------------------------- +// +CVSFrameRateTimer::CVSFrameRateTimer( CVSStillImageDataProvider* aRequester ) +: CTimer( EPriorityStandard ), iRequester( aRequester ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::CVSFrameRateTimer() >>"), RThread().Id().operator TUint())); + // Added to CActiveScheduler in CVSStillImageDataProvider::InitializeL + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::CVSFrameRateTimer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSFrameRateTimer::After( +// TTimeIntervalMicroSeconds32 anInterval, TTimerElapsed aFunction ) +// ----------------------------------------------------------------------------- +// +void CVSFrameRateTimer::After( + TTimeIntervalMicroSeconds32 anInterval, + TTimerElapsed aFunction ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::After() >>"), RThread().Id().operator TUint())); + if ( iFunction == aFunction ) + { + if ( !IsActive() ) + { + iFunction = aFunction; + CTimer::After( anInterval ); + } + } + else + { + if ( !IsActive() ) + { + iFunction = aFunction; + CTimer::After( anInterval ); + } + else + { + User::Panic(_L("VideoSource"),KErrGeneral); + } + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::After() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSFrameRateTimer::~CVSFrameRateTimer() +// ----------------------------------------------------------------------------- +// +CVSFrameRateTimer::~CVSFrameRateTimer() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::~CVSFrameRateTimer() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::~CVSFrameRateTimer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSFrameRateTimer::RunL() +// ----------------------------------------------------------------------------- +// +void CVSFrameRateTimer::RunL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::RunL() >>"), RThread().Id().operator TUint())); + if( iStatus.Int() == KErrNone ) + { + (iRequester->*iFunction)(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSFrameRateTimer::RunL() <<"), RThread().Id().operator TUint())); + } + +// ============================ CVSStillImageDataProvider =============================== + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::NewL( +// MVSDataProviderObserver* aObserver, MVSBufferPool* aPool ) +// ----------------------------------------------------------------------------- +// +CVSStillImageDataProvider* CVSStillImageDataProvider::NewL( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CVSStillImageDataProvider::NewL() >>"), RThread().Id().operator TUint())); + CVSStillImageDataProvider* self = + new (ELeave) CVSStillImageDataProvider( aObserver, aPool ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CVSStillImageDataProvider::NewL() <<"), RThread().Id().operator TUint())); + return self; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::~CVSStillImageDataProvider() +// ----------------------------------------------------------------------------- +// +CVSStillImageDataProvider::~CVSStillImageDataProvider() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::~CVSStillImageDataProvider() this %x >>"), RThread().Id().operator TUint(), this)); + iFs.Close(); + delete iVFTimer; + delete iActiveWait; + delete iViewer; + iFreezeCS.Close(); + delete iScaled; + ReleaseYUVData(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::~CVSStillImageDataProvider() this %x <<"), RThread().Id().operator TUint(), this)); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::InitializeL( const TDesC8& aInitParams ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::InitializeL( const TDesC8& aInitParams ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::InitializeL() >>"), RThread().Id().operator TUint())); + + CommonInitializeL(); + + TPckgBuf< TVSStillImageDataProviderParams > pb; + pb.Copy( aInitParams ); + + iInitType = pb().iInitialize; + iPSState = EPSInitializing; + + switch( pb().iInitialize ) + { + /** Initialize from blank image */ + case TVSStillImageDataProviderParams::EInitializeAsBlankImage: + BlankImageInitializeL(); + break; + + /** Initialize from General Settings */ + case TVSStillImageDataProviderParams::EInitializeFromGeneralSettings: + GeneralSettingsInitializeL( EGSStillImage ); + break; + + /** Initilaize from General Settings*/ + case TVSStillImageDataProviderParams::EInitializeAsDefaultStillImage: + GeneralSettingsInitializeL( EGSDefaultStillImage ); + break; + + /** Initialize from file */ + case TVSStillImageDataProviderParams::EInitializeFromFile: + FileImageInitializeL( pb().iFileName ); + break; + } + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::InitializeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CommonInitializeL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::CommonInitializeL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CommonInitializeL() >>"), RThread().Id().operator TUint())); + iVFTimer = CVSFrameRateTimer::NewL( this ); + CActiveScheduler::Add( iVFTimer ); + iActiveWait = new (ELeave) CVSActiveWait< CVSStillImageDataProvider > ( this ); + + //Create viewer + iViewer = CMultiframeProvider::NewL( this , iDisplayMode ); + User::LeaveIfError( iFreezeCS.CreateLocal() ); + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CommonInitializeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GeneralSettingsInitializeL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::GeneralSettingsInitializeL( const TGeneralSettingsImageType aType ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GeneralSettingsInitializeL() >>"), RThread().Id().operator TUint())); + iViewer->IniatializeGSL( aType ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GeneralSettingsInitializeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::BlankImageInitializeL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::BlankImageInitializeL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::BlankImageInitializeL() %x >>"), RThread().Id().operator TUint(), this)); + iViewer->IniatializeBlankL(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::BlankImageInitializeL() %x <<"), RThread().Id().operator TUint(), this)); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::FileImageInitializeL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::FileImageInitializeL( const TFileName& aFileName ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::FileImageInitializeL(): %S >>"), RThread().Id().operator TUint(), &aFileName )); + iViewer->InitializeL( &aFileName ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::FileImageInitializeL() %x <<"), RThread().Id().operator TUint(), this)); + } + + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::DigitalZoomFactor() const +// ----------------------------------------------------------------------------- +// +TInt CVSStillImageDataProvider::DigitalZoomFactor() const + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::DigitalZoomFactor() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::DigitalZoomFactor() <<"), RThread().Id().operator TUint())); + return KMaxDigitalZoom; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetDigitalZoomFactorL( +// TInt /*aDigitalZoomFactor*/ ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetDigitalZoomFactorL( + TInt /*aDigitalZoomFactor*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SetDigitalZoomFactorL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SetDigitalZoomFactorL() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::StartViewFinderBitmapsL( TSize& aSize ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::StartViewFinderBitmapsL( TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderBitmapsL() >>"), RThread().Id().operator TUint())); + __ASSERT_DEBUG( iPSState > EPSUninitialized, + Panic( EVSPanicProviderNotReady ) ); + iVFState = EVFPlaying; + iViewer->ClearVFScalingTargetSize(); + iTargetSize = aSize; + iViewer->SetVFScalingTargetSize( aSize ); + iViewer->ScaleCopy( aSize, ETrue ); + iViewer->IncreaseDataConsumer(); + iViewer->NextFrame(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderBitmapsL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::StartViewFinderBitmapsL( +// TSize& /*aSize*/, TRect& /*aClipRect*/ ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::StartViewFinderBitmapsL( + TSize& /*aSize*/, + TRect& /*aClipRect*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderBitmapsL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderBitmapsL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::StopViewFinder() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::StopViewFinder() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StopViewFinder() >>"), RThread().Id().operator TUint())); + // Make sure scaler is cancelled (just in case!) + iViewer->ClearVFScalingTargetSize(); + iViewer->DecreaseDataConsumer(); + iViewer->SetVFStop(); + // No double stopping.. + if( iVFState != EVFStopped ) + { + iVFState = EVFStopped; + iVFTimer->Cancel(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StopViewFinder() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ViewFinderActive() const +// ----------------------------------------------------------------------------- +// +TBool CVSStillImageDataProvider::ViewFinderActive() const + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ViewFinderActive() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ViewFinderActive() <<"), RThread().Id().operator TUint())); + return ( iVFState == EVFPlaying ); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::StartViewFinderDirectL( +// RWsSession& /*aWs*/, CWsScreenDevice& /*aScreenDevice*/, +// RWindowBase& /*aWindow*/, TRect& /*aScreenRect*/ ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::StartViewFinderDirectL( + RWsSession& /*aWs*/, + CWsScreenDevice& /*aScreenDevice*/, + RWindowBase& /*aWindow*/, + TRect& /*aScreenRect*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderDirectL() >>"), RThread().Id().operator TUint())); + User::Leave(KErrNotSupported); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderDirectL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::StartViewFinderDirectL( +// RWsSession& /*aWs*/, CWsScreenDevice& /*aScreenDevice*/, +// RWindowBase& /*aWindow*/, TRect& /*aScreenRect*/, TRect& /*aClipRect*/ ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::StartViewFinderDirectL( + RWsSession& /*aWs*/, + CWsScreenDevice& /*aScreenDevice*/, + RWindowBase& /*aWindow*/, + TRect& /*aScreenRect*/, + TRect& /*aClipRect*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderDirectL() >>"), RThread().Id().operator TUint())); + User::Leave(KErrNotSupported); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::StartViewFinderDirectL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ProviderInfo( TVSDataProviderInfo& aInfo ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::ProviderInfo( TVSDataProviderInfo& aInfo ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ProviderInfo() >>"), RThread().Id().operator TUint())); + Mem::FillZ( &aInfo, sizeof( aInfo ) ); + aInfo.iHardwareVersion = TVersion( 0, 0, 0 ); + aInfo.iSoftwareVersion = TVersion( 0, 0, 0 ); + aInfo.iOrientation = TCameraInfo::EOrientationUnknown; + aInfo.iOptionsSupported = TCameraInfo::EViewFinderBitmapsSupported | + TCameraInfo::EVideoCaptureSupported; + aInfo.iFlashModesSupported = CCamera::EFlashNone; + aInfo.iExposureModesSupported = CCamera::EExposureAuto; + aInfo.iWhiteBalanceModesSupported = CCamera::EWBAuto; + aInfo.iMinZoom = KMinZoom; + aInfo.iMaxZoom = KMaxZoom; + aInfo.iMaxDigitalZoom = KMaxDigitalZoom; + aInfo.iMinZoomFactor = KMinZoomFactor; + aInfo.iMaxZoomFactor = KMaxZoomFactor; + aInfo.iMaxDigitalZoomFactor = KMaxDigitalZoomFactor; + aInfo.iImageFormatsSupported = CCamera::EFormatFbsBitmapColor64K | + CCamera::EFormatFbsBitmapColor16M; + aInfo.iNumVideoFrameSizesSupported = KNumVideoSizesSupported; + aInfo.iNumVideoFrameSizesSupported = KNumVideoFrameSizesSupported; + aInfo.iNumVideoFrameRatesSupported = KNumVideoFrameRatesSupported; + aInfo.iVideoFrameFormatsSupported = CCamera::EFormatYUV420Planar; + aInfo.iMaxFramesPerBufferSupported = KMaxFramesPerBufferSupported; + aInfo.iFreezeSupported = EFalse; + + aInfo.iSupportedColorTones = + CCamera::CCameraImageProcessing::EEffectNone; + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ProviderInfo() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetViewFinderMirrorL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetViewFinderMirrorL( TBool /*aMirror*/ ) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ViewFinderMirror +// ----------------------------------------------------------------------------- +// +TBool CVSStillImageDataProvider::ViewFinderMirror() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::FreezeL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::FreezeL() + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::UnfreezeL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::UnfreezeL() + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::IsFrozen +// ----------------------------------------------------------------------------- +// +TBool CVSStillImageDataProvider::IsFrozen() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::PrimeL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::PrimeL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::PrimeL() &%x >>"), RThread().Id().operator TUint(), this)); + SourcePrimeL(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::PrimeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::FillBufferL( +// CMMFBuffer* aBuffer, MVTVideoSink* aConsumer, TMediaId aMediaId ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::FillBufferL( + CMMFBuffer* /*aBuffer*/, + MVTVideoSink* /*aConsumer*/, + TMediaId /*aMediaId*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::FillBufferL() &%x >>"), RThread().Id().operator TUint(),this)); + if ( iPSState != EPSPlaying ) + { + User::Leave( KErrNotReady ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::FillBufferL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::BufferEmptiedL() >>"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::BufferEmptiedL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourceThreadLogon( +// MAsyncEventHandler& /*aEventHandler*/ ) +// ----------------------------------------------------------------------------- +// +TInt CVSStillImageDataProvider::SourceThreadLogon( + MAsyncEventHandler& /*aEventHandler*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceThreadLogon() &%x >>"), RThread().Id().operator TUint(),this)); + __ASSERT_DEBUG( iPSState > EPSUninitialized, + Panic( EVSPanicProviderNotReady ) ); + TRAPD( err, CreateProtoTimerL() ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceThreadLogon() <<"), RThread().Id().operator TUint())); + return err; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourceThreadLogoff() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SourceThreadLogoff() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceThreadLogoff() &%x >>"), RThread().Id().operator TUint(),this)); + ReleaseProtoTimer(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceThreadLogoff() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourcePrimeL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SourcePrimeL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePrimeL() &%x >>"), RThread().Id().operator TUint(),this)); + iPSState = EPSPrimed; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePrimeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourcePlayL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SourcePlayL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePlayL() &%x >>"), RThread().Id().operator TUint(),this)); + iPSState = EPSPlaying; + iFrameCount = 0; + ResetStartTime(); + iViewer->IncreaseDataConsumer(); + iProtoTimer->After( iProtoUpdateRate, &CVSStillImageDataProvider::ProtoTimer ); + iViewer->NextFrame(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePlayL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourcePauseL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SourcePauseL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePauseL() &%x >>"), RThread().Id().operator TUint(),this)); + if ( iProtoTimer != NULL ) + { + iProtoTimer->Cancel(); + } + iPSState = EPSPrimed; + iViewer->DecreaseDataConsumer(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourcePauseL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SourceStopL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SourceStopL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceStopL() &%x >>"), RThread().Id().operator TUint(),this)); + if ( iProtoTimer != NULL ) + { + iProtoTimer->Cancel(); + } + iPSState = EPSStopped; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SourceStopL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetFormatL( const TDesC8& aFormat ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetFormatL( const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetFormatL() &%x >>"), RThread().Id().operator TUint(),this)); + if ( aFormat != KVtVideoMIMETypeYUV420 ) + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetFormatL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetFrameRateL( TReal32 aFrameRate ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetFrameRateL( TReal32 aFrameRate ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetFrameRateL() &%x >>"), RThread().Id().operator TUint(),this)); + if ( aFrameRate != KFrameRate ) + { + User::Leave( KErrNotSupported ); + } + iProtoUpdateRate = static_cast( 1000000.0 / aFrameRate ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetFrameRateL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetVideoFrameSizeL( const TSize& aSize ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetVideoFrameSizeL( const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetVideoFrameSizeL() &%x >>"), RThread().Id().operator TUint(),this)); + if( aSize != TSize( KQcifWidth, KQcifHeight ) ) + { + User::Leave( KErrNotSupported ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::SetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetVideoFrameSizeL( TSize& aSize ) const +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::GetVideoFrameSizeL( TSize& aSize ) const + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::GetVideoFrameSizeL() &%x >>"), RThread().Id().operator TUint(),this)); + aSize = TSize( KQcifWidth, KQcifHeight ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::GetVideoFrameSizeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::VFTimer() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::VFTimer() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::VFTimer() >>"), RThread().Id().operator TUint())); + if( iVFState == EVFPlaying ) + { + Observer().vsViewFinderFrameReady( iVFBitmap->Bitmap() ); + iVFTimer->After( KVSViewFinderUpdateRate, &CVSStillImageDataProvider::VFTimer ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::VFTimer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ProtoTimer() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::ProtoTimer() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ProtoTimer() this %x >>"), RThread().Id().operator TUint(), this)); + iFrameCount++; + CVSMMFDataBuffer* buffer = NULL; + TRAPD( err, buffer = BufferPool().GetBufferL( ETrue ) ); + if ( err != KErrNone ) + { + NotifyError( err ); + } + if( buffer ) + { + buffer->SetFrameNumber( iFrameCount ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ProtoTimer(): iFrameCount %d"), RThread().Id().operator TUint(), iFrameCount)); + buffer->SetTimeToPlay( TimeToPlay() ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ProtoTimer(): SetTimeToPlay() = $%08x:$%08x"), RThread().Id().operator TUint(), I64HIGH( buffer->TimeToPlay().Int64() ), I64LOW( buffer->TimeToPlay().Int64() ) )); + iFreezeCS.Wait(); + buffer->Data() = *iYUVBuffer; + iFreezeCS.Signal(); + TRAPD( err, Consumer()->BufferFilledL( buffer ) ); + if( err != KErrNone ) + { + TInt leaveCode = KErrNone; + TRAP( leaveCode, BufferPool().FreeBufferL( buffer ) ); + NotifyError( err ); + } + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ProtoTimer(): GetBufferL() returned NULL"), RThread().Id().operator TUint())); + } + // Just to make sure that we're actually playing. We also check that + // iProtoTimer still exists BECAUSE BufferFilledL() may call + // SourceThreadLogoff() if a switch is pending + if( iProtoTimer && ( iPSState == EPSPlaying ) ) + { + iProtoTimer->After( iProtoUpdateRate, &ProtoTimer ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ProtoTimer() this %x <<"), RThread().Id().operator TUint(), this)); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CreateProtoTimerL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::CreateProtoTimerL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::CreateProtoTimerL() >>"), RThread().Id().operator TUint())); + iProtoTimer = CVSFrameRateTimer::NewL( this ); + CActiveScheduler::Add( iProtoTimer ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::CreateProtoTimerL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ReleaseProtoTimer() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::ReleaseProtoTimer() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ReleaseProtoTimer() >>"), RThread().Id().operator TUint())); + delete iProtoTimer; + iProtoTimer = 0; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ReleaseProtoTimer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CreateYUVDataL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::CreateYUVDataL() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::CreateYUVDataL() this %x >>"), RThread().Id().operator TUint(), this)); + CVSFbsBitmapIYUVConverter* conv = + CVSFbsBitmapIYUVConverter::NewL( iYUVBitMap->Bitmap() ); + CleanupStack::PushL( conv ); + conv->ProcessL(); + iFreezeCS.Wait(); + ReleaseYUVData(); + iYUVBuffer = conv->YUVData().AllocL(); + iFreezeCS.Signal(); + CleanupStack::PopAndDestroy(); // conv + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::CreateYUVDataL() iYUVBuffer %x <<"), RThread().Id().operator TUint(), iYUVBuffer)); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ReleaseYUVData() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::ReleaseYUVData() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ReleaseYUVData() >>"), RThread().Id().operator TUint())); + delete iYUVBuffer; + iYUVBuffer = 0; + __IF_DEBUG(Print(_L("VideoSource[%d]: CVSStillImageDataProvider::ReleaseYUVData() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CVSStillImageDataProvider( +// MVSDataProviderObserver* aObserver ) +// ----------------------------------------------------------------------------- +// +CVSStillImageDataProvider::CVSStillImageDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ) : + CVSDataProvider( aObserver, aPool ), iProtoUpdateRate( 1000000.0 / KFrameRate ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CVSStillImageDataProvider() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CVSStillImageDataProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::ConstructL() +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::ConstructL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ConstructL() this %x >>"), RThread().Id().operator TUint(), this)); + CVSDataProvider::ConstructL(); + User::LeaveIfError( iFs.Connect() ); + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + CWsScreenDevice* wsScreenDevice = new ( ELeave ) CWsScreenDevice( wsSession ); + CleanupStack::PushL( wsScreenDevice ); + User::LeaveIfError( wsScreenDevice->Construct() ); + iDisplayMode = wsScreenDevice->DisplayMode();/* = EColor16MU;*/ + CleanupStack::PopAndDestroy( 2 ); // wsSession, wsScreenDevice + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::ConstructL() this %x <<"), RThread().Id().operator TUint(), this)); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetVideoFrameSize( +// TSize& aSize, TInt /*aSizeIndex*/, const TDesC8& aFormat ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::GetVideoFrameSize( + TSize& aSize, + TInt /*aSizeIndex*/, + const TDesC8& aFormat ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GetVideoFrameSize() >>"), RThread().Id().operator TUint())); + if ( aFormat == KVtVideoMIMETypeYUV420 ) + { + aSize.SetSize( KQcifWidth, KQcifHeight ); + } + else + { + aSize.SetSize( 0, 0 ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GetVideoFrameSize() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetVideoFrameRate( +// TReal32& aRate, TInt /*aRateIndex*/, const TDesC8& aFormat, +// const TSize& aSize ) +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::GetVideoFrameRate( + TReal32& aRate, + TInt /*aRateIndex*/, + const TDesC8& aFormat, + const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GetVideoFrameRate() >>"), RThread().Id().operator TUint())); + if ( aFormat == KVtVideoMIMETypeYUV420 && + aSize == TSize( KQcifWidth, KQcifHeight ) ) + { + aRate = KFrameRate; + } + else + { + aRate = 0.0; + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::GetVideoFrameRate() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::DisplayMode +// ----------------------------------------------------------------------------- +// +TDisplayMode CVSStillImageDataProvider::DisplayMode() const + { +#ifdef _DEBUG + TUint threadId( RThread().Id() ); + switch( iDisplayMode ) + { + case EColor4K: + RDebug::Print( _L( "VideoSource [%d]: DisplayMode() = EColor4K" ), threadId ); + break; + case EColor64K: + RDebug::Print( _L( "VideoSource [%d]: DisplayMode() = EColor64K" ), threadId ); + break; + case EColor16M: + RDebug::Print( _L( "VideoSource [%d]: DisplayMode() = EColor16M" ), threadId ); + break; + case EColor16MU: + RDebug::Print( _L( "VideoSource [%d]: DisplayMode() = EColor16MU" ), threadId ); + break; + default: + RDebug::Print( _L( "VideoSource [%d]: DisplayMode() = %d" ), threadId, iDisplayMode ); + break; + } +#endif // _DEBUG + return iDisplayMode; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetContrastL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetContrastL(TInt /*aContrast*/) + { + __IF_DEBUG(Print(_L("VideoSource [%d]:CVSStillImageDataProvider::SetContrastL() LEAVE"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetContrast +// ----------------------------------------------------------------------------- +// +TInt CVSStillImageDataProvider::GetContrast(TInt& /*aContrast*/) const + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetBrightnessL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetBrightnessL(TInt /*aBrightness*/) + { + __IF_DEBUG(Print(_L("VideoSource [%d]:CVSStillImageDataProvider::SetBrightnessL() LEAVE"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetBrightness +// ----------------------------------------------------------------------------- +// +TInt CVSStillImageDataProvider::GetBrightness(TInt& /*aBrightness*/ ) const + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetWhiteBalanceL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetWhiteBalanceL( CCamera::TWhiteBalance /*aWhiteBalance*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SetWhiteBalanceL() LEAVE"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetWhiteBalance +// ----------------------------------------------------------------------------- +// + TInt CVSStillImageDataProvider::GetWhiteBalance(CCamera::TWhiteBalance& /*aWhiteBalance*/) const + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::SetColorToneL +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::SetColorToneL( CCamera::CCameraImageProcessing::TEffect /*aValue*/ ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::SetColorToneL() LEAVE"), RThread().Id().operator TUint())); + User::Leave( KErrNotSupported ); + } +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::GetColorTone +// ----------------------------------------------------------------------------- +// +TInt CVSStillImageDataProvider::GetColorTone( CCamera::CCameraImageProcessing::TEffect& /*aColorTone*/ ) const + { + return KErrNotSupported; + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::InitializeReady +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::InitializeReady() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::InitializeReady()>> "), RThread().Id().operator TUint())); + if ( EPSUndoInitializing == iPSState ) + { + NotifyError(KErrCancel); + UndoCommonInitialized(); + iPSState = EPSUninitialized; + } + else + { + iPSState = EPSStopped; + Observer().vsProviderReady(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::InitializeReady()<< "), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::RefreshYUVData +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::RefreshYUVData( TImageShareDataBuffer& aYUVBitMap ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::RefreshYUVData()>> "), RThread().Id().operator TUint())); + iYUVBitMap = aYUVBitMap.iBitmap; + //Create YUV buffer only in play state + TRAP_IGNORE ( CreateYUVDataL() ); + aYUVBitMap.iIsBitmapFree = ETrue; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::RefreshYUVData()<< "), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::RefreshViewFinder +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::RefreshViewFinder( TImageShareDataBuffer& aVFBitMap ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::RefreshViewFinder()>> "), RThread().Id().operator TUint())); + iVFBitmap = aVFBitMap.iBitmap; + aVFBitMap.iIsBitmapFree = ETrue; + // Allow VF refresh only if size is what + // has beed aquired and play state is on + if ( ( iTargetSize == iVFBitmap->Size() ) && ( iVFState == EVFPlaying ) ) + { + iVFTimer->After( 1, &VFTimer ); + } + else + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::RefreshViewFinder() conditon doesn't match, iVFState[%d] "), RThread().Id().operator TUint(), iVFState)); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::RefreshViewFinder()<< "), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::NotifyImageHandlingError +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::NotifyImageHandlingError( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::NotifyImageHandlingError()>> "), RThread().Id().operator TUint())); + NotifyError( aError ); + if ( ( KErrCancel == aError ) && ( EPSUndoInitializing == iPSState ) ) + { + UndoCommonInitialized(); + iPSState = EPSUninitialized; + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::NotifyImageHandlingError()<< "), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CancelInitializing +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::CancelInitializing() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CancelInitializing()>> "), RThread().Id().operator TUint())); + if ( iPSState != EPSInitializing ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CancelInitializing(), iPSState is not valid,%d>> "), RThread().Id().operator TUint(), iPSState)); + return; + } + + if ( iInitType != TVSStillImageDataProviderParams::EInitializeFromFile ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CancelInitializing(), iInitType is not valid,%d>> "), RThread().Id().operator TUint(), iInitType)); + return; + } + if ( iViewer->CancelInitializing() ) + { + // In this condition, convert was cancelled , no any message will receive from multiframe provider, + // so delete multiFrame provider, and change IPSState, NotifyError to VT Engine + NotifyError(KErrCancel); + UndoCommonInitialized(); + iPSState = EPSUninitialized; + } + else + { + // In this condition, cnverting is finished, and Scale will cancel(CVtImageScaler->Cancel()), but in CVtImageScaler::DoCancel(), + // there is a error notify exist, so we must wait the error message from multiframe provider, + // we change the iPSState to EPSUndoInitializing for waiting error message. + // Error message will be received in function CVSStillImageDataProvider::NotifyImageHandlingError + iPSState = EPSUndoInitializing; + } + + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::CancelInitializing()<< "), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::UndoCommonInitialized +// ----------------------------------------------------------------------------- +// +void CVSStillImageDataProvider::UndoCommonInitialized() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::UndoCommonInitialized()>> "), RThread().Id().operator TUint())); + + iFreezeCS.Close(); + if ( NULL != iVFTimer ) + { + iVFTimer->Cancel(); + } + + delete iViewer; + iViewer = NULL; + + delete iActiveWait; + iActiveWait = NULL; + + delete iVFTimer; + iVFTimer = NULL; + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSStillImageDataProvider::UndoCommonInitialized()<< "), RThread().Id().operator TUint())); + + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/cactivewait.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/cactivewait.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,99 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES +#include "cactivewait.h" + +const TInt KFirstFrameIndx = 0; + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ CVSActiveWait =============================== + +// ----------------------------------------------------------------------------- +// CVSActiveWait::~CVSActiveWait() +// ----------------------------------------------------------------------------- +// +template +CVSActiveWait< R >::~CVSActiveWait() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::~CVSActiveWait() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::~CVSActiveWait() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::RequestStatus() +// ----------------------------------------------------------------------------- +// +template +TRequestStatus* CVSActiveWait< R >::RequestStatus() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RequestStatus() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RequestStatus() <<"), RThread().Id().operator TUint())); + return &iStatus; + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::Signal( TInt aError ) +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::Signal( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::Signal() >>"), RThread().Id().operator TUint())); + if( IsActive() ) + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, aError ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::Signal() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::RunL() +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::RunL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RunL() >>"), RThread().Id().operator TUint())); + (iRequester->*iCallback)( iStatus.Int() ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::RunL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CVSActiveWait::DoCancel() +// ----------------------------------------------------------------------------- +// +template +void CVSActiveWait< R >::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::DoCancel() >>"), RThread().Id().operator TUint())); + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, KErrCancel ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CVSActiveWait::DoCancel() <<"), RThread().Id().operator TUint())); + } + + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/cmultiframedataao.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/cmultiframedataao.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,177 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES +#include "cmultiframedataao.h" +#include "mmultiframeprovider.h" +#include "cmultiframeprovider.h" +#include "VSPanic.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif +// ============================ CMultiframeDataAO =============================== + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::CMultiframeDataAO( CMultiframeProvider* aRequester ) +// ----------------------------------------------------------------------------- +// +CMultiframeDataAO::CMultiframeDataAO( CMultiframeProvider* aRequester ) +: CTimer( EPriorityHigh ), iRequester( aRequester ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::CMultiframeDataAO() >>"), RThread().Id().operator TUint())); + RThread me; + iThreadId = me.Id(); + CActiveScheduler::Add( this ); + TRAP_IGNORE(CTimer::ConstructL()); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::CMultiframeDataAO() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::SetObserver( MMultiframeprovider* aObserever ) +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::SetObserver( MMultiframeprovider* aObserver ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::SetObserver() >>"), RThread().Id().operator TUint())); + iObserver = aObserver; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::SetObserver() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::~CMultiframeDataAO() +// ----------------------------------------------------------------------------- +// +CMultiframeDataAO::~CMultiframeDataAO() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::~CMultiframeDataAO() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::~CMultiframeDataAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::Activate( ) +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::Activate( TTimeIntervalMicroSeconds aUpdateTime, TBool aInit, TBool aVFUpdate ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::Activate() >>"), RThread().Id().operator TUint())); + + TTimeIntervalMicroSeconds32 time = aUpdateTime.Int64(); + iInit = aInit; + iVFUpdate = aVFUpdate; + if ( !IsActive() ) + { + CTimer::After( time ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::Activate() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::LocalBuffer( ) +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::LocalBuffer( CVtImageBitmap* aLocalBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::LocalBuffer() >>"), RThread().Id().operator TUint())); + iLocalBuffer.iBitmap = aLocalBuffer; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::LocalBuffer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::RemoteBuffer( ) +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::RemoteBuffer( CVtImageBitmap* aRemoteBuffer ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::RemoteBuffer() >>"), RThread().Id().operator TUint())); + iRemoteBuffer.iBitmap = aRemoteBuffer; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::RemoteBuffer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::RunL() +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::RunL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::RunL() >>"), RThread().Id().operator TUint())); + + //stop loop ao + if (iRequireStopping) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::RunL() cancel by flag"), RThread().Id().operator TUint())); + iRequireStopping = EFalse; + return; + } + + if ( !iVFUpdate ) + { + iObserver->RefreshYUVData( iRemoteBuffer ); + } + iObserver->RefreshViewFinder( iLocalBuffer ); + iRequester->UseSecondVfBuffer(); + if ( iInit ) + { + iObserver->InitializeReady(); + } + if ( !iVFUpdate ) + { + iRequester->AddBitmapToFreeQueue(); + } + if ( !iInit && !iVFUpdate ) + { + iRequester->NextFrame(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::RunL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeDataAO::CancelTimeLoop() +// ----------------------------------------------------------------------------- +// +void CMultiframeDataAO::CancelTimeLoop() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::CancelTimeLoop >>"), RThread().Id().operator TUint())); + if ( IsActive() ) + { + if ( iStatus == KRequestPending ) + { + RThread me; + if ( me.Id() == iThreadId ) + { + Cancel(); + iRequireStopping = EFalse; + } + else + { + iRequireStopping = ETrue; + } + } + else + { + iRequireStopping = ETrue; + } + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeDataAO::CancelTimeLoop <<"), RThread().Id().operator TUint())); + } + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/cmultiframeloopao.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/cmultiframeloopao.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,233 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES +#include "cmultiframeloopao.h" +#include "cmultiframeprovider.h" +#include "VSPanic.h" + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif +// ============================ CMultiframeloopAO =============================== + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::CMultiframeloopAO( CMultiframeProvider* aRequester ) +// ----------------------------------------------------------------------------- +// +CMultiframeloopAO::CMultiframeloopAO( CMultiframeProvider* aRequester ) +: CActive( EPriorityLow ), iRequester( aRequester ), iFreeBMCount(0), iRequireStopping(EFalse) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::CMultiframeloopAO() >>"), RThread().Id().operator TUint())); + RThread me; + iThreadId = me.Id(); + CActiveScheduler::Add( this ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::CMultiframeloopAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::~CMultiframeloopAO() +// ----------------------------------------------------------------------------- +// +CMultiframeloopAO::~CMultiframeloopAO() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::~CMultiframeloopAO() >>"), RThread().Id().operator TUint())); + Cancel(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::~CMultiframeloopAO() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::Signal( ) +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::Signal( ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::Signal() >>"), RThread().Id().operator TUint())); + iRequester->iAnimation = ETrue; + if ( !IsActive() ) + { + SetActive(); + TRequestStatus* pStatus = &iStatus; + RThread me; + if ( me.Id() == iThreadId ) + { + User::RequestComplete( pStatus, KErrNone ); + } + else + { + if ( me.Open( iThreadId ) == KErrNone ) + { + *pStatus = KRequestPending; + me.RequestComplete( pStatus, KErrNone ); + me.Close(); + } + else + { + Panic( EVSPanicThreadOpenFailure ); + } + } + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::Signal() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::RunL() +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::RunL() + { + iRequester->WaitForConverting(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() >>"), RThread().Id().operator TUint())); + + //stop loop ao + if (iRequireStopping) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() CANCEL CALLED,stop by flag"), RThread().Id().operator TUint())); + iRequireStopping = EFalse; + iRequester->ReleaseForConverting(); + return; + } + + // Cancel is handled in this way because + if ( iStatus == KErrCancel) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() CANCEL CALLED IN PROTO THREAD STOP LOOPPING"), RThread().Id().operator TUint())); + iRequester->ReleaseForConverting(); + return; + } + + //If free bitmaps proceed next frame + if ( iFreeBMCount > 0 ) + { + ++iIndex; + // Loop animation starting from first frame + if ( iIndex > iFramecount - 1 ) + { + iIndex = KFirstFrameIndx; + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() RunL index %d"), RThread().Id().operator TUint(), iIndex)); + iRequester->ConvertAndScaleL( iIndex ); + } + //Wait until free bitmaps to proceed + else + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() NO FREE BMs"), RThread().Id().operator TUint())); + iStatus = KRequestPending; + SetActive(); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RunL() <<"), RThread().Id().operator TUint())); + iRequester->ReleaseForConverting(); + } +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::RemoveFreeBitmaps() +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::RemoveFreeBitmaps( TInt aCount ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RemoveFreeBitmaps() >>"), RThread().Id().operator TUint())); + iFreeBMCount = iFreeBMCount - aCount; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::RemoveFreeBitmaps() frames %d <<"), RThread().Id().operator TUint(), aCount)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::SetFreeBitmaps() +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::SetFreeBitmaps( TInt aCount ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::SetFreeBitmaps() >>"), RThread().Id().operator TUint())); + iFreeBMCount = iFreeBMCount + aCount; + if ( IsActive() && iStatus == KRequestPending) + { + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, KErrNone ); + } + + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::SetFreeBitmaps() frames %d <<"), RThread().Id().operator TUint(), aCount)); + } +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::SetFrameCount() +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::SetFrameCount( TInt aCount ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::SetFrameCount() >>"), RThread().Id().operator TUint())); + iFramecount = aCount; + iIndex = 0; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::SetFrameCount() frames %d <<"), RThread().Id().operator TUint(), aCount)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::CancelDataLoop() +// ----------------------------------------------------------------------------- +// + void CMultiframeloopAO::CancelDataLoop() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::CancelDataLoop() >>"), RThread().Id().operator TUint())); + if ( IsActive() ) + { + if ( iStatus == KRequestPending ) + { + RThread me; + if ( me.Id() == iThreadId ) + { + Cancel(); + } + else + { + if ( me.Open( iThreadId ) == KErrNone ) + { + TRequestStatus* pStatus = &iStatus; + *pStatus = KRequestPending; + me.RequestComplete( pStatus, KErrCancel ); + me.Close(); + } + else + { + Panic( EVSPanicThreadOpenFailure ); + } + } + } + else + { + iRequireStopping = ETrue; + } + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::CancelDataLoop() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeloopAO::DoCancel() +// ----------------------------------------------------------------------------- +// +void CMultiframeloopAO::DoCancel() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::DoCancel() >>"), RThread().Id().operator TUint())); + if ( iStatus == KRequestPending ) + { + TRequestStatus* pStatus = &iStatus; + User::RequestComplete( pStatus, KErrCancel ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeloopAO::DoCancel() <<"), RThread().Id().operator TUint())); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/src/cmultiframeprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/src/cmultiframeprovider.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1019 @@ +/* +* 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" +* 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: Video Source subsystem. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include + +#include "cmultiframeprovider.h" +#include "cmultiframeloopao.h" +#include "cmultiframedataao.h" + +#include "CVSStillImageDataProvider.h" +#include "cvtimagebitmap.h" + +static const TInt KQcifWidth = 176; +static const TInt KQcifHeight = 144; + +// Default bitmap size is VGA +static const TInt KDefaultBitmapSizeWidth = 640; +static const TInt KDefaultBitmapSizeHeight = 480; + +// MACROS + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ============================ TScalingMediator =============================== + +// ----------------------------------------------------------------------------- +// TScalingMediator::TScalingMediator( ) +// ----------------------------------------------------------------------------- +// +TScalingMediator::TScalingMediator() + { + } + +// ----------------------------------------------------------------------------- +// TScalingMediator::ScalingFinished( ) +// ----------------------------------------------------------------------------- +// +void TScalingMediator::ScalingFinished( TInt aError ) + { + __IF_DEBUG(Print(_L("TScalingMediator::ScalingFinished() >>"))); + iWait->Signal( aError ); + __IF_DEBUG(Print(_L("TScalingMediator::ScalingFinished() error %d <<"), aError)); + } +// ----------------------------------------------------------------------------- +// TScalingMediator::ScalingFinished( ) +// ----------------------------------------------------------------------------- +// +void TScalingMediator::SetWaiter( CVSActiveWait< CMultiframeProvider >* aWait ) + { + iWait = aWait; + } + +// ============================ CMultiframeProvider =============================== + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::NewL( ) +// ----------------------------------------------------------------------------- +// +CMultiframeProvider* CMultiframeProvider::NewL( MMultiframeprovider* aObserver, TDisplayMode aDisplayMode ) + { + __IF_DEBUG(Print(_L("VideoSource: [%d] CMultiframeProvider::NewL() >>"), RThread().Id().operator TUint())); + CMultiframeProvider* self = + new (ELeave) CMultiframeProvider( aObserver, aDisplayMode ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __IF_DEBUG(Print(_L("VideoSource: [%d] CMultiframeProvider::NewL() <<"), RThread().Id().operator TUint())); + return self; + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::CMultiframeProvider( +// MVSDataProviderObserver* aObserver ) +// ----------------------------------------------------------------------------- +// +CMultiframeProvider::CMultiframeProvider( + MMultiframeprovider* aObserver , TDisplayMode aDisplayMode ): iDisplayMode( aDisplayMode ), iObserver( aObserver ), iBlank( EFalse ), iGSImage( EFalse ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::CMultiframeProvider() >>"), RThread().Id().operator TUint())); + //Set target VF size QCIF as default + iTargetSize.SetSize( KQcifWidth , KQcifHeight ); + iVFSize.SetSize( KQcifWidth , KQcifHeight ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::CMultiframeProvider() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::~CMultiframeProvider() +// ----------------------------------------------------------------------------- +// +CMultiframeProvider::~CMultiframeProvider() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::~CMultiframeProvider() >>"), RThread().Id().operator TUint())); + iFs.Close(); + iFreezeCS.Close(); + delete iImageDecoder; iImageDecoder = 0; + delete iVtImageScalerInit; + delete iVtImageScalerScale; + delete iActiveWaitInit; + delete iActiveWaitScale; + delete iActiveWaitInitScale; + delete iConverted; + delete iMask; + delete iTempBM; + delete iDataTimer; + delete iLoopAo; + if ( iScaled != iBuffer1 && iScaled != iBuffer2 ) + { + delete iScaled; + } + delete iGSBitmap; + if ( !iBlank || !iGSImage ) + { + delete iBuffer1; + delete iBuffer2; + } + delete iFirstVfBuf; + delete iSecondVfBuf; + iFreeQueue.Close(); + iDefaultImageFile.Close(); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::~CMultiframeProvider() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ConstructL() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ConstructL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConstructL() >>"), RThread().Id().operator TUint())); + User::LeaveIfError( iFs.Connect() ); + User::LeaveIfError( iFreezeCS.CreateLocal() ); + + // Create waiters and mediators for scaling purposes + iActiveWaitInit = new (ELeave) CVSActiveWait< CMultiframeProvider >( this ); + iActiveWaitScale = new (ELeave) CVSActiveWait< CMultiframeProvider >( this ); + iActiveWaitInitScale = new (ELeave) CVSActiveWait< CMultiframeProvider >( this ); + iInitMediator.SetWaiter( iActiveWaitInitScale ); + iScalingMediator.SetWaiter( iActiveWaitScale ); + iVtImageScalerInit = CVtImageScaler::NewL( iInitMediator, CVtImageScaler::EBilinear ); + iVtImageScalerScale = CVtImageScaler::NewL( iScalingMediator, CVtImageScaler::EBilinear ); + iDataTimer = new (ELeave) CMultiframeDataAO( this ); + iDataTimer->SetObserver( iObserver ); + iLoopAo = new (ELeave) CMultiframeloopAO( this ); + iFirstVfBuf = CVtImageBitmap::NewL( TSize( KQcifWidth >> 2, KQcifHeight >> 2 ), iDisplayMode ); + iSecondVfBuf = CVtImageBitmap::NewL( TSize( KQcifWidth >> 2, KQcifHeight >> 2 ), iDisplayMode ); + iSecondVFBuffer = EFalse; + iFirstVFBuffer = ETrue; + iIsVfStopped = EFalse; + iWaitForConverting = EFalse; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConstructL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::IniatializeGSL() +// +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::IniatializeGSL( const TGeneralSettingsImageType aType ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::IniatializeGSL() >>"), RThread().Id().operator TUint())); + if ( aType == EGSStillImage ) + { + // Open connection to phone server + RPhCltServer phoneClient; + User::LeaveIfError( phoneClient.Connect() ); + CleanupClosePushL( phoneClient ); + + CPhCltImageHandler* stillH = CPhCltImageHandler::NewL(); + CleanupStack::PushL( stillH ); + + // Load images + CPhCltImageParams* imageParams; + imageParams = stillH->CPhCltBaseImageParamsL( EPhCltTypeVTStill ); + CleanupStack::PushL( imageParams ); + User::LeaveIfError( stillH->LoadImages( imageParams ) ); + + // Duplicate to image + if( imageParams->Count() > 0 ) + { + __IF_DEBUG(Print(_L("iImageCount > 0"))); + iGSBitmap = CVtImageBitmap::NewL( imageParams->GetImageL( 0 ) ); + } + else + { + __IF_DEBUG(Print(_L("iImageCount <= 0 -> User::Leave( KErrNotFound )"))); + User::Leave( KErrNotFound ); + } + // Cleanup + CleanupStack::PopAndDestroy( 3 ); // phoneClient, stillH, imageParams + iScaled = CVtImageBitmap::NewL( TSize( KQcifWidth, KQcifHeight ), iDisplayMode ); + + // If bitmap has different display mode than screen, then new bitmap + // is created and image is converted to screen's display mode + if ( iGSBitmap->Bitmap().DisplayMode() != iDisplayMode || + iGSBitmap->Bitmap().ExtendedBitmapType() != KNullUid ) + { + CVtImageBitmap* temp = CVtImageBitmap::NewL( + iGSBitmap->Bitmap().SizeInPixels(), iDisplayMode ); + CleanupStack::PushL( temp ); + // Color conversion is done by blitting it to other bitmap + CFbsBitmapDevice* fbd = CFbsBitmapDevice::NewL( &temp->Bitmap() ); + CleanupStack::PushL( fbd ); + CFbsBitGc* fgc = NULL; + User::LeaveIfError( fbd->CreateContext( fgc ) ); + CleanupStack::PushL( fgc ); + fgc->BitBlt( TPoint(), &iGSBitmap->Bitmap() ); + CleanupStack::PopAndDestroy( 2 ); // fbd, fgc + CleanupStack::Pop(); // temp + delete iGSBitmap; iGSBitmap = NULL; + iGSBitmap = temp; + } + iGSImage = ETrue; + iCount = 1; + iActiveWaitInit->InitializeWaiter( &ConversionFinished ); + iActiveWaitInit->Signal( KErrNone ); + } + else + { // default still image prepared by using file handle + InitializeL( NULL ); + } + iInitialization = ETrue; + iDelay = 0; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::IniatializeGSL() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::IniatializeBlank() +// +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::IniatializeBlankL() + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::IniatializeBlank() >>"), RThread().Id().operator TUint())); + iBlank = ETrue; + iInitialization = ETrue; + iDelay = 0; + iCount = 1; + + CFbsBitmap* tempBitmap = 0; + + CreateBlankBitmapL( + tempBitmap, + TSize( KQcifWidth, KQcifHeight ), + iDisplayMode, +#ifdef _DEBUG + KRgbYellow +#else + KRgbBlack +#endif + ); + + CleanupStack::PushL( tempBitmap ); + iScaled = CVtImageBitmap::NewL( tempBitmap->Handle() ); + CleanupStack::PopAndDestroy(); // tempBitmap + tempBitmap = 0; + + iActiveWaitInit->InitializeWaiter( &BMSScalingFinished ); + iActiveWaitInit->Signal( KErrNone ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::IniatializeBlank() <<"), RThread().Id().operator TUint())); + } + // ----------------------------------------------------------------------------- +// CVSStillImageDataProvider::CreateBlankBitmapL( +// CFbsBitmap*& aBitmap, const TSize& aSize, const TDisplayMode& aMode, +// const TRgb& aColor ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::CreateBlankBitmapL( + CFbsBitmap*& aBitmap, + const TSize& aSize, + const TDisplayMode& aMode, + const TRgb& aColor ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CreateBlankBitmapL() >>"), RThread().Id().operator TUint())); + if( aBitmap ) + { + delete aBitmap; + aBitmap = 0; + } + aBitmap = new (ELeave) CFbsBitmap(); + User::LeaveIfError( aBitmap->Create( aSize, aMode ) ); + CFbsBitmapDevice* fbd = CFbsBitmapDevice::NewL( aBitmap ); + CleanupStack::PushL( fbd ); + CFbsBitGc* fgc = 0; + User::LeaveIfError( fbd->CreateContext( fgc ) ); + CleanupStack::PushL( fgc ); + + fgc->SetPenColor( aColor ); + fgc->SetBrushColor( aColor ); + fgc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + fgc->DrawRect( TRect( aSize ) ); + + CleanupStack::PopAndDestroy( 2 ); // fbd, fgc + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CreateBlankBitmapL() <<"), RThread().Id().operator TUint())); + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::Iniatialize() +// +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::InitializeL( const TFileName* aFileName ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::InitializeL() >>"), RThread().Id().operator TUint())); + // Create bitmaps used for conversion and scaling + iBuffer1 = CVtImageBitmap::NewL( TSize( KQcifWidth, KQcifHeight ), iDisplayMode ); + iBuffer2 = CVtImageBitmap::NewL( TSize( KQcifWidth, KQcifHeight ), iDisplayMode ); + User::LeaveIfError( iFreeQueue.Append( iBuffer1 ) ); + User::LeaveIfError( iFreeQueue.Append( iBuffer2 ) ); + iLoopAo->SetFreeBitmaps( 2 ); + + // Create ICL decoder in its own thread for current file + TInt decodingoptions( + CImageDecoder::TOptions( CImageDecoder::EOptionAlwaysThread | CImageDecoder::EAllowGeneratedMask ) ); + + if ( aFileName ) + { + __IF_DEBUG(Print(_L(" file name exist, creating CImageDecoder"))); + iImageDecoder = CImageDecoder::FileNewL( iFs, *aFileName, (CImageDecoder::TOptions )decodingoptions /*CImageDecoder::EOptionNone*/ ); + } + else + { + __IF_DEBUG(Print(_L(" default vt image file => use phone server"))); + // default VT image file handle obtained from phone server + RPhCltServer phoneClient; + User::LeaveIfError( phoneClient.Connect() ); + __IF_DEBUG(Print(_L(" connected to phone server"))); + CleanupClosePushL( phoneClient ); + CPhCltImageHandler* handler = CPhCltImageHandler::NewL(); + CleanupStack::PushL( handler ); + __IF_DEBUG(Print(_L(" created image handler"))); + User::LeaveIfError( handler->OpenDefaultVtImage( iDefaultImageFile ) ); + decodingoptions &= ~CImageDecoder::EOptionAlwaysThread; + __IF_DEBUG(Print(_L(" creating image decoder"))); + iImageDecoder = CImageDecoder::FileNewL( iDefaultImageFile, ContentAccess::EPlay, (CImageDecoder::TOptions )decodingoptions ); + __IF_DEBUG(Print(_L(" created image decoder"))); + CleanupStack::PopAndDestroy( 2 ); // handler, phoneClient + } + // Use ICL to calculate frame count + iCount = iImageDecoder->FrameCount(); + __IF_DEBUG(Print(_L(" frame count=%d"),iCount)); + //If advanced flags are on show only first frame! + for ( TInt index = 0; index < iCount; ++index ) + { + TFrameInfo frameInfo( iImageDecoder->FrameInfo( index ) ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::InitializeL() frameInfo.iFlags %b >>"), RThread().Id().operator TUint(), frameInfo.iFlags)); + if ( frameInfo.iFlags & TFrameInfo::ELeaveInPlace ) + { + iDelay = 0; + iCount = 1; + } + } + //Set num of frames to viewer AO + iLoopAo->SetFrameCount( iCount ); + //For default loopping frame sequence is disabled + iAnimation = EFalse; + iInitialization = ETrue; + //Start ICL image conversion (decoding) and local scaling + ConvertAndScaleL( KFirstFrameIndx ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::InitializeL() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::SetVFScalingTargetSize() +// +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::SetVFScalingTargetSize( TSize aSize ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::SetVFScalingTargetSize() >>"), RThread().Id().operator TUint())); + iTargetSize = aSize; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::SetVFScalingTargetSize() W %d H %d <<"), RThread().Id().operator TUint(), aSize.iWidth , aSize.iHeight )); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ConvertAndScaleL() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ConvertAndScaleL( TInt aFrameIndex ) + { + // Variables related to Bitmap size + // calculation + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConvertAndScale() aFrameIndex %d>>"), RThread().Id().operator TUint(),aFrameIndex)); + TSize convertedBitmapSize; + TFrameInfo frameInfo( iImageDecoder->FrameInfo( aFrameIndex ) ); + if ( !iInitialization ) + { + TInt delayindex; + delayindex = aFrameIndex - 1; + if ( delayindex < KFirstFrameIndx ) + { + delayindex = ( iCount - 1 ); + } + TFrameInfo delayframeInfo( iImageDecoder->FrameInfo( delayindex ) ); + iDelay = delayframeInfo.iDelay; + } + else + { + iDelay = 1; + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConvertAndScale() iDelay %d>>"), RThread().Id().operator TUint(),iDelay.Int64() )); +#ifdef _DEBUG + TUint threadId( RThread().Id() ); + switch ( frameInfo.iFrameDisplayMode ) + { + case EColor4K: + RDebug::Print( _L( "VideoSource [%d]: FrameDPmode = EColor4K" ), + threadId ); + break; + case EColor64K: + RDebug::Print( _L( "VideoSource [%d]: FrameDPmode = EColor64K" ), + threadId ); + break; + case EColor16M: + RDebug::Print( _L( "VideoSource [%d]: FrameDPmode = EColor16M" ), + threadId ); + break; + case EColor16MU: + RDebug::Print( _L( "VideoSource [%d]: FrameDPmode = EColor16MU" ), + threadId ); + break; + default: + RDebug::Print( _L( "VideoSource [%d]: FrameDPmode = %d" ), + threadId, frameInfo.iFrameDisplayMode ); + break; + } + + RDebug::Print( _L( "VideoSource [%d]: CMultiframeProvider:: frameInfo.iFlags %d" ), + threadId,frameInfo.iFlags ); +#endif // _DEBUG + + // Use imagedecoder to calculate how many times source picture needs to be divided by 2 + // to fit in default (VGA) picture + TInt reductionfactor = iImageDecoder->ReductionFactor( frameInfo.iOverallSizeInPixels, + TSize( KDefaultBitmapSizeWidth, KDefaultBitmapSizeHeight ) ); + if ( iImageDecoder->ReducedSize( frameInfo.iOverallSizeInPixels, reductionfactor, convertedBitmapSize ) ) + { + convertedBitmapSize = frameInfo.iOverallSizeInPixels; + } + +#ifdef _DEBUG + RDebug::Print( _L( "VideoSource [%d]: convertedBitmapSize Width = %d convertedBitmapSize Height = %d" ), + threadId, convertedBitmapSize.iWidth, convertedBitmapSize.iHeight ); +#endif // _DEBUG + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConvertAndScale() iConverted"), RThread().Id().operator TUint())); + iConverted = CVtImageBitmap::NewL( convertedBitmapSize, iDisplayMode ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConvertAndScale() iConverted"), RThread().Id().operator TUint())); +#ifdef _DEBUG + RDebug::Print( _L( "VideoSource [%d]: convBitmap Width = %d convBitmap Height = %d" ), + threadId, iConverted->Size().iWidth, iConverted->Size().iHeight ); +#endif // _DEBUG + + iStartTime.HomeTime(); + if ( iFreeQueue.Count() < 2 ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ConvertAndScale() iFreeQueue.Count() < 2 "), RThread().Id().operator TUint())); + iOldBM = ETrue; + iOldBitmap = iScaled; + } + iScaled = iFreeQueue[ 0 ]; + iFreeQueue.Remove( 0 ); + iLoopAo->RemoveFreeBitmaps( 1 ); + iActiveWaitInit->InitializeWaiter( &CMultiframeProvider::ConversionFinished ); + // Check if masking is supported + if ( frameInfo.iFlags & TFrameInfo::ETransparencyPossible ) + { + // Create mask for bitmap + iMask = new ( ELeave )CFbsBitmap(); + User::LeaveIfError( iMask->Create( convertedBitmapSize, EGray256 )); + iTempBM = CVtImageBitmap::NewL( convertedBitmapSize, iDisplayMode ); + iImageDecoder->Convert( iActiveWaitInit->RequestStatus(), iTempBM->Bitmap(), *iMask, aFrameIndex ); + } + // No mask + else + { + iImageDecoder->Convert( iActiveWaitInit->RequestStatus(), iConverted->Bitmap(), aFrameIndex ); + } + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConvertAndScale() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ConversionFinished( TInt aError ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ConversionFinished( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ConversionFinished() >>"), RThread().Id().operator TUint())); + if ( iCount == 1 || aError ) + { + // delete decoder if not needed any more + // 1) single frame image, no further frames to convert + // 2) error occured, decoder won't be used anyway + __IF_DEBUG(Print(_L(" single frame image => destruct iImageDecoder, err %d"), aError ) ); + delete iImageDecoder; + iImageDecoder = NULL; + } + // no harm done if other than this used, handle would already be 0 + iDefaultImageFile.Close(); + if ( aError == KErrNone ) + { + iActiveWaitInitScale->InitializeWaiter( &BMSScalingFinished ); + if ( iGSImage ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ConversionFinished() scale GS "), RThread().Id().operator TUint())); + iVtImageScalerInit->Scale( *iGSBitmap, *iScaled ); + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ConversionFinished() scale "), RThread().Id().operator TUint())); + // Blit mask into a converted bitmap + if ( iMask ) + { + CGraphicsContext* bitmapcontext = NULL; + CFbsBitmapDevice* bitmapdevice = NULL; + // Create bm device + TRAPD( error, bitmapdevice = CFbsBitmapDevice::NewL( &( iConverted->Bitmap() ) ) ); + if ( error != KErrNone ) + { + iObserver->NotifyImageHandlingError( aError ); + delete bitmapdevice; + delete iTempBM; + delete iMask; + iMask = NULL; + iTempBM = NULL; + return; + } + // Create GC for bm + error = bitmapdevice->CreateContext( bitmapcontext ); + if ( error != KErrNone ) + { + iObserver->NotifyImageHandlingError( aError ); + delete bitmapdevice; + delete bitmapcontext; + delete iTempBM; + delete iMask; + iMask = NULL; + iTempBM = NULL; + return; + } + // Fill destination bitmap with white color + TRect rect( iConverted->Size() ); + bitmapcontext->SetBrushStyle( CGraphicsContext:: ESolidBrush ); + bitmapcontext->SetPenStyle( CGraphicsContext::ESolidPen ); + bitmapcontext->SetBrushColor( KRgbWhite ); + bitmapcontext->SetPenColor( KRgbWhite); + bitmapcontext->DrawRect( rect ); + + // Draw mask and data bitmap into a same destination bm + bitmapcontext->DrawBitmapMasked( iConverted->Size(), &( iTempBM->Bitmap() ), iConverted->Size(), iMask, EFalse ); + delete bitmapdevice; + delete bitmapcontext; + delete iTempBM; + delete iMask; + iMask = NULL; + iTempBM = NULL; + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ConversionFinished() iMask"), RThread().Id().operator TUint())); + } + iVtImageScalerInit->Scale( *iConverted, *iScaled ); + } + } + // Allways inform Decoding problems + else + { + iObserver->NotifyImageHandlingError( aError ); + delete iTempBM; + delete iMask; + iMask = NULL; + iTempBM = NULL; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ConversionFinished() error %d <<"), RThread().Id().operator TUint(), aError)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::BMSScalingFinished( TInt aError ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::BMSScalingFinished( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::BMSScalingFinished() >>"), RThread().Id().operator TUint())); + if ( aError == KErrNone ) + { + VFScalingReady(); + } + else + { +#if 0 + if ( aError != KErrCancel ) // If KErrCancel, then ignore error! + { + iObserver->NotifyImageHandlingError( aError ); + } + //Needs to be deleted also in cancel case + delete iConverted; iConverted = NULL; +#endif + delete iConverted; iConverted = NULL; + iObserver->NotifyImageHandlingError( aError ); + + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::BMSScalingFinished() err %d <<"), RThread().Id().operator TUint(), aError)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::AddBitmapToFreeQueue( CVtImageBitmap* aBitmap ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::AddBitmapToFreeQueue() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::AddBitmapToFreeQueue() >>"), RThread().Id().operator TUint())); + if ( iOldBM ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::AddBitmapToFreeQueue() OLD BM"), RThread().Id().operator TUint())); + iOldBM = EFalse; + iFreeQueue.Append( iOldBitmap ); + } + else + { + iFreeQueue.Append( iScaled ); + } + iLoopAo->SetFreeBitmaps( 1 ); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::AddBitmapToFreeQueue() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::UseSecondVfBuffer() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::UseSecondVfBuffer() + { + iSecondVFBuffer = ETrue; + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::VFScalingReady() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::VFScalingReady() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady() >>"), RThread().Id().operator TUint())); + delete iConverted; iConverted = 0; + + // Calculate frame update delay here! + TTime refpointtime; + refpointtime.HomeTime(); + TTimeIntervalMicroSeconds deltaTime = refpointtime.MicroSecondsFrom( iStartTime ); + iFrameUpdateTime = iDelay.Int64() - deltaTime.Int64(); + if ( iFrameUpdateTime < 0 ) + { + iFrameUpdateTime = 1; + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady() iFrameUpdateTime %d>>"), RThread().Id().operator TUint(), iFrameUpdateTime.Int64())); + // Scale VF to fit in requested size + // size is as default QCIF + if ( iIsVfStopped ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady()VF Stop>>"), RThread().Id().operator TUint())); + if ( iActiveWaitScale->IsActive() ) + { + //ScaleCopy running + //Waiting is OK + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady()ScaleCopy running>>"), RThread().Id().operator TUint())); + } + else + { + //ScaleCopy is not running, Jump ScaleCopy + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady()jump ScaleCopy>>"), RThread().Id().operator TUint())); + iActiveWaitScale->InitializeWaiter( &VFRescalingFinished ); + iActiveWaitScale->Signal(KErrNone); + } + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady()Normal run>>"), RThread().Id().operator TUint())); + iVFUpdate = EFalse; + ScaleCopy( iTargetSize ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFScalingReady() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ScaleCopy( TSize& aSize ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ScaleCopy( TSize& aSize, TBool aVFUpdate ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ScaleCopy() >>"), RThread().Id().operator TUint())); + + iVFUpdate = aVFUpdate; + iVFSize = aSize; + if ( iSecondVFBuffer && !iFirstVFBuffer ) + { + iVFbitmap = iSecondVfBuf; + iSecondVFBuffer = EFalse; + iFirstVFBuffer = ETrue; + } + else + { + iVFbitmap = iFirstVfBuf; + iFirstVFBuffer = EFalse; + } + //If Scaling is ongoing + if ( iActiveWaitScale->IsActive() ) + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ScaleCopy(): active, storing size"), RThread().Id().operator TUint())); + iWantedVFSize = aSize; + } + else + { + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ScaleCopy(): scaling NOW"), RThread().Id().operator TUint())); + iActiveWaitScale->InitializeWaiter( &VFRescalingFinished ); + TInt result( iVFbitmap->Bitmap().Resize( aSize ) ); + __IF_DEBUG(Print(_L("VideoSource [%d]: CMultiframeProvider::ScaleCopy() result %d <<"), RThread().Id().operator TUint(), result)); + if ( result != KErrNone ) + { + iActiveWaitScale->Signal( result ); + } + else + { + iVtImageScalerScale->Scale( *iScaled, *iVFbitmap ); + } + } + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::NextFrame() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::NextFrame() + { + iFreezeCS.Wait(); + iInitialization = EFalse; + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::NextFrame() >>"), RThread().Id().operator TUint())); + + if ( iNumOfConsumers < 1 ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::NextFrame() Consumer < 1>>"), RThread().Id().operator TUint())); + iFreezeCS.Signal(); + return; + } + + if (iCount > 1 && !iActiveWaitInit->IsActive() ) + { + if (iWaitForConverting) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::NextFrame() Because CMultiframeloopAO::RunL is executing, so Signal is not needed"), RThread().Id().operator TUint())); + } + else + { + iLoopAo->Signal(); + } + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::NextFrame() <<"), RThread().Id().operator TUint())); + iFreezeCS.Signal(); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::IncreaseDataConsumer() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::IncreaseDataConsumer() + { + iFreezeCS.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::IncreaseDataConsumer() >>"), RThread().Id().operator TUint())); + ++iNumOfConsumers; + iFreezeCS.Signal(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::IncreaseDataConsumer() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::DecreaseDataConsumer() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::DecreaseDataConsumer() + { + iFreezeCS.Wait(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::DecreaseDataConsumer() >>"), RThread().Id().operator TUint())); + --iNumOfConsumers; + if ( iNumOfConsumers < 1 ) + { + iLoopAo->CancelDataLoop(); + iDataTimer->CancelTimeLoop(); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::DecreaseDataConsumer() <<"), RThread().Id().operator TUint())); + iFreezeCS.Signal(); + } +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ScaleVF( const TSize& aSize ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ScaleVF( const TSize& aSize ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScaleVF() >>"), RThread().Id().operator TUint())); + iActiveWaitScale->InitializeWaiter( &VFRescalingFinished ); + TInt result( iVFbitmap->Bitmap().Resize( aSize ) ); + ClearVFScalingTargetSize(); + if ( result != KErrNone ) + { + iActiveWaitScale->Signal( result ); + } + else + { + iVtImageScalerScale->Scale( *iScaled, *iVFbitmap ); + } + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScaleVF() result %d <<"), RThread().Id().operator TUint(), result)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::VFRescalingFinished( TInt aError ) +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::VFRescalingFinished( TInt aError ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFRescalingFinished() >>"), RThread().Id().operator TUint())); + if ( aError == KErrNone ) + { + if ( iWantedVFSize != TSize() ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFRescalingFinished() REScaling needed"), RThread().Id().operator TUint())); + ScaleVF( iWantedVFSize ); + ClearVFScalingTargetSize(); + } + else + { + iDataTimer->CancelTimeLoop(); + + if ( !iIsVfStopped && !iVFUpdate ) + { + //Normally, VF and VS work + iVFCurrent = iVFbitmap; + iYUVBitMap = iScaled; + iDataTimer->LocalBuffer(iVFCurrent); + iDataTimer->RemoteBuffer(iYUVBitMap); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScalecopyRemoteAndUpdate() normal, iFrameUpdateTime %d>>"), RThread().Id().operator TUint(), + iFrameUpdateTime.Int64())); + iDataTimer->Activate(iFrameUpdateTime, iInitialization, iVFUpdate); + } + else if ( iIsVfStopped && !iVFUpdate ) + { + //VF doesn't work. + iYUVBitMap = iScaled; + iDataTimer->RemoteBuffer(iYUVBitMap); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScalecopyRemoteAndUpdate() VF Stop, iFrameUpdateTime %d>>"), RThread().Id().operator TUint(), + iFrameUpdateTime.Int64())); + iDataTimer->Activate( iFrameUpdateTime, iInitialization, iVFUpdate); + } + else if ( iIsVfStopped && iVFUpdate ) + { + //VF restart + iIsVfStopped = EFalse; + iVFUpdate = EFalse; + iVFCurrent = iVFbitmap; + iYUVBitMap = iScaled; + iDataTimer->LocalBuffer(iVFCurrent); + iDataTimer->RemoteBuffer(iYUVBitMap); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScalecopyRemoteAndUpdate() VF Restart iFrameUpdateTime 1>>"), + RThread().Id().operator TUint())); + iDataTimer->Activate(1, iInitialization, iVFUpdate); + } + else + { + //maybe this condition never execute. + iVFCurrent = iVFbitmap; + iDataTimer->LocalBuffer(iVFCurrent); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ScalecopyRemoteAndUpdate() last one, iFrameUpdateTime %d>>"), RThread().Id().operator TUint(), + iFrameUpdateTime.Int64())); + iDataTimer->Activate( 1, iInitialization, iVFUpdate); + } + } + } +#if 0 + else if ( ( aError == KErrCancel ) ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFRescalingFinished() CANCEL"), RThread().Id().operator TUint())); + } + else if( aError != KErrCancel ) // If KErrCancel, then ignore error! + { + iObserver->NotifyImageHandlingError( aError ); + } +#endif + else + { + iObserver->NotifyImageHandlingError( aError ); + } + + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::VFRescalingFinished() err %d <<"), RThread().Id().operator TUint(), aError)); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::IsVFStopped() +// ----------------------------------------------------------------------------- +// +TBool CMultiframeProvider::IsVFStopped() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::IsVFStopped() >>"), RThread().Id().operator TUint())); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::IsVFStopped() <<"), RThread().Id().operator TUint())); + return iIsVfStopped; + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::SetVFStop() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::SetVFStop() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::SetVFStop() >>"), RThread().Id().operator TUint())); + iIsVfStopped = ETrue; + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::SetVFStop() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::WaitForConverting() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::WaitForConverting() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::WaitForConverting() >>"), RThread().Id().operator TUint())); + iWaitForConverting = ETrue; + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::WaitForConverting() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::WaitForConverting() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ReleaseForConverting() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ReleaseForConverting() >>"), RThread().Id().operator TUint())); + iWaitForConverting = EFalse; + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ReleaseForConverting() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::ClearVFScalingTargetSize() +// ----------------------------------------------------------------------------- +// +void CMultiframeProvider::ClearVFScalingTargetSize() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ClearVFScalingTargetSize() >>"), RThread().Id().operator TUint())); + iWantedVFSize = TSize(); + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::ClearVFScalingTargetSize() <<"), RThread().Id().operator TUint())); + } + +// ----------------------------------------------------------------------------- +// CMultiframeProvider::CancelInitializing() +// ----------------------------------------------------------------------------- +// +TBool CMultiframeProvider::CancelInitializing() + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CancelInitializing() >>"), RThread().Id().operator TUint())); + TBool lResult = EFalse; + + if ( NULL == iImageDecoder ) + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CancelInitializing() iImageDecoder is NULL ==="), RThread().Id().operator TUint())); + // In this condition, Convert is already finished + if ( iVtImageScalerInit->IsActive() ) + { + __IF_DEBUG(Print(_L("VideoSource[%d] Line[%d]: CMultiframeProvider::CancelInitializing() iVtImageScalerInit->Cancel ==="), + RThread().Id().operator TUint(), __LINE__)); + iVtImageScalerInit->Cancel(); + } + else if ( iActiveWaitInitScale->IsActive() ) + { + __IF_DEBUG(Print(_L("VideoSource[%d] Line[%d]: CMultiframeProvider::CancelInitializing() iActiveWaitInitScale->Cancel ==="), + RThread().Id().operator TUint(), __LINE__)); + iActiveWaitInitScale->Cancel(); + } + else if ( iVtImageScalerScale->IsActive() ) + { + __IF_DEBUG(Print(_L("VideoSource[%d] Line[%d]: CMultiframeProvider::CancelInitializing() iVtImageScalerScale->Cancel ==="), + RThread().Id().operator TUint(), __LINE__)); + iVtImageScalerScale->Cancel(); + } + else if ( iActiveWaitScale->IsActive() ) + { + __IF_DEBUG(Print(_L("VideoSource[%d] Line[%d]: CMultiframeProvider::CancelInitializing() iActiveWaitScale->Cancel ==="), + RThread().Id().operator TUint(), __LINE__)); + iActiveWaitScale->Cancel(); + } + else + { + //In this condition, the convert,scale,copyScale were finished, + //so do nothing, Waiting for InitializeReady() + __IF_DEBUG(Print(_L("VideoSource[%d] Line[%d]: CMultiframeProvider::CancelInitializing() Nothong to do,wait finish ==="), + RThread().Id().operator TUint(), __LINE__)); + } + } + else + { + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CancelInitializing() cancel convert ==="), RThread().Id().operator TUint())); + //Convert is not finished, so we can cancel it, and return ETrue + iImageDecoder->Cancel(); + lResult = ETrue; + } + + __IF_DEBUG(Print(_L("VideoSource[%d]: CMultiframeProvider::CancelInitializing() <<"), RThread().Id().operator TUint())); + return lResult; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004 - 2006 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 for Video Telephony protocol subsystem. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +// Include components' bld.inf files +#include "../DisplaySink/group/bld.inf" +#include "../VideoSource/group/bld.inf" + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/bwins/videotelprotou.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/bwins/videotelprotou.def Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,13 @@ +EXPORTS + ?DeleteAudioSink@VTProtocolFactory@@SAHPAVMVTAudioSink@@@Z @ 1 NONAME ; int VTProtocolFactory::DeleteAudioSink(class MVTAudioSink *) + ?CreateAudioSink@VTProtocolFactory@@SAPAVMVTAudioSink@@XZ @ 2 NONAME ; class MVTAudioSink * VTProtocolFactory::CreateAudioSink(void) + ?CreateCommServerL@VTProtocolFactory@@SAPAVMCommServer@@ABVTDesC16@@H@Z @ 3 NONAME ; class MCommServer * VTProtocolFactory::CreateCommServerL(class TDesC16 const &, int) + ?CreateUserInputIndication@VTProtocolFactory@@SAPAVMVTUserInput@@W4TUserInputType@@E@Z @ 4 NONAME ; class MVTUserInput * VTProtocolFactory::CreateUserInputIndication(enum TUserInputType, unsigned char) + ?CreateSessionCommandL@VTProtocolFactory@@SAPAVMVtSessionCommand@@PAVMVtProtocolHandler@@HAAW4TVt3G324MSupported@@@Z @ 5 NONAME ; class MVtSessionCommand * VTProtocolFactory::CreateSessionCommandL(class MVtProtocolHandler *, int, enum TVt3G324MSupported &) + ?DeletAudioSource@VTProtocolFactory@@SAHPAVMVTAudioSource@@@Z @ 6 NONAME ; int VTProtocolFactory::DeletAudioSource(class MVTAudioSource *) + ?GetAudioConfigCommandL@VTProtocolFactory@@SAPAVMVtAudioConfigCommand@@PAVMVTAudioSink@@@Z @ 7 NONAME ; class MVtAudioConfigCommand * VTProtocolFactory::GetAudioConfigCommandL(class MVTAudioSink *) + ?CreateAudioSource@VTProtocolFactory@@SAPAVMVTAudioSource@@XZ @ 8 NONAME ; class MVTAudioSource * VTProtocolFactory::CreateAudioSource(void) + ?DeleteCommServerL@VTProtocolFactory@@SAXPAVMCommServer@@@Z @ 9 NONAME ; void VTProtocolFactory::DeleteCommServerL(class MCommServer *) + ?DeleteUserInputIndication@VTProtocolFactory@@SAXPAVMVTUserInput@@@Z @ 10 NONAME ; void VTProtocolFactory::DeleteUserInputIndication(class MVTUserInput *) + ?DeleteSessionCommand@VTProtocolFactory@@SAXPAVMVtSessionCommand@@@Z @ 11 NONAME ; void VTProtocolFactory::DeleteSessionCommand(class MVtSessionCommand *) + diff -r 000000000000 -r ed9695c8bcbe vtprotocols/eabi/videotelprotou.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/eabi/videotelprotou.def Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,13 @@ +EXPORTS + _ZN17VTProtocolFactory15CreateAudioSinkEv @ 1 NONAME + _ZN17VTProtocolFactory15DeleteAudioSinkEP12MVTAudioSink @ 2 NONAME + _ZN17VTProtocolFactory16DeletAudioSourceEP14MVTAudioSource @ 3 NONAME + _ZN17VTProtocolFactory17CreateAudioSourceEv @ 4 NONAME + _ZN17VTProtocolFactory17CreateCommServerLERK7TDesC16i @ 5 NONAME + _ZN17VTProtocolFactory17DeleteCommServerLEP11MCommServer @ 6 NONAME + _ZN17VTProtocolFactory20DeleteSessionCommandEP17MVtSessionCommand @ 7 NONAME + _ZN17VTProtocolFactory21CreateSessionCommandLEP18MVtProtocolHandleriR18TVt3G324MSupported @ 8 NONAME + _ZN17VTProtocolFactory22GetAudioConfigCommandLEP12MVTAudioSink @ 9 NONAME + _ZN17VTProtocolFactory25CreateUserInputIndicationE14TUserInputTypeh @ 10 NONAME + _ZN17VTProtocolFactory25DeleteUserInputIndicationEP12MVTUserInput @ 11 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtprotocols/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2004 - 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: vtprotocols build information file. +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_TESTEXPORTS + +PRJ_EXPORTS + + +../inc/mvtprotocolhandler.h |../../inc/mvtprotocolhandler.h + + +PRJ_MMPFILES + +../group/videotelproto.mmp + + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/group/videotelproto.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/group/videotelproto.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,67 @@ +/* +* Copyright (c) 2004 - 2006 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 is project specification file for the Vtprotocols. +* +*/ + + +#include + +// Capability assignment. +CAPABILITY CAP_GENERAL_DLL + +// default vendor id +VENDORID VID_DEFAULT + +TARGET videotelproto.dll +TARGETTYPE dll +UID 0x1000008d 0x20021182 + + +SOURCEPATH ../src + +SOURCE cdatasinkproxy.cpp +SOURCE cdatasourceproxy.cpp +SOURCE caudioconfighandler.cpp +SOURCE ch324confighandler.cpp +SOURCE csessionhandler.cpp +SOURCE cvideoconfighandler.cpp +SOURCE cvtuserinput.cpp +SOURCE vtprotocolfactory.cpp + +DOCUMENT ../../group/bld.inf + +USERINCLUDE ../inc/ + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../inc +SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/mmf/server + +LIBRARY euser.lib +LIBRARY ws32.lib + +LIBRARY commonengine.lib +LIBRARY mediaclientaudio.lib + + + +DEBUGLIBRARY vtlogger.lib + +LIBRARY pv2waysymbianadapter.lib +LIBRARY mmfdevsound.lib + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/caudioconfighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/caudioconfighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2004-2006 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 CAUDIOCONFIGHANDLER_H +#define CAUDIOCONFIGHANDLER_H +NONSHARABLE_CLASS( TAudioConfigHandler ) : public MPVAudioOutputControlObserver + { + public: + /** + * Constructor. + */ + TAudioConfigHandler( MVtProtocolHandler* aProtocolHandler); + + /** + * Signals completion of the audio output control command. + * @param aId The command id of the completed command. + * @param aCmd The command type. + * @param aContextData The context data passed in with the command. + * @param aStatus The command completion status. + **/ + virtual void AudioOutputControlCommandComplete(TPVCommandId aId + ,TPVAudioOutputControlCommand aCmd + ,TAny *aContextData + ,TInt aStatus); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CAudioConfigCommand ) : public CBase, + public MVtAudioConfigCommand + { + public: + + /** + * Constructor. + */ + CAudioConfigCommand(MPVAudioOutputControl* aAudioCtrl); + + /** + * Destructor. + */ + ~CAudioConfigCommand(); + + /** + * Method to set the playback volume to the specified value. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aNewVolume + * An input parameter to hold the value for the requested playback volume. + * + * @returns TInt + * Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt SetAudioVolumeL(TInt aVolume); + + /** + * Method to get the maximum valid value for the playback volume. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aMaxVolume + * An output parameter to hold the value for the maximum valid playback volume. + * Note that the parameter should not be used until the callback indicates that the + * method has completed. + * + * @returns TInt + * Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt GetMaxAudioVolumeL(TInt& aMaxVolume); + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + private: + MPVAudioOutputControl* iAudioCtrl; + TAudioConfigHandler* iAudioConfigHandler; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/ccommserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/ccommserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2004-2006 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 CCOMMSERVER_H +#define CCOMMSERVER_H +NONSHARABLE_CLASS( CCommServer ) : public CBase, + public MCommServer + { + public: + MPVCommServerBase* iComm; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/cdatasinkproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/cdatasinkproxy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,270 @@ +/* +* Copyright (c) 2004-2006 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 CDATASINKPROXY_H +#define CDATASINKPROXY_H +NONSHARABLE_CLASS( CPVDisplaySinkNodeProxy ) : public CBase, + public MVTVideoSource + { + public: //New + /** + * Constructor . + */ + CPVDisplaySinkNodeProxy(); + /** + * Set new supplier. + * @param aSupplier + */ + void SetSupplier(MPVDataSourceBase* aSupplier); + public: //From MVTVideoSource + /** + * Method called by a data sink to pass back an emptied buffer to the source + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data source actively requests a consumer ie a data sink + * to empty a buffer by calling the data sinks EmptyBufferL. + * When the data source gets this callback it knows that the buffer has been emptied and can be reused + * + * @param "aBuffer" + * The buffer that has been emptied by a data sink and is now available for reuse + */ + virtual void BufferEmptiedL(CMMFBuffer* aBuffer); + private: + MPVDataSourceBase* iSupplier; + }; + +NONSHARABLE_CLASS( CDisplaySinkProxy ) : public CBase, + public MPVDataSink, + public MPVVideoOutput + { + public: //From MPVPluginBase + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return Multimedia types supported by the data source/sink. The reference + * is valid until the MPVPluginBase derived object is destroyed. + **/ + virtual const RArray& GetMultimediaTypesL() const; + /** + * This API is to allow for extensibility of the plugin interface. + * It allows a caller to ask for all UUIDs associated with a particular MIME type. + * If interfaces of the requested MIME type are found within the plugin, they are added + * to the UUIDs array. + * + * Also added to the UUIDs array will be all interfaces which have the requested MIME + * type as a base MIME type. This functionality can be turned off. + * + * @param aMimeType The MIME type of the desired interfaces + * @param aUuids An array to hold the discovered UUIDs + * @param aExactUuidsOnly Turns on/off the retrival of UUIDs with aMimeType as a base type + **/ + virtual void QueryUUID( const TPVMIMEType& aMimeType, RArray& aUuids, bool aExactUuidsOnly = false ); + /** + * This API is to allow for extensibility of the plugin interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aUuid The UUID of the desired interface + * @param aInterfacePtr The output pointer to the desired interface + **/ + virtual void QueryInterface( const TPVUuid& aUuid, TPVInterfacePtr& aInterfacePtr ); + /** + * This API is used to provide a timebase for plugins that deal with synchronized media data + **/ + virtual void SetTimebaseL(MPVSymbianTimebaseInterface* aTimebase); + public: //From MPVDataSinkBase + /** + * Method called by a MDataSource to request the data sink to empty aBuffer of data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data sink is passively waiting for requests from a supplier ie a data source + * to empty a buffer. The data sink must call the BufferEmptiedL member on aSupplier when it has emptied + * the buffer of it's data - the data sink can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The full buffer that needs emptying of it's data + * + * @param "aSupplier" + * The data source that supplied the data. The data sink needs this to make the BufferEmptiedL + * callback on aSupplier to indicate to the data source that the data sink has finished with the buffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data + */ + virtual void EmptyBufferL(CMMFBuffer* aBuffer, MPVDataSourceBase* aSupplier, TMediaId aMediaId); + /** + * Method called by a data source to pass back an filled buffer to the sink + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data sink actively requests a supplier ie a data source + * to fill a buffer by calling the data sources FillBufferL. + * When the data sink gets this callback it knows that the buffer has been filled and is ready to be emptied + * + * @param "aBuffer" + * The buffer that has been filled by a data source and is now available for processing + */ + virtual void BufferFilledL(CMMFBuffer* aBuffer); + /** + * Method to indicate whether the data sink can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data sink can create a buffer else EFalse + */ + virtual TBool CanCreateSinkBuffer(); + /** + * Returns a buffer created by the data sink + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data. + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the sink + * and should be used in preference to the source buffer provided the source buffer + * is also not a reference buffer. + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSinkBufferL(TMediaId aMediaId, TBool &aReference ); + /** + * Method to 'logon' the data sink to the same thread that sink will be consuming data in. + * + * This method may be required as the thread that the data sink was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SinkThreadLogon rather than in the creation + * of the data sink. + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * initialisation is required and/or the data sink can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SinkThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ); + /** + * Method to 'logoff' the data sink from the same thread that sink consumes data in. + * + * This method may be required as the thread that the data sink is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SinkThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * releasing of resources is required. + */ + virtual void SinkThreadLogoff(); + /** + * Method to 'prime' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific 'priming' is required + */ + virtual TInt SinkPrimeL(); + /** + * Method to 'play' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SinkPlayL(); + /** + * Method to 'pause' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'pause' + */ + virtual TInt SinkPauseL(); + + /** + * Method to 'stop' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'stop' + */ + virtual TInt SinkStopL(); + public: //From MPVVideoOutput + + /** + * Set the video frame format. This must be from the list of supported formats. + * @param "aFormat" A mime string describing the video frame format. + * @exception Can leave with one of the system wide error codes + **/ + virtual void SetFormatL(const TDesC8& aFormat); + + /** + * Set the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void SetVideoFrameSizeL(const TSize& aSize); + + /** + * Get the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void GetVideoFrameSizeL(TSize& aSize) const; + public: + /** + * Constructor. + */ + CDisplaySinkProxy(MVTVideoSink* aDisplaySink); + + /** + * ConstructL + */ + void ConstructL(); + + /** + * NewL + */ + static CDisplaySinkProxy* NewL(MVTVideoSink* aDisplaySink); + /** + * Get pointer object of data sink. + * @return member variant:iDisplaySink + */ + MVTVideoSink* DisplaySink() { return iDisplaySink; } + private: + MVTVideoSink* iDisplaySink; + CPVDisplaySinkNodeProxy* iDSNodeProxy; + + }; + +NONSHARABLE_CLASS( CAudioSinkProxy ) : public CBase, + public MVTAudioSink + { + public: + MPVDataSink* iAudioSink; + }; + +#endif +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/cdatasourceproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/cdatasourceproxy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,322 @@ +/* +* Copyright (c) 2004-2006 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 CDATASOURCEPROXY_H +#define CDATASOURCEPROXY_H +NONSHARABLE_CLASS( CPVCameraSourceNodeProxy ) : public CBase, + public MAsyncEventHandler, + public MVTVideoSink + { + public: //From MAsyncEventHandler + /** + * Send event to client. + * @param aEvent + */ + virtual TInt SendEventToClient(const TMMFEvent &aEvent); + public: //From MVTVideoSink + + /** + * Method called by a data source to pass back an filled buffer to the sink. + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data sink actively requests a supplier ie a data source + * to fill a buffer by calling the data sources FillBufferL. + * When the data sink gets this callback it knows that the buffer has been filled and is ready to be emptied + * + * @param "aBuffer" + * The buffer that has been filled by a data source and is now available for processing + */ + void BufferFilledL(CMMFBuffer* aBuffer); + + public: //New + /** + * Constructor. + */ + CPVCameraSourceNodeProxy(); + + /** + * Set consumer object. + * @param aConsumer new object + */ + void SetConsumer(MPVDataSinkBase* aConsumer); + private: + MPVDataSinkBase* iConsumer; + }; + +NONSHARABLE_CLASS( CVideoSourceProxy ) : public CBase, + public MPVDataSource, + public MPVVideoInput + { + public: //From MPVPluginBase + + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return Multimedia types supported by the data source/sink. The reference + * is valid until the MPVPluginBase derived object is destroyed. + **/ + virtual const RArray& GetMultimediaTypesL() const; + + /** + * This API is to allow for extensibility of the plugin interface. + * It allows a caller to ask for all UUIDs associated with a particular MIME type. + * If interfaces of the requested MIME type are found within the plugin, they are added + * to the UUIDs array. + * + * Also added to the UUIDs array will be all interfaces which have the requested MIME + * type as a base MIME type. This functionality can be turned off. + * + * @param aMimeType The MIME type of the desired interfaces + * @param aUuids An array to hold the discovered UUIDs + * @param aExactUuidsOnly Turns on/off the retrival of UUIDs with aMimeType as a base type + **/ + virtual void QueryUUID( const TPVMIMEType& aMimeType, RArray& aUuids, bool aExactUuidsOnly = false ); + + /** + * This API is to allow for extensibility of the plugin interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aUuid The UUID of the desired interface + * @param aInterfacePtr The output pointer to the desired interface + **/ + virtual void QueryInterface( const TPVUuid& aUuid, TPVInterfacePtr& aInterfacePtr ); + + /** + * This API is used to provide a timebase for plugins that deal with synchronized media data + **/ + virtual void SetTimebaseL(MPVSymbianTimebaseInterface* aTimebase); + public: //From MPVDataSourceBase + + /** + * Method called by a MDataSink to request the data source to fill aBuffer with data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data source is passively waiting for requests from a consumer ie a data sink + * to fill a buffer. The data source must call the BufferFilledL member on aConsumer when it has filled + * the buffer with data - the data source can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The buffer that needs filling with data + * + * @param "aConsumer" + * The data sink that consumes the data. The data source needs this to make the BufferFilledL + * callback on aConsumer when the data source has completed filling the aBuffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + */ + virtual void FillBufferL(CMMFBuffer* aBuffer, MPVDataSinkBase* aConsumer, TMediaId /*aMediaId*/); + + /** + * Returns a buffer created by the data source. + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer + * is also not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer *CreateSourceBufferL(TMediaId aMediaId, TBool &aReference); + + /** + * Returns a buffer created by the data source. + * + * This is a virtual function that a derived class can implement. + * This can be used in preference to the above CreateSourceBufferL method in cases where + * the source buffer creation has a dependancy on the sink buffer + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aSinkBuffer" + * The sink buffer the nature of which may influence the creation of the source buffer + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer is not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer *CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer &aSinkBuffer, TBool &aReference); + + /** + * Method to 'logon' the data source to the same thread that source will be supplying data in. + * + * This method may be required as the thread that the data source was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SourceThreadLogon rather than in the creation + * of the data source. + * + * This is a virtual function that a derrived data source can implement if any thread specific + * initialisation is required and/or the data source can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SourceThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * Method to 'logoff' the data source from the same thread that source supplies data in. + * + * This method may be required as the thread that the data source is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SourceThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data source can implement if any thread specific + * releasing of resources is required. + */ + virtual void SourceThreadLogoff(); + + /** + * Method to 'prime' the data source. + * + * This is a virtual function that a derrived data source can implement if + * any data source specific 'priming' is required + */ + virtual TInt SourcePrimeL(); + + /** + * Method to 'play' the data source. + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SourcePlayL(); + + /** + * Method to 'pause' the data source. + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'pause' + */ + virtual TInt SourcePauseL(); + + /** + * Method to 'stop' the data source. + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'stop' + */ + virtual TInt SourceStopL(); + + /** + * Method called by a data sink to pass back an emptied buffer to the source + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data source actively requests a consumer ie a data sink + * to empty a buffer by calling the data sinks EmptyBufferL. + * When the data source gets this callback it knows that the buffer has been emptied and can be reused + * + * @param "aBuffer" + * The buffer that has been emptied by a data sink and is now available for reuse + */ + virtual void BufferEmptiedL(CMMFBuffer* aBuffer); + + /** + * Method to indicate whether the data source can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data source can create a buffer else EFalse + */ + virtual TBool CanCreateSourceBuffer(); + public: //From MPVVideoInput + + /** + * Set the video frame format. This must be from the list of supported formats. + * @param "aFormat" The mime string describing the video frame format. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFormatL(const TDesC8& aFormat); + + /** + * Set the video frame rate. This must be within the range of supported frame rates + * for the current frame size. + * @param "aFrameRate" The video frame rate to set. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFrameRateL(TReal32 aFrameRate); + + /** + * Set the video frame size. + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void SetVideoFrameSizeL(const TSize& aSize); + + /** + * Get the video frame size. + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void GetVideoFrameSizeL(TSize& aSize) const; + public: //new + /** + * Constructor. + */ + CVideoSourceProxy(MVTVideoSource* aVideoSource); + /** + * ConstructL. + */ + void ConstructL( ); + + /** + * NewL. + */ + static CVideoSourceProxy* NewL(MVTVideoSource* aVideoSource); + + /** + * Get member variant. + * @return memeber variant:iVideoSource + */ + MVTVideoSource* VideoSource() { return iVideoSource; } + private: + MVTVideoSource* iVideoSource; + CPVCameraSourceNodeProxy* iCameraSourceNodeProxy; + }; + +NONSHARABLE_CLASS( CAudioSourceProxy ) : public CBase, + public MVTAudioSource + { + public: + MPVDataSource* iAudioSource; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/ch324confighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/ch324confighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2004-2006 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 CH324ConfigHandler_H +#define CH324ConfigHandler_H +NONSHARABLE_CLASS( TH324ConfigHandler ) : public MPVH324MConfigSymbianObserver + { + public: + + /** + * Constructor. + */ + TH324ConfigHandler(MVtProtocolHandler* aProtocolHandler); + + /** + Handle an event that has been generated. + + @param aResponse The response to a previously issued command. + */ + virtual void MPVH324MConfigCommandCompletedL(const CPVCmdResponse& aResponse); + + /** + Handle an information event. + + @param aEvent + */ + virtual void MPVH324MConfigInformationalEventL(const CPVAsyncInformationalEvent& aEvent); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CH324ConfigCommand ): public CBase, + public MVtH324ConfigCommand + { + public: + /** + * Destructor. + */ + ~CH324ConfigCommand(); + + /** + * Sets the vendor identification data. This does not cause the stack to issue a vendor identifiation request. + * Set to NULL to disable sending vendor id. If set to a valid parameter before Connect, it will cause the stack + * to automatically send it along with the TCS message. + * @param cc + * T35 Country code + * @param ext + * T35 Extension + * @param mc + * T35 Manufacturer code + * @param aProduct + * Product number + * @param aVersion + * Version number + **/ + virtual TInt SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion); + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is a request to the remote encoder to adjust its encoding in accordance with the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff); + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is an indication to the remote decoder that the local encoder has adjusted its encoding parameters + * according to the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff); + + /** + * This API allows the user to specify the supported resolutions for video for transmit and receive. + * + **/ + virtual TInt SetSupportedResolutions( ); + /** + * This API allows the user to set options for fast call setup procedures + **/ + virtual TInt SetFastCsupOptions( ); + + /** + * Causes the protocol to send the specified user input to the remote terminal using + * control channel. The user input can be either DTMF ot Alphanumeric + * @param user_input A pointer to MVTUserInput + * @returns A unique command id for asynchronous completion + **/ + virtual TInt SendUserInputMessageL(MVTUserInput& user_input); + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler the observer for command status and unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + + /** + * Get member variant. + */ + MPVH324MConfig*& PVH324ConfigInterface() { return iH324Config; } + private: + MPVH324MConfig* iH324Config; + TH324ConfigHandler* iH324ConfigHandler; + }; +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/csessionhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/csessionhandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,254 @@ +/* +* Copyright (c) 2004-2006 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 CSESSIOHANDLER_H +#define CSESSIOHANDLER_H +NONSHARABLE_CLASS( TSessionHandler ) : public MPVCommandStatusObserver, + public MPVInformationalEventObserver, + public MPVErrorEventObserver + { + public: + + /** + Handle an event that has been generated. + + @param "aResponse" "The response to a previously issued command." + */ + virtual void CommandCompletedL(const CPVCmdResponse& aResponse); + + /** + * Handle an informational event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleInformationalEventL(const CPVAsyncInformationalEvent& aEvent); + + /** + * Handle an error event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleErrorEventL(const CPVAsyncErrorEvent& aEvent); + public: + /** + * Constructor. + */ + TSessionHandler(MVtProtocolHandler* aProtocolHandler); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CSessionCommand ): public CBase, + public MVtSessionCommand + { + public: + /** + * Contructor. + */ + CSessionCommand(TSessionHandler* aSessionHandler, MPV2WaySymbianInterface* aPv2Way); + + /** + * Destructor. + */ + ~CSessionCommand(); + + /** + * This function is valid only in the EIdle state. It is a no-op when + * invoked in any other state. It causes the protocol to transition + * to the ESetup state. The terminal remains in the EInitializing state during + * the transition. + * + * + * @param aInitInfo + * A reference to a TVtInitInfo structure which set Mona on and off + * + * @leave This method can leave with one of the following error codes + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt InitProtocolL(TVtInitInfo& aInitInfo); + + /** + * For an incoming track (MVTVideoSink) this function pauses sending + * media to the sink (output device) and stops the sink. It then does the protocol + * negotiations with the remote terminal to pause the logical channel for + * the specified track. + * + * For outgoing, it pauses the sending of media from the source and calls Stop() on the + * source. It also performs any necessary protocol negotiations with the remote terminal. + * EVtCommandPause will be sent to the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt PauseVideoL(MVTVideoSource& aDataSource); + virtual TInt PauseVideoL(MVTVideoSink& aDataSink); + virtual TInt PauseAudioL(MVTAudioSource& aAudioSource); + + /** + * Resume a previously paused incoming or outgoing track. For incoming, + * this function starts resumes playing out the media to the appropriate + * sink based on the current settings. For outgoing it resumes encoding + * and sending media from the source. + * + * EVtCommandResume will be invoked will be invoked on the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResumeVideoL(MVTVideoSource& aDataSource); + virtual TInt ResumeVideoL(MVTVideoSink& aDataSink); + virtual TInt ResumeAudioL(MVTAudioSource& aAudioSource); + + /** + * This function is valid only in the ESetup and EInitializing state. It is a + * no-op when invoked in the EIdle state and returns KPVErrInvalidState + * if invoked in any other state. + * + * It causes the protocol to transition back to the EIdle state. The + * terminal remains in the EResetting state during the transition. + * + * While resetting, the protocol de-allocates all resources resources that + * had been previously allocated. When it completes, ResetComplete is called + * and the protocol reverts to the EIdle state. + * + * @leave This method can leave with one of the following error codes + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResetProtocolL(); + + /** + * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote + * terminal based on the specified options and capabilities. + * The EVtCommandConnect command completion event will be passed to the observer + * when connect completes. + * Details about the negotiated session may be obtained by calling the GetSessionParamsL API. + * GetSessionParamsL may be called after call setup is started to get the list of available channels + * and their capabilities. + * Incoming tracks may be opened before ConnectL completes and will be indicated via the + * EVtIndicationIncommingTrack event. + * + * @param aComm + * An optional pointer to a comm server to provide comm source and sink end-points. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ConnectToProtocolL(MCommServer* aComm); + + /** + * Allows an application to provide a media source to be associated with a logical channel + * of communication with the peer. Sources should be added after the EVtIndicationOutgoingTrack + * indication is received for a newly established logical channel. The media type and + * channel id associated with the logical channel are specified as part of the indication. + * This function accepts a MVtVideoSource which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * Data sources could be of the following types: + * a)raw media sources like camera, microphone etc. + * b)sources of compressed data like file, gateway component etc. + * + * @param aChannelId + * Indicates the channel id to be associated with this source. + * @param aDataSource + * reference to the data source + * @leave This method can leave with one of the following error codes + * KErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @return A unique command id for asynchronous completion + */ + virtual TInt AddVideoSourceL(const TUint aChannelId, MVTVideoSource &aDataSource); + virtual TInt AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource); + + /** + * Allows an application to provide a media sink for rendering an incoming media bitstream in a + * logical channel of communication with the peer. + * AddDataSinkL can be called only for established incoming logical channels identified by a unique + * channel id. + * Regular incoming channels are established by the peer and are + * indicated using the EVtIndicationIncomingTrack indication. + * This function takes in PV extension to MVtVideoSink or MVtAudioSink which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * EVtCommandAddDataSink event is sent to the observer on completion of this call. + * + * @param aChannelId + * Indicates the channel id to be associated with this sink. + * @param aDataSink The data sink to be added + * + * @return A unique command id for asynchronous completion + **/ + virtual TInt AddVideoSinkL(const TUint aChannelId, MVTVideoSink &aDataSink); + virtual TInt AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink); + + /** + * This API is to allow the user to cancel all pending requests. The current request being + * processed, if any, will also be aborted. + * EVtCommandCancelAllCommands will be passed to the command observer on completion. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt CancelAllCommandsL( ); + + /** + * The Disconnect call is valid only when invoked in the EConnecting, and + * EConnected states. It causes the terminal to transition to the + * EDisconnecting state. All the media tracks both incoming and outgoing + * will be closed on invoking Disconnect. On completion, the terminal + * goes to the ESetup state. + * + * It is a no-op when called in any other state. + * + * This is an asynchronous request. The EvtCommandDisconnect event will be + * sent to the observer when the request processing is complete. This + * is the only event the Phone application should expect after calling + * Disconnect. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt DisconnectFromProtocolL(); + + /** + * This API is to allow for extensibility of the protocol interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aType + * @param aProtocolCommand + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand); + + /** + * This APIis to be used to release an interface that was previously obtained using + * QueryInterfaceL. + * @param aType + * @param + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand* aProtocolCommand); + public: + MPV2WaySymbianInterface *iPv2Way; + private: + CVideoSourceProxy* iVideoSource; + CDisplaySinkProxy* iDisplaySink; + TSessionHandler* iSessionHandler; + }; +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/cvideoconfighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/cvideoconfighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2004-2006 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 CVideoConfigHandler_H +#define CVideoConfigHandler_H +NONSHARABLE_CLASS( TVideoConfigHandler ): public MPvMp4H263EncExtensionSymbianObserver + { + public: + + /** + * Constructor. + */ + TVideoConfigHandler(MVtProtocolHandler* aProtocolHandler); + + /** + Handle an event that has been generated. + + @param aResponse The response to a previously issued command. + */ + virtual void MPvMp4H263EncExtensionCommandCompletedL(const CPVCmdResponse& aResponse); + + /** + Handle an information event. + + @param aEvent + */ + virtual void HandleMPvMp4H263EncExtensionInformationalEventL(const CPVAsyncInformationalEvent& aEvent); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CVideoConfigCommand ) : public CBase, + public MVtVideoConfigCommand + { + public: + /** + * Destructor. + */ + ~CVideoConfigCommand(); + + /** + * Sets the I-Frame refresh rate of the encoded output. + * + * @param aIFrameInterval I-Frame rate in seconds per I-Frame + * @return True if successful, else false + */ + virtual TInt SetIntraFrameInterval(TUint32 aIFrameInterval); + + /** + * Requests the encoder to encode the next frame as an I-Frame. This menthod is valid + * only when the node is in EPVMFNodeStarted state. If successful, the next encoded + * frame will be an I-Frame. + * + * @return True for success, else false + */ + virtual TInt RequestNextIntraFrame(); + + /** + * Sets the frame rate of encoded output for the specified layer. + * @param aFrameRate Frame rate for the specified layer in frames per second. + * @return True if successful, else false. + */ + virtual TInt SetVideoFrameRate(TUint32 aFrameRate); + + /** + * This API allows the user to specify separate observers for the extension interface. + * + * @param aHandler the observer for unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + + /** + * Get member variant. + */ + MPvMp4H263EncExtensionInterfaceSymbian*& PVVideoEncoderInterface() { return iH263Encoder; } + private: + MPvMp4H263EncExtensionInterfaceSymbian* iH263Encoder; + TVideoConfigHandler* iVideoConfigHandler; + }; +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/cvtuserinput.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/cvtuserinput.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2004-2006 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 CVTUSERINPUT_H +#define CVTUSERINPUT_H +NONSHARABLE_CLASS( CVTUserInputDtmf ) : public CBase, + public MVTUserInput + { + public: + /** + * ConstructL. + */ + void ConstructL(TUint8 aTone); + /** + * NewL. + */ + static CVTUserInputDtmf* NewL(TUint8 aTone); + + /** + * Destructor. + */ + ~CVTUserInputDtmf(); + + /** + * Virtual function to return the user input type + **/ + virtual TUserInputType GetType(); + CPVUserInputDtmfSymbian* iUII; + }; + +NONSHARABLE_CLASS( CVTUserInputAlphanumeric ) : public CBase, + public MVTUserInput + { + public: + /** + * ConstructL. + */ + void ConstructL(TUint8 aTone); + /** + * NewL. + */ + static CVTUserInputAlphanumeric* NewL(TUint8 aTone); + + /** + * Destructor. + */ + ~CVTUserInputAlphanumeric(); + + /** + * Virtual function to return the user input type + **/ + virtual TUserInputType GetType(); + CPVUserInputAlphanumericSymbian* iUII; + }; +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/inc/mvtprotocolhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/inc/mvtprotocolhandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1131 @@ +/* +* Copyright (c) 2004-2006 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 MVTENGMEDIAHANDLER_H +#define MVTENGMEDIAHANDLER_H + +// INCLUDES +#include +#include +#include +#include + +typedef TInt TVtCommandId; +typedef TInt TVtCommandStatus; +typedef TDesC8 TVtMIMEType; + +const TUid KVTUidYUVFrameBuffer = {0xFFFFFF0d}; +const TInt KVtUidDataSrcPrime = 0xFFFFFF08; +const TInt KVtUidDataSrcPlay = 0xFFFFFF09; +const TInt KVtUidDataSrcPause = 0xFFFFFF0A; +const TInt KVtUidDataSrcStop = 0xFFFFFF0B; + +_LIT8(KVtVideoMIMETypeH263, "/video/x-pv/compressed/h263"); +_LIT8(KVtVideoMIMETypeM4V, "/video/x-pv/compressed/m4v"); +_LIT8(KVtVideoMIMETypeH264, "/video/x-pv/compressed/h264"); +_LIT8(KVtAudioMIMETypeAMRIF2, "/audio/x-pv/compressed/amr/if2"); +_LIT8(KVtAudioMIMETypeAMRWBIF2, "/audio/x-pv/compressed/amrwb/if2"); +_LIT8(KVtVideoMIMETypeYUV420, "/video/x-pv/raw/yuv420"); + +enum TVt3G324MSupported + { + EVt3G324MMissing, + EVt3G324MSupported + }; + +enum TVtConfigType + { + EVtH324Config, + EVtVideoEncoderConfig + }; + +enum TVtCommandType { + EVtCommandInit, + EVtCommandGetSDKInfo, + EVtCommandGetProtocolState = 3, + EVtCommandReset, + EVtCommandAddDataSource = 6, + EVtCommandRemoveDataSource, + EVtCommandAddDataSink, + EVtCommandRemoveDataSink, + EVtCommandConnect, + EVtCommandDisconnect, + EVtCommandPause, + EVtCommandResume, + EVtCommandGetProtocolInterface =20, + EVtCommandDeleteProtocolInterface, + EVtCommandCancelAllCommands + }; + +enum TVtIndicationType + { + EVtIndicationVideoSpatialTamporalTradeOffCommand, + EVtIndicationVideoSpatialTamporalTradeOffIndication, + EVtIndicationUserInputCapability = 6, + EVtIndicationIncomingTrack = 41, + EVtIndicationOutgoingTrack, + EVtIndicationDisconnect, + EVtIndicationClosingTrack, + EVtIndicationCloseTrack, + EVtIndicationPauseTrack, + EVtIndicationResumeTrack + }; + +enum TVtMediaType + { + EVtAudio = 1, + EVtVideo, + EVtControl, + EVtData, + EVtUserInput, + EVtMediaNone + }; + +enum TVtAudioOutputControlCommand + { + EVtAudioOutputControlGetMaxVolume, + EVtAudioOutputControlGetVolume, + EVtAudioOutputControlSetVolume, + EVtAudioOutputControlGetBalance, + EVtAudioOutputControlSetBalance + }; + +const TUint8 EVtIncoming = 1; + +enum TUserInputType + { + EVtUiiDTFM, + EVtUiiAlphaNumeric + }; + +struct TVtInitInfo + { + TBool iAMRWBOn; + TBool iDisableMpeg4; + }; + +struct TVtIndicationEvent + { + public: + /** + * Constructor. + */ + TVtIndicationEvent(TInt aEventType, const TUint8 *aLocalBuffer) : iEventType(aEventType), iLocalBuffer(aLocalBuffer) + {} + public: + TInt iEventType; + const TUint8 *iLocalBuffer; + }; + +struct TVtCommandResponse + { + public: + /** + * Constructor. + */ + TVtCommandResponse(TVtCommandType aCmdType, TInt aCmdId, TInt iCmdStatus) : iCmdType(aCmdType), iCmdId(aCmdId), iCmdStatus(iCmdStatus) + {} + public: + TVtCommandType iCmdType; + TInt iCmdId; + TInt iCmdStatus; + }; + +struct TVtErrorEvent + { + public: + /** + * Constructor. + */ + TVtErrorEvent(TInt aEventType) : iEventType(aEventType) {} + public: + TInt iEventType; + }; + +struct TVtMMFDataBuffer + { + public: + /** + * Constructor. + */ + TVtMMFDataBuffer(CMMFBuffer* aMmfBuffer,TSize aFrameSize, TPtr8& aPtr) : iMmfBuffer(aMmfBuffer), iFrameSize(aFrameSize), iPtr(aPtr) {} + + /** + * Get the YUV frame size. + * @return The frame size, in pixels + */ + TSize GetFrameSize() {return iFrameSize;} + + /** + * Get MMF buffer. + * @return the MMF buffer + */ + CMMFBuffer* GetMMFBuffer() {return iMmfBuffer;} + + /** + * Get MMF buffer. + * @return the MMF buffer + */ + const CMMFBuffer* GetMMFBuffer() const {return iMmfBuffer;} + + /** + * @return Returns a reference to the data buffer + **/ + TPtr8& Data() {return iPtr;} + + /** + * @return Returns the frame size of the contained buffer. + **/ + const TSize GetFrameSize() const {return iFrameSize;} + + /** + * @return Returns a reference to the data buffer + **/ + const TPtr8& Data() const {return iPtr;} + private: + CMMFBuffer* iMmfBuffer; + TSize iFrameSize; + TPtr8& iPtr; + }; + +class MVTVideoInput + { + public: + + /** + * Set the video frame format. This must be from the list of supported formats. + * @param "aFormat" The mime string describing the video frame format. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFormatL(const TDesC8& aFormat) {} + + /** + * Set the video frame rate. This must be within the range of supported frame rates + * for the current frame size. + * @param "aFrameRate" The video frame rate to set. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFrameRateL(TReal32 aFrameRate) {} + + /** + * Set the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void SetVideoFrameSizeL(const TSize& aSize) {} + + /** + * Get the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void GetVideoFrameSizeL(TSize& aSize) const {} + + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return + **/ + virtual const RArray& GetMultimediaTypesL() const {} + }; + +class MVTVideoOutput + { + public: + + /** + * Sets the data format using MIME string. + * @param aFormat The format as a MIME string. + **/ + virtual void SetFormatL(const TDesC8& aFormat) {} + + /** + * Set the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void SetVideoFrameSizeL(const TSize& aSize) {} + + /** + * Get the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void GetVideoFrameSizeL(TSize& aSize) const {} + + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return + **/ + virtual const RArray& GetMultimediaTypesL() const {} + }; + +//This class is empty +class MVTAudioSource + { + }; + +//This class is empty +class MVTAudioSink + { + }; + +class MVTVideoSource; +class MVTVideoSink : public MVTVideoOutput + { + public: + /** + * Constructor. + */ + MVTVideoSink(TUid aType): iDataSinkType(aType) {} + + /** + * Method called by a data source to request the data sink to empty aBuffer of data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data sink is passively waiting for requests from a supplier ie a data source + * to empty a buffer. The data sink must call the BufferEmptiedL member on aSupplier when it has emptied + * the buffer of it's data - the data sink can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The full buffer that needs emptying of it's data + * + * @param "aSupplier" + * The data source that supplied the data. The data sink needs this to make the BufferEmptiedL + * callback on aSupplier to indicate to the data source that the data sink has finished with the buffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data + */ + virtual void EmptyBufferL( + TVtMMFDataBuffer aDataBuffer, + MVTVideoSource* aSupplier, + TMediaId aMediaId ) {} + + /** + * Method called by a data source to pass back an filled buffer to the sink + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data sink actively requests a supplier ie a data source + * to fill a buffer by calling the data sources FillBufferL. + * When the data sink gets this callback it knows that the buffer has been filled and is ready to be emptied + * + * @param "aBuffer" + * The buffer that has been filled by a data source and is now available for processing + */ + virtual void BufferFilledL( CMMFBuffer* aBuffer ) = 0; + + /** + * Method to indicate whether the data sink can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data sink can create a buffer else EFalse + */ + virtual TBool CanCreateSinkBuffer() {return EFalse;} + + /** + * Returns a buffer created by the data sink + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data. + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the sink + * and should be used in preference to the source buffer provided the source buffer + * is also not a reference buffer. + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSinkBufferL( + TMediaId aMediaId, + TBool &aReference ) {return NULL;} + + /** + * Method to 'logon' the data sink to the same thread that sink will be consuming data in. + * + * This method may be required as the thread that the data sink was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SinkThreadLogon rather than in the creation + * of the data sink. + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * initialisation is required and/or the data sink can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SinkThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ) {return KErrNone;} + + /** + * Method to 'logoff' the data sink from the same thread that sink consumes data in. + * + * This method may be required as the thread that the data sink is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SinkThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * releasing of resources is required. + */ + virtual void SinkThreadLogoff() {} + + /** + * Method to 'prime' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific 'priming' is required + */ + virtual TInt SinkPrimeL() {return 0;} + + /** + * Method to 'play' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SinkPlayL() {return 0;} + + /** + * Method to 'pause' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'pause' + */ + virtual TInt SinkPauseL() {return 0;} + + /** + * Method to 'stop' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'stop' + */ + virtual TInt SinkStopL() {return 0;} + private: + TUid iDataSinkType; + }; + +class MVTVideoSource : public MVTVideoInput + { + public: + + /** + * Constructor. + */ + MVTVideoSource(TUid aType): iDataSourceType(aType) {} + + /** + * Method called by a data sink to request the data source to fill aBuffer with data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data source is passively waiting for requests from a consumer ie a data sink + * to fill a buffer. The data source must call the BufferFilledL member on aConsumer when it has filled + * the buffer with data - the data source can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The buffer that needs filling with data + * + * @param "aConsumer" + * The data sink that consumes the data. The data source needs this to make the BufferFilledL + * callback on aConsumer when the data source has completed filling the aBuffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ) {} + + /** + * Method called by a data sink to pass back an emptied buffer to the source + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data source actively requests a consumer ie a data sink + * to empty a buffer by calling the data sinks EmptyBufferL. + * When the data source gets this callback it knows that the buffer has been emptied and can be reused + * + * @param "aBuffer" + * The buffer that has been emptied by a data sink and is now available for reuse + */ + virtual void BufferEmptiedL( CMMFBuffer* aBuffer ) = 0; + + /** + * Method to indicate whether the data source can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data source can create a buffer else EFalse + */ + virtual TBool CanCreateSourceBuffer() {return EFalse;} + + /** + * Returns a buffer created by the data source + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer + * is also not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + TBool &aReference ) {return NULL;} + + /** + * Returns a buffer created by the data source + * + * This is a virtual function that a derived class can implement. + * This can be used in preference to the above CreateSourceBufferL method in cases where + * the source buffer creation has a dependancy on the sink buffer + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aSinkBuffer" + * The sink buffer the nature of which may influence the creation of the source buffer + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer is not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + CMMFBuffer& aSinkBuffer, + TBool &aReference ) {return NULL;} + + /** + * Method to 'logon' the data source to the same thread that source will be supplying data in. + * + * This method may be required as the thread that the data source was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SourceThreadLogon rather than in the creation + * of the data source. + * + * This is a virtual function that a derrived data source can implement if any thread specific + * initialisation is required and/or the data source can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SourceThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ) {return KErrNone;} + + /** + * Method to 'logoff' the data source from the same thread that source supplies data in. + * + * This method may be required as the thread that the data source is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SourceThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data source can implement if any thread specific + * releasing of resources is required. + */ + virtual void SourceThreadLogoff() {} + + /** + * Method to 'prime' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific 'priming' is required + */ + virtual TInt SourcePrimeL() {return 0;} + + /** + * Method to 'play' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SourcePlayL() {return 0;} + + /** + * Method to 'pause' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'pause' + */ + virtual TInt SourcePauseL() {return 0;} + + /** + * Method to 'stop' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'stop' + */ + virtual TInt SourceStopL() {return 0;} + private: + TUid iDataSourceType; + }; + +class MCommServer + { + }; + +class MVtProtocolCommand + { + public: + enum TVtProtocolState + { + EIdle, + EInitializing, + ESetup, + EConnecting, + EConnected, + EDisconnecting, + EResetting + }; + }; + +class MVtProtocolHandler + { + public: + + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleSessionCommandEventL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an informational event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleSessionInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + + /** + * Handle an error event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleSessionErrorEventL(const TVtErrorEvent& aEvent) = 0; + + /** + * Signals completion of the audio output control command. + * @param aId The command id of the completed command. + * @param aCmd The command type. + * @param aContextData The context data passed in with the command. + * @param aStatus The command completion status. + **/ + virtual void HandleAudioOutputControlCommandComplete(TInt aId, TVtAudioOutputControlCommand aCmd, TAny *aContextData ,TInt aStatus) = 0; + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleVideoEncoderCommandCompletedL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleVideoEncoderInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleH324MConfigCommandCompletedL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleH324MConfigInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + virtual ~MVtProtocolHandler() {} + }; + + +class MVtSessionCommand : public MVtProtocolCommand + { + public: + /** + * This function is valid only in the EIdle state. It is a no-op when + * invoked in any other state. It causes the protocol to transition + * to the ESetup state. The terminal remains in the EInitializing state during + * the transition. + * + * + * @param aInitInfo + * A reference to a TVtInitInfo structure which set Mona on and off + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt InitProtocolL(TVtInitInfo& aInitInfo) = 0; + + /** + * For an incoming track (MVTVideoSink) this function pauses sending + * media to the sink (output device) and stops the sink. It then does the protocol + * negotiations with the remote terminal to pause the logical channel for + * the specified track. + * + * For outgoing, it pauses the sending of media from the source and calls Stop() on the + * source. It also performs any necessary protocol negotiations with the remote terminal. + * EVtCommandPause will be sent to the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt PauseVideoL(MVTVideoSource& aDataSource) = 0; + virtual TInt PauseVideoL(MVTVideoSink& aDataSink) = 0; + virtual TInt PauseAudioL(MVTAudioSource& aAudioSource) = 0; + + /** + * Resume a previously paused incoming or outgoing track. For incoming, + * this function starts resumes playing out the media to the appropriate + * sink based on the current settings. For outgoing it resumes encoding + * and sending media from the source. + * EVtCommandResume will be invoked will be invoked on the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResumeVideoL(MVTVideoSource& aDataSource) = 0; + virtual TInt ResumeVideoL(MVTVideoSink& aDataSink) = 0; + virtual TInt ResumeAudioL(MVTAudioSource& aAudioSource) = 0; + + /** + * This function is valid only in the ESetup and EInitializing state. It is a + * no-op when invoked in the EIdle state + * + * It causes the protocol to transition back to the EIdle state. The + * terminal remains in the EResetting state during the transition. + * + * While resetting, the protocol de-allocates all resources resources that + * had been previously allocated. When it completes, ResetComplete is called + * and the protocol reverts to the EIdle state. + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResetProtocolL() = 0; + + /** + * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote + * terminal based on the specified options and capabilities. + * The EVtCommandConnect command completion event will be passed to the observer + * when connect completes. + * Details about the negotiated session may be obtained by calling the GetSessionParamsL API. + * GetSessionParamsL may be called after call setup is started to get the list of available channels + * and their capabilities. + * Incoming tracks may be opened before ConnectL completes and will be indicated via the + * EVtIndicationIncommingTrack event. + * + * @param aComm + * An optional pointer to a comm server to provide comm source and sink end-points. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ConnectToProtocolL(MCommServer* aComm) = 0; + + /** + * Allows an application to provide a media source to be associated with a logical channel + * of communication with the peer. Sources should be added after the EVtIndicationOutgoingTrack + * indication is received for a newly established logical channel. The media type and + * channel id associated with the logical channel are specified as part of the indication. + * This function accepts a MVtVideoSource which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * Data sources could be of the following types: + * a)raw media sources like camera, microphone etc. + * b)sources of compressed data like file, gateway component etc. + * + * @param aChannelId + * Indicates the channel id to be associated with this source. + * @param aDataSource + * reference to the data source + * @leave This method can leave with one of the following error codes + * KErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @return A unique command id for asynchronous completion + */ + virtual TInt AddVideoSourceL(const TUint aChannelId, MVTVideoSource &aDataSource) = 0; + virtual TInt AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource) = 0; + + /** + * Allows an application to provide a media sink for rendering an incoming media bitstream in a + * logical channel of communication with the peer. + * AddDataSinkL can be called only for established incoming logical channels identified by a unique + * channel id. + * Regular incoming channels are established by the peer and are + * indicated using the EVtIndicationIncomingTrack indication. + * This function takes in PV extension to MVtVideoSink or MVtAudioSink which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * EVtCommandAddDataSink event is sent to the observer on completion of this call. + * + * @param aChannelId + * Indicates the channel id to be associated with this sink. + * @param aDataSink The data sink to be added + * + * @return A unique command id for asynchronous completion + **/ + virtual TInt AddVideoSinkL(const TUint aChannelId, MVTVideoSink &aDataSink) = 0; + virtual TInt AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink) = 0; + + /** + * This API is to allow the user to cancel all pending requests. The current request being + * processed, if any, will also be aborted. + * EVtCommandCancelAllCommands will be passed to the command observer on completion. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt CancelAllCommandsL( ) = 0; + + /** + * The Disconnect call is valid only when invoked in the EConnecting, and + * EConnected states. It causes the terminal to transition to the + * EDisconnecting state. All the media tracks both incoming and outgoing + * will be closed on invoking Disconnect. On completion, the terminal + * goes to the ESetup state. + * + * It is a no-op when called in any other state. + * + * This is an asynchronous request. The EvtCommandDisconnect event will be + * sent to the observer when the request processing is complete. This + * is the only event the Phone application should expect after calling + * Disconnect. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt DisconnectFromProtocolL() = 0; + + /** + * This API is to allow for extensibility of the protocol interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aType + * @param aProtocolCommand + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand) = 0; + + /** + * This APIis to be used to release an interface that was previously obtained using + * QueryInterfaceL. + * @param aType + * @param + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*) = 0; + + /** + * Destructor. + */ + virtual ~MVtSessionCommand() {} + }; + +class MVTUserInput + { + public: + + /** + * @returns Returns the user input type. + **/ + virtual TUserInputType GetType() = 0; + virtual ~MVTUserInput() {} + }; + +class MVtH324ConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler the observer for command status and unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Sets the vendor identification data. This does not cause the stack to issue a vendor identifiation request. + * Set to NULL to disable sending vendor id. If set to a valid parameter before Connect, it will cause the stack + * to automatically send it along with the TCS message. + * @param cc + * T35 Country code + * @param ext + * T35 Extension + * @param mc + * T35 Manufacturer code + * @param aProduct + * Product number + * @param aVersion + * Version number + **/ + virtual TInt SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion) = 0; + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is a request to the remote encoder to adjust its encoding in accordance with the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff)=0; + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is an indication to the remote decoder that the local encoder has adjusted its encoding parameters + * according to the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff)=0; + + /** + * This API allows the user to specify the supported resolutions for video for transmit and receive. + * + **/ + virtual TInt SetSupportedResolutions( ) = 0; + + /** + * This API allows the user to set options for fast call setup procedures + **/ + + virtual TInt SetFastCsupOptions( ) = 0; + + /** + * Causes the protocol to send the specified user input to the remote terminal using + * control channel. The user input can be either DTMF ot Alphanumeric + * @param user_input A pointer to MVTUserInput + * @returns A unique command id for asynchronous completion + **/ + virtual TInt SendUserInputMessageL(MVTUserInput& user_input) = 0; + }; + +class MVtVideoConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify separate observers for the extension interface. + * + * @param aHandler the observer for unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Sets the I-Frame refresh rate of the encoded output. + * + * @param aIFrameInterval I-Frame rate in seconds per I-Frame + * @return True if successful, else false + */ + virtual TInt SetIntraFrameInterval(TUint32 aIFrameInterval) = 0; + + /** + * Requests the encoder to encode the next frame as an I-Frame. If successful, the next encoded + * frame will be an I-Frame. + * + * @return True for success, else false + */ + virtual TInt RequestNextIntraFrame() = 0; + + /** + * Sets the frame rate of encoded output for the specified layer. + * @param aFrameRate Frame rate for the specified layer in frames per second. + * @return True if successful, else false. + */ + virtual TInt SetVideoFrameRate(TUint32 aFrameRate) = 0; + }; + +class MVtAudioConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Method to set the playback volume to the specified value. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aNewVolume + * An input parameter to hold the value for the requested playback volume. + * + * @returns Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt SetAudioVolumeL(TInt aVolume) = 0; + + /** + * Method to get the maximum valid value for the playback volume. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aMaxVolume + * An output parameter to hold the value for the maximum valid playback volume. + * Note that the parameter should not be used until the callback indicates that the + * method has completed. + * + * @returns Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt GetMaxAudioVolumeL(TInt& aMaxVolume) = 0; + }; + +class VTProtocolFactory + { + public: + + /** + * Create one instance. + */ + IMPORT_C static MVtSessionCommand* CreateSessionCommandL(MVtProtocolHandler* aProtocolHandler, TBool aEnableProxy, TVt3G324MSupported& a3G324MSupported); + + /** + * This function allows the application to delete an instance of a terminal + * and reclaim all allocated resources. A terminal should be deleted only in + * the EIdle state. An attempt to delete a terminal in any other state will + * result in unpredictable behavior. + * + * @param terminal the terminal to be deleted. + * + **/ + IMPORT_C static void DeleteSessionCommand( MVtSessionCommand* aSessionCommand ); + + /** + * Creates an instance of a DevSound audio data source. + * + * @param None + * + * @returns A pointer to the interface + **/ + IMPORT_C static MVTAudioSource* CreateAudioSource(); + + /** + * Deletes an instance of a DevSound audio data source + * that was previously created with CreateAudioSource(); + * + * @param aSource The audio data source to be deleted. + * + * @returns status + **/ + IMPORT_C static TInt DeletAudioSource(MVTAudioSource *aSource); + + /** + * Creates an instance of a DevSound audio data sink. + * + * @param None + * + * @returns A pointer to the interface + **/ + IMPORT_C static MVTAudioSink* CreateAudioSink(); + + /** + * Deletes an instance of a DevSound audio data sink + * that was previously created with CreateAudioSink(); + * + * @param The audio data sink to be deleted. + * + * @returns status + **/ + IMPORT_C static TInt DeleteAudioSink(MVTAudioSink *aSink); + + /** + * Creates an instance of a comm server of a particular name, to be used to + * initialize the terminal. + * + * + * @returns A pointer to a terminal or leaves if the type is invalid or the system is out of resources + **/ + IMPORT_C static MCommServer* CreateCommServerL(const TDesC & aName, TBool aEnableBitReversal=EFalse); + + /** + * This function allows the application to delete an instance of a comm server + * and reclaim all allocated resources. A comm server should be deleted only when the + * protocol is in the EIdle state. An attempt to delete a comm server in any other state + * could result in memory corruption within the protocol. This function will leave with + * KErrInUse if the comm server is still in use. However it will not check the state of the + * protocol that is using the comm server. + * + * @param aCommServer the comm server to be deleted. + * + * @returns a status code indicating success or failure + **/ + IMPORT_C static void DeleteCommServerL(MCommServer* aCommServer); + + /** + * Create instance. + * @param aUIITyep + * @param aTone + */ + IMPORT_C static MVTUserInput* CreateUserInputIndication(TUserInputType aUIIType, TUint8 aTone); + + /** + * Delete instance. + * @param aUII + */ + IMPORT_C static void DeleteUserInputIndication(MVTUserInput* aUII); + + /** + * + * @param aAudioSink + */ + IMPORT_C static MVtAudioConfigCommand* GetAudioConfigCommandL(MVTAudioSink* aAudioSink); + }; + +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/caudioconfighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/caudioconfighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include "mvtprotocolhandler.h" +#include "caudioconfighandler.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// TAudioConfigHandler::TAudioConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TAudioConfigHandler::TAudioConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::TAudioConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::TAudioConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// TAudioConfigHandler::AudioOutputControlCommandComplete +// Signals completion of the audio output control command. +// ----------------------------------------------------------------------------- +// +void TAudioConfigHandler::AudioOutputControlCommandComplete(TPVCommandId aId + ,TPVAudioOutputControlCommand aCmd + ,TAny *aContextData + ,TInt aStatus) + { + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::AudioOutputControlCommandComplete<"))); + iProtocolHandler->HandleAudioOutputControlCommandComplete(aId, (TVtAudioOutputControlCommand)aCmd, aContextData, aStatus); + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::AudioOutputControlCommandComplete>"))); + } +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::CAudioConfigCommand +// Constructor. +// ----------------------------------------------------------------------------- +// +CAudioConfigCommand::CAudioConfigCommand(MPVAudioOutputControl* aAudioCtrl) : iAudioCtrl(aAudioCtrl) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::CAudioConfigCommand<"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::CAudioConfigCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::SetObserverL +// This API allows the user to specify observers for the 324m interface. +// ----------------------------------------------------------------------------- +// +void CAudioConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetObserverL<"))); + iAudioConfigHandler = new (ELeave)TAudioConfigHandler(aHandler); + iAudioCtrl->SetAudioOutputControlObserver(iAudioConfigHandler); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::SetAudioVolumeL +// Method to set the playback volume to the specified value. +// ----------------------------------------------------------------------------- +// +TInt CAudioConfigCommand::SetAudioVolumeL(TInt aVolume) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetAudioVolumeL"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetAudioVolumeL aVolume %d"), aVolume)); + return iAudioCtrl->SetVolumeL(aVolume); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::GetMaxAudioVolumeL +// Method to get the maximum valid value for the playback volume. +// ----------------------------------------------------------------------------- +// +TInt CAudioConfigCommand::GetMaxAudioVolumeL(TInt& aMaxVolume) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::GetMaxAudioVolumeL"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::GetMaxAudioVolumeL aMaxVolume %d"), aMaxVolume)); + return iAudioCtrl->GetMaxVolumeL(aMaxVolume); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::~CAudioConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CAudioConfigCommand::~CAudioConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::~CAudioConfigCommand>"))); + delete iAudioConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::~CAudioConfigCommand"))); + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/cdatasinkproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/cdatasinkproxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,295 @@ +/* +* Copyright (c) 2004-2006 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 +#include "mvtprotocolhandler.h" +#include "cdatasinkproxy.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CPVDisplaySinkNodeProxy::SetSupplier +// Set new supplier . +// ----------------------------------------------------------------------------- +// +void CPVDisplaySinkNodeProxy::SetSupplier(MPVDataSourceBase* aSupplier) + { + __IF_DEBUG(Print(_L("VTProto: CPVDisplaySinkNodeProxy::SetSupplier<"))); + iSupplier = aSupplier; + __IF_DEBUG(Print( _L( "VTProto: CPVDisplaySinkNodeProxy::SetSupplier>" ) )); + } + +// ----------------------------------------------------------------------------- +// CPVDisplaySinkNodeProxy::BufferEmptiedL +// Method called by a data sink to pass back an emptied buffer to the source. +// ----------------------------------------------------------------------------- +// +void CPVDisplaySinkNodeProxy::BufferEmptiedL(CMMFBuffer* aBuffer) + { + __IF_DEBUG(Print( _L( "VTProto: CPVDisplaySinkNodeProxy::BufferEmptiedL<" ) )); + iSupplier->BufferEmptiedL(aBuffer); //call actually PV code + __IF_DEBUG(Print( _L( "VTProto: CPVDisplaySinkNodeProxy::BufferEmptiedL>" ) )); + } + +// ----------------------------------------------------------------------------- +// CPVDisplaySinkNodeProxy::CPVDisplaySinkNodeProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CPVDisplaySinkNodeProxy::CPVDisplaySinkNodeProxy() : MVTVideoSource(KNullUid) + { + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::CDisplaySinkProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CDisplaySinkProxy::CDisplaySinkProxy(MVTVideoSink* aDisplaySink) : MPVDataSink(KNullUid), iDisplaySink(aDisplaySink) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CDisplaySinkProxy<" ) )); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CDisplaySinkProxy iDisplaySink %d>" ), iDisplaySink)); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::ConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::ConstructL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::ConstructL<" ) )); + iDSNodeProxy = new (ELeave)CPVDisplaySinkNodeProxy(); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::ConstructL>" ) )); + } + + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::NewL +// ----------------------------------------------------------------------------- +// +CDisplaySinkProxy* CDisplaySinkProxy::NewL(MVTVideoSink* aDisplaySink) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::NewL<" ) )); + CDisplaySinkProxy* self = new (ELeave)CDisplaySinkProxy(aDisplaySink); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::NewL>" ) )); + return self; + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::QueryInterface +// This API is to allow for extensibility of the plugin interface. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::QueryInterface( const TPVUuid& aUuid, TPVInterfacePtr& aInterfacePtr ) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::QueryInterface<" ) )); + if ( aUuid == KPVUidVideoOutputInterface ) + { + MPVVideoInput* interfaceP = (MPVVideoInput*) this; + aInterfacePtr = (TPVInterfacePtr) interfaceP; + } + else + { + aInterfacePtr = NULL; + } + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::QueryInterface aInterfacePtr %d>" ), aInterfacePtr )); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::GetMultimediaTypesL +// This API returns multimedias type supported by the data source/sink. +// ----------------------------------------------------------------------------- +// +const RArray& CDisplaySinkProxy::GetMultimediaTypesL() const + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::GetMultimediaTypesL" ) )); + return iDisplaySink->GetMultimediaTypesL(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::QueryUUID +// This API is to allow for extensibility of the plugin interface. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::QueryUUID( const TPVMIMEType& aMimeType, RArray& aUuids, bool aExactUuidsOnly) + { + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SetTimebaseL +// This API is used to provide a timebase for plugins that deal with synchronized media data. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::SetTimebaseL(MPVSymbianTimebaseInterface* aTimebase) + { + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::EmptyBufferL +// Method called by a MDataSource to request the data sink to empty aBuffer of data. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::EmptyBufferL(CMMFBuffer *aBuffer, MPVDataSourceBase* aSupplier, TMediaId) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::EmptyBufferL<" ) )); + iDSNodeProxy->SetSupplier(aSupplier); + CPVMMFPointerBuffer& pvMMFBuffer = *static_cast< CPVMMFPointerBuffer* >( aBuffer ); + TVtMMFDataBuffer mmfDataBuffer(aBuffer, pvMMFBuffer.GetFrameSize(), static_cast(pvMMFBuffer.Data())); + iDisplaySink->EmptyBufferL(mmfDataBuffer, iDSNodeProxy, TMediaId()); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::EmptyBufferL>" ) )); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::BufferFilledL +// Method called by a data source to pass back an filled buffer to the sink. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::BufferFilledL(CMMFBuffer* aBuffer) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::BufferFilledL" ) )); + return iDisplaySink->BufferFilledL(aBuffer); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::CanCreateSinkBuffer +// Method to indicate whether the data sink can create a buffer. +// ----------------------------------------------------------------------------- +// +TBool CDisplaySinkProxy::CanCreateSinkBuffer() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CanCreateSinkBuffer" ) )); + return iDisplaySink->CanCreateSinkBuffer(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::CreateSinkBufferL +// Returns a buffer created by the data sink +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CDisplaySinkProxy::CreateSinkBufferL(TMediaId aMediaId, TBool &aReference ) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CreateSinkBufferL" ) )); + return iDisplaySink->CreateSinkBufferL(aMediaId, aReference); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkThreadLogon +// Method to 'logon' the data sink to the same thread that sink will be consuming data in. +// ----------------------------------------------------------------------------- +// +TInt CDisplaySinkProxy::SinkThreadLogon( MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkThreadLogon" ) )); + return iDisplaySink->SinkThreadLogon(aEventHandler); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkThreadLogoff +// Method to 'logoff' the data sink from the same thread that sink consumes data in. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::SinkThreadLogoff() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkThreadLogoff" ) )); + iDisplaySink->SinkThreadLogoff(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkPrimeL +// Method to 'prime' the data sink. +// ----------------------------------------------------------------------------- +// +TInt CDisplaySinkProxy::SinkPrimeL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkPrimeL" ) )); + return iDisplaySink->SinkPrimeL(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkPlayL +// Method to 'play' the data sink. +// ----------------------------------------------------------------------------- +// +TInt CDisplaySinkProxy::SinkPlayL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkPlayL" ) )); + return iDisplaySink->SinkPlayL(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkPauseL +// Method to 'pause' the data sink. +// ----------------------------------------------------------------------------- +// +TInt CDisplaySinkProxy::SinkPauseL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkPauseL" ) )); + return iDisplaySink->SinkPauseL(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SinkStopL +// Method to 'stop' the data sink. +// ----------------------------------------------------------------------------- +// +TInt CDisplaySinkProxy::SinkStopL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SinkStopL" ) )); + return iDisplaySink->SinkStopL(); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SetFormatL +// Set the video frame format. This must be from the list of supported formats. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::SetFormatL(const TDesC8& aFormat) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SetFormatL" ) )); + iDisplaySink->SetFormatL(aFormat); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::SetVideoFrameSizeL +// Set the video frame size. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::SetVideoFrameSizeL(const TSize& aSize) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::SetVideoFrameSizeL" ) )); + iDisplaySink->SetVideoFrameSizeL(aSize); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::GetVideoFrameSizeL +// Get the video frame size. +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::GetVideoFrameSizeL(TSize& aSize) const + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::GetVideoFrameSizeL" ) )); + iDisplaySink->GetVideoFrameSizeL(aSize); + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/cdatasourceproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/cdatasourceproxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,334 @@ +/* +* Copyright (c) 2004-2006 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 +#include "mvtprotocolhandler.h" +#include "cdatasourceproxy.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CPVCameraSourceNodeProxy::CPVCameraSourceNodeProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CPVCameraSourceNodeProxy::CPVCameraSourceNodeProxy() : MVTVideoSink(KNullUid) + { + } + +// ----------------------------------------------------------------------------- +// CPVCameraSourceNodeProxy::SetConsumer +// Set consumer object. +// ----------------------------------------------------------------------------- +// +void CPVCameraSourceNodeProxy::SetConsumer(MPVDataSinkBase* aConsumer) + { + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::SetConsumer<"))); + iConsumer = aConsumer; + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::SetConsumer>"))); + } + +// ----------------------------------------------------------------------------- +// CPVCameraSourceNodeProxy::BufferFilledL +// Method called by a data source to pass back an filled buffer to the sink. +// ----------------------------------------------------------------------------- +// +void CPVCameraSourceNodeProxy::BufferFilledL(CMMFBuffer* aBuffer) + { + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::BufferFilledL<"))); + iConsumer->BufferFilledL(aBuffer); + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::BufferFilledL>"))); + } + +// ----------------------------------------------------------------------------- +// CPVCameraSourceNodeProxy::SendEventToClient +// Send event to client. +// ----------------------------------------------------------------------------- +// +TInt CPVCameraSourceNodeProxy::SendEventToClient(const TMMFEvent &aEvent) + { + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::SendEventToClient<"))); + MAsyncEventHandler* eventHandler = dynamic_cast(iConsumer); + TInt result = eventHandler->SendEventToClient(aEvent); + __IF_DEBUG(Print(_L("VTProto: CPVCameraSourceNodeProxy::SendEventToClient>"))); + return result; + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::CVideoSourceProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CVideoSourceProxy::CVideoSourceProxy(MVTVideoSource* aDataSource) : MPVDataSource(KNullUid), iVideoSource(aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CVideoSourceProxy<"))); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CVideoSourceProxy iVideoSource %d>"), iVideoSource)); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::ConstructL +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::ConstructL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::ConstructL<"))); + iCameraSourceNodeProxy = new (ELeave) CPVCameraSourceNodeProxy(); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::NewL +// ----------------------------------------------------------------------------- +// +CVideoSourceProxy* CVideoSourceProxy::NewL(MVTVideoSource* aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::NewL<"))); + CVideoSourceProxy* self = new (ELeave)CVideoSourceProxy(aDataSource); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::NewL>"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::QueryInterface +// This API is to allow for extensibility of the plugin interface. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::QueryInterface( const TPVUuid& aUuid, TPVInterfacePtr& aInterfacePtr ) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::QueryInterface<"))); + if ( aUuid == KPVUidVideoInputInterface ) + { + MPVVideoInput* interfaceP = (MPVVideoInput*) this; + aInterfacePtr = (TPVInterfacePtr) interfaceP; + } + else + { + aInterfacePtr = NULL; + } + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::QueryInterface aInterfacePtr %d<"), aInterfacePtr)); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::GetMultimediaTypesL +// This API returns multimedias type supported by the data source/sink. +// ----------------------------------------------------------------------------- +// +const RArray& CVideoSourceProxy::GetMultimediaTypesL() const + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::GetMultimediaTypesL iVideoSource %d"), iVideoSource)); + const RArray& multimediaType = iVideoSource->GetMultimediaTypesL(); + return multimediaType; + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::QueryUUID +// This API is to allow for extensibility of the plugin interface. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::QueryUUID( const TPVMIMEType& aMimeType, RArray& aUuids, bool aExactUuidsOnly) + { + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SetTimebaseL +// This API is used to provide a timebase for plugins that deal with synchronized media data. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::SetTimebaseL(MPVSymbianTimebaseInterface* aTimebase) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetTimebaseL<"))); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetTimebaseL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::FillBufferL +// Method called by a MDataSink to request the data source to fill aBuffer with data. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::FillBufferL(CMMFBuffer* aBuffer, MPVDataSinkBase* aConsumer, TMediaId aMediaId ) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::FillBufferL<"))); + iCameraSourceNodeProxy->SetConsumer(aConsumer); + iVideoSource->FillBufferL(aBuffer, iCameraSourceNodeProxy, aMediaId); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::FillBufferL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::CreateSourceBufferL +// Returns a buffer created by the data source. +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CVideoSourceProxy::CreateSourceBufferL(TMediaId aMediaId, TBool &aReference ) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CreateSourceBufferL"))); + return iVideoSource->CreateSourceBufferL(aMediaId, aReference); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::CreateSourceBufferL +// Returns a buffer created by the data source. +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CVideoSourceProxy::CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer &aSinkBuffer, TBool &aReference) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CreateSourceBufferL"))); + return iVideoSource->CreateSourceBufferL(aMediaId, aSinkBuffer, aReference); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourceThreadLogon +// Method to 'logon' the data source to the same thread that source will be supplying data in. +// ----------------------------------------------------------------------------- +// +TInt CVideoSourceProxy::SourceThreadLogon( MAsyncEventHandler& aEventHandler ) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourceThreadLogon"))); + return iVideoSource->SourceThreadLogon(aEventHandler); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourceThreadLogoff +// Method to 'logoff' the data source from the same thread that source supplies data in. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::SourceThreadLogoff() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourceThreadLogoff<"))); + iVideoSource->SourceThreadLogoff(); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourceThreadLogoff>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourcePrimeL +// Method to 'prime' the data source. +// ----------------------------------------------------------------------------- +// +TInt CVideoSourceProxy::SourcePrimeL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourcePrimeL<"))); + return iVideoSource->SourcePrimeL(); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourcePlayL +// Method to 'play' the data source. +// ----------------------------------------------------------------------------- +// +TInt CVideoSourceProxy::SourcePlayL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourcePlayL"))); + return iVideoSource->SourcePlayL(); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourcePauseL +// Method to 'pause' the data source. +// ----------------------------------------------------------------------------- +// +TInt CVideoSourceProxy::SourcePauseL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourcePauseL"))); + return iVideoSource->SourcePauseL(); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SourceStopL +// Method to 'stop' the data source. +// ----------------------------------------------------------------------------- +// +TInt CVideoSourceProxy::SourceStopL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SourceStopL"))); + return iVideoSource->SourceStopL(); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::BufferEmptiedL +// Method called by a data sink to pass back an emptied buffer to the source. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::BufferEmptiedL(CMMFBuffer* aBuffer) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::BufferEmptiedL"))); + iVideoSource->BufferEmptiedL(aBuffer); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::CanCreateSourceBuffer +// Method to indicate whether the data source can create a buffer. +// ----------------------------------------------------------------------------- +// +TBool CVideoSourceProxy::CanCreateSourceBuffer() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CanCreateSourceBuffer"))); + return iVideoSource->CanCreateSourceBuffer(); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SetFormatL +// Set the video frame format. This must be from the list of supported formats. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::SetFormatL(const TDesC8& aFormat) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetFormatL"))); + iVideoSource->SetFormatL(aFormat); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SetFrameRateL +// Set the video frame rate. This must be within the range of supported frame rates. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::SetFrameRateL(TReal32 aFrameRate) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetFrameRateL"))); + iVideoSource->SetFrameRateL(aFrameRate); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::SetVideoFrameSizeL +// Set the video frame size. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::SetVideoFrameSizeL(const TSize& aSize) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetVideoFrameSizeL <"))); + iVideoSource->SetVideoFrameSizeL(aSize); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::SetVideoFrameSizeL >"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::GetVideoFrameSizeL +// Get the video frame size. +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::GetVideoFrameSizeL(TSize& aSize) const + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::GetVideoFrameSizeL<"))); + iVideoSource->GetVideoFrameSizeL(aSize); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::GetVideoFrameSizeL>"))); + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/ch324confighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/ch324confighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,211 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include "mvtprotocolhandler.h" +#include "ch324confighandler.h" +#include "cvtuserinput.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// Define image sizes. +// QCIF. +const TInt KVtProtoResolutionQCIFWidth = 176; +const TInt KVtProtoResolutionQCIFHeight = 144; + +// SQCIF. +const TInt KVtProtoResolutionSQCIFWidth = 128; +const TInt KVtProtoResolutionSQCIFHeight = 96; + +// ----------------------------------------------------------------------------- +// TH324ConfigHandler::TH324ConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TH324ConfigHandler::TH324ConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::TH324ConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::TH324ConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// TH324ConfigHandler::MPVH324MConfigCommandCompletedL +// Handle an event that has been generated. +// ----------------------------------------------------------------------------- +// +void TH324ConfigHandler::MPVH324MConfigCommandCompletedL(const CPVCmdResponse& aResponse) + { + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::MPVH324MConfigCommandCompletedL<"))); + TVtCommandType cmdType = (TVtCommandType)aResponse.GetCmdType(); + TInt cmdId = aResponse.GetCmdId(); + TInt cmdResponse = aResponse.GetCmdStatus(); + TVtCommandResponse commandRsp(cmdType, cmdId, cmdResponse); + iProtocolHandler->HandleH324MConfigCommandCompletedL(commandRsp); + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::MPVH324MConfigCommandCompletedL>"))); + } + +// ----------------------------------------------------------------------------- +// TH324ConfigHandler::MPVH324MConfigInformationalEventL +// Handle an information event. +// ----------------------------------------------------------------------------- +// +void TH324ConfigHandler::MPVH324MConfigInformationalEventL(const CPVAsyncInformationalEvent& aEvent) + { + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::MPVH324MConfigInformationalEventL<"))); + const TUint8* buffer = aEvent.GetLocalBuffer(); + TInt eventType = aEvent.GetEventType(); + TVtIndicationEvent vtEvent(eventType, buffer); + iProtocolHandler->HandleH324MConfigInformationalEventL(vtEvent); + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::MPVH324MConfigInformationalEventL>"))); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetVendorId +// Sets the vendor identification data. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetVendorId"))); + return iH324Config->SetVendor(cc, ext, mc, aProduct, aVersion); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand +// This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand"))); + return iH324Config->SendVideoTemporalSpatialTradeoffCommand(aLogicalChannel, aTradeoff); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication +// This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication"))); + return iH324Config->SendVideoTemporalSpatialTradeoffIndication(aLogicalChannel, aTradeoff); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetVideoResolutions +// This API allows the user to specify the supported resolutions for video for transmit and receive. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetSupportedResolutions() + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetSupportedResolutions"))); + RArray resolutions; + TPVVideoResolutionRange qcif; + qcif.first.iWidth = KVtProtoResolutionQCIFWidth; + qcif.first.iHeight = KVtProtoResolutionQCIFHeight; + qcif.last.iWidth = KVtProtoResolutionQCIFWidth; + qcif.last.iHeight = KVtProtoResolutionQCIFHeight; + TInt err( resolutions.Append( qcif ) ); + if ( err == KErrNone ) + { + TPVVideoResolutionRange sqcif; + sqcif.first.iWidth = KVtProtoResolutionSQCIFWidth; + sqcif.first.iHeight = KVtProtoResolutionSQCIFHeight; + sqcif.last.iWidth = KVtProtoResolutionSQCIFWidth; + sqcif.last.iHeight = KVtProtoResolutionSQCIFHeight; + err = resolutions.Append( sqcif ); + if ( err == KErrNone ) + { + err = iH324Config->SetVideoResolutions( INCOMING, resolutions ); + } + } + resolutions.Close(); + + return err; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetFastCsupOptions +// This API allows the user to set options for fast call setup procedures. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetFastCsupOptions( ) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetFastCsupOptions"))); + TPVH324FastCsupOptions fastCsupOptions; + fastCsupOptions.iEnableWnsrp = ETrue; + fastCsupOptions.iEnableMona = EFalse; + return iH324Config->SetFastCsupOptions(fastCsupOptions); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendUserInputMessageL +// Causes the vt2way to send the specified user input to the remote terminal using +// control channel. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendUserInputMessageL(MVTUserInput& user_input) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendUserInputMessageL<"))); + if (user_input.GetType() == EVtUiiDTFM) + { + CVTUserInputDtmf* dtmf = static_cast(&user_input); + return iH324Config->SendUserInputL(*dtmf->iUII); + } + else if (user_input.GetType() == EVtUiiAlphaNumeric) + { + CVTUserInputAlphanumeric* alphanumeric = static_cast(&user_input); + return iH324Config->SendUserInputL(*alphanumeric->iUII); + } + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendUserInputMessageL>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetObserverL +// This API allows the user to specify observers for the 324m interface. +// ----------------------------------------------------------------------------- +// +void CH324ConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL<"))); + iH324ConfigHandler = new (ELeave)TH324ConfigHandler(aHandler); + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL observer %d"), iH324ConfigHandler)); + iH324Config->SetObserver(iH324ConfigHandler); + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::~CH324ConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CH324ConfigCommand::~CH324ConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::~CH324ConfigCommand<"))); + delete iH324ConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::~CH324ConfigCommand>"))); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/csessionhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/csessionhandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,450 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include +#include +#include +#include +#include "mvtprotocolhandler.h" +#include "cdatasinkproxy.h" +#include "cdatasourceproxy.h" +#include "csessionhandler.h" +#include "ccommserver.h" +#include "ch324confighandler.h" +#include "cvideoconfighandler.h" +#include "caudioconfighandler.h" + +#define DEBUG_CFG_BB_LOOPBACK 0 +#define DEBUG_CFG_PV_LOOPBACK 0 +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +const TInt KVtProtoMultiplexingDelay = 150; +const TInt EVtGet324CtrlInterface = 15; +const TInt EVtGetH263EncInterface = 24; +// ----------------------------------------------------------------------------- +// TSessionHandler::TSessionHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TSessionHandler::TSessionHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::TSessionHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::TSessionHandler>"))); + } + +// ----------------------------------------------------------------------------- +// TSessionHandler::CommandCompletedL +// Handle an event that has been generated. +// ----------------------------------------------------------------------------- +// +void TSessionHandler::CommandCompletedL(const CPVCmdResponse& aResponse) + { + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::CommandCompletedL<"))); + TVtCommandType cmdType = (TVtCommandType)aResponse.GetCmdType(); + TInt cmdId = (TInt)aResponse.GetCmdId(); + TInt cmdResponse = aResponse.GetCmdStatus(); + TVtCommandResponse commandRsp(cmdType, cmdId, cmdResponse); + iProtocolHandler->HandleSessionCommandEventL(commandRsp); + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::CommandCompletedL>"))); + } + +// ----------------------------------------------------------------------------- +// TSessionHandler::HandleInformationalEventL +// Handle an informational event that has been generated. +// ----------------------------------------------------------------------------- +// +void TSessionHandler::HandleInformationalEventL(const CPVAsyncInformationalEvent& aEvent) + { + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::HandleInformationalEventL<"))); + const TUint8* buffer = aEvent.GetLocalBuffer(); + TInt eventType = aEvent.GetEventType(); + TVtIndicationEvent vtEvent(eventType, buffer); + iProtocolHandler->HandleSessionInformationalEventL(vtEvent); + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::HandleInformationalEventL>"))); + } + +// ----------------------------------------------------------------------------- +// TSessionHandler::HandleErrorEventL +// Handle an error event that has been generated. +// ----------------------------------------------------------------------------- +// +void TSessionHandler::HandleErrorEventL(const CPVAsyncErrorEvent& aEvent) + { + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::HandleErrorEventL<"))); + TVtErrorEvent event(aEvent.GetEventType()); + iProtocolHandler->HandleSessionErrorEventL(event); + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::HandleErrorEventL>"))); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::CSessionCommand +// Constructor. +// ----------------------------------------------------------------------------- +// +CSessionCommand::CSessionCommand(TSessionHandler* aSessionHandler, MPV2WaySymbianInterface* aPv2Way) + : iPv2Way(aPv2Way), iSessionHandler(aSessionHandler) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CSessionCommand<"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::~CSessionComman +// Destructor. +// ----------------------------------------------------------------------------- +// +CSessionCommand::~CSessionCommand() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::~CSessionCommand<"))); + delete iVideoSource; + delete iDisplaySink; + delete iSessionHandler; + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::~CSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ConnectToProtocolL +// This function can be invoked only in the ESetup state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ConnectToProtocolL(MCommServer* aComm) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL"))); + TPVConnectOptions connectOptions; + connectOptions.iLoopbackMode = PV_LOOPBACK_NONE; +#ifdef _DEBUG + if ( DEBUG_CFG_BB_LOOPBACK ) + { + connectOptions.iLoopbackMode = PV_LOOPBACK_COMM; + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL Loopback COMM"))); + } + else if ( DEBUG_CFG_PV_LOOPBACK ) + { + connectOptions.iLoopbackMode = PV_LOOPBACK_MUX; + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL Loopback MUX"))); + } + else + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL Loopback NONE"))); + } +#endif + CCommServer* commServer = static_cast(aComm); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL commServer %d"), commServer)); + return iPv2Way->ConnectL(connectOptions, commServer->iComm); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::DisconnectFromProtocolL +// The Disconnect call is valid only when invoked in the EConnecting, and +// EConnected states. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::DisconnectFromProtocolL() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DisconnectFromProtocolL"))); + return iPv2Way->DisconnectL(); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResetProtocolL +// This function is valid only in the ESetup and EInitializing state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResetProtocolL() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResetProtocolL"))); + return iPv2Way->ResetL(); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::InitProtocolL +// This function is valid only in the EIdle state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::InitProtocolL(TVtInitInfo& aInitInfo) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::InitProtocolL"))); + CPV2WayInitInfo initInfo; + initInfo.iMultiplexingDelayMs = KVtProtoMultiplexingDelay; + + if (aInitInfo.iAMRWBOn) + { + initInfo.iIncomingAudioFormats. + Append((TDesC8 *)&KVtAudioMIMETypeAMRWBIF2); + + initInfo.iOutgoingAudioFormats. + Append((TDesC8 *)&KVtAudioMIMETypeAMRWBIF2); + } + + initInfo.iIncomingAudioFormats. + Append((TDesC8 *)&KVtAudioMIMETypeAMRIF2); + + initInfo.iOutgoingAudioFormats. + Append((TDesC8 *)&KVtAudioMIMETypeAMRIF2); + + initInfo.iIncomingVideoFormats. + Append( (TDesC8 *) &KVtVideoMIMETypeH264 ); + + initInfo.iOutgoingVideoFormats. + Append( (TDesC8 *) &KVtVideoMIMETypeH264 ); + + if (!aInitInfo.iDisableMpeg4) + { + initInfo.iIncomingVideoFormats. + Append((TDesC8 *)&KVtVideoMIMETypeM4V); + + initInfo.iOutgoingVideoFormats. + Append((TDesC8 *)&KVtVideoMIMETypeM4V); + } + + initInfo.iIncomingVideoFormats. + Append((TDesC8 *)&KVtVideoMIMETypeH263); + + initInfo.iOutgoingVideoFormats. + Append((TDesC8 *)&KVtVideoMIMETypeH263); + + return iPv2Way->InitL(initInfo); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddVideoSinkL +// Allows an application to provide a media sink for rendering an incoming media bitstream in a +// logical channel of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddVideoSinkL(const TUint aChannelId, MVTVideoSink& aDataSink) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSinkL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSinkL aChannelId %d"), aChannelId)); + iDisplaySink =CDisplaySinkProxy::NewL(&aDataSink); + return iPv2Way->AddDataSinkL(aChannelId, *iDisplaySink); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddVideoSourceL +// Allows an application to provide a media source to be associated with a logical channel +// of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddVideoSourceL(const TUint aChannelId, MVTVideoSource& aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSourceL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSourceL aChannelId %d"), aChannelId)); + iVideoSource = CVideoSourceProxy::NewL(&aDataSource); + return iPv2Way->AddDataSourceL(aChannelId, *iVideoSource); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddAudioSourceL +// Allows an application to provide a media source to be associated with a logical channel +// of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSourceL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSourceL aChannelId %d"), aChannelId)); + CAudioSourceProxy* audioSourceProxy = static_cast(&aDataSource); + return iPv2Way->AddDataSourceL(aChannelId, *(audioSourceProxy->iAudioSource)); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddAudioSinkL +// Allows an application to provide a media sink for rendering an incoming media bitstream in a +// logical channel of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSinkL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSinkL aChannelId %d"), aChannelId)); + CAudioSinkProxy* audioSinkProxy = static_cast(&aDataSink); + return iPv2Way->AddDataSinkL(aChannelId, *(audioSinkProxy->iAudioSink)); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseVideoL +// For an incoming track (MVTVideoSink) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseVideoL(MVTVideoSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseVideoL"))); + if (&aTrack == iVideoSource->VideoSource()) + { + return iPv2Way->PauseL(*iVideoSource); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseVideoL +// For an incoming track (MVtVideoSink) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseVideoL(MVTVideoSink& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseVideoL"))); + if (&aTrack == iDisplaySink->DisplaySink()) + { + return iPv2Way->PauseL(*iDisplaySink); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseAudioL +// For an incoming track (MVTAudioSource) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseAudioL(MVTAudioSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseAudioL"))); + CAudioSourceProxy* audioSourceProxy = static_cast(&aTrack); + return iPv2Way->PauseL(*(audioSourceProxy->iAudioSource)); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeVideoL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeVideoL(MVTVideoSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeVideoL"))); + if (&aTrack == iVideoSource->VideoSource()) + { + return iPv2Way->ResumeL(*iVideoSource); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeVideoL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeVideoL(MVTVideoSink& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeVideoL"))); + if (&aTrack == iDisplaySink->DisplaySink()) + { + return iPv2Way->ResumeL(*iDisplaySink); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeAudioL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeAudioL(MVTAudioSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeAudioL"))); + CAudioSourceProxy* audioSourceProxy = static_cast(&aTrack); + return iPv2Way->ResumeL(*(audioSourceProxy->iAudioSource)); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::CancelAllCommandsL +// This API is to allow the user to cancel all pending requests. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::CancelAllCommandsL( ) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CancelAllCommandsL"))); + return iPv2Way->CancelAllCommandsL(); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::GetProtocolInterfaceL +// This API is to allow for extensibility of the protocol interface. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::GetProtocolInterfaceL<"))); + TInt commandId = 0; + if (aType == EVtH324Config) + { + CH324ConfigCommand* H324ConfigCommand = new (ELeave)CH324ConfigCommand(); + commandId = iPv2Way->QueryInterfaceL( + KPVUidH324ConfigInterface, + ( MPVInterface*& ) H324ConfigCommand->PVH324ConfigInterface(), + ( void* ) EVtGet324CtrlInterface ); + + aProtocolCommand = H324ConfigCommand; + } + else if (aType == EVtVideoEncoderConfig) + { + CVideoConfigCommand* videoConfigCommand = new (ELeave)CVideoConfigCommand(); + commandId = iPv2Way->QueryInterfaceL( + KPVUidVidEncConfigInterface, + ( MPVInterface*& ) videoConfigCommand->PVVideoEncoderInterface(), + ( void* ) EVtGetH263EncInterface ); + + aProtocolCommand = videoConfigCommand; + } + else + { + ; + } + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::GetProtocolInterfaceL aType %d, aProtocolCommand %d>"), aType, aProtocolCommand)); + return commandId; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::DeleteProtocolInterfaceL +// This APIis to be used to release an interface that was previously obtained using +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand* aProtocolCommand) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DeleteProtocolInterfaceL<"))); + TInt commandId = 0; + if (aType == EVtH324Config) + { + CH324ConfigCommand* H324ConfigCommand = static_cast(aProtocolCommand); + commandId = iPv2Way->ReleaseInterfaceL(H324ConfigCommand->PVH324ConfigInterface()); + delete H324ConfigCommand; + } + else if (aType == EVtVideoEncoderConfig) + { + CVideoConfigCommand* videoConfigCommand = static_cast(aProtocolCommand); + commandId = iPv2Way->ReleaseInterfaceL(videoConfigCommand->PVVideoEncoderInterface()); + delete videoConfigCommand; + } + else + { + ; + } + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DeleteProtocolInterfaceL aType, aProtocolCommand %d>"), aType, aProtocolCommand)); + return commandId; + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/cvideoconfighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/cvideoconfighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,133 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include "mvtprotocolhandler.h" +#include "cvideoconfighandler.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// TVideoConfigHandler::TVideoConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TVideoConfigHandler::TVideoConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::TVideoConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::TVideoConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// TVideoConfigHandler::MPvMp4H263EncExtensionCommandCompletedL +// Handle an event that has been generated. +// ----------------------------------------------------------------------------- +// +void TVideoConfigHandler::MPvMp4H263EncExtensionCommandCompletedL(const CPVCmdResponse& aResponse) + { + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::MPvMp4H263EncExtensionCommandCompletedL<"))); + TVtCommandType cmdType = (TVtCommandType)aResponse.GetCmdType(); + TInt cmdId = aResponse.GetCmdId(); + TInt cmdResponse = aResponse.GetCmdStatus(); + TVtCommandResponse commandRsp(cmdType, cmdId, cmdResponse); + iProtocolHandler->HandleVideoEncoderCommandCompletedL(commandRsp); + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::MPvMp4H263EncExtensionCommandCompletedL>"))); + } + +// ----------------------------------------------------------------------------- +// TVideoConfigHandler::HandleMPvMp4H263EncExtensionInformationalEventL +// Handle an information event. +// ----------------------------------------------------------------------------- +// +void TVideoConfigHandler::HandleMPvMp4H263EncExtensionInformationalEventL(const CPVAsyncInformationalEvent& aEvent) + { + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::HandleMPvMp4H263EncExtensionInformationalEventL<"))); + const TUint8* buffer = aEvent.GetLocalBuffer(); + TInt eventType = aEvent.GetEventType(); + TVtIndicationEvent vtEvent(eventType, buffer); + iProtocolHandler->HandleVideoEncoderInformationalEventL(vtEvent); + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::HandleMPvMp4H263EncExtensionInformationalEventL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetObserverL +// This API allows the user to specify separate observers for the extension interface. +// ----------------------------------------------------------------------------- +// +void CVideoConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetObserverL<"))); + iVideoConfigHandler = new (ELeave)TVideoConfigHandler(aHandler); + iH263Encoder->SetObserver(iVideoConfigHandler); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetIntraFrameInterval +// Sets the I-Frame refresh rate of the encoded output. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::SetIntraFrameInterval(TUint32 aIFrameInterval) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetIntraFrameInterval"))); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetIntraFrameInterval aIFrameInterval %d"), aIFrameInterval)); + return iH263Encoder->SetIFrameInterval(aIFrameInterval); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::RequestNextIntraFrame +// Requests the encoder to encode the next frame as an I-Frame. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::RequestNextIntraFrame() + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::RequestNextIntraFrame"))); + return iH263Encoder->RequestIFrame(); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetVideoFrameRate +// Sets the frame rate of encoded output for the specified layer. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::SetVideoFrameRate(TUint32 aFrameRate) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetVideoFrameRate"))); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetVideoFrameRate aFrameRate %d"), aFrameRate)); + return iH263Encoder->SetOutputFrameRate(aFrameRate); + } + + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::~CVideoConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CVideoConfigCommand::~CVideoConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::~CVideoConfigCommand"))); + delete iVideoConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::~CVideoConfigCommand"))); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/cvtuserinput.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/cvtuserinput.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include "mvtprotocolhandler.h" +#include "cvtuserinput.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::ConstructL +// Constructor. +// ----------------------------------------------------------------------------- +// +void CVTUserInputDtmf::ConstructL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::ConstructL<"))); + iUII = CPVUserInputDtmfSymbian::NewL( aTone, 0 ); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::CVTUserInputDtmf +// Constructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputDtmf* CVTUserInputDtmf::NewL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::NewL<"))); + CVTUserInputDtmf* self = new (ELeave)CVTUserInputDtmf(); + CleanupStack::PushL(self); + self->ConstructL(aTone); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::NewL>"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::~CVTUserInputDtmf +// Destructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputDtmf::~CVTUserInputDtmf() + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::~CVTUserInputDtmf<"))); + delete iUII; + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::~CVTUserInputDtmf>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::GetType +// Virtual function to return the user input type +// ----------------------------------------------------------------------------- +// +TUserInputType CVTUserInputDtmf::GetType() + { + return EVtUiiDTFM; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::ConstructL +// Constructor. +// ----------------------------------------------------------------------------- +// +void CVTUserInputAlphanumeric::ConstructL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::ConstructL<"))); + TBuf8<1> tone; + tone.Append( aTone ); + iUII = CPVUserInputAlphanumericSymbian::NewL( tone ); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::CVTUserInputAlphanumeric +// Constructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputAlphanumeric* CVTUserInputAlphanumeric::NewL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::NewL<"))); + CVTUserInputAlphanumeric* self = new (ELeave)CVTUserInputAlphanumeric(); + CleanupStack::PushL(self); + self->ConstructL(aTone); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::NewL>"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric +// Destructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric() + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric<"))); + delete iUII; + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::GetType +// Virtual function to return the user input type. +// ----------------------------------------------------------------------------- +// +TUserInputType CVTUserInputAlphanumeric::GetType() + { + return EVtUiiAlphaNumeric; + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocols/src/vtprotocolfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocols/src/vtprotocolfactory.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,223 @@ +/* +* Copyright (c) 2004-2006 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 +#include +#include +#include +#include +#include "mvtprotocolhandler.h" +#include "cdatasourceproxy.h" +#include "cdatasinkproxy.h" +#include "csessionhandler.h" +#include "caudioconfighandler.h" +#include "cvtuserinput.h" +#include "ccommserver.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateSessionCommandL +// Create one instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtSessionCommand* VTProtocolFactory::CreateSessionCommandL(MVtProtocolHandler* aProtocolHandler, TBool aEnableProxy, TVt3G324MSupported& a3G324MSupported) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateSessionCommandL<"))); + a3G324MSupported = EVt3G324MSupported; + TSessionHandler * sessionHandler = new (ELeave)TSessionHandler(aProtocolHandler); + CleanupStack::PushL(sessionHandler); + MPV2WaySymbianInterface *pv2Way = CPV2WayFactory::CreateTerminalL(sessionHandler, sessionHandler, sessionHandler, aEnableProxy ); + CSessionCommand* sessionCommand = new (ELeave)CSessionCommand(sessionHandler, pv2Way); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateSessionCommandL sessionCommand %d>"), sessionCommand)); + return sessionCommand; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteSessionCommand +// This function allows the application to delete an instance of a terminal +// and reclaim all allocated resources. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteSessionCommand( MVtSessionCommand* aSessionCommand ) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteSessionCommand<"))); + CSessionCommand* sessionCommand = static_cast(aSessionCommand); + CPV2WayFactory::DeleteTerminal( sessionCommand->iPv2Way ); + delete aSessionCommand; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateAudioSource +// Creates an instance of a DevSound audio data source. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTAudioSource* VTProtocolFactory::CreateAudioSource() + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSource<"))); + TInt err( KErrNone ); + CAudioSourceProxy* audioSourceProxy = NULL; + TRAP (err, audioSourceProxy = new (ELeave) CAudioSourceProxy() ); + if (err != KErrNone) + { + return NULL; + } + audioSourceProxy->iAudioSource = CPVDevSoundAudioFactory::CreateDevSoundAudioDataSource(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSource audioSourceProxy %d>"), audioSourceProxy)); + return audioSourceProxy; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeletAudioSource +// Deletes an instance of a DevSound audio data source. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt VTProtocolFactory::DeletAudioSource(MVTAudioSource *aSource) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeletAudioSource<"))); + CAudioSourceProxy* audioSourceProxy = static_cast(aSource); + CPVDevSoundAudioFactory::DeleteDevSoundAudioDataSource(audioSourceProxy->iAudioSource); + delete aSource; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeletAudioSource>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateAudioSink +// Creates an instance of a DevSound audio data sink. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTAudioSink* VTProtocolFactory::CreateAudioSink() + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSink<"))); + TInt err( KErrNone ); + CAudioSinkProxy* audioSinkProxy = NULL; + TRAP(err, audioSinkProxy = new (ELeave) CAudioSinkProxy() ); + if (err != KErrNone) + { + return NULL; + } + audioSinkProxy->iAudioSink = CPVDevSoundAudioFactory::CreateDevSoundAudioDataSink(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSink audioSinkProxy %d>"), audioSinkProxy)); + return audioSinkProxy; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteAudioSink +// Deletes an instance of a DevSound audio data sink +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt VTProtocolFactory::DeleteAudioSink(MVTAudioSink *aSink) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteAudioSink<"))); + CAudioSinkProxy* audioSinkProxy = static_cast(aSink); + CPVDevSoundAudioFactory::DeleteDevSoundAudioDataSink(audioSinkProxy->iAudioSink); + delete aSink; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteAudioSink>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateCommServerL +// Creates an instance of a comm server of a particular name, to be used to +// initialize the terminal. +// ----------------------------------------------------------------------------- +// +EXPORT_C MCommServer* VTProtocolFactory::CreateCommServerL(const TDesC & aName, TBool aEnableBitReversal) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateCommServerL<"))); + CCommServer* commServer = new (ELeave)CCommServer(); + CleanupStack::PushL(commServer); + commServer->iComm = CPVCommFactory::CreateCommServerL(aName, aEnableBitReversal); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateCommServerL commServer %d>"), commServer)); + return commServer; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteCommServerL +// This function allows the application to delete an instance of a comm server +// and reclaim all allocated resources. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteCommServerL(MCommServer* aCommServer) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteCommServerL<"))); + CCommServer* commServer = static_cast(aCommServer); + CPVCommFactory::DeleteCommServerL(commServer->iComm); + delete aCommServer; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteCommServerL>"))); + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateUserInputIndication +// Create instance . +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTUserInput* VTProtocolFactory::CreateUserInputIndication(TUserInputType aUIIType, TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateUserInputIndication"))); + if (aUIIType == EVtUiiDTFM) + { + CVTUserInputDtmf* uii = CVTUserInputDtmf::NewL(aTone); + return uii; + } + else if (aUIIType == EVtUiiAlphaNumeric) + { + CVTUserInputAlphanumeric* uii = CVTUserInputAlphanumeric::NewL(aTone); + return uii; + } + else + { + return NULL; + } + + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteUserInputIndication +// Delete instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteUserInputIndication(MVTUserInput* aUII) + { + delete aUII; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::GetAudioConfigCommandL +// Get one instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtAudioConfigCommand* VTProtocolFactory::GetAudioConfigCommandL(MVTAudioSink* aAudioSink) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::GetAudioConfigCommandL<"))); + CAudioSinkProxy* audioSinkProxy = static_cast(aAudioSink); + MPVAudioOutputControl* audioCtrl = CPVDevSoundAudioFactory::GetDevSoundAudioOutputControl( + audioSinkProxy->iAudioSink, ETrue ); + CAudioConfigCommand* audioConfigCommand = new (ELeave)CAudioConfigCommand(audioCtrl); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::GetAudioConfigCommandL audioConfigCommand %d>"), audioConfigCommand)); + return audioConfigCommand; + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/bwins/videotelprotou.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/bwins/videotelprotou.def Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,13 @@ +EXPORTS + ?DeleteAudioSink@VTProtocolFactory@@SAHPAVMVTAudioSink@@@Z @ 1 NONAME ; int VTProtocolFactory::DeleteAudioSink(class MVTAudioSink *) + ?CreateAudioSink@VTProtocolFactory@@SAPAVMVTAudioSink@@XZ @ 2 NONAME ; class MVTAudioSink * VTProtocolFactory::CreateAudioSink(void) + ?CreateCommServerL@VTProtocolFactory@@SAPAVMCommServer@@ABVTDesC16@@H@Z @ 3 NONAME ; class MCommServer * VTProtocolFactory::CreateCommServerL(class TDesC16 const &, int) + ?CreateUserInputIndication@VTProtocolFactory@@SAPAVMVTUserInput@@W4TUserInputType@@E@Z @ 4 NONAME ; class MVTUserInput * VTProtocolFactory::CreateUserInputIndication(enum TUserInputType, unsigned char) + ?CreateSessionCommandL@VTProtocolFactory@@SAPAVMVtSessionCommand@@PAVMVtProtocolHandler@@HAAW4TVt3G324MSupported@@@Z @ 5 NONAME ; class MVtSessionCommand * VTProtocolFactory::CreateSessionCommandL(class MVtProtocolHandler *, int, enum TVt3G324MSupported &) + ?DeletAudioSource@VTProtocolFactory@@SAHPAVMVTAudioSource@@@Z @ 6 NONAME ; int VTProtocolFactory::DeletAudioSource(class MVTAudioSource *) + ?GetAudioConfigCommandL@VTProtocolFactory@@SAPAVMVtAudioConfigCommand@@PAVMVTAudioSink@@@Z @ 7 NONAME ; class MVtAudioConfigCommand * VTProtocolFactory::GetAudioConfigCommandL(class MVTAudioSink *) + ?CreateAudioSource@VTProtocolFactory@@SAPAVMVTAudioSource@@XZ @ 8 NONAME ; class MVTAudioSource * VTProtocolFactory::CreateAudioSource(void) + ?DeleteCommServerL@VTProtocolFactory@@SAXPAVMCommServer@@@Z @ 9 NONAME ; void VTProtocolFactory::DeleteCommServerL(class MCommServer *) + ?DeleteUserInputIndication@VTProtocolFactory@@SAXPAVMVTUserInput@@@Z @ 10 NONAME ; void VTProtocolFactory::DeleteUserInputIndication(class MVTUserInput *) + ?DeleteSessionCommand@VTProtocolFactory@@SAXPAVMVtSessionCommand@@@Z @ 11 NONAME ; void VTProtocolFactory::DeleteSessionCommand(class MVtSessionCommand *) + diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/eabi/videotelprotou.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/eabi/videotelprotou.def Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,13 @@ +EXPORTS + _ZN17VTProtocolFactory15CreateAudioSinkEv @ 1 NONAME + _ZN17VTProtocolFactory15DeleteAudioSinkEP12MVTAudioSink @ 2 NONAME + _ZN17VTProtocolFactory16DeletAudioSourceEP14MVTAudioSource @ 3 NONAME + _ZN17VTProtocolFactory17CreateAudioSourceEv @ 4 NONAME + _ZN17VTProtocolFactory17CreateCommServerLERK7TDesC16i @ 5 NONAME + _ZN17VTProtocolFactory17DeleteCommServerLEP11MCommServer @ 6 NONAME + _ZN17VTProtocolFactory20DeleteSessionCommandEP17MVtSessionCommand @ 7 NONAME + _ZN17VTProtocolFactory21CreateSessionCommandLEP18MVtProtocolHandleriR18TVt3G324MSupported @ 8 NONAME + _ZN17VTProtocolFactory22GetAudioConfigCommandLEP12MVTAudioSink @ 9 NONAME + _ZN17VTProtocolFactory25CreateUserInputIndicationE14TUserInputTypeh @ 10 NONAME + _ZN17VTProtocolFactory25DeleteUserInputIndicationEP12MVTUserInput @ 11 NONAME + diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,36 @@ +/* +* 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" +* 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: Video Telephony Protocol +* +*/ +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_TESTEXPORTS + +PRJ_EXPORTS + + +../inc/MVtProtocolHandler.h |../../inc/MVtProtocolHandler.h + + +PRJ_MMPFILES + +../Group/videotelproto.mmp + + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/group/videotelproto.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/group/videotelproto.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,65 @@ +/* +* 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" +* 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: Video telephony protocol +* +*/ + +#include + +// Capability assignment. +CAPABILITY CAP_GENERAL_DLL + +// default vendor id +VENDORID VID_DEFAULT + +TARGET videotelproto.dll +TARGETTYPE dll +UID 0x1000008d 0x20021182 + + +SOURCEPATH ../src + +SOURCE cdatasinkproxy.cpp +SOURCE cdatasourceproxy.cpp +SOURCE caudioconfighandler.cpp +SOURCE ch324confighandler.cpp +SOURCE csessionhandler.cpp +SOURCE cvideoconfighandler.cpp +SOURCE cvtuserinput.cpp +SOURCE vtprotocolfactory.cpp + +DOCUMENT ../../group/bld.inf + +USERINCLUDE ../inc/ + + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE ../../inc +SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/mmf/server + +LIBRARY euser.lib +LIBRARY ws32.lib + +LIBRARY commonengine.lib +LIBRARY MediaClientAudio.lib + + + +DEBUGLIBRARY vtlogger.lib + +LIBRARY MMFDevSound.lib + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/caudioconfighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/caudioconfighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,86 @@ +/* +* 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" +* 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: Audio configuration interface +* +*/ + +#ifndef CAUDIOCONFIGHANDLER_H +#define CAUDIOCONFIGHANDLER_H +NONSHARABLE_CLASS( TAudioConfigHandler ) + { + public: + /** + * Constructor. + */ + TAudioConfigHandler( MVtProtocolHandler* aProtocolHandler); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CAudioConfigCommand ) : public CBase, + public MVtAudioConfigCommand + { + public: + + /** + * Constructor. + */ + CAudioConfigCommand(); + + /** + * Destructor. + */ + ~CAudioConfigCommand(); + + /** + * Method to set the playback volume to the specified value. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aNewVolume + * An input parameter to hold the value for the requested playback volume. + * + * @returns TInt + * Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt SetAudioVolumeL(TInt aVolume); + + /** + * Method to get the maximum valid value for the playback volume. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aMaxVolume + * An output parameter to hold the value for the maximum valid playback volume. + * Note that the parameter should not be used until the callback indicates that the + * method has completed. + * + * @returns TInt + * Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt GetMaxAudioVolumeL(TInt& aMaxVolume); + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + private: + TAudioConfigHandler* iAudioConfigHandler; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/ccommserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/ccommserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,25 @@ +/* +* 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" +* 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: Comm server interface +* +*/ + +#ifndef CCOMMSERVER_H +#define CCOMMSERVER_H +NONSHARABLE_CLASS( CCommServer ) : public CBase, + public MCommServer + { + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/cdatasinkproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/cdatasinkproxy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* 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" +* 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: Data Sink Proxy interface +* +*/ + +#ifndef CDATASINKPROXY_H +#define CDATASINKPROXY_H + +NONSHARABLE_CLASS( CDisplaySinkProxy ) : public CBase + { + public: + /** + * Constructor. + */ + CDisplaySinkProxy(MVTVideoSink* aDisplaySink); + + /** + * ConstructL + */ + void ConstructL(); + + /** + * NewL + */ + static CDisplaySinkProxy* NewL(MVTVideoSink* aDisplaySink); + /** + * Get pointer object of data sink. + * @return member variant:iDisplaySink + */ + MVTVideoSink* DisplaySink() { return iDisplaySink; } + private: + MVTVideoSink* iDisplaySink; + }; + +NONSHARABLE_CLASS( CAudioSinkProxy ) : public CBase, + public MVTAudioSink + { + }; + +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/cdatasourceproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/cdatasourceproxy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,52 @@ +/* +* 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" +* 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: Data Source proxy interface +* +*/ + +#ifndef CDATASOURCEPROXY_H +#define CDATASOURCEPROXY_H + +NONSHARABLE_CLASS( CVideoSourceProxy ) : public CBase + { + public: //new + /** + * Constructor. + */ + CVideoSourceProxy(MVTVideoSource* aVideoSource); + /** + * ConstructL. + */ + void ConstructL( ); + + /** + * NewL. + */ + static CVideoSourceProxy* NewL(MVTVideoSource* aVideoSource); + + /** + * Get member variant. + * @return memeber variant:iVideoSource + */ + MVTVideoSource* VideoSource() { return iVideoSource; } + private: + MVTVideoSource* iVideoSource; + }; + +NONSHARABLE_CLASS( CAudioSourceProxy ) : public CBase, + public MVTAudioSource + { + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/ch324confighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/ch324confighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* 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" +* 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: H324M configuration interface +* +*/ + +#ifndef CH324ConfigHandler_H +#define CH324ConfigHandler_H +NONSHARABLE_CLASS( TH324ConfigHandler ) + { + public: + + /** + * Constructor. + */ + TH324ConfigHandler(MVtProtocolHandler* aProtocolHandler); + + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CH324ConfigCommand ): public CBase, + public MVtH324ConfigCommand + { + public: + /** + * Destructor. + */ + ~CH324ConfigCommand(); + + /** + * Sets the vendor identification data. This does not cause the stack to issue a vendor identifiation request. + * Set to NULL to disable sending vendor id. If set to a valid parameter before Connect, it will cause the stack + * to automatically send it along with the TCS message. + * @param cc + * T35 Country code + * @param ext + * T35 Extension + * @param mc + * T35 Manufacturer code + * @param aProduct + * Product number + * @param aVersion + * Version number + **/ + virtual TInt SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion); + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is a request to the remote encoder to adjust its encoding in accordance with the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff); + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is an indication to the remote decoder that the local encoder has adjusted its encoding parameters + * according to the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff); + + /** + * This API allows the user to specify the supported resolutions for video for transmit and receive. + * + **/ + virtual TInt SetSupportedResolutions( ); + /** + * This API allows the user to set options for fast call setup procedures + **/ + virtual TInt SetFastCsupOptions( ); + + /** + * Causes the protocol to send the specified user input to the remote terminal using + * control channel. The user input can be either DTMF ot Alphanumeric + * @param user_input A pointer to MVTUserInput + * @returns A unique command id for asynchronous completion + **/ + virtual TInt SendUserInputMessageL(MVTUserInput& user_input); + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler the observer for command status and unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + + private: + TH324ConfigHandler* iH324ConfigHandler; + }; +#endif +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/csessionhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/csessionhandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,223 @@ +/* +* 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" +* 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: Session command interface +* +*/ + +#ifndef CSESSIOHANDLER_H +#define CSESSIOHANDLER_H +NONSHARABLE_CLASS( TSessionHandler ) + { + public: + /** + * Constructor. + */ + TSessionHandler(MVtProtocolHandler* aProtocolHandler); + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CSessionCommand ): public CBase, + public MVtSessionCommand + { + public: + /** + * Contructor. + */ + CSessionCommand(TSessionHandler* aSessionHandler); + + /** + * Destructor. + */ + ~CSessionCommand(); + + /** + * This function is valid only in the EIdle state. It is a no-op when + * invoked in any other state. It causes the protocol to transition + * to the ESetup state. The terminal remains in the EInitializing state during + * the transition. + * + * + * @param aInitInfo + * A reference to a TVtInitInfo structure which set Mona on and off + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt InitProtocolL(TVtInitInfo& aInitInfo); + + /** + * For an incoming track (MVTVideoSink) this function pauses sending + * media to the sink (output device) and stops the sink. It then does the protocol + * negotiations with the remote terminal to pause the logical channel for + * the specified track. + * + * For outgoing, it pauses the sending of media from the source and calls Stop() on the + * source. It also performs any necessary protocol negotiations with the remote terminal. + * EVtCommandPause will be sent to the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt PauseVideoL(MVTVideoSource& aDataSource); + virtual TInt PauseVideoL(MVTVideoSink& aDataSink); + virtual TInt PauseAudioL(MVTAudioSource& aAudioSource); + + /** + * Resume a previously paused incoming or outgoing track. For incoming, + * this function starts resumes playing out the media to the appropriate + * sink based on the current settings. For outgoing it resumes encoding + * and sending media from the source. + * + * EVtCommandResume will be invoked will be invoked on the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResumeVideoL(MVTVideoSource& aDataSource); + virtual TInt ResumeVideoL(MVTVideoSink& aDataSink); + virtual TInt ResumeAudioL(MVTAudioSource& aAudioSource); + + /** + * This function is valid only in the ESetup and EInitializing state. It is a + * no-op when invoked in the EIdle state + * + * It causes the protocol to transition back to the EIdle state. The + * terminal remains in the EResetting state during the transition. + * + * While resetting, the protocol de-allocates all resources resources that + * had been previously allocated. When it completes, ResetComplete is called + * and the protocol reverts to the EIdle state. + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResetProtocolL(); + + /** + * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote + * terminal based on the specified options and capabilities. + * The EVtCommandConnect command completion event will be passed to the observer + * when connect completes. + * Details about the negotiated session may be obtained by calling the GetSessionParamsL API. + * GetSessionParamsL may be called after call setup is started to get the list of available channels + * and their capabilities. + * Incoming tracks may be opened before ConnectL completes and will be indicated via the + * EVtIndicationIncommingTrack event. + * + * @param aComm + * An optional pointer to a comm server to provide comm source and sink end-points. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ConnectToProtocolL(MCommServer* aComm); + + /** + * Allows an application to provide a media source to be associated with a logical channel + * of communication with the peer. Sources should be added after the EVtIndicationOutgoingTrack + * indication is received for a newly established logical channel. The media type and + * channel id associated with the logical channel are specified as part of the indication. + * This function accepts a MVtVideoSource which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * Data sources could be of the following types: + * a)raw media sources like camera, microphone etc. + * b)sources of compressed data like file, gateway component etc. + * + * @param aChannelId + * Indicates the channel id to be associated with this source. + * @param aDataSource + * reference to the data source + * @leave This method can leave with one of the following error codes + * KErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle + * KPVErrInvalidState if invoked in the incorrect state + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @return A unique command id for asynchronous completion + */ + virtual TInt AddVideoSourceL(const TUint aChannelId, MVTVideoSource &aDataSource); + virtual TInt AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource); + + /** + * Allows an application to provide a media sink for rendering an incoming media bitstream in a + * logical channel of communication with the peer. + * AddDataSinkL can be called only for established incoming logical channels identified by a unique + * channel id. + * Regular incoming channels are established by the peer and are + * indicated using the EVtIndicationIncomingTrack indication. + * This function takes in PV extension to MVtVideoSink or MVtAudioSink which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * EVtCommandAddDataSink event is sent to the observer on completion of this call. + * + * @param aChannelId + * Indicates the channel id to be associated with this sink. + * @param aDataSink The data sink to be added + * + * @return A unique command id for asynchronous completion + **/ + virtual TInt AddVideoSinkL(const TUint aChannelId, MVTVideoSink &aDataSink); + virtual TInt AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink); + + /** + * This API is to allow the user to cancel all pending requests. The current request being + * processed, if any, will also be aborted. + * EVtCommandCancelAllCommands will be passed to the command observer on completion. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt CancelAllCommandsL( ); + + /** + * The Disconnect call is valid only when invoked in the EConnecting, and + * EConnected states. It causes the terminal to transition to the + * EDisconnecting state. All the media tracks both incoming and outgoing + * will be closed on invoking Disconnect. On completion, the terminal + * goes to the ESetup state. + * + * It is a no-op when called in any other state. + * + * This is an asynchronous request. The EvtCommandDisconnect event will be + * sent to the observer when the request processing is complete. This + * is the only event the Phone application should expect after calling + * Disconnect. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt DisconnectFromProtocolL(); + + /** + * This API is to allow for extensibility of the protocol interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aType + * @param aProtocolCommand + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand); + + /** + * This APIis to be used to release an interface that was previously obtained using + * QueryInterfaceL. + * @param aType + * @param + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand* aProtocolCommand); + private: + CVideoSourceProxy* iVideoSource; + CDisplaySinkProxy* iDisplaySink; + TSessionHandler* iSessionHandler; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/cvideoconfighandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/cvideoconfighandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,77 @@ +/* +* 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" +* 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: Video configuration interface +* +*/ + +#ifndef CVideoConfigHandler_H +#define CVideoConfigHandler_H +NONSHARABLE_CLASS( TVideoConfigHandler ) + { + public: + + /** + * Constructor. + */ + TVideoConfigHandler(MVtProtocolHandler* aProtocolHandler); + + private: + MVtProtocolHandler* iProtocolHandler; + }; + +NONSHARABLE_CLASS( CVideoConfigCommand ) : public CBase, + public MVtVideoConfigCommand + { + public: + /** + * Destructor. + */ + ~CVideoConfigCommand(); + + /** + * Sets the I-Frame refresh rate of the encoded output. + * + * @param aIFrameInterval I-Frame rate in seconds per I-Frame + * @return True if successful, else false + */ + virtual TInt SetIntraFrameInterval(TUint32 aIFrameInterval); + + /** + * Requests the encoder to encode the next frame as an I-Frame. This menthod is valid + * only when the node is in EPVMFNodeStarted state. If successful, the next encoded + * frame will be an I-Frame. + * + * @return True for success, else false + */ + virtual TInt RequestNextIntraFrame(); + + /** + * Sets the frame rate of encoded output for the specified layer. + * @param aFrameRate Frame rate for the specified layer in frames per second. + * @return True if successful, else false. + */ + virtual TInt SetVideoFrameRate(TUint32 aFrameRate); + + /** + * This API allows the user to specify separate observers for the extension interface. + * + * @param aHandler the observer for unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler); + + private: + TVideoConfigHandler* iVideoConfigHandler; + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/cvtuserinput.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/cvtuserinput.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,68 @@ +/* +* 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" +* 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: User input interface +* +*/ + +#ifndef CVTUSERINPUT_H +#define CVTUSERINPUT_H +NONSHARABLE_CLASS( CVTUserInputDtmf ) : public CBase, + public MVTUserInput + { + public: + /** + * ConstructL. + */ + void ConstructL(TUint8 aTone); + /** + * NewL. + */ + static CVTUserInputDtmf* NewL(TUint8 aTone); + + /** + * Destructor. + */ + ~CVTUserInputDtmf(); + + /** + * Virtual function to return the user input type + **/ + virtual TUserInputType GetType(); + }; + +NONSHARABLE_CLASS( CVTUserInputAlphanumeric ) : public CBase, + public MVTUserInput + { + public: + /** + * ConstructL. + */ + void ConstructL(TUint8 aTone); + /** + * NewL. + */ + static CVTUserInputAlphanumeric* NewL(TUint8 aTone); + + /** + * Destructor. + */ + ~CVTUserInputAlphanumeric(); + + /** + * Virtual function to return the user input type + **/ + virtual TUserInputType GetType(); + }; +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/inc/mvtprotocolhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/inc/mvtprotocolhandler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1124 @@ +/* +* 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" +* 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: Video Telephony Protocol interface +* +*/ + +#ifndef MVTENGMEDIAHANDLER_H +#define MVTENGMEDIAHANDLER_H + +// INCLUDES +#include +#include +#include +#include + +typedef TInt TVtCommandId; +typedef TInt TVtCommandStatus; +typedef TDesC8 TVtMIMEType; + +const TUid KVTUidYUVFrameBuffer = {0xFFFFFF0d}; +const TInt KVtUidDataSrcPrime = 0xFFFFFF08; +const TInt KVtUidDataSrcPlay = 0xFFFFFF09; +const TInt KVtUidDataSrcPause = 0xFFFFFF0A; +const TInt KVtUidDataSrcStop = 0xFFFFFF0B; + +_LIT8(KVtVideoMIMETypeYUV420, "/video/x-pv/raw/yuv420"); + +enum TVt3G324MSupported + { + EVt3G324MMissing, + EVt3G324MSupported + }; + +enum TVtConfigType + { + EVtH324Config, + EVtVideoEncoderConfig + }; + +enum TVtCommandType { + EVtCommandInit, + EVtCommandGetSDKInfo, + EVtCommandGetProtocolState = 3, + EVtCommandReset, + EVtCommandAddDataSource = 6, + EVtCommandRemoveDataSource, + EVtCommandAddDataSink, + EVtCommandRemoveDataSink, + EVtCommandConnect, + EVtCommandDisconnect, + EVtCommandPause, + EVtCommandResume, + EVtCommandGetProtocolInterface =20, + EVtCommandDeleteProtocolInterface, + EVtCommandCancelAllCommands + }; + +enum TVtIndicationType + { + EVtIndicationVideoSpatialTamporalTradeOffCommand, + EVtIndicationVideoSpatialTamporalTradeOffIndication, + EVtIndicationUserInputCapability = 6, + EVtIndicationIncomingTrack = 41, + EVtIndicationOutgoingTrack, + EVtIndicationDisconnect, + EVtIndicationClosingTrack, + EVtIndicationCloseTrack, + EVtIndicationPauseTrack, + EVtIndicationResumeTrack + }; + +enum TVtMediaType + { + EVtAudio = 1, + EVtVideo, + EVtControl, + EVtData, + EVtUserInput, + EVtMediaNone + }; + +enum TVtAudioOutputControlCommand + { + EVtAudioOutputControlGetMaxVolume, + EVtAudioOutputControlGetVolume, + EVtAudioOutputControlSetVolume, + EVtAudioOutputControlGetBalance, + EVtAudioOutputControlSetBalance + }; + +const TUint8 EVtIncoming = 1; + +enum TUserInputType + { + EVtUiiDTFM, + EVtUiiAlphaNumeric + }; + +struct TVtInitInfo + { + TBool iAMRWBOn; + TBool iDisableMpeg4; + }; + +struct TVtIndicationEvent + { + public: + /** + * Constructor. + */ + TVtIndicationEvent(TInt aEventType, const TUint8 *aLocalBuffer) : iEventType(aEventType), iLocalBuffer(aLocalBuffer) + {} + public: + TInt iEventType; + const TUint8 *iLocalBuffer; + }; + +struct TVtCommandResponse + { + public: + /** + * Constructor. + */ + TVtCommandResponse(TVtCommandType aCmdType, TInt aCmdId, TInt iCmdStatus) : iCmdType(aCmdType), iCmdId(aCmdId), iCmdStatus(iCmdStatus) + {} + public: + TVtCommandType iCmdType; + TInt iCmdId; + TInt iCmdStatus; + }; + +struct TVtErrorEvent + { + public: + /** + * Constructor. + */ + TVtErrorEvent(TInt aEventType) : iEventType(aEventType) {} + public: + TInt iEventType; + }; + +struct TVtMMFDataBuffer + { + public: + /** + * Constructor. + */ + TVtMMFDataBuffer(CMMFBuffer* aMmfBuffer,TSize aFrameSize, TPtr8& aPtr) : iMmfBuffer(aMmfBuffer), iFrameSize(aFrameSize), iPtr(aPtr) {} + + /** + * Get the YUV frame size. + * @return The frame size, in pixels + */ + TSize GetFrameSize() {return iFrameSize;} + + /** + * Get MMF buffer. + * @return the MMF buffer + */ + CMMFBuffer* GetMMFBuffer() {return iMmfBuffer;} + + /** + * Get MMF buffer. + * @return the MMF buffer + */ + const CMMFBuffer* GetMMFBuffer() const {return iMmfBuffer;} + + /** + * @return Returns a reference to the data buffer + **/ + TPtr8& Data() {return iPtr;} + + /** + * @return Returns the frame size of the contained buffer. + **/ + const TSize GetFrameSize() const {return iFrameSize;} + + /** + * @return Returns a reference to the data buffer + **/ + const TPtr8& Data() const {return iPtr;} + private: + CMMFBuffer* iMmfBuffer; + TSize iFrameSize; + TPtr8& iPtr; + }; + +class MVTVideoInput + { + public: + + /** + * Set the video frame format. This must be from the list of supported formats. + * @param "aFormat" The mime string describing the video frame format. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFormatL(const TDesC8& aFormat) {} + + /** + * Set the video frame rate. This must be within the range of supported frame rates + * for the current frame size. + * @param "aFrameRate" The video frame rate to set. + * @exception Can leave with one of the system wide error codes + */ + virtual void SetFrameRateL(TReal32 aFrameRate) {} + + /** + * Set the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void SetVideoFrameSizeL(const TSize& aSize) {} + + /** + * Get the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + */ + virtual void GetVideoFrameSizeL(TSize& aSize) const {} + + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return + **/ + virtual const RArray& GetMultimediaTypesL() const {} + }; + +class MVTVideoOutput + { + public: + + /** + * Sets the data format using MIME string. + * @param aFormat The format as a MIME string. + **/ + virtual void SetFormatL(const TDesC8& aFormat) {} + + /** + * Set the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void SetVideoFrameSizeL(const TSize& aSize) {} + + /** + * Get the video frame size + * @param "aSize" The video frame size, in pixels + * @exception Can leave with one of the system wide error codes + **/ + virtual void GetVideoFrameSizeL(TSize& aSize) const {} + + /** + * This API returns multimedias type supported by the data source/sink - + * Audio, Video, Data etc. Each supported type is indicated by a MIME type structure. + * @return + **/ + virtual const RArray& GetMultimediaTypesL() const {} + }; + +//This class is empty +class MVTAudioSource + { + }; + +//This class is empty +class MVTAudioSink + { + }; + +class MVTVideoSource; +class MVTVideoSink : public MVTVideoOutput + { + public: + /** + * Constructor. + */ + MVTVideoSink(TUid aType): iDataSinkType(aType) {} + + /** + * Method called by a data source to request the data sink to empty aBuffer of data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data sink is passively waiting for requests from a supplier ie a data source + * to empty a buffer. The data sink must call the BufferEmptiedL member on aSupplier when it has emptied + * the buffer of it's data - the data sink can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The full buffer that needs emptying of it's data + * + * @param "aSupplier" + * The data source that supplied the data. The data sink needs this to make the BufferEmptiedL + * callback on aSupplier to indicate to the data source that the data sink has finished with the buffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data + */ + virtual void EmptyBufferL( + TVtMMFDataBuffer aDataBuffer, + MVTVideoSource* aSupplier, + TMediaId aMediaId ) {} + + /** + * Method called by a data source to pass back an filled buffer to the sink + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data sink actively requests a supplier ie a data source + * to fill a buffer by calling the data sources FillBufferL. + * When the data sink gets this callback it knows that the buffer has been filled and is ready to be emptied + * + * @param "aBuffer" + * The buffer that has been filled by a data source and is now available for processing + */ + virtual void BufferFilledL( CMMFBuffer* aBuffer ) = 0; + + /** + * Method to indicate whether the data sink can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data sink can create a buffer else EFalse + */ + virtual TBool CanCreateSinkBuffer() {return EFalse;} + + /** + * Returns a buffer created by the data sink + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data. + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the sink + * and should be used in preference to the source buffer provided the source buffer + * is also not a reference buffer. + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSinkBufferL( + TMediaId aMediaId, + TBool &aReference ) {return NULL;} + + /** + * Method to 'logon' the data sink to the same thread that sink will be consuming data in. + * + * This method may be required as the thread that the data sink was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SinkThreadLogon rather than in the creation + * of the data sink. + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * initialisation is required and/or the data sink can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SinkThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ) {return KErrNone;} + + /** + * Method to 'logoff' the data sink from the same thread that sink consumes data in. + * + * This method may be required as the thread that the data sink is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SinkThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data sink can implement if any thread specific + * releasing of resources is required. + */ + virtual void SinkThreadLogoff() {} + + /** + * Method to 'prime' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific 'priming' is required + */ + virtual TInt SinkPrimeL() {return 0;} + + /** + * Method to 'play' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SinkPlayL() {return 0;} + + /** + * Method to 'pause' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'pause' + */ + virtual TInt SinkPauseL() {return 0;} + + /** + * Method to 'stop' the data sink + * + * This is a virtual function that a derrived data sink can implement if + * any data sink specific action is required to 'stop' + */ + virtual TInt SinkStopL() {return 0;} + private: + TUid iDataSinkType; + }; + +class MVTVideoSource : public MVTVideoInput + { + public: + + /** + * Constructor. + */ + MVTVideoSource(TUid aType): iDataSourceType(aType) {} + + /** + * Method called by a data sink to request the data source to fill aBuffer with data. + * + * This is a pure virtual function that each derived class must implement. + * This method is used when a data source is passively waiting for requests from a consumer ie a data sink + * to fill a buffer. The data source must call the BufferFilledL member on aConsumer when it has filled + * the buffer with data - the data source can either make this callback synchronously or asynchronously. + * + * @param "aBuffer" + * The buffer that needs filling with data + * + * @param "aConsumer" + * The data sink that consumes the data. The data source needs this to make the BufferFilledL + * callback on aConsumer when the data source has completed filling the aBuffer. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + */ + virtual void FillBufferL( + CMMFBuffer* aBuffer, + MVTVideoSink* aConsumer, + TMediaId aMediaId ) {} + + /** + * Method called by a data sink to pass back an emptied buffer to the source + * + * This is a pure virtual function that each derived class must implement. + * This method is used as the callback when the data source actively requests a consumer ie a data sink + * to empty a buffer by calling the data sinks EmptyBufferL. + * When the data source gets this callback it knows that the buffer has been emptied and can be reused + * + * @param "aBuffer" + * The buffer that has been emptied by a data sink and is now available for reuse + */ + virtual void BufferEmptiedL( CMMFBuffer* aBuffer ) = 0; + + /** + * Method to indicate whether the data source can create a buffer. + * + * This is a pure virtual function that each derived class must implement. + * + * @return ETrue if the data source can create a buffer else EFalse + */ + virtual TBool CanCreateSourceBuffer() {return EFalse;} + + /** + * Returns a buffer created by the data source + * + * This is a pure virtual function that each derived class must implement. + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer + * is also not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + TBool &aReference ) {return NULL;} + + /** + * Returns a buffer created by the data source + * + * This is a virtual function that a derived class can implement. + * This can be used in preference to the above CreateSourceBufferL method in cases where + * the source buffer creation has a dependancy on the sink buffer + * + * @param "aMediaId" + * This identifies the type of media eg audio or video and the stream id. + * This parameter is required in cases where the source can supply data + * of more than one media type and/or multiple strams of data eg a multimedia file + * + * @param "aSinkBuffer" + * The sink buffer the nature of which may influence the creation of the source buffer + * + * @param "aReference" + * This must be written to by the method to indicate whether the created buffer is + * a 'reference' buffer. A 'reference' buffer is a buffer that is owned by the source + * and should be used in preference to the sink buffer provided the sink buffer is not a reference buffer + * . + * @return The created buffer + */ + virtual CMMFBuffer* CreateSourceBufferL( + TMediaId aMediaId, + CMMFBuffer& aSinkBuffer, + TBool &aReference ) {return NULL;} + + /** + * Method to 'logon' the data source to the same thread that source will be supplying data in. + * + * This method may be required as the thread that the data source was created in is not always + * the same thread that the data transfer will take place in. Therefore any thread specific + * initialisation needs to be performed in the SourceThreadLogon rather than in the creation + * of the data source. + * + * This is a virtual function that a derrived data source can implement if any thread specific + * initialisation is required and/or the data source can create any asynchronous events. + * + * + * @param "aEventHandler" + * This is an MAsyncEventHandler to handle asynchronous events that occur during the + * transfer of multimedia data. The event handler must be in the same thread as the data transfer + * thread - hence the reason it is passed in the SourceThreadLogon as opposed to say the constructor. + * + * + * @return KErrNone if successful, otherwise a system wide error code. + */ + virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ) {return KErrNone;} + + /** + * Method to 'logoff' the data source from the same thread that source supplies data in. + * + * This method may be required as the thread that the data source is deleted in may not be + * the same thread that the data transfer took place in. Therefore any thread specific + * releasing of resources needs to be performed in the SourceThreadLogoff rather than in the destructor + * + * This is a virtual function that a derrived data source can implement if any thread specific + * releasing of resources is required. + */ + virtual void SourceThreadLogoff() {} + + /** + * Method to 'prime' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific 'priming' is required + */ + virtual TInt SourcePrimeL() {return 0;} + + /** + * Method to 'play' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required prior to 'playing'ie the start of data transfer + */ + virtual TInt SourcePlayL() {return 0;} + + /** + * Method to 'pause' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'pause' + */ + virtual TInt SourcePauseL() {return 0;} + + /** + * Method to 'stop' the data source + * + * This is a virtual function that a derrived data source can implement if + * any data source specific action is required to 'stop' + */ + virtual TInt SourceStopL() {return 0;} + private: + TUid iDataSourceType; + }; + +class MCommServer + { + }; + +class MVtProtocolCommand + { + public: + enum TVtProtocolState + { + EIdle, + EInitializing, + ESetup, + EConnecting, + EConnected, + EDisconnecting, + EResetting + }; + }; + +class MVtProtocolHandler + { + public: + + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleSessionCommandEventL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an informational event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleSessionInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + + /** + * Handle an error event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleSessionErrorEventL(const TVtErrorEvent& aEvent) = 0; + + /** + * Signals completion of the audio output control command. + * @param aId The command id of the completed command. + * @param aCmd The command type. + * @param aContextData The context data passed in with the command. + * @param aStatus The command completion status. + **/ + virtual void HandleAudioOutputControlCommandComplete(TInt aId, TVtAudioOutputControlCommand aCmd, TAny *aContextData ,TInt aStatus) = 0; + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleVideoEncoderCommandCompletedL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleVideoEncoderInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aResponse" "The response to a previously issued command." + */ + virtual void HandleH324MConfigCommandCompletedL(const TVtCommandResponse& aResponse) = 0; + + /** + * Handle an event that has been generated. + * + * @param "aEvent" "The event to be handled." + */ + virtual void HandleH324MConfigInformationalEventL(const TVtIndicationEvent& aEvent) = 0; + virtual ~MVtProtocolHandler() {} + }; + + +class MVtSessionCommand : public MVtProtocolCommand + { + public: + /** + * This function is valid only in the EIdle state. It is a no-op when + * invoked in any other state. It causes the protocol to transition + * to the ESetup state. The terminal remains in the EInitializing state during + * the transition. + * + * + * @param aInitInfo + * A reference to a TVtInitInfo structure which set Mona on and off + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt InitProtocolL(TVtInitInfo& aInitInfo) = 0; + + /** + * For an incoming track (MVTVideoSink) this function pauses sending + * media to the sink (output device) and stops the sink. It then does the protocol + * negotiations with the remote terminal to pause the logical channel for + * the specified track. + * + * For outgoing, it pauses the sending of media from the source and calls Stop() on the + * source. It also performs any necessary protocol negotiations with the remote terminal. + * EVtCommandPause will be sent to the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt PauseVideoL(MVTVideoSource& aDataSource) = 0; + virtual TInt PauseVideoL(MVTVideoSink& aDataSink) = 0; + virtual TInt PauseAudioL(MVTAudioSource& aAudioSource) = 0; + + /** + * Resume a previously paused incoming or outgoing track. For incoming, + * this function starts resumes playing out the media to the appropriate + * sink based on the current settings. For outgoing it resumes encoding + * and sending media from the source. + * EVtCommandResume will be invoked will be invoked on the observer when the processing completes. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResumeVideoL(MVTVideoSource& aDataSource) = 0; + virtual TInt ResumeVideoL(MVTVideoSink& aDataSink) = 0; + virtual TInt ResumeAudioL(MVTAudioSource& aAudioSource) = 0; + + /** + * This function is valid only in the ESetup and EInitializing state. It is a + * no-op when invoked in the EIdle state + * + * It causes the protocol to transition back to the EIdle state. The + * terminal remains in the EResetting state during the transition. + * + * While resetting, the protocol de-allocates all resources resources that + * had been previously allocated. When it completes, ResetComplete is called + * and the protocol reverts to the EIdle state. + * + * @leave This method can leave with one of the following error codes + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ResetProtocolL() = 0; + + /** + * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote + * terminal based on the specified options and capabilities. + * The EVtCommandConnect command completion event will be passed to the observer + * when connect completes. + * Details about the negotiated session may be obtained by calling the GetSessionParamsL API. + * GetSessionParamsL may be called after call setup is started to get the list of available channels + * and their capabilities. + * Incoming tracks may be opened before ConnectL completes and will be indicated via the + * EVtIndicationIncommingTrack event. + * + * @param aComm + * An optional pointer to a comm server to provide comm source and sink end-points. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt ConnectToProtocolL(MCommServer* aComm) = 0; + + /** + * Allows an application to provide a media source to be associated with a logical channel + * of communication with the peer. Sources should be added after the EVtIndicationOutgoingTrack + * indication is received for a newly established logical channel. The media type and + * channel id associated with the logical channel are specified as part of the indication. + * This function accepts a MVtVideoSource which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * Data sources could be of the following types: + * a)raw media sources like camera, microphone etc. + * b)sources of compressed data like file, gateway component etc. + * + * @param aChannelId + * Indicates the channel id to be associated with this source. + * @param aDataSource + * reference to the data source + * @leave This method can leave with one of the following error codes + * KErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle + * KErrNoMemory if the SDK failed to allocate memory during this operation + * @return A unique command id for asynchronous completion + */ + virtual TInt AddVideoSourceL(const TUint aChannelId, MVTVideoSource &aDataSource) = 0; + virtual TInt AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource) = 0; + + /** + * Allows an application to provide a media sink for rendering an incoming media bitstream in a + * logical channel of communication with the peer. + * AddDataSinkL can be called only for established incoming logical channels identified by a unique + * channel id. + * Regular incoming channels are established by the peer and are + * indicated using the EVtIndicationIncomingTrack indication. + * This function takes in PV extension to MVtVideoSink or MVtAudioSink which provides additional functionality + * for advertizing capability and exposing configuration APIs. + * EVtCommandAddDataSink event is sent to the observer on completion of this call. + * + * @param aChannelId + * Indicates the channel id to be associated with this sink. + * @param aDataSink The data sink to be added + * + * @return A unique command id for asynchronous completion + **/ + virtual TInt AddVideoSinkL(const TUint aChannelId, MVTVideoSink &aDataSink) = 0; + virtual TInt AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink) = 0; + + /** + * This API is to allow the user to cancel all pending requests. The current request being + * processed, if any, will also be aborted. + * EVtCommandCancelAllCommands will be passed to the command observer on completion. + * @returns A unique command id for asynchronous completion + **/ + virtual TInt CancelAllCommandsL( ) = 0; + + /** + * The Disconnect call is valid only when invoked in the EConnecting, and + * EConnected states. It causes the terminal to transition to the + * EDisconnecting state. All the media tracks both incoming and outgoing + * will be closed on invoking Disconnect. On completion, the terminal + * goes to the ESetup state. + * + * It is a no-op when called in any other state. + * + * This is an asynchronous request. The EvtCommandDisconnect event will be + * sent to the observer when the request processing is complete. This + * is the only event the Phone application should expect after calling + * Disconnect. + * + * @returns A unique command id for asynchronous completion + **/ + virtual TInt DisconnectFromProtocolL() = 0; + + /** + * This API is to allow for extensibility of the protocol interface. + * It allows a caller to ask for an instance of a particular interface object to be returned. + * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with + * an interface ID that is a UUID as in DCE and a pointer to the interface object is + * returned if it is supported. Otherwise the returned pointer is NULL. + * @param aType + * @param aProtocolCommand + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand) = 0; + + /** + * This APIis to be used to release an interface that was previously obtained using + * QueryInterfaceL. + * @param aType + * @param + * @exception not_supported + * leaves if the specified interface id is not supported. + **/ + virtual TInt DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*) = 0; + + /** + * Destructor. + */ + virtual ~MVtSessionCommand() {} + }; + +class MVTUserInput + { + public: + + /** + * @returns Returns the user input type. + **/ + virtual TUserInputType GetType() = 0; + virtual ~MVTUserInput() {} + }; + +class MVtH324ConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler the observer for command status and unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Sets the vendor identification data. This does not cause the stack to issue a vendor identifiation request. + * Set to NULL to disable sending vendor id. If set to a valid parameter before Connect, it will cause the stack + * to automatically send it along with the TCS message. + * @param cc + * T35 Country code + * @param ext + * T35 Extension + * @param mc + * T35 Manufacturer code + * @param aProduct + * Product number + * @param aVersion + * Version number + **/ + virtual TInt SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion) = 0; + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is a request to the remote encoder to adjust its encoding in accordance with the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff)=0; + + /** + * This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. + * It is an indication to the remote decoder that the local encoder has adjusted its encoding parameters + * according to the tradeoff value. + * A value of 0 indicates a high spatial resolution and a value of 31 indicates a high frame rate. + * The values from 0 to 31 indicate monotonically a higher frame rate. Actual values do not correspond + * to precise values of spatial resolution or frame rate. + * + **/ + virtual TInt SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff)=0; + + /** + * This API allows the user to specify the supported resolutions for video for transmit and receive. + * + **/ + virtual TInt SetSupportedResolutions( ) = 0; + + /** + * This API allows the user to set options for fast call setup procedures + **/ + + virtual TInt SetFastCsupOptions( ) = 0; + + /** + * Causes the protocol to send the specified user input to the remote terminal using + * control channel. The user input can be either DTMF ot Alphanumeric + * @param user_input A pointer to MVTUserInput + * @returns A unique command id for asynchronous completion + **/ + virtual TInt SendUserInputMessageL(MVTUserInput& user_input) = 0; + }; + +class MVtVideoConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify separate observers for the extension interface. + * + * @param aHandler the observer for unsolicited informational events + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Sets the I-Frame refresh rate of the encoded output. + * + * @param aIFrameInterval I-Frame rate in seconds per I-Frame + * @return True if successful, else false + */ + virtual TInt SetIntraFrameInterval(TUint32 aIFrameInterval) = 0; + + /** + * Requests the encoder to encode the next frame as an I-Frame. If successful, the next encoded + * frame will be an I-Frame. + * + * @return True for success, else false + */ + virtual TInt RequestNextIntraFrame() = 0; + + /** + * Sets the frame rate of encoded output for the specified layer. + * @param aFrameRate Frame rate for the specified layer in frames per second. + * @return True if successful, else false. + */ + virtual TInt SetVideoFrameRate(TUint32 aFrameRate) = 0; + }; + +class MVtAudioConfigCommand : public MVtProtocolCommand + { + public: + + /** + * This API allows the user to specify observers for the 324m interface. + * + * @param aHandler + **/ + virtual void SetObserverL(MVtProtocolHandler* aHandler) = 0; + + /** + * Method to set the playback volume to the specified value. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aNewVolume + * An input parameter to hold the value for the requested playback volume. + * + * @returns Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt SetAudioVolumeL(TInt aVolume) = 0; + + /** + * Method to get the maximum valid value for the playback volume. + * + * This is a pure virtual function that each derived class must implement. + * It is also an asynchronous function which will be answered with a callback. + * + * @param aMaxVolume + * An output parameter to hold the value for the maximum valid playback volume. + * Note that the parameter should not be used until the callback indicates that the + * method has completed. + * + * @returns Returns a command ID that can be used to identify a command completion result with corresponding request. + */ + virtual TInt GetMaxAudioVolumeL(TInt& aMaxVolume) = 0; + }; + +class VTProtocolFactory + { + public: + + /** + * Create one instance. + */ + IMPORT_C static MVtSessionCommand* CreateSessionCommandL(MVtProtocolHandler* aProtocolHandler, TBool aEnableProxy, TVt3G324MSupported& a3G324MSupported); + + /** + * This function allows the application to delete an instance of a terminal + * and reclaim all allocated resources. A terminal should be deleted only in + * the EIdle state. An attempt to delete a terminal in any other state will + * result in unpredictable behavior. + * + * @param terminal the terminal to be deleted. + * + **/ + IMPORT_C static void DeleteSessionCommand( MVtSessionCommand* aSessionCommand ); + + /** + * Creates an instance of a DevSound audio data source. + * + * @param None + * + * @returns A pointer to the interface + **/ + IMPORT_C static MVTAudioSource* CreateAudioSource(); + + /** + * Deletes an instance of a DevSound audio data source + * that was previously created with CreateAudioSource(); + * + * @param aSource The audio data source to be deleted. + * + * @returns status + **/ + IMPORT_C static TInt DeletAudioSource(MVTAudioSource *aSource); + + /** + * Creates an instance of a DevSound audio data sink. + * + * @param None + * + * @returns A pointer to the interface + **/ + IMPORT_C static MVTAudioSink* CreateAudioSink(); + + /** + * Deletes an instance of a DevSound audio data sink + * that was previously created with CreateAudioSink(); + * + * @param The audio data sink to be deleted. + * + * @returns status + **/ + IMPORT_C static TInt DeleteAudioSink(MVTAudioSink *aSink); + + /** + * Creates an instance of a comm server of a particular name, to be used to + * initialize the terminal. + * + * + * @returns A pointer to a terminal or leaves if the type is invalid or the system is out of resources + **/ + IMPORT_C static MCommServer* CreateCommServerL(const TDesC & aName, TBool aEnableBitReversal=EFalse); + + /** + * This function allows the application to delete an instance of a comm server + * and reclaim all allocated resources. A comm server should be deleted only when the + * protocol is in the EIdle state. An attempt to delete a comm server in any other state + * could result in memory corruption within the protocol. This function will leave with + * KErrInUse if the comm server is still in use. However it will not check the state of the + * protocol that is using the comm server. + * + * @param aCommServer the comm server to be deleted. + * + * @returns a status code indicating success or failure + **/ + IMPORT_C static void DeleteCommServerL(MCommServer* aCommServer); + + /** + * Create instance. + * @param aUIITyep + * @param aTone + */ + IMPORT_C static MVTUserInput* CreateUserInputIndication(TUserInputType aUIIType, TUint8 aTone); + + /** + * Delete instance. + * @param aUII + */ + IMPORT_C static void DeleteUserInputIndication(MVTUserInput* aUII); + + /** + * + * @param aAudioSink + */ + IMPORT_C static MVtAudioConfigCommand* GetAudioConfigCommandL(MVTAudioSink* aAudioSink); + }; + +#endif +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/caudioconfighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/caudioconfighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,97 @@ +/* +* 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" +* 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: Audio configuration implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "caudioconfighandler.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// TAudioConfigHandler::TAudioConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TAudioConfigHandler::TAudioConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::TAudioConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TAudioConfigHandler::TAudioConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::CAudioConfigCommand +// Constructor. +// ----------------------------------------------------------------------------- +// +CAudioConfigCommand::CAudioConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::CAudioConfigCommand<"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::CAudioConfigCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::SetObserverL +// This API allows the user to specify observers for the 324m interface. +// ----------------------------------------------------------------------------- +// +void CAudioConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetObserverL<"))); + iAudioConfigHandler = new (ELeave)TAudioConfigHandler(aHandler); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::SetAudioVolumeL +// Method to set the playback volume to the specified value. +// ----------------------------------------------------------------------------- +// +TInt CAudioConfigCommand::SetAudioVolumeL(TInt aVolume) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetAudioVolumeL"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::SetAudioVolumeL aVolume %d"), aVolume)); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::GetMaxAudioVolumeL +// Method to get the maximum valid value for the playback volume. +// ----------------------------------------------------------------------------- +// +TInt CAudioConfigCommand::GetMaxAudioVolumeL(TInt& aMaxVolume) + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::GetMaxAudioVolumeL"))); + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::GetMaxAudioVolumeL aMaxVolume %d"), aMaxVolume)); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CAudioConfigCommand::~CAudioConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CAudioConfigCommand::~CAudioConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::~CAudioConfigCommand>"))); + delete iAudioConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CAudioConfigCommand::~CAudioConfigCommand"))); + } +// End of File + \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/cdatasinkproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/cdatasinkproxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,63 @@ +/* +* 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" +* 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: Data sink proxy implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cdatasinkproxy.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::CDisplaySinkProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CDisplaySinkProxy::CDisplaySinkProxy(MVTVideoSink* aDisplaySink) : iDisplaySink(aDisplaySink) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CDisplaySinkProxy<" ) )); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::CDisplaySinkProxy iDisplaySink %d>" ), iDisplaySink)); + } + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::ConstructL +// ----------------------------------------------------------------------------- +// +void CDisplaySinkProxy::ConstructL() + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::ConstructL<" ) )); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::ConstructL>" ) )); + } + + +// ----------------------------------------------------------------------------- +// CDisplaySinkProxy::NewL +// ----------------------------------------------------------------------------- +// +CDisplaySinkProxy* CDisplaySinkProxy::NewL(MVTVideoSink* aDisplaySink) + { + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::NewL<" ) )); + CDisplaySinkProxy* self = new (ELeave)CDisplaySinkProxy(aDisplaySink); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + __IF_DEBUG(Print( _L( "VTProto: CDisplaySinkProxy::NewL>" ) )); + return self; + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/cdatasourceproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/cdatasourceproxy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,62 @@ +/* +* 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" +* 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: Data source proxy implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cdatasourceproxy.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::CVideoSourceProxy +// Constructor. +// ----------------------------------------------------------------------------- +// +CVideoSourceProxy::CVideoSourceProxy(MVTVideoSource* aDataSource) : iVideoSource(aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CVideoSourceProxy<"))); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::CVideoSourceProxy iVideoSource %d>"), iVideoSource)); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::ConstructL +// ----------------------------------------------------------------------------- +// +void CVideoSourceProxy::ConstructL() + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::ConstructL<"))); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoSourceProxy::NewL +// ----------------------------------------------------------------------------- +// +CVideoSourceProxy* CVideoSourceProxy::NewL(MVTVideoSource* aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::NewL<"))); + CVideoSourceProxy* self = new (ELeave)CVideoSourceProxy(aDataSource); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVideoSourceProxy::NewL>"))); + return self; + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/ch324confighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/ch324confighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,135 @@ +/* +* 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" +* 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: H324 configuration implementation +* +*/ + + +#include "mvtprotocolhandler.h" +#include "ch324confighandler.h" +#include "cvtuserinput.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + + +// ----------------------------------------------------------------------------- +// TH324ConfigHandler::TH324ConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TH324ConfigHandler::TH324ConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::TH324ConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TH324ConfigHandler::TH324ConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetVendorId +// Sets the vendor identification data. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetVendorId(TUint8 cc, TUint8 ext, TUint32 mc, const TDesC8* aProduct, const TDesC8* aVersion) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetVendorId"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand +// This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand(TUint aLogicalChannel, TUint8 aTradeoff) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendVideoTemporalSpatialTradeoffCommand"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication +// This API allows the user to send a videoTemporalSpatialTradeOff command to the peer. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication(TUint aLogicalChannel, TUint8 aTradeoff) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendVideoTemporalSpatialTradeoffIndication"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetVideoResolutions +// This API allows the user to specify the supported resolutions for video for transmit and receive. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetSupportedResolutions() + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetSupportedResolutions"))); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetFastCsupOptions +// This API allows the user to set options for fast call setup procedures. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SetFastCsupOptions( ) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetFastCsupOptions"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SendUserInputMessageL +// Causes the vt2way to send the specified user input to the remote terminal using +// control channel. +// ----------------------------------------------------------------------------- +// +TInt CH324ConfigCommand::SendUserInputMessageL(MVTUserInput& user_input) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendUserInputMessageL<"))); + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SendUserInputMessageL>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::SetObserverL +// This API allows the user to specify observers for the 324m interface. +// ----------------------------------------------------------------------------- +// +void CH324ConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL<"))); + iH324ConfigHandler = new (ELeave)TH324ConfigHandler(aHandler); + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL observer %d"), iH324ConfigHandler)); + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CH324ConfigCommand::~CH324ConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CH324ConfigCommand::~CH324ConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::~CH324ConfigCommand<"))); + delete iH324ConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CH324ConfigCommand::~CH324ConfigCommand>"))); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/csessionhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/csessionhandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,314 @@ +/* +* 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" +* 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: Session command implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cdatasinkproxy.h" +#include "cdatasourceproxy.h" +#include "csessionhandler.h" +#include "ccommserver.h" +#include "ch324confighandler.h" +#include "cvideoconfighandler.h" +#include "caudioconfighandler.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// TSessionHandler::TSessionHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TSessionHandler::TSessionHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::TSessionHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TSessionHandler::TSessionHandler>"))); + } + + +// ----------------------------------------------------------------------------- +// CSessionCommand::CSessionCommand +// Constructor. +// ----------------------------------------------------------------------------- +// +CSessionCommand::CSessionCommand(TSessionHandler* aSessionHandler) + : iSessionHandler(aSessionHandler) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CSessionCommand<"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::~CSessionComman +// Destructor. +// ----------------------------------------------------------------------------- +// +CSessionCommand::~CSessionCommand() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::~CSessionCommand<"))); + delete iVideoSource; + delete iDisplaySink; + delete iSessionHandler; + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::~CSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ConnectToProtocolL +// This function can be invoked only in the ESetup state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ConnectToProtocolL(MCommServer* aComm) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL"))); + CCommServer* commServer = static_cast(aComm); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ConnectToProtocolL commServer %d"), commServer)); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::DisconnectFromProtocolL +// The Disconnect call is valid only when invoked in the EConnecting, and +// EConnected states. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::DisconnectFromProtocolL() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DisconnectFromProtocolL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResetProtocolL +// This function is valid only in the ESetup and EInitializing state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResetProtocolL() + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResetProtocolL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::InitProtocolL +// This function is valid only in the EIdle state. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::InitProtocolL(TVtInitInfo& aInitInfo) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::InitProtocolL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddVideoSinkL +// Allows an application to provide a media sink for rendering an incoming media bitstream in a +// logical channel of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddVideoSinkL(const TUint aChannelId, MVTVideoSink& aDataSink) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSinkL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSinkL aChannelId %d"), aChannelId)); + iDisplaySink =CDisplaySinkProxy::NewL(&aDataSink); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddVideoSourceL +// Allows an application to provide a media source to be associated with a logical channel +// of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddVideoSourceL(const TUint aChannelId, MVTVideoSource& aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSourceL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddVideoSourceL aChannelId %d"), aChannelId)); + iVideoSource = CVideoSourceProxy::NewL(&aDataSource); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddAudioSourceL +// Allows an application to provide a media source to be associated with a logical channel +// of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddAudioSourceL(const TUint aChannelId, MVTAudioSource &aDataSource) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSourceL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSourceL aChannelId %d"), aChannelId)); + CAudioSourceProxy* audioSourceProxy = static_cast(&aDataSource); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::AddAudioSinkL +// Allows an application to provide a media sink for rendering an incoming media bitstream in a +// logical channel of communication with the peer. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::AddAudioSinkL(const TUint aChannelId, MVTAudioSink &aDataSink) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSinkL"))); + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::AddAudioSinkL aChannelId %d"), aChannelId)); + CAudioSinkProxy* audioSinkProxy = static_cast(&aDataSink); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseVideoL +// For an incoming track (MVTVideoSink) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseVideoL(MVTVideoSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseVideoL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseVideoL +// For an incoming track (MVtVideoSink) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseVideoL(MVTVideoSink& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseVideoL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::PauseAudioL +// For an incoming track (MVTAudioSource) this function pauses sending +// media to the sink (output device) and stops the sink. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::PauseAudioL(MVTAudioSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::PauseAudioL"))); + CAudioSourceProxy* audioSourceProxy = static_cast(&aTrack); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeVideoL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeVideoL(MVTVideoSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeVideoL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeVideoL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeVideoL(MVTVideoSink& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeVideoL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::ResumeAudioL +// Resume a previously paused incoming or outgoing track. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::ResumeAudioL(MVTAudioSource& aTrack) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::ResumeAudioL"))); + CAudioSourceProxy* audioSourceProxy = static_cast(&aTrack); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::CancelAllCommandsL +// This API is to allow the user to cancel all pending requests. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::CancelAllCommandsL( ) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::CancelAllCommandsL"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::GetProtocolInterfaceL +// This API is to allow for extensibility of the protocol interface. +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::GetProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand*& aProtocolCommand) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::GetProtocolInterfaceL<"))); + TInt commandId = 0; + if (aType == EVtH324Config) + { + CH324ConfigCommand* H324ConfigCommand = new (ELeave)CH324ConfigCommand(); + + aProtocolCommand = H324ConfigCommand; + } + else if (aType == EVtVideoEncoderConfig) + { + CVideoConfigCommand* videoConfigCommand = new (ELeave)CVideoConfigCommand(); + + aProtocolCommand = videoConfigCommand; + } + else + { + ; + } + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::GetProtocolInterfaceL aType %d, aProtocolCommand %d>"), aType, aProtocolCommand)); + return commandId; + } + +// ----------------------------------------------------------------------------- +// CSessionCommand::DeleteProtocolInterfaceL +// This APIis to be used to release an interface that was previously obtained using +// ----------------------------------------------------------------------------- +// +TInt CSessionCommand::DeleteProtocolInterfaceL(TVtConfigType aType, MVtProtocolCommand* aProtocolCommand) + { + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DeleteProtocolInterfaceL<"))); + TInt commandId = 0; + if (aType == EVtH324Config) + { + CH324ConfigCommand* H324ConfigCommand = static_cast(aProtocolCommand); + + delete H324ConfigCommand; + } + else if (aType == EVtVideoEncoderConfig) + { + CVideoConfigCommand* videoConfigCommand = static_cast(aProtocolCommand); + + delete videoConfigCommand; + } + else + { + ; + } + __IF_DEBUG(Print(_L("VTProto: CSessionCommand::DeleteProtocolInterfaceL aType, aProtocolCommand %d>"), aType, aProtocolCommand)); + return commandId; + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/cvideoconfighandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/cvideoconfighandler.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,98 @@ +/* +* 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" +* 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: Video configuration implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cvideoconfighandler.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// TVideoConfigHandler::TVideoConfigHandler +// Constructor. +// ----------------------------------------------------------------------------- +// +TVideoConfigHandler::TVideoConfigHandler(MVtProtocolHandler* aProtocolHandler) : iProtocolHandler(aProtocolHandler) + { + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::TVideoConfigHandler<"))); + __IF_DEBUG(Print(_L("VTProto: TVideoConfigHandler::TVideoConfigHandler>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetObserverL +// This API allows the user to specify separate observers for the extension interface. +// ----------------------------------------------------------------------------- +// +void CVideoConfigCommand::SetObserverL(MVtProtocolHandler* aHandler) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetObserverL<"))); + iVideoConfigHandler = new (ELeave)TVideoConfigHandler(aHandler); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetObserverL>"))); + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetIntraFrameInterval +// Sets the I-Frame refresh rate of the encoded output. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::SetIntraFrameInterval(TUint32 aIFrameInterval) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetIntraFrameInterval"))); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetIntraFrameInterval aIFrameInterval %d"), aIFrameInterval)); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::RequestNextIntraFrame +// Requests the encoder to encode the next frame as an I-Frame. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::RequestNextIntraFrame() + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::RequestNextIntraFrame"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::SetVideoFrameRate +// Sets the frame rate of encoded output for the specified layer. +// ----------------------------------------------------------------------------- +// +TInt CVideoConfigCommand::SetVideoFrameRate(TUint32 aFrameRate) + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetVideoFrameRate"))); + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::SetVideoFrameRate aFrameRate %d"), aFrameRate)); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CVideoConfigCommand::~CVideoConfigCommand +// Destructor. +// ----------------------------------------------------------------------------- +// +CVideoConfigCommand::~CVideoConfigCommand() + { + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::~CVideoConfigCommand"))); + delete iVideoConfigHandler; + __IF_DEBUG(Print(_L("VTProto: CVideoConfigCommand::~CVideoConfigCommand"))); + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/cvtuserinput.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/cvtuserinput.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,122 @@ +/* +* 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" +* 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: VT User input implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cvtuserinput.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::ConstructL +// Constructor. +// ----------------------------------------------------------------------------- +// +void CVTUserInputDtmf::ConstructL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::ConstructL<"))); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::CVTUserInputDtmf +// Constructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputDtmf* CVTUserInputDtmf::NewL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::NewL<"))); + CVTUserInputDtmf* self = new (ELeave)CVTUserInputDtmf(); + CleanupStack::PushL(self); + self->ConstructL(aTone); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::NewL>"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::~CVTUserInputDtmf +// Destructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputDtmf::~CVTUserInputDtmf() + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::~CVTUserInputDtmf<"))); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputDtmf::~CVTUserInputDtmf>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::GetType +// Virtual function to return the user input type +// ----------------------------------------------------------------------------- +// +TUserInputType CVTUserInputDtmf::GetType() + { + return EVtUiiDTFM; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputDtmf::ConstructL +// Constructor. +// ----------------------------------------------------------------------------- +// +void CVTUserInputAlphanumeric::ConstructL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::ConstructL<"))); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::ConstructL>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::CVTUserInputAlphanumeric +// Constructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputAlphanumeric* CVTUserInputAlphanumeric::NewL(TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::NewL<"))); + CVTUserInputAlphanumeric* self = new (ELeave)CVTUserInputAlphanumeric(); + CleanupStack::PushL(self); + self->ConstructL(aTone); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::NewL>"))); + return self; + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric +// Destructor. +// ----------------------------------------------------------------------------- +// +CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric() + { + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric<"))); + __IF_DEBUG(Print(_L("VTProto: CVTUserInputAlphanumeric::~CVTUserInputAlphanumeric>"))); + } + +// ----------------------------------------------------------------------------- +// CVTUserInputAlphanumeric::GetType +// Virtual function to return the user input type. +// ----------------------------------------------------------------------------- +// +TUserInputType CVTUserInputAlphanumeric::GetType() + { + return EVtUiiAlphaNumeric; + } +// end of file diff -r 000000000000 -r ed9695c8bcbe vtprotocolsstub/src/vtprotocolfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolsstub/src/vtprotocolfactory.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,208 @@ +/* +* 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" +* 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: Protocol factory implementation +* +*/ + +#include "mvtprotocolhandler.h" +#include "cdatasourceproxy.h" +#include "cdatasinkproxy.h" +#include "csessionhandler.h" +#include "caudioconfighandler.h" +#include "cvtuserinput.h" +#include "ccommserver.h" + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateSessionCommandL +// Create one instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtSessionCommand* VTProtocolFactory::CreateSessionCommandL(MVtProtocolHandler* aProtocolHandler, TBool aEnableProxy, TVt3G324MSupported& a3G324MSupported) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateSessionCommandL<"))); + a3G324MSupported = EVt3G324MMissing; + TSessionHandler * sessionHandler = new (ELeave)TSessionHandler(aProtocolHandler); + CleanupStack::PushL(sessionHandler); + CSessionCommand* sessionCommand = new (ELeave)CSessionCommand(sessionHandler); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateSessionCommandL sessionCommand %d>"), sessionCommand)); + return sessionCommand; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteSessionCommand +// This function allows the application to delete an instance of a terminal +// and reclaim all allocated resources. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteSessionCommand( MVtSessionCommand* aSessionCommand ) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteSessionCommand<"))); + CSessionCommand* sessionCommand = static_cast(aSessionCommand); + delete aSessionCommand; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteSessionCommand>"))); + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateAudioSource +// Creates an instance of a DevSound audio data source. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTAudioSource* VTProtocolFactory::CreateAudioSource() + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSource<"))); + TInt err( KErrNone ); + CAudioSourceProxy* audioSourceProxy = NULL; + TRAP (err, audioSourceProxy = new (ELeave) CAudioSourceProxy() ); + if (err != KErrNone) + { + return NULL; + } + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSource audioSourceProxy %d>"), audioSourceProxy)); + return audioSourceProxy; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeletAudioSource +// Deletes an instance of a DevSound audio data source. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt VTProtocolFactory::DeletAudioSource(MVTAudioSource *aSource) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeletAudioSource<"))); + CAudioSourceProxy* audioSourceProxy = static_cast(aSource); + delete aSource; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeletAudioSource>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateAudioSink +// Creates an instance of a DevSound audio data sink. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTAudioSink* VTProtocolFactory::CreateAudioSink() + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSink<"))); + TInt err( KErrNone ); + CAudioSinkProxy* audioSinkProxy = NULL; + TRAP(err, audioSinkProxy = new (ELeave) CAudioSinkProxy() ); + if (err != KErrNone) + { + return NULL; + } + + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateAudioSink audioSinkProxy %d>"), audioSinkProxy)); + return audioSinkProxy; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteAudioSink +// Deletes an instance of a DevSound audio data sink +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt VTProtocolFactory::DeleteAudioSink(MVTAudioSink *aSink) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteAudioSink<"))); + CAudioSinkProxy* audioSinkProxy = static_cast(aSink); + delete aSink; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteAudioSink>"))); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateCommServerL +// Creates an instance of a comm server of a particular name, to be used to +// initialize the terminal. +// ----------------------------------------------------------------------------- +// +EXPORT_C MCommServer* VTProtocolFactory::CreateCommServerL(const TDesC & aName, TBool aEnableBitReversal) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateCommServerL<"))); + CCommServer* commServer = new (ELeave)CCommServer(); + CleanupStack::PushL(commServer); + CleanupStack::Pop(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateCommServerL commServer %d>"), commServer)); + return commServer; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteCommServerL +// This function allows the application to delete an instance of a comm server +// and reclaim all allocated resources. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteCommServerL(MCommServer* aCommServer) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteCommServerL<"))); + CCommServer* commServer = static_cast(aCommServer); + delete aCommServer; + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::DeleteCommServerL>"))); + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::CreateUserInputIndication +// Create instance . +// ----------------------------------------------------------------------------- +// +EXPORT_C MVTUserInput* VTProtocolFactory::CreateUserInputIndication(TUserInputType aUIIType, TUint8 aTone) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::CreateUserInputIndication"))); + if (aUIIType == EVtUiiDTFM) + { + CVTUserInputDtmf* uii = CVTUserInputDtmf::NewL(aTone); + return uii; + } + else if (aUIIType == EVtUiiAlphaNumeric) + { + CVTUserInputAlphanumeric* uii = CVTUserInputAlphanumeric::NewL(aTone); + return uii; + } + else + { + return NULL; + } + + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::DeleteUserInputIndication +// Delete instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C void VTProtocolFactory::DeleteUserInputIndication(MVTUserInput* aUII) + { + delete aUII; + } + +// ----------------------------------------------------------------------------- +// VTProtocolFactory::GetAudioConfigCommandL +// Get one instance. +// ----------------------------------------------------------------------------- +// +EXPORT_C MVtAudioConfigCommand* VTProtocolFactory::GetAudioConfigCommandL(MVTAudioSink* aAudioSink) + { + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::GetAudioConfigCommandL<"))); + CAudioSinkProxy* audioSinkProxy = static_cast(aAudioSink); + CAudioConfigCommand* audioConfigCommand = new (ELeave)CAudioConfigCommand(); + __IF_DEBUG(Print(_L("VTProto: VTProtocolFactory::GetAudioConfigCommandL audioConfigCommand %d>"), audioConfigCommand)); + return audioConfigCommand; + } + +// end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2004 - 2006 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 for Vtuis subsystem. +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +// Include components' bld.inf files +#include "../videotelui/group/bld.inf" + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/aif/videoteluiaif.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/aif/videoteluiaif.rss Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2004 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: AIF resource for Video Telephone. +* +*/ + + + +// INCLUDES +#include + + +// RESOURCE DEFINITIONS + +// ----------------------------------------------------------------------------- +// +// AIF_DATA +// Resource for AIF. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AIF_DATA + { + app_uid = 0x101F8681; + num_icons = 1; + hidden = KAppIsHidden; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/cenrep/keys_s60videotelephony.xls Binary file vtuis/videotelui/cenrep/keys_s60videotelephony.xls has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/conf/s60videotelephony.confml Binary file vtuis/videotelui/conf/s60videotelephony.confml has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/conf/s60videotelephony_102072D0.crml Binary file vtuis/videotelui/conf/s60videotelephony_102072D0.crml has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/conf/s60videotelephony_10281872.crml Binary file vtuis/videotelui/conf/s60videotelephony_10281872.crml has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/VtStartRecord.wav Binary file vtuis/videotelui/data/VtStartRecord.wav has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/VtStopRecord.wav Binary file vtuis/videotelui/data/VtStopRecord.wav has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/videotelui.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/data/videotelui.rss Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1913 @@ +/* +* Copyright (c) 2004, 2005 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: Resources for Video Telephone application. +* +*/ + + + +// RESOURCE IDENTIFIER +NAME VTUI + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "videotelui.hrh" + + +#include + +// CONSTANTS +#define KVtStartSoundFile "z:\\system\\sounds\\digital\\VtStartRecord.wav" +#define KVtStopSoundFile "z:\\system\\sounds\\digital\\VtStopRecord.wav" +// RESOURCE DEFINITIONS + +// ----------------------------------------------------------------------------- +// +// Resource file signature. +// +// ----------------------------------------------------------------------------- +// +RESOURCE RSS_SIGNATURE + { + } + +// ----------------------------------------------------------------------------- +// +// Default name of the document. No such document, so empty. +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF + { + buf = ""; + } + +// ----------------------------------------------------------------------------- +// +// Application information. +// +// ----------------------------------------------------------------------------- +// +RESOURCE EIK_APP_INFO + { + status_pane = r_videotelui_status_pane; + menubar = r_videotelui_menubar; + cba = r_videotelui_softkeys_end_call; + custom_app_info_extension = r_videotelui_info_extension; + } +// ----------------------------------------------------------------------------- +// +// Info extension +// r_videotelui_info_extension +// +// ----------------------------------------------------------------------------- +// +RESOURCE EIK_APP_INFO_EXT r_videotelui_info_extension + { + popup_toolbar = r_videotelui_fixed _toolbar; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_localisable_app_info +// Captions for this application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE LOCALISABLE_APP_INFO r_videotelui_localisable_app_info + { + short_caption = qtn_apps_videophone_grid; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = qtn_apps_videophone_grid; +#ifdef __SCALABLE_ICONS + number_of_icons = 1; + + + icon_file = + "Z:"APP_BITMAP_DIR"\\videotelui_aif.mif"; +#else + number_of_icons = 1; + icon_file = + "Z:"APP_BITMAP_DIR"\\videotelui_aif.mbm"; + + +#endif // __SCALABLE_ICONS + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_status_pane +// Status pane for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE STATUS_PANE_APP_MODEL r_videotelui_status_pane + { + layout = R_AVKON_STATUS_PANE_LAYOUT_USUAL; + panes = + { + SPANE_PANE + { + id = EEikStatusPaneUidTitle; + type = EAknCtTitlePane; + resource = r_videotelui_title_pane; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_menubar +// Menubar for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_videotelui_menubar + { + titles = + { + MENU_TITLE + { + menu_pane = r_videotelui_menu; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_ok_menubar +// Menubar for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_videotelui_ok_menubar + { + titles = + { + MENU_TITLE + { + menu_pane = r_videotelui_ok_menu; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_menu +// Options menu for the application. This menu is opened when Options softkey +// is pressed. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_videotelui_menu + { + items = + { + MENU_ITEM // Enable + { + command = EVtUiCmdEnableMain; + txt = qtn_incal_enable_main_option; + cascade = r_videotelui_enable_menu; + }, + MENU_ITEM // Disable + { + command = EVtUiCmdDisableMain; + txt = qtn_incal_disable_main_option; + cascade = r_videotelui_disable_menu; + }, + MENU_ITEM // Use primary camera + { + command = EVtUiCmdUsePrimaryCamera; + txt = qtn_incal_camera_1_option; + }, + MENU_ITEM // Use secondary camera + { + command = EVtUiCmdUseSecondaryCamera; + txt = qtn_incal_camera_2_option; + }, + MENU_ITEM // Swap images places + { + command = EVtUiCmdSwapImagesPlaces; + txt = qtn_incal_swap_vt_images; + }, + MENU_ITEM // Snapshot + { + command = EVtUiCmdSnapshot; + txt = qtn_incal_snapshot_option; + }, + MENU_ITEM // Send DTMF + { + command = EVtUiCmdSendDTMF; + txt = qtn_incal_send_dtmf_tone_option; + }, + MENU_ITEM // Share file + { + command = EVtUiCmdShareObjectImage; + txt = qtn_incal_video_call_share_file; + }, + MENU_ITEM // Handset (deactivate loudspeaker) + { + command = EVtUiCmdDeactivateLoudspeaker; + txt = qtn_incal_deact_ihf_option; + }, + MENU_ITEM // Loudspeaker + { + command = EVtUiCmdActivateLoudspeaker; + txt = qtn_incal_act_ihf_option; + }, + MENU_ITEM // BT handsfree + { + command = EVtUiCmdActivateBT; + txt = qtn_incal_bt_handsfree_option; + }, + MENU_ITEM // Handset (deactivate BT) + { + command = EVtUiCmdDeactivateBT; + txt = qtn_incal_handset_option; + }, + MENU_ITEM // Video to voice + { + command = EVtUiCmdCreateVoice; + txt = qtn_incal_video_to_voice; + }, + MENU_ITEM + { + command = EVtUiCmdAdjustVideo; + txt = qtn_incal_video_adjust_option; + cascade = r_videotelui_video_adjust_menu; + }, + MENU_ITEM // Zoom + { + command = EVtUiCmdZoom; + txt = qtn_incal_zoom_own_video; + }, + MENU_ITEM // End active call + { + command = EVtUiCmdEndActiveCall; + txt = qtn_incal_drop_option; + }, + MENU_ITEM // Go to Idle + { + command = EVtUiCmdGoToIdle; +#ifdef RD_BOOT_CUSTOMIZABLE_AI + txt = qtn_incal_goto_idle; +#else + txt = qtn_incal_goto_active_idle; +#endif // RD_BOOT_CUSTOMIZABLE_AI + }, + MENU_ITEM // Help + { + command = EAknCmdHelp; + txt = qtn_options_help; + }, + MENU_ITEM // Exit + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_ok_menu +// Options menu for the application. This menu is opened when selection key +// is pressed. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_videotelui_ok_menu + { + items = + { + MENU_ITEM // Disable + { + command = EVtUiCmdDisableMain; + txt = qtn_incal_disable_main_option; + cascade = r_videotelui_disable_menu; + }, + MENU_ITEM // Snapshot + { + command = EVtUiCmdSnapshot; + txt = qtn_incal_snapshot_option; + }, + MENU_ITEM // End active call + { + command = EVtUiCmdEndActiveCall; + txt = qtn_incal_drop_option; + }, + MENU_ITEM // Use primary camera + { + command = EVtUiCmdUsePrimaryCamera; + txt = qtn_incal_camera_1_option; + }, + MENU_ITEM // Use secondary camera + { + command = EVtUiCmdUseSecondaryCamera; + txt = qtn_incal_camera_2_option; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_enable_menu +// "Enable" submenu for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_videotelui_enable_menu + { + items = + { + MENU_ITEM + { + command = EVtUiCmdEnableVideo; + txt = qtn_incal_change_video_option; + }, + MENU_ITEM + { + command = EVtUiCmdEnableAudio; + txt = qtn_incal_change_audio_option; + }, + MENU_ITEM + { + command = EVtUiCmdEnableBoth; + txt = qtn_incal_change_both_option; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_disable_menu +// "Disable" submenu for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_videotelui_disable_menu + { + items = + { + MENU_ITEM + { + command = EVtUiCmdDisableVideo; + txt = qtn_incal_change_video_option; + }, + MENU_ITEM + { + command = EVtUiCmdDisableAudio; + txt = qtn_incal_change_audio_option; + }, + MENU_ITEM + { + command = EVtUiCmdDisableBoth; + txt = qtn_incal_change_both_option; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_video_adjust_menu +// "Adjust video" submenu for the application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_videotelui_video_adjust_menu + { + items = + { + MENU_ITEM + { + command = EVtUiCmdAdjustVideoVideoQuality; + txt = qtn_incal_video_prefer_option; + }, + MENU_ITEM + { + command = EVtUiCmdAdjustVideoWhiteBalance; + txt = qtn_incal_video_white_balance_option; + }, + MENU_ITEM + { + command = EVtUiCmdAdjustVideoBrightness; + txt = qtn_incal_video_brightness_option; + }, + MENU_ITEM + { + command = EVtUiCmdAdjustVideoContrast; + txt = qtn_incal_video_contrast_option; + }, + MENU_ITEM + { + command = EVtUiCmdAdjustVideoColourTone; + txt = qtn_incal_video_colour_tone_option; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_enable_video +// Options & Enable video softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_enable_video + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdEnableVideo; + txt = qtn_incal_softk_enable_video; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_enable_audio +// Options & Enable audio softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_enable_audio + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdEnableAudio; + txt = qtn_incal_softk_enable_audio; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_handset_b +// Options & Handset both softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_handset_b + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdDeactivateLoudspeaker; + txt = qtn_incal_softk_handset; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_loudspeaker +// Options & Handset both softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_loudspeaker + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdActivateLoudspeaker; + txt = qtn_incal_softk_laudspek; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_bt_handsfree +// Options & Handset both softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_bt_handsfree + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdActivateBT; + txt = qtn_incal_softk_bt_handsfree; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_end_call +// Options & End call softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_end_call + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdEndActiveCall; + txt = qtn_incal_softk_end_this; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_capture_video +// Capture & Cancel video softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_capture_video + { + buttons = + { + CBA_BUTTON + { + id = EVtUiCmdCapture; + txt = qtn_softk_capture; + }, + CBA_BUTTON + { + id = EVtUiCmdCancelCapture; + txt = text_softkey_cancel; + }, + CBA_BUTTON + { + id = EVtUiCmdCapture; + txt = qtn_softk_capture; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_share_object_image +// Options & Stop image object sharing +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_share_object_image + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdStopSharingObjectImage; + txt = qtn_softk_disable_share; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_blank_dlg +// Blank dialog. +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_blank_dlg + { + flags = ( EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagFillAppClientRect | + EEikDialogFlagCbaButtons | + EEikDialogFlagWait ); + + buttons = r_videotelui_softkeys_empty; + + items = + { + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_blank_nowait_dlg +// Blank dialog, no wait flag. +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_blank_nowait_dlg + { + flags = ( EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagFillAppClientRect | + EEikDialogFlagCbaButtons ); + + buttons = r_videotelui_softkeys_empty; + + items = + { + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_empty +// +// Empty softkeys. Note that AVKON empty softkey +// resource can not be used, because flags are needed. +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_empty + { + flags = EAknCBAFlagRespondWhenInvisible; + + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + }, + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + }, + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_incal_muted_pane +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_incal_muted_pane + { + buf = qtn_incal_muted_pane; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_allow_video_query +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_allow_video_query + { + flags = + EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagCbaButtons | + EEikDialogFlagNotifyEsc ; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationLayout; + label = ""; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_switch_to_voice_query +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_create_voice_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationLayout; + }; + } + }; + } + +// --------------------------------------------------------- +// +// r_videotelui_qtn_send_video_image +// +// --------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_send_video_image + { + buf = qtn_incal_send_video_image; + } + +// --------------------------------------------------------- +// +// r_videotelui_qtn_call_number_video +// +// --------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_call_number_video + { + buf = qtn_call_number_video; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_title_pane +// It defines default title pane. +// +// ----------------------------------------------------------------------------- +// +RESOURCE TITLE_PANE r_videotelui_title_pane + { + txt = " "; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_incal_waiting_image +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_incal_waiting_image + { + buf = qtn_incal_waiting_image; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_emergency_note +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_emergency_note + { + flags = EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagCbaButtons; + + buttons = R_AVKON_SOFTKEYS_CANCEL; + + items = + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = AVKON_NOTE + { + layout = EGeneralLayout; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_information_note +// It defines note template for information notes. Text +// must be replaced to correct in code. Note does not have wait +// flag. +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_information_note + { + flags = + EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagCbaButtons; + items = + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = + AVKON_NOTE + { + layout = EGeneralLayout; + singular_label = " "; + plural_label = ""; + animation = R_QGN_NOTE_INFO_ANIM; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_incal_close_camcorder +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_incal_close_camcorder + { + buf = qtn_incal_close_camcorder; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_bthf_connect_wait_note +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_videotelui_bthf_connect_wait_note + { + flags = EEikDialogFlagNoDrag | + EEikDialogFlagNoTitleBar | + EEikDialogFlagCbaButtons | + EEikDialogFlagWait; + + buttons = R_AVKON_SOFTKEYS_EMPTY; + + items = + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = AVKON_NOTE + { + layout = EWaitLayout; + singular_label = qtn_wait_connecting_to_bt; + plural_label = ""; + animation = R_QGN_GRAF_WAIT_BAR_ANIM; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_bt_device_not_avail +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_bt_device_not_avail + { + buf = qtn_bt_device_not_avail; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_text_not_allowed +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_text_not_allowed + { + buf = text_not_allowed; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_text_call_not_allowed +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_text_call_not_allowed + { + buf = text_call_not_allowed; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_err_cam_swap +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_err_cam_swap + { + buf = qtn_err_cam_swap; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_qtn_query_create_voice_call +// +// +RESOURCE TBUF r_videotelui_qtn_query_create_voice_call + { + buf = qtn_query_create_voice_call; + } +//---------------------------------------------------- +// +// r_videotelui_qtn_err_unable_to_open_image +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_err_unable_to_open_image + { + buf = qtn_tel_info_unable_open_image; + } + +//---------------------------------------------------- +// +// r_videotelui_qtn_incal_note_decoding_failed +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_incal_note_decoding_failed + { + buf = qtn_incal_note_decoding_failed; + } + +//---------------------------------------------------- +// +// r_videotelui_qtn_err_drm_not_allowed +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_err_drm_not_allowed + { + buf = qtn_drm_not_allowed; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_tooltip_zoom +// +// +RESOURCE TBUF r_videotelui_tooltip_zoom + { + buf = qtn_vt_tooltip_zoom; + } + +//---------------------------------------------------- +// +// r_image_load_wait_note +// Image initialization wait note. +// +//---------------------------------------------------- +// +RESOURCE DIALOG r_progress_decoding_image_wait_note + { + flags = EAknWaitNoteFlags; + buttons = R_AVKON_SOFTKEYS_EMPTY; + items= + { + DLG_LINE + { + type = EAknCtNote; + id = EGeneralNote; + control = AVKON_NOTE + { + layout = EWaitLayout; + animation = R_QGN_GRAF_WAIT_BAR_ANIM; + singular_label = qtn_vt_progress_decoding_image; + }; + } + }; + } + +//---------------------------------------------------- +// +// r_videotelui_context_options_cba_button +// Cba button resource for number entry. +// +//---------------------------------------------------- +// +RESOURCE CBA_BUTTON r_videotelui_context_options_cba_button + { + id=EAknSoftkeyContextOptions; + txt=text_softkey_empty; + } + +//---------------------------------------------------- +// +// r_videotelui_select_cba_button +// Empty cba button resource for toolbar. +// +//---------------------------------------------------- +// +RESOURCE CBA_BUTTON r_videotelui_select_cba_button + { + id = EAknSoftkeySelect; + txt= text_softkey_select; + } + +//---------------------------------------------------- +// +// r_videotelui_empty_cba_button +// Empty cba button resource for number entry. +// +//---------------------------------------------------- +// +RESOURCE CBA_BUTTON r_videotelui_empty_cba_button + { + id = EAknSoftkeyEmpty; + txt= text_softkey_empty; + } + +//---------------------------------------------------- +// +// r_videotelui_floating_toolbar +// Empty resource for floating toolbar. +// +//---------------------------------------------------- +// +RESOURCE AVKON_TOOLBAR r_videotelui_floating_toolbar + { + flags = KAknToolbarWithoutCba | KAknToolbarAlwaysFocusing | + KAknToolbarFlexiblePosition; + items = + { + }; + } + +//---------------------------------------------------- +// +// r_videotelui_fixed_toolbar +// Empty resource for fixed toolbar. +// +//---------------------------------------------------- +// +RESOURCE AVKON_TOOLBAR r_videotelui_fixed_toolbar + { + flags = KAknToolbarFixed; + items = + { + }; + } + +//---------------------------------------------------- +// +// r_videotelui_video_record_start_sound_path +// Path to a sound file to play when starting video recording +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_video_record_start_sound_path + { + buf = KVtStartSoundFile; + } + + +//---------------------------------------------------- +// +// r_videotelui_video_record_stop_sound_path +// Path to a sound file to play when stopping video recording +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_video_record_stop_sound_path + { + buf = KVtStopSoundFile; + } + +//---------------------------------------------------- +// +// r_disable_video_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_disable_video_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbVideoDisable; + //skinid = KAknsIIDQgnIndiTbVideoDisable; + } + +//---------------------------------------------------- +// +// r_enable_video_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_enable_video_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbVideo; + //skinid = KAknsIIDQgnIndiTbVideo; + } + +//---------------------------------------------------- +// +// r_mute_microphone_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_mute_microphone_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbMicrophoneMute; + //skinid = KAknsIIDQgnIndiTbMicrophoneMute; + } + +//---------------------------------------------------- +// +// r_unmute_microphone_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_unmute_microphone_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbMicrophoneUnmute; + //skinid = KAknsIIDQgnIndiTbMicrophoneUnmute; + } + +//---------------------------------------------------- +// +// r_primary_cam_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_primary_cam_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbCameraMain ; + //skinid = KAknsIIDQgnIndiTbCameraMain; + } + +//---------------------------------------------------- +// +// r_secondary_cam_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_secondary_cam_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbCameraSecondary; + //skinid = KAknsIIDQgnIndiTbCameraSecondary; + } + +//---------------------------------------------------- +// +// r_zoom_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_zoom_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbZoom; + //skinid = KAknsIIDQgnIndiTbZoom; + } + +//---------------------------------------------------- +// +// r_share_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_swap_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbSwapImages; + //skinid = KAknsIIDQgnIndiTbSwapImages; + } + +//---------------------------------------------------- +// +// r_share_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_share_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbGallery; + //skinid = KAknsIIDQgnIndiTbGallery; + } + +//---------------------------------------------------- +// +// r_handset_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_handset_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbHandset; + //skinid = KAknsIIDQgnIndiTbHandset; + } + +//---------------------------------------------------- +// +// r_ihf_on_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_ihf_on_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbIhfOn; + //skinid = KAknsIIDQgnIndiTbIhfOn; + } + +//---------------------------------------------------- +// +// r_bt_hf_button_state_extension +// +//---------------------------------------------------- +// +RESOURCE AVKON_BUTTON_STATE_EXTENSION r_bt_hf_button_state_extension + { + bmbSkinIdMajor = EAknsMajorGeneric; + bmbSkinIdMinor = EAknsMinorGenericQgnIndiTbBthf; + //skinid = KAknsIIDQgnIndiTbBthf; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_toggle_video_button +// This button disables and enables video. +// This button has two states. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_toggle_video_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE // disable video button (0) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_video_disable; + bmpmask = EMbmVideoteluiQgn_indi_tb_video_disable_mask; + helptxt = qtn_vt_tooltip_disable_video; + extension = r_disable_video_button_state_extension; + }, + AVKON_BUTTON_STATE // disable video button (dummy state) (1) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_video_disable; + bmpmask = EMbmVideoteluiQgn_indi_tb_video_disable_mask; + extension = r_disable_video_button_state_extension; + }, + AVKON_BUTTON_STATE // enable video button (2) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_video; + bmpmask = EMbmVideoteluiQgn_indi_tb_video_mask; + helptxt = qtn_vt_tooltip_enable_video; + extension = r_enable_video_button_state_extension; + }, + AVKON_BUTTON_STATE // enable video button (dummy state) (3) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_video; + bmpmask = EMbmVideoteluiQgn_indi_tb_video_mask; + extension = r_enable_video_button_state_extension; + } + }; + } +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_toggle_microphone_button +// This button mutes and unmutes microphone. +// This button has two states. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_toggle_microphone_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE // mute mic button (0) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_microphone_mute; + bmpmask = EMbmVideoteluiQgn_indi_tb_microphone_mute_mask; + helptxt = qtn_vt_tooltip_mute_microphone; + extension = r_mute_microphone_button_state_extension; + }, + AVKON_BUTTON_STATE // mute mic button (dummy state) (1) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_microphone_mute; + bmpmask = EMbmVideoteluiQgn_indi_tb_microphone_mute_mask; + extension = r_mute_microphone_button_state_extension; + }, + AVKON_BUTTON_STATE // unmute mic button (2) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_microphone_unmute; + bmpmask = EMbmVideoteluiQgn_indi_tb_microphone_unmute_mask; + helptxt = qtn_vt_tooltip_unmute_microphone; + extension = r_unmute_microphone_button_state_extension; + }, + AVKON_BUTTON_STATE // unmute mic button (dummy state) (3) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_microphone_unmute; + bmpmask = EMbmVideoteluiQgn_indi_tb_microphone_unmute_mask; + extension = r_unmute_microphone_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_toggle_camera_button +// This button changes used camera between primary and secondary. +// This button has two states. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_toggle_camera_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE // primary camera button (0) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_camera_main; + bmpmask = EMbmVideoteluiQgn_indi_tb_camera_main_mask; + helptxt = qtn_vt_tooltip_primary_cam; + extension = r_primary_cam_button_state_extension; + }, + AVKON_BUTTON_STATE // primary camera button (dummy state) (1) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_camera_main; + bmpmask = EMbmVideoteluiQgn_indi_tb_camera_main_mask; + extension = r_primary_cam_button_state_extension; + }, + AVKON_BUTTON_STATE // secondary camera button (2) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_camera_secondary; + bmpmask = EMbmVideoteluiQgn_indi_tb_camera_secondary_mask; + helptxt = qtn_vt_tooltip_secondary_cam; + extension = r_secondary_cam_button_state_extension; + }, + AVKON_BUTTON_STATE // secondary camera button (dummy state) (3) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_camera_secondary; + bmpmask = EMbmVideoteluiQgn_indi_tb_camera_secondary_mask; + extension = r_secondary_cam_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_swap_images_button +// This button swaps images +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_swap_images_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_swap_images; + bmpmask = EMbmVideoteluiQgn_indi_tb_swap_images_mask; + helptxt = qtn_vt_tooltip_swap_images; + extension = r_swap_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_activate_zoom_mode_button +// This button activates zoom mode. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_activate_zoom_mode_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_zoom; + bmpmask = EMbmVideoteluiQgn_indi_tb_zoom_mask; + helptxt = qtn_vt_tooltip_zoom; + extension = r_zoom_button_state_extension; + }, + AVKON_BUTTON_STATE + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_zoom; + bmpmask = EMbmVideoteluiQgn_indi_tb_zoom_mask; + flags = KAknButtonStateHasLatchedFrame; + helptxt = qtn_vt_tooltip_zoom; + extension = r_zoom_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_share_file_button +// This button starts the file sharing. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_share_file_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_gallery; + bmpmask = EMbmVideoteluiQgn_indi_tb_gallery_mask; + helptxt = qtn_vt_tooltip_share; + extension = r_share_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_snapshot_button +// This button sets capture mode on. +// +// ----------------------------------------------------------------------------- +// +/* Not in use currently +RESOURCE AVKON_BUTTON r_avkonbutton_snapshot_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_cams_tb_capture; + bmpmask = EMbmVideoteluiQgn_indi_cams_tb_capture_mask; + helptxt = qtn_vt_tooltip_send_snapshot; + //extension is also needed here + } + }; + } +*/ + + +// ----------------------------------------------------------------------------- +// +// r_mini_dialer_editor +// This is a resource for a hidden focused editor for minidialer (touch input). +// +// ----------------------------------------------------------------------------- +// +RESOURCE SECRETED r_mini_dialer_editor + { + num_letters=255; + } + +//---------------------------------------------------- +// +// video preference options +// +//---------------------------------------------------- +// +RESOURCE TBUF r_videotelui_qtn_incal_normal_list_option + { + buf = qtn_incal_normal_list_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_details_list_option + { + buf = qtn_incal_details_list_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_motion_list_option + { + buf = qtn_incal_motion_list_option; + } + +//---------------------------------------------------- +// +// white balance options +// +//---------------------------------------------------- +RESOURCE TBUF r_videotelui_qtn_incal_automatic_option + { + buf = qtn_incal_automatic_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_sunny_option + { + buf = qtn_incal_sunny_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_cloudy_option + { + buf = qtn_incal_cloudy_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_incandescent_option + { + buf = qtn_incal_incandescent_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_fluorescent_option + { + buf = qtn_incal_fluorescent_option; + } + +//---------------------------------------------------- +// +// colour tone options +// +//---------------------------------------------------- +RESOURCE TBUF r_videotelui_qtn_incal_ct_normal_option + { + buf = qtn_incal_ct_normal_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_sepia_option + { + buf = qtn_incal_sepia_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_b_and_w_option + { + buf = qtn_incal_b_and_w_option; + } + +RESOURCE TBUF r_videotelui_qtn_incal_negative_option + { + buf = qtn_incal_negative_option; + } + +// --------------------------------------------------------- +// r_videotelui_white_balance_setting_page +// White balance item array for setting page +// +// --------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_videotelui_white_balance_setting_page + { + label = qtn_incal_video_white_balance_option; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL; + type = EAknSetListBox; + editor_resource_id = r_videotelui_transparent_setting_listbox; + } + +// --------------------------------------------------------- +// r_videotelui_color_tone_setting_page +// White balance item array for setting page +// +// --------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_videotelui_color_tone_setting_page + { + label = qtn_incal_video_colour_tone_option; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL; + type = EAknSetListBox; + editor_resource_id = r_videotelui_transparent_setting_listbox; + } + +//---------------------------------------------------- +// +// r_videotelui_transparent_setting_listbox +// Listbox for transparent setting page +// +//---------------------------------------------------- +// +RESOURCE LISTBOX r_videotelui_transparent_setting_listbox + { + flags = 0x0001; + } + +// --------------------------------------------------------- +// r_videotelui_video_quality_array +// Item array for the selection list dialog +// +// --------------------------------------------------------- +// +RESOURCE ARRAY r_videotelui_video_quality_array + { + items = + { + LBUF + { + txt = qtn_incal_normal_list_option; + }, + LBUF + { + txt = qtn_incal_details_list_option; + }, + LBUF + { + txt = qtn_incal_motion_list_option; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_select_cancel +// Videoquality softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_select_cancel + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeySelect; + txt= text_softkey_select; + }, + CBA_BUTTON + { + id = EAknSoftkeyCancel; + txt = text_softkey_cancel; + }, + CBA_BUTTON + { + id = EAknSoftkeySelect; + txt= text_softkey_select; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_empty_dialerexit +// Dialer softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_empty_dialerexit + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + }, + CBA_BUTTON + { + id = EVtUiDialerExit; + txt = text_softkey_back; + }, + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +//r_videotelui_softkeys_empty_active_command +// Dialer softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_empty_active_command + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + }, + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + }, + CBA_BUTTON + { + id = EAknSoftkeyEmpty; + txt = text_softkey_empty; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_avkonbutton_audio_routing_button +// This button changes audio routing. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_BUTTON r_avkonbutton_audio_routing_button + { + flags = 0; + states = + { + AVKON_BUTTON_STATE // Deactivate loudspeaker (0) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_handset; + bmpmask = EMbmVideoteluiQgn_indi_tb_handset_mask; + helptxt = qtn_vt_tooltip_audio_handset; + extension = r_handset_button_state_extension; + }, + AVKON_BUTTON_STATE // Deactivate loudspeaker (dummy state) (1) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_handset; + bmpmask = EMbmVideoteluiQgn_indi_tb_handset_mask; + extension = r_handset_button_state_extension; + }, + AVKON_BUTTON_STATE // Deactivate bthf == Activate loudspkr (2) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_ihf_on; + bmpmask = EMbmVideoteluiQgn_indi_tb_ihf_on_mask; + helptxt = qtn_vt_tooltip_audio_loudspeaker; + extension = r_ihf_on_button_state_extension; + }, + AVKON_BUTTON_STATE // Deactivate bthf (dummy state) (3) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_ihf_on; + bmpmask = EMbmVideoteluiQgn_indi_tb_ihf_on_mask; + extension = r_ihf_on_button_state_extension; + }, + AVKON_BUTTON_STATE // Activate loudspeaker (4) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_ihf_on; + bmpmask = EMbmVideoteluiQgn_indi_tb_ihf_on_mask; + helptxt = qtn_vt_tooltip_audio_loudspeaker; + extension = r_ihf_on_button_state_extension; + }, + AVKON_BUTTON_STATE // Activate loudspeaker (dummy state) (5) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_ihf_on; + bmpmask = EMbmVideoteluiQgn_indi_tb_ihf_on_mask; + extension = r_ihf_on_button_state_extension; + }, + AVKON_BUTTON_STATE // Activate bt hf (6) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_bthf; + bmpmask = EMbmVideoteluiQgn_indi_tb_bthf_mask; + helptxt = qtn_vt_tooltip_audio_bthf; + extension = r_bt_hf_button_state_extension; + }, + AVKON_BUTTON_STATE // Activate bt hf (dummy state) (7) + { + bmpfile = "Z:"APP_BITMAP_DIR"\\videotelui.mif"; + bmpid = EMbmVideoteluiQgn_indi_tb_bthf; + bmpmask = EMbmVideoteluiQgn_indi_tb_bthf_mask; + extension = r_bt_hf_button_state_extension; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_videotelui_softkeys_dialer +// Options & Dialer open softkeys +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_videotelui_softkeys_dialer + { + buttons = + { + CBA_BUTTON + { + id = EAknSoftkeyOptions; + txt = text_softkey_option; + }, + CBA_BUTTON + { + id = EVtUiCmdSendDTMF; + txt = qtn_incal_softk_dialer; + }, + CBA_BUTTON + { + id = EAknSoftkeyContextOptions; + txt = text_softkey_empty; + } + }; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/videotelui_caption.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/data/videotelui_caption.rss Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2004 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: Captions for Video Telephone application. +* +*/ + + + +// INCLUDES +#include +#include "videotelui.loc" + +// RESOURCE DEFINITIONS + +// ----------------------------------------------------------------------------- +// +// CAPTION_DATA +// Captions for Video Telephone application. +// +// ----------------------------------------------------------------------------- +// +RESOURCE CAPTION_DATA + { + caption = qtn_apps_videophone_grid; + shortcaption = qtn_apps_videophone_grid; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/videotelui_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/data/videotelui_reg.rss Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2004 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: Registration file for Video Telephone application. +* +*/ + + +#include +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x101F8681 // application UID + +RESOURCE APP_REGISTRATION_INFO + { + app_file = "videotelui"; + hidden = KAppIsHidden; + localisable_resource_file = + APP_RESOURCE_DIR"\\videotelui"; + localisable_resource_id = R_VIDEOTELUI_LOCALISABLE_APP_INFO; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/videotelui_stub.SIS Binary file vtuis/videotelui/data/videotelui_stub.SIS has changed diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/data/videotelui_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/data/videotelui_stub.pkg Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,33 @@ +; +; 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: +; +; Languages +&EN + +; Header +#{"videotelui"}, (0x101F8681), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +;Files +""-"z:\sys\bin\videotelui.exe" +""-"z:\resource\apps\videotelui.rsc" +""-"z:\resource\apps\videotelui_aif.mif" +""-"z:\resource\apps\videotelui.mif" +""-"z:\private\10003a3f\import\apps\videotelui_reg.rsc" \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/bld.inf Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2004 - 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 for Video Telephone application. +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/VideoTelephonyVariant.hrh |../../../inc/videotelephonyvariant.hrh +../inc/VideoTelephonyInternalCRKeys.h |../../../inc/videotelephonyinternalcrkeys.h +../data/videotelui_stub.SIS /epoc32/data/z/system/install/videotelui_stub.sis + +// Export LOC file +../loc/videotelui.loc APP_LAYER_LOC_EXPORT_PATH(videotelui.loc) + +// Export IBY files +../rom/videotelui.iby CORE_APP_LAYER_IBY_EXPORT_PATH(videotelui.iby) +../rom/videoteluiResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(videoteluiresources.iby) + +// Generic configuration interface for component cenrep settings + +../conf/s60videotelephony.confml APP_LAYER_CONFML(s60videotelephony.confml) +../conf/s60videotelephony_102072D0.crml APP_LAYER_CRML(s60videotelephony_102072d0.crml) +../conf/s60videotelephony_10281872.crml APP_LAYER_CRML(s60videotelephony_10281872.crml) + + +#if defined ( RD_VT_RTF ) +../Data/VtStartRecord.wav /epoc32/release/winscw/urel/z/system/sounds/digital/VtStartRecord.wav +../Data/VtStartRecord.wav /epoc32/release/winscw/udeb/z/system/sounds/digital/VtStartRecord.wav +../Data/VtStartRecord.wav /epoc32/release/armv5/urel/z/system/sounds/digital/VtStartRecord.wav +../Data/VtStartRecord.wav /epoc32/release/armv5/udeb/z/system/sounds/digital/VtStartRecord.wav + +../Data/VtStopRecord.wav /epoc32/release/winscw/urel/z/system/sounds/digital/VtStopRecord.wav +../Data/VtStopRecord.wav /epoc32/release/winscw/udeb/z/system/sounds/digital/VtStopRecord.wav +../Data/VtStopRecord.wav /epoc32/release/armv5/urel/z/system/sounds/digital/VtStopRecord.wav +../Data/VtStopRecord.wav /epoc32/release/armv5/udeb/z/system/sounds/digital/VtStopRecord.wav +#endif //RD_VT_RTF + +PRJ_EXTENSIONS +START EXTENSION s60/mifconv + OPTION TARGETFILE videotelui.mif + OPTION HEADERFILE videotelui.mbg + OPTION SOURCES \ + -c8,8 qgn_graf_call_video_out_bg -c8 qgn_indi_call_video_blind_in -c8 qgn_indi_call_video_blind_out \ + /1 qgn_graf_zoom_area -c8,1 qgn_indi_zoom_dir -c8 qgn_indi_zoom_min \ + -c8 qgn_indi_zoom_max -8 qgn_indi_call_video_blind_in_mask_icon -8 qgn_indi_call_video_blind_out_mask_icon \ + -c8,8 qgn_indi_tb_camera_main -c8,8 qgn_indi_tb_camera_secondary -c8,8 qgn_indi_tb_gallery \ + -c8,8 qgn_indi_tb_microphone_mute -c8,8 qgn_indi_tb_microphone_unmute -c8,8 qgn_indi_tb_swap_images \ + -c8,8 qgn_indi_tb_video -c8,8 qgn_indi_tb_video_disable -c8,8 qgn_indi_tb_zoom \ + -c8,8 qgn_indi_cams_tb_capture -c8,8 qgn_indi_tb_ihf_on -c8,8 qgn_indi_tb_handset \ + -c8,8 qgn_indi_tb_bthf +END + +START EXTENSION s60/mifconv + OPTION TARGETFILE videotelui_aif.mif + OPTION SOURCES -c8,8 qgn_menu_call_video +END + + + +PRJ_MMPFILES +/* +gnumakefile ../group/videotelui_icons_dc.mk +#ifdef __SCALABLE_ICONS +gnumakefile ../group/videotelui_icons_aif_scalable_dc.mk +#else +gnumakefile ../group/videotelui_icons_aif_bitmaps_dc.mk +#endif +*/ +../group/videotelui.mmp + + + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui.mmp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2004 - 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: Project specification for Video Telephone application. +* +*/ + + +#include +#include + +// Capability assignment. +CAPABILITY CAP_APPLICATION MultiMediaDD NetworkControl CommDD + +// Assign Vendor ID. +VENDORID VID_DEFAULT + +TARGET videotelui.exe +TARGETTYPE exe +EPOCSTACKSIZE 0x5000 +EPOCHEAPSIZE 0x190000 0x500000 +UID 0x100039CE 0x101F8681 + +SOURCEPATH ../src +SOURCE CVtUiApp.cpp +SOURCE CVtUiAppUi.cpp +SOURCE CVtUiDoc.cpp +SOURCE CVtUiMainControl.cpp +SOURCE CVtUiContextControl.cpp +SOURCE CVtUiNaviPane.cpp +SOURCE CVtUiNaviPaneControl.cpp +SOURCE VtUiLayout.cpp +SOURCE VtUiUtility.cpp +SOURCE VtUiPanic.cpp +SOURCE CVtUiBlankControl.cpp +SOURCE CVtUiBlankDialog.cpp +SOURCE CVtUiExecuteCmdDialog.cpp +SOURCE CVtUiMutedControl.cpp +SOURCE CVtUiZoomControl.cpp +SOURCE CVtUiAllowVideoDialog.cpp +SOURCE CVtUiActiveExec.cpp +SOURCE CVtUiActivateBtHfDialog.cpp +SOURCE TVtUiCallParameters.cpp +SOURCE CVtUiNumberEntryActivationControl.cpp +SOURCE CVtUiBitmapManager.cpp + +SOURCE tvtuiappstatebase.cpp +SOURCE tvtuistatestarting.cpp +SOURCE tvtuistaterunning.cpp +SOURCE tvtuistateresetting.cpp +SOURCE cvtuiappshutter.cpp +SOURCE cvtuivideocontrolbase.cpp +SOURCE cvtuidtmfbuffer.cpp +SOURCE CVtUiRemoteVideoControl.cpp + +// COMMAND FW +SOURCEPATH ../src/commands +SOURCE cvtuicmdbase.cpp +SOURCE cvtuifeaturecmdbase.cpp +SOURCE cvtuicmdcontext.cpp +SOURCE cvtuicmdvalidationactionbase.cpp +SOURCE cvtuicmdvalidatorbase.cpp +SOURCE cvtuicommandpolicymanager.cpp +SOURCE cvtuiprimarycmdpolicy.cpp +SOURCE cvtuicommandmanager.cpp +SOURCE tvtuimediastate.cpp +SOURCE tvtuiaudiostate.cpp +SOURCE tvtuilocalvariation.cpp +SOURCE tvtuistates.cpp +SOURCE cvtuicommandmodifybase.cpp +SOURCE cvtuicmdcustomvalidationactionbase.cpp +SOURCE cvtuicmdstatecheckaction.cpp +SOURCE cvtuiexecutioncontext.cpp +SOURCE tVtuifeaturevariation.cpp + +// FEATURE FW +SOURCEPATH ../src/features +SOURCE cvtuifeaturebase.cpp +SOURCE cvtuifeaturemanager.cpp + +SOURCEPATH ../src/features/toolbar +SOURCE cvtuitoolbarbase.cpp +SOURCE cvtuitoolbarcontext.cpp +SOURCE cvtuihidetoolbaritemaction.cpp +SOURCE tvtuitoolbarcommanditerator.cpp +SOURCE cvtuitoolbarskmodifier.cpp +SOURCE cvtuitoolbarbutton.cpp +SOURCE cvtuitoolbarcmdpolicy.cpp +SOURCE cvtuifloatingtoolbar.cpp +SOURCE cvtuifixedtoolbar.cpp + + +SOURCEPATH ../src/features/menu +SOURCE cvtuimenus.cpp +SOURCE cvtuimenucontext.cpp +SOURCE cvtuimenuitemdimmeraction.cpp +SOURCE tvtuimenucommanditerator.cpp + +SOURCEPATH ../src/features/softkey +SOURCE cvtuisoftkeys.cpp +SOURCE cvtuisoftkeycontext.cpp +SOURCE cvtuisoftkeyvalidationaction.cpp +SOURCE cvtuisoftkeysetting.cpp + + +SOURCEPATH ../src/features/numberentry +SOURCE cvtuinumberentry.cpp +SOURCE CVtUiNumberEntryControl.cpp + +SOURCEPATH ../src/features/prefs +SOURCE cvtuitransparentsettingpage.cpp +SOURCE cvtuiprefsettinglistbase.cpp +SOURCE cvtuiwhitebalance.cpp +SOURCE cvtuicolortone.cpp +SOURCE cvtuivideoquality.cpp +SOURCE cvtuiprefpopupbase.cpp +SOURCE cvtuiprefsliderbase.cpp +SOURCE cvtuibrightness.cpp +SOURCE cvtuibrightnesspopup.cpp +SOURCE cvtuicontrast.cpp +SOURCE cvtuicontrastpopup.cpp + +SOURCEPATH ../src/features/dialer +SOURCE cvtuidialer.cpp +SOURCE cvtuidialervideocontrol.cpp +SOURCE cvtuidialercontainer.cpp +SOURCE cvtuicmdopendialer.cpp +SOURCE cvtuicmdclosedialer.cpp +SOURCE cvtuidialerskmodifier.cpp + +// COMPONENT MANAGER FW +SOURCEPATH ../src/compman +SOURCE cvtuicomponentmanager.cpp +SOURCE tvtuicomponentstate.cpp +SOURCE tvtuiblocklists.cpp + +// SLIDERS +SOURCEPATH ../src/sliders +SOURCE cvtuipopupbase.cpp +SOURCE cvtuisliderbase.cpp + +// VOLUME SLIDER +SOURCEPATH ../src/features/volume +SOURCE cvtuivolume.cpp +SOURCE cvtuivolumepopup.cpp +SOURCE cvtuivolumecontrol.cpp + +// ZOOM SLIDER +SOURCEPATH ../src/features/zoom +SOURCE cvtuizoom.cpp +SOURCE cvtuizoompopup.cpp + +SOURCEPATH ../data + +START RESOURCE videotelui.rss +HEADER +TARGETPATH APP_RESOURCE_DIR +LANGUAGE_IDS +END + +START RESOURCE videotelui_reg.rss +DEPENDS videotelui.rsg +TARGETPATH /private/10003a3f/apps +END + +USERINCLUDE ../inc +USERINCLUDE ../inc/commands +USERINCLUDE ../inc/features +USERINCLUDE ../inc/compman +USERINCLUDE ../inc/features/softkey +USERINCLUDE ../inc/features/menu +USERINCLUDE ../inc/features/toolbar +USERINCLUDE ../inc/features/numberentry +USERINCLUDE ../inc/features/prefs +USERINCLUDE ../inc/features/dialer +USERINCLUDE ../inc/features/volume +USERINCLUDE ../inc/features/zoom +USERINCLUDE ../inc/sliders +USERINCLUDE ../loc + +SYSTEMINCLUDE ../../../inc +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY apparc.lib +LIBRARY cone.lib +LIBRARY eikcore.lib +LIBRARY ws32.lib +LIBRARY eikcoctl.lib +LIBRARY apgrfx.lib +LIBRARY fbscli.lib +LIBRARY eikdlg.lib +LIBRARY gdi.lib +LIBRARY bitgdi.lib +LIBRARY egul.lib +LIBRARY ecom.lib + +LIBRARY aknlayout.lib +LIBRARY aknlayout2.lib +LIBRARY avkon.lib +LIBRARY aknskins.lib +LIBRARY aknnotify.lib + +LIBRARY hlplch.lib +LIBRARY featmgr.lib +LIBRARY commonengine.lib +LIBRARY centralrepository.lib + + +LIBRARY videoteleng.lib +DEBUGLIBRARY vtlogger.lib + +LIBRARY phoneclient.lib + +LIBRARY cdlengine.lib +LIBRARY aknicon.lib +LIBRARY aknlayout2scalable.lib + +LIBRARY mgfetch.lib +LIBRARY bafl.lib +LIBRARY caf.lib +LIBRARY cafutils.lib +LIBRARY eikctl.lib +LIBRARY fepbase.lib + +LIBRARY remconinterfacebase.lib +LIBRARY remconcoreapi.lib + +LIBRARY dialer.lib + +LIBRARY gfxtrans.lib + +SOURCEPATH ../loc +DOCUMENT videotelui.loc + +SOURCEPATH ../inc +DOCUMENT videotelui.hrh + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +# +# Copyright (c) 2004 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: Makefile to generate icon file for Video +# Telephone application. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\system\apps\videotelui +HEADERDIR=\epoc32\include +ICONTARGETFILENAME=$(TARGETDIR)\videotelui.mif +HEADERFILENAME=$(HEADERDIR)\videotelui.mbg + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ + /c8,8 qgn_graf_call_video_out_bg.bmp \ + /c8 qgn_indi_call_video_blind_in.bmp \ + /c8 qgn_indi_call_video_blind_out.bmp \ + /1 qgn_graf_zoom_area.bmp \ + /c8,1 qgn_indi_zoom_dir.bmp \ + /c8 qgn_indi_zoom_min.bmp \ + /c8 qgn_indi_zoom_max.bmp \ + /8 qgn_indi_call_video_blind_in_mask_icon.bmp \ + /8 qgn_indi_call_video_blind_out_mask_icon.bmp \ + /c8 qgn_indi_tb_camera_main.bmp \ + /c8 qgn_indi_tb_camera_secondary.bmp \ + /c8 qgn_indi_tb_gallery.bmp \ + /c8 qgn_indi_tb_microphone_mute.bmp \ + /c8 qgn_indi_tb_microphone_unmute.bmp \ + /c8 qgn_indi_tb_swap_images.bmp \ + /c8 qgn_indi_tb_video.bmp \ + /c8 qgn_indi_tb_video_disable.bmp \ + /c8 qgn_indi_tb_zoom.bmp \ + /c8 qgn_indi_cams_tb_capture.bmp \ + /c8 qgn_indi_tb_ihf_on.bmp \ + /c8 qgn_indi_tb_handset.bmp \ + /c8 qgn_indi_tb_bthf.bmp + + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(HEADERFILENAME)&& \ + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing + +# End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons_aif_bitmaps.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons_aif_bitmaps.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +# +# Copyright (c) 2004-2005 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: Makefile to generate AIF icons for bitmap version. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\system\apps\videotelui +ICONTARGETFILENAME=$(TARGETDIR)\videotelui_aif.mbm + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_call_video_lst.bmp + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons_aif_bitmaps_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons_aif_bitmaps_dc.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +# +# Copyright (c) 2004-2005 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: Makefile to generate AIF icons for bitmap version. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\videotelui_aif.mbm + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_call_video_lst.bmp + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons_aif_scalable.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons_aif_scalable.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +# +# Copyright (c) 2004-2005 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: Makefile to generate AIF icons for scalable version. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\system\apps\videotelui +ICONTARGETFILENAME=$(TARGETDIR)\videotelui_aif.mif + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_call_video.svg + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons_aif_scalable_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons_aif_scalable_dc.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +# +# Copyright (c) 2004-2005 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: Makefile to generate AIF icons for scalable version. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\videotelui_aif.mif + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_call_video.svg + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/group/videotelui_icons_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/group/videotelui_icons_dc.mk Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,88 @@ +# +# Copyright (c) 2004-2005 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: Makefile to generate icon file for Video +# Telephone application. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z +else +ZDIR=\epoc32\data\z +endif + +TARGETDIR=$(ZDIR)\resource\apps +HEADERDIR=\epoc32\include +ICONTARGETFILENAME=$(TARGETDIR)\videotelui.mif +HEADERFILENAME=$(HEADERDIR)\videotelui.mbg + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- +RESOURCE : + mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ + /c8,8 qgn_graf_call_video_out_bg.bmp \ + /c8 qgn_indi_call_video_blind_in.bmp \ + /c8 qgn_indi_call_video_blind_out.bmp \ + /1 qgn_graf_zoom_area.bmp \ + /c8,1 qgn_indi_zoom_dir.bmp \ + /c8 qgn_indi_zoom_min.bmp \ + /c8 qgn_indi_zoom_max.bmp \ + /8 qgn_indi_call_video_blind_in_mask_icon.bmp \ + /8 qgn_indi_call_video_blind_out_mask_icon.bmp \ + /c8,8 qgn_indi_tb_camera_main.bmp \ + /c8,8 qgn_indi_tb_camera_secondary.bmp \ + /c8,8 qgn_indi_tb_gallery.bmp \ + /c8,8 qgn_indi_tb_microphone_mute.bmp \ + /c8,8 qgn_indi_tb_microphone_unmute.bmp \ + /c8,8 qgn_indi_tb_swap_images.bmp \ + /c8,8 qgn_indi_tb_video.bmp \ + /c8,8 qgn_indi_tb_video_disable.bmp \ + /c8,8 qgn_indi_tb_zoom.bmp \ + /c8,8 qgn_indi_cams_tb_capture.bmp \ + /c8,8 qgn_indi_tb_ihf_on.bmp \ + /c8,8 qgn_indi_tb_handset.bmp \ + /c8,8 qgn_indi_tb_bthf.bmp + + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(HEADERFILENAME)&& \ + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing + +# End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiActivateBtHfDialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiActivateBtHfDialog.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,108 @@ +/* +* Copyright (c) 2004 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: Bluetooth HF activation dialog for Video Telephone application. +* +*/ + + + +#ifndef CVTUIACTIVATEBTHFDIALOG_H +#define CVTUIACTIVATEBTHFDIALOG_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class MVtEngCommandHandler; +class MVtUiEngineCommandManager; + +// CLASS DECLARATION + +/** +* Bluetooth HF activation dialog for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiActivateBtHfDialog + : public CAknWaitDialog, + private MVtEngCommandObserver + { + public: // Constructors and destructor + + /** + * Constructor. + * + * @param aSelfPtr optional pointer to itself. + * @param aError optional pointer to error code variable. + * @param aCommandHandler command handler. + * @param aCommandManager command manager. + */ + CVtUiActivateBtHfDialog( + CEikDialog** aSelfPtr, + TInt* aError, + MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager ); + + /** + * Destructor. + */ + ~CVtUiActivateBtHfDialog(); + + public: // New functions + + /** + * Executes bluetooth activation dialog. + */ + void ExecuteDialogLD(); + + protected: // Functions from base classes + + /** + * @see CEikDialog::PostLayoutDynInitL. + */ + virtual void PostLayoutDynInitL(); + + private: + + /** + * @see MVtEngCommandObserver::HandleVTCommandPerformedL. + */ + virtual void HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ); + + private: + + // Reference to command handler. + MVtEngCommandHandler& iCommandHandler; + + // Reference to command manager. + MVtUiEngineCommandManager& iCommandManager; + + // ETrue if command is performed. + TBool iCommandPerformed; + + // Pointer to error code variable. + TInt* iError; + + // Audio routing setting. + TPckgBuf< MVtEngAudio::TVtEngRoutingSetting > iAudioRouting; + + }; + +#endif // CVTUIACTIVATEBTHFDIALOG_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiActiveExec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiActiveExec.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2004 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: Asynchronous execution class for Video Telephone application. +* +*/ + + + +#ifndef CVTUIACTIVEEXEC_H +#define CVTUIACTIVEEXEC_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CVtUiActiveExec; + +// CLASS DECLARATION + +/** +* Interface for asynchronous execution. +* +* @since Series 60 2.6 +*/ +class MVtUiActiveExec + { + public: // New functions + + /** + * Starts execution of a command. + * @param aActiveExec active executor. + * @param aState state based on which execution can be started. + * @param aNextState next state. + * @param aRequest request status, which should be used if operation is + * asynchronous. + * @return ETrue if operation was synchronous, otherwise EFalse. + */ + virtual TBool ActiveExecExecuteL( + CVtUiActiveExec& aActiveExec, + const TInt aState, + TInt& aNextState, + TRequestStatus& aRequest ) = 0; + + /** + * Decide whether to continue or not. + * @param aActiveExec active executor. + * @param aState current state, should be updated to new state. + * @param aError error code. + * @return ETrue if continued, EFalse if stopped. + */ + virtual TBool ActiveExecContinue( + CVtUiActiveExec& aActiveExec, + TInt& aState, + const TInt aError ) = 0; + + /** + * Cancels operation of specific state. + * @param aActiveExec active executor. + * @param aState state. + */ + virtual void ActiveExecCancel( + CVtUiActiveExec& aActiveExec, + const TInt aState ) = 0; + + /** + * Informs that operation has been finished. + * @param aActiveExec active executor. + * @param aInitialState initial state. + */ + virtual void ActiveExecDone( + CVtUiActiveExec& aActiveExec, + const TInt aInitialState ) = 0; + + }; + +/** +* Asynchronous execution class for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiActiveExec + : public CActive + { + public: // Constructors and destructor + + /** + * Constructor. + * @param aPriority priority of the active object. + */ + CVtUiActiveExec( + const TInt aPriority ); + + /** + * Destructor. + */ + ~CVtUiActiveExec(); + + public: // New functions + + /** + * Starts execution. + * @param aStartState initial state. + * @param aExec executor. + */ + void Start( + TInt aStartState, + MVtUiActiveExec& aExec ); + + /** + * Initial state of currently + * active operation. + * + * @return initial state, or KErrNotFound if no operation ongoing. + */ + TInt InitialState() const; + + /** + * Returns request status. + * @return request status. + */ + TInt RequestStatus() const; + + public: // Functions from base classes + + /** + * @see CActive::RunL. + */ + virtual void RunL(); + + /** + * @see CActive::DoCancel. + */ + virtual void DoCancel(); + + /** + * @see CActive::RunError. + */ + virtual TInt RunError( TInt aError ); + + private: + + // Ref to active executor. + MVtUiActiveExec* iActiveExec; + + // Initial state. + TInt iInitialState; + + // Current state. + TInt iCurrentState; + + // Next state. + TInt iNextState; + + }; + +#endif // CVTUIACTIVEEXEC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiAllowVideoDialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiAllowVideoDialog.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2004 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: 'Allow video image' query for Video Telephone application. +* +*/ + + + +#ifndef CVTUIALLOWVIDEODIALOG_H +#define CVTUIALLOWVIDEODIALOG_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* 'Allow video image' query for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiAllowVideoDialog + : public CAknQueryDialog + { + public: // Constructors and destructor + + /** + * Constructor. + * + * @param aSelfPtr optional pointer to itself. + * @param aTone tone to be played. + */ + CVtUiAllowVideoDialog( + CEikDialog** aSelfPtr, + const TTone& aTone ); + + /** + * Destructor. + */ + ~CVtUiAllowVideoDialog(); + + public: // New functions + + /** + * Enumerates different results which + * can be completed to request status. + */ + enum TResult + { + // Query was canceled. + EQueryCanceled = 1, + // Query was dismissed due to timeout. + EQueryDismissedTimeout, + // User denied video sending. + EUserDenied, + // User allowed video sending. + EUserAllowed + }; + + /** + * Runs dialog. + * @param aStatus request status. + */ + void ExecuteDialogLD( + TRequestStatus& aStatus ); + + protected: // Functions from base classes + + /** + * @see CAknQueryDialog::PostLayoutDynInitL. + */ + virtual void PostLayoutDynInitL(); + + /** + * @see CAknQueryDialog::OkToExitL. + */ + virtual TBool OkToExitL( TInt aCommand ); + + private: + + /** + * Callback function. Called when this query + * is dismissed. + * @param aAny pointer to instance of this class. + * @return KErrNone. + */ + static TInt DoDismissDialogTimeoutL( TAny* aAny ); + + private: + + // Pointer to pointer to this instance. + CEikDialog** iSelfPtr; + + // Timer for dismissing the query after timeout. + CPeriodic* iQueryTimer; + + // Request status. + TRequestStatus* iRequestStatus; + + }; + +#endif // CVTUIALLOWVIDEODIALOG_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiApp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiApp.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2004 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: Application class for Video Telephone application. +* +*/ + + + +#ifndef CVTUIAPP_H +#define CVTUIAPP_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Application class for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiApp + : public CAknApplication + { + public: // Constructors and destructor + + /** + * C++ default constructor. + */ + CVtUiApp(); + + public: // Functions from base classes + + /** + * From CAknApplication, creates document instance. + * @return document instance. + */ + virtual CApaDocument* CreateDocumentL(); + + /** + * From CAknApplication, returns UID of the application. + * @return UID of the application. + */ + virtual TUid AppDllUid() const; + + }; + +#endif // CVTUIAPP_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiAppUi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiAppUi.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1469 @@ +/* +* Copyright (c) 2004-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" +* 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: Application UI class for Video Telephone application. +* +*/ + + + +#ifndef CVTUIAPPUI_H +#define CVTUIAPPUI_H + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CVtUiActiveExec.h" +#include "tvtuilocalvariation.h" +#include "tvtuiappstatebase.h" + + +// FORWARD DECLARATION +class CVtUiBlankControl; +class CAknNavigationControlContainer; +class CAknTitlePane; +class CVtEngModel; +class MVtUiVideoWindow; +class CRepository; +class CAknQueryDialog; +class CAknProgressDialog; +class TVtUiStates; +class CVtUiCommandManager; +class CVtUiComponentManager; +class CVtUiFeatureManager; // TOOLBAR MOD +class MVtUiNumberSource; +class CVtUiMainControl; +class CVtUiContextControl; +class CVtUiBitmapManager; +class CVtUiVolumeControl; +class CAknIncallBubble; +class CVtUiRemoteVideoControl; + +// CLASS DECLARATION + +/** +* Application UI class for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiAppUi + : public CAknAppUi, + protected MVtUiActiveExec, + public MVtUiStateContext, + public MProgressDialogCallback + { + public: + + // Rendering modes + enum TRenderingMode + { + ERenderingModeDefault, + ERenderingModeDialer + }; + + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtUiAppUi(); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * C++ destructor. + */ + ~CVtUiAppUi(); + + public: // New functions + + /* + * This function decides possibility of swapimg image places. + */ + TBool CanSwapImagePlaces(); + + /* + * Switches status pane between flat and normal one. + */ + void SwitchLayoutToFlatStatusPaneL( TBool aSwitch ); + + /** + * Refreshes all. + */ + void RefreshL(); + + /** + * Refreshes navi pane. + */ + void RefreshNaviPaneL(); + + /** + * Refreshes softkeys. + */ + void RefreshSoftkeysL(); + + /** + * Refreshes menu. + */ + void RefreshMenuL(); + + /** + * Refresh zoom popup + */ + void RefreshZoomPopupL(); + + /** + * Stop brightness or Contrast + */ + void StopBrightnessOrContrast(); + /** + * Refreshes blind flags. + */ + void RefreshBlind(); + + /** + * Refreshes synchronisation. + */ + void RefreshSynchronise(); + + /** + * Opens number entry. + * @return ETrue if number entry opened. + */ + TBool OpenNumberEntryL(); + + /** + * Handles EKeyPhoneSend presses + */ + TKeyResponse HandlePhoneSendKeyL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * Returns pointer to cba. + */ + CEikButtonGroupContainer* GetCba(); + + /** + * Sets zoom mode. + * @param aEnableZoomMode Etrue if zoom mode is on. + * EFalse otherwise. + * @param aIsPermanent ETrue if zoomindicator's timeout + * should be ignored. EFalse otherwise.. + */ + void SetZoomModeL( const TBool aEnableZoomMode, + const TBool aIsPermanent = EFalse ); + + /** + * Checks if command is active. + * @param aCommand Command id. + * @return Etrue if command is active + * EFalse otherwise. + */ + TBool IsActiveCommand( TInt aCommand ) const; + + TVtUiAppStateBase& State(); + + /** + * Returns reference to bitmap manager. + */ + CVtUiBitmapManager& BitmapManager(); + + /** + * Sets given zoom step, if it allowed. + * @param aZoomStep New zoom step to be set. + */ + void SetZoomFactorL( TInt aZoomStep ); + + public: // Functions from base classes + + /** + * From CAknAppUi, handles window server events. + * @param aEvent event. + * @param aDestination destination control. + */ + virtual void HandleWsEventL( + const TWsEvent& aEvent, + CCoeControl* aDestination ); + + /** + * From CAknAppUi, processes commands. + * @param aCommand the identifier of the command to be handled. + */ + virtual void ProcessCommandL( + TInt aCommand ); + + /** + * From CAknAppUi, handles commands. + * @param aCommand the identifier of the command to be handled. + */ + virtual void HandleCommandL( + TInt aCommand ); + + /** + * From CAknAppUi, handles dynamic initialisation of menu panes. + * @param aResourceId the resource identifier for the pane. + * @param aMenuPane the menu pane corresponding to the resource. + */ + virtual void DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ); + + /** + * From CAknAppUi, handles key events. + * @param aKeyEvent event to be handled. + * @param aType type of the key event. + * @return response code (EKeyWasConsumed, EKeyWasNotConsumed) + */ + virtual TKeyResponse HandleKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * From CAknAppUi, handles resouce changes. + * @param aType type of resource change. + */ + virtual void HandleResourceChangeL( TInt aType ); + + /** + * From CAknAppUi, handles foreground status changes. + * @param aForeground ETrue if foreground. + */ + virtual void HandleForegroundEventL( TBool aForeground ); + + /** + * Returns a pointer to CEikonEnv. + */ + CEikonEnv* GetEikonEnv(); + + protected: // Functions from base classes + + /** + * From CAknAppUi, returns help context. + * @return help context. + */ + virtual CArrayFix* HelpContextL() const; + + /** + * @see MVtUiActiveExec::ActiveExecExecuteL. + */ + virtual TBool ActiveExecExecuteL( + CVtUiActiveExec& aActiveExec, + const TInt aState, + TInt& aNextState, + TRequestStatus& aRequest ); + + /** + * @see MVtUiActiveExec::ActiveExecContinue. + */ + virtual TBool ActiveExecContinue( + CVtUiActiveExec& aActiveExec, + TInt& aState, + const TInt aError ); + + /** + * @see MVtUiActiveExec::ActiveExecCancel. + */ + virtual void ActiveExecCancel( + CVtUiActiveExec& aActiveExec, + const TInt aState ); + + /** + * @see MVtUiActiveExec::ActiveExecDone. + */ + virtual void ActiveExecDone( + CVtUiActiveExec& aActiveExec, + const TInt aInitialState ); + + public: // from MVtUiStateContext + + /** @see MVtUiStateContext::StartupPhase1L */ + virtual void StartupPhase1L(); + + /** @see MVtUiStateContext::ShutdownL */ + virtual void ShutdownL(); + + /** @see MVtUiStateContext::StartupPhase2L */ + virtual void StartupPhase2L(); + + /** @see MVtUiStateContext::ChangeApplicationFocus */ + virtual void ChangeApplicationFocus( const TBool aForeground ); + + /** @see MVtUiStateContext::ChangeState */ + virtual void ChangeState( TVtUiAppStateBase* aState ); + + /** @see MVtUiStateContext::StartTone */ + virtual void StartDtmfTone( const TChar& aTone ); + + /** @see MVtUiStateContext::StopTone */ + virtual void StopDtmfTone(); + + /** @see MVtUiStateContext::Model */ + virtual CVtEngModel& Model(); + + /** @see MVtUiStateContext::VideoTelephonyVariation */ + virtual const TVtUiVideoTelephonyVariation& + VideoTelephonyVariation() const; + + /** @see MVtUiStateContext::NumberSource*/ + virtual MVtUiNumberSource* NumberSource() const; + + /** @see MVtUiStateContext::RefreshL */ + virtual void RefreshL( const TInt aRefreshFlags ); + + /** @see MVtUiStateContext::DoExecuteCmdL */ + virtual void DoExecuteCmdL( + const TVtEngCommandId aCommand, + TDesC8* aParams ); + + /** @see MVtUiStateContext::DoHandleLayoutChangedL */ + virtual void DoHandleLayoutChangedL(); + + /** From MVtUiShutterObserver via MVtUiStateContext + * Exits the application. + */ + virtual void HandleShutdownReady(); + + /** + * Gets reference to context control. + * @return reference to context control. + */ + CVtUiContextControl& ContextControl(); + + /** + * Gets reference to main control. + * @return reference to main control. + */ + CVtUiMainControl& MainControl(); + + /** + * Gets reference to remote video control. + * @return reference to remote video control. + */ + CVtUiRemoteVideoControl& RemoteVideoControl(); + + /** + * Switches viewfinder to main pane if it is currently in context + * pane. + */ + void SwitchViewFinderToMainPaneL( TBool aUpdateState = ETrue ); + + /** + * Switches viewfinder to context pane if it is currently in main + * pane. + */ + void SwitchViewFinderToContextPaneL( TBool aUpdateState = ETrue ); + + /** + * Restores viewfinder back to pane where it was prior to calling the + * switch ViewFinderToMainPane() or ViewFinderToContextPane() methods. + */ + void RestoreViewFinderL(); + + /* + * Updates volume to the Video Telephone engine. + */ + void CmdUpdateVolumeL( MVtEngAudio::TVtEngOutputVolume aVolume ); + + /** + * Increases "command activating" ref.count and adds cleanup item + * to decrease it. Refreshes commands in case of first increment from + * zero. When PopAndDestroy() is called, cleanup decreases reference + * count and if it reduces back to zero command refresh is again done. + */ + void EnableCommandActivatingAndCleanupPushL(); + + private: // from MProgressDialogCallback + + /** + * @see MProgressDialogCallback::DialogDismissedL + */ + void DialogDismissedL( TInt aButtonId ); + + private: + + // COMMAND HANDLING + + /** + * Checks if command is allowed. + * @param aCommand command identifier. + * @return ETrue if allowed, EFalse otherwise. + */ + TBool IsCommandAllowedL( const TInt aCommand ); + + /** + * Refreshes iDisabledFlags. + */ + void RefreshDisabledFlagsL(); + + /** + * Refreshes camera option availability. + * @param aUsePrimaryCameraNotAllowed it will be updated to ETrue if + * it is not allowed to activate primary camera. + * @param aUseSecondaryCameraNotAllowed it will be updated to ETrue if + * it is not allowed to activate secondary camera. + */ + void RefreshCameraOptionAvailability( + TBool& aUsePrimaryCameraNotAllowed, + TBool& aUseSecondaryCameraNotAllowed ); + + /** + * Enables capture mode. + */ + void CmdSnapshotL(); + + /** + * Freezes outgoing video image. + */ + void CmdCaptureL(); + + /** + * Disables capture mode. + */ + void CmdCancelCaptureL(); + + + /** + * Enables video. + */ + void CmdEnableVideoL(); + + /** + * Enables audio (unmute microphone). + */ + void CmdEnableAudioL(); + + /** + * Disables video. + */ + void CmdDisableVideoL(); + + /** + * Disables audio (mute microphone). + */ + void CmdDisableAudioL(); + + /** + * Activates Bluetooth handsfree. + */ + void CmdActivateBtL(); + + /** + * Deactivates Bluetooth handsfree. + */ + void CmdDeactivateBtL(); + + /** + * Activates loudspeaker. + */ + void CmdActivateLoudspeakerL(); + + /** + * Deactivates loudspeaker. + */ + void CmdDeactivateLoudspeakerL(); + + /** + * Ends active call. + */ + void CmdEndActiveCallL(); + + /** + * Swaps images places. + */ + void CmdSwapImagesPlacesL(); + + /** + * Switches used camera. + * @param aPrimaryCamera ETrue if primary camera is to be selected, + * EFalse if secondary camera is to be selected. + */ + void CmdUseCameraL( const TBool aPrimaryCamera ); + + /** + * Launches help application. + */ + void CmdHelpL(); + + /** + * Prepare exiting the application. + */ + void PrepareExitL(); + + /** + * Updates zoom step to Video Telephone engine. + */ + void CmdUpdateZoomL(); + + /** + * Dials emergency call. + */ + void CmdDialEmergencyL(); + + /** + * Goes to Idle. + */ + void CmdGoToIdleL(); + + /** + * Initialize image sharing. + */ + void CmdInitializeShareImageL( TBool& aNeedRefresh ); + + /** + * Start sharing image. + */ + void CmdShareImageL(); + + /** + * Stops sharing image. + */ + void CmdStopShareImageL( TBool& aNeedRefresh ); + + /** + * Handles change in call waiting state. + * @param aIsWaiting The state of call waiting. + */ + void HandleWaitingStateChange( TBool aIsWaiting ); + + // STATE TRANSITIONS + + /** + * @see MVtUiActiveExec::ActiveExecExecuteL. + */ + TBool ActiveExecInitExecuteL( + const TInt aState, + TInt& aNextState, + TRequestStatus& aRequest ); + + /** + * @see MVtUiActiveExec::ActiveExecContinue. + */ + TBool ActiveExecInitContinue( + TInt& aState, + const TInt aError ); + + /** + * @see MVtUiActiveExec::ActiveExecCancel. + */ + void ActiveExecInitCancel( + const TInt aState ); + + /** + * @see MVtUiActiveExec::ActiveExecDone. + */ + void ActiveExecInitDone( + const TInt aInitialState ); + + /** + * Executes command taking no parameters. + * @param aCommand command to be performed. + * @param aRequest request status. + */ + void ActiveExecInitExecuteCommandL( + const TVtEngCommandId aCommand, + TRequestStatus& aRequest ); + + /** + * Executes command taking no parameters. + * @param aCommand command to be performed. + * @param aParam command parameters. + * @param aRequest request status. + */ + template < class T > + void ActiveExecInitExecuteCommandL( + const TVtEngCommandId aCommand, + T& aParam, + TRequestStatus& aRequest ); + + /** + * Executes 'prepare camera' command. + * @param aSource source to be prepared. + * @param aRequest request status. + */ + void ActiveExecInitPrepareCameraL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ); + + /** + * Executes 'set source' command. + * @param aSource source to be selected. + * @param aRequest request status. + */ + void ActiveExecInitSetSourceL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ); + + /** + * Executes prepare viewfinder command. + * @param aRequest request status to be completed when finished. + */ + void ActiveExecInitPrepareViewFinderL( + TRequestStatus& aRequest ); + + /** + * Executes prepare remote render command. + * @param aRequest request status to be completed when finished. + */ + void ActiveExecInitPrepareRemoteRenderL( + TRequestStatus& aRequest ); + + + /** + * Executes command taking no parameters. + * @param aCommand command to be performed. + * @param aRequest request status. + */ + void ActiveExecCmdExecuteCommandL( + const TVtEngCommandId aCommand, + TRequestStatus& aRequest ); + + /** + * Executes 'set source' command. + * @param aSource source to be selected. + * @param aRequest request status. + */ + void ActiveExecCmdSetSourceL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ); + + /** + * Executes 'prepare camera' command. + * @param aSource source to be selected. + * @param aRequest request status. + */ + void ActiveExecCmdPrepareCameraL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ); + + + /** + * Determines main control options. + * @param aRemoteVideo for remote video. + * @return rendering options. + */ + TVtEngRenderingOptions + DetermineMainControlOptions( TBool aRemoteVideo ); + + /** + * Determines context control options. + * @return rendering options. + */ + TVtEngRenderingOptions DetermineContextControlOptions(); + + /** + * Determines dialer control options. + * @return rendering options. + */ + TVtEngRenderingOptions DetermineDialerControlOptions(); + + /** + * Determines main control DSA options. + * @param aRemoteVideo for remote video. + * @return rendering options. + */ + TVtEngRenderingOptionsDSA + DetermineMainControlOptionsDSA( TBool aRemoteVideo ); + + /** + * Determines context control DSA options. + * @return rendering options. + */ + TVtEngRenderingOptionsDSA DetermineContextControlOptionsDSA(); + + /** + * Determines dialer control DSA options. + * @return rendering options. + */ + TVtEngRenderingOptionsDSA DetermineDialerControlOptionsDSA(); + + /** + * Determines main control DP options. + * @param aRemoteVideo for remote video. + * @return rendering options. + */ + TVtEngRenderingOptionsDP + DetermineMainControlOptionsDP( TBool aRemoteVideo ); + + /** + * Determines context control DP options. + * @return rendering options. + */ + TVtEngRenderingOptionsDP DetermineContextControlOptionsDP(); + + /** + * Determines dialer control DP options. + * @return rendering options. + */ + TVtEngRenderingOptionsDP DetermineDialerControlOptionsDP(); + + /** + * Determines remote video control options. + * @return rendering options. + */ + TVtEngRenderingOptionsNGA + DetermineRemoteVideoControlOptionsNGA(); + + // SYNCHRONOUS / BLOCKING EXECUTION: + + /** + * Performs a command without any parameters. + * @param aCommand command to be performed. + */ + void ExecuteCmdL( const TVtEngCommandId aCommand ); + + /** + * Performs a command with a parameter. + * @param aCommmand command to be performed. + * @param aParam parameter. + */ + template< class T > + void ExecuteCmdL( + const TVtEngCommandId aCommand, + T& aParam ); + + // ASYNCHRONOUS EXECUTION: + + /** + * Performs a command without any parameters. + * @param aDialogPtr pointer to which returned value is stored. + * @param aCommand command to be performed. + * @param aStatus request status. + * @return dialog. + */ + CEikDialog* ExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + TRequestStatus& aStatus ); + + /** + * Performs a command with a parameter. + * @param aDialogPtr pointer to which returned value is stored. + * @param aCommmand command to be performed. + * @param aParam parameter. + * @param aStatus request status. + * @return dialog. + */ + template< class T > + CEikDialog* ExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + T& aParam, + TRequestStatus& aStatus ); + + /** + * Performs a command. + * @param aDialogPtr pointer to which returned value is stored. + * @param aCommand command. + * @param aParams parameter, optional. + * @param aStatus request status. + * @return dialog. + */ + CEikDialog* DoExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + TDesC8* aParams, + TRequestStatus& aStatus ); + + /** + * Executes command in TRAP harnness. + * @param aCommand command identifier. + * @param aParam optional, parameters. + * @return error code. + */ + TInt Execute( const TVtEngCommandId aCommand, TDesC8* aParam ); + + // EVENT HANDLING + + /** + * Handles foreground changed events. + * @param aIsForeground ETrue if foreground, EFalse otherwise. + */ + void HandleForegroundChangedL( + TBool aIsForeground ); + + /** + * Handles engine reset. + */ + void HandleEngineResetL(); + + /** + * Handles successful answer operation. + */ + void HandleAnswerL(); + + /** + * Stops waiting image text showing. + */ + void StopWaitingImage(); + + /** + * Stops white balance showing. + */ + void StopWhiteBalanceOrColortone(); + + /** + * Handles layout changes basically calling HandleLayoutChangedL + * in trap harness. + * @return error code. + */ + TInt HandleLayoutChanged(); + + /** + * Handles layout changes. + */ + void HandleLayoutChangedL(); + + /** + * Handles video frame. + * @param aLocal local frame if ETrue, EFalse if remote. + * @param aBitmap frame, ownership not transferred. + */ + void HandleVideoFrameL( + const TBool aLocal, + CFbsBitmap* aBitmap ); + + void SetVideoFrame( + const TBool aLocal, + CFbsBitmap* aBitmap ); + + /** + * Handles video call details. + * @param aCallID call id. + * @param aCallName call name. + * @param aIsPeerAddressAvailable is peer address available. + */ + void HandleVideoCallDetailsL( + const TInt aCallId, + const TDesC& aCallName, + const TBool aIsPeerAddressAvailable ); + + /** + * Checks if it's time to bring this application + * to the foreground. + */ + void CheckBringToForeground(); + + /** + * Checks if it's time to send this application + * to the background. + */ + void CheckSendToBackground(); + + /** + * Handles remote problem. + */ + void HandleVideoFrameRemoteProblemL(); + + /** + * Handles local problem. + */ + void HandleVideoFrameLocalProblemL(); + + /** + * Set a new remote video layout. + */ + void ChangeRemoteVideoLayoutL(); + + /** + * Show image initialization progress dialog. + */ + void ShowImageInitializeProgressL(); + + /** + * Hide image initialization progress dialog. + */ + void HideImageInitializeProgressL(); + + /** + * Sets SQCif usage. + * @param aUseSQCif SQCif is used. + */ + void RemoteVideoIsSQCif( TBool aUseSQCif ); + + /** + * Sets SQCif usage to control. + * @param aUseSQCif SQCif is used. + */ + void ControlUsesSQCif( TBool aUseSQCif ); + + /** + * Checks if beating needs to be started. + * @param aCallDurationEnabled call duration enabled status. + */ + void CheckBeatL( const TBool aCallDurationEnabled ); + + /** + * Handles heart beats. + */ + void HandleBeat(); + + // UTILITY METHODS + + /** + * Informs the user that camera is reserved by another application. + */ + void ShowCameraInUseNoteL() const; + + /** + * Informs the user that the selected operation is not allowed. + */ + void ShowNotAllowedNoteL() const; + + /** + * Informs the user that it is not allowed to create normal call. + */ + void ShowCallNotAllowedNoteL() const; + + /** + * Informs the user that the other camera is not usable. + */ + void ShowOtherCameraNotUsableNoteL() const; + + /** + * Informs the user that image loading failed. + */ + void ShowUnableToOpenNoteL() const; + + /** + * Informs the user that error happened during image decoding. + * Note: Cannot be constant because DoExecuteL() is used for + * calling this method. + */ + void ShowImageDecodingErrorNoteL(); + + /** + * Informs the user that image is DRM protected and cannot be opened. + */ + void ShowDRMNotAllowedNoteL() const; + + /** + * Sets softkeys. + * @param aSoftkeyResourceId softkey resource id. + */ + void SetSoftkeysL( const TInt aSoftkeyResourceId ); + + /** + * Sets application hidden from fast swap window. + * @param aHidden ETrue if to be hidden, EFalse if visible. + */ + void SetHiddenL( const TBool aHidden ); + + /** + * Updates title pane to show call index. + * @param aCallId call id. + */ + void SetCallIdL( const TInt aCallId ); + + /** + * Updates title pane to show name. + * @param aName name to be displayed in title pane. + * @return ETrue if succeeded, EFalse if not enough memory. + */ + TBool SetCallNameL( const TDesC& aName ); + + /** + * Brings Telephone application to the foreground. + */ + void BringTelephoneToForeground(); + + /** + * Returns window group identifier of the principal + * telephone application. + * @return window group id or 0 if failed. + */ + TInt TelephoneApplicationWgId(); + + /** + * Returns ETrue if number entry should be shown to the user. + * This can be called only after ReadTelephonyVariant has + * been called. + * @return ETrue if number entry should be shown to the user. + */ + inline TBool ShowNumberEntry() const; + + /** + * Checks if active idle is enabled. + * @return ETrue if active idle is enabled. + */ + TBool IsActiveIdleEnabledL() const; + + /** + * Checks engine functionality. + */ + void CheckEngineFunctionality(); + + /** + * Returns navi pane. + * @return navi pane instance. Ownership not transferred. + */ + inline CAknNavigationControlContainer* NaviPaneL(); + + /** + * Returns title pane. + * @return title pane instance. Ownership not transferred. + */ + inline CAknTitlePane* TitlePaneL(); + + /** + * Pushes item to cleanup stack to update softkeys. + */ + inline void CleanupPushRefreshL(); + + /** + * Pushes item to cleanup stack to enable blind status setting. + */ + inline void CleanupPushEnableBlindL(); + + /** + * Callback function to refresh navi pane and softkeys. + * @param aAny pointer to an instance of this class. + */ + static void DoRefresh( TAny* aAny ); + + /** + * Callback function to enable blind status checking. + * @param aAny pointer to an instance of this class. + */ + static void DoEnableBlindSetting( TAny* aAny ); + + /** + * Callback function to disable command activation + * state. + * @param aAny pointer to an instance of this class. + */ + static void DoDisableCommandActivating( TAny* aAny ); + + /** + * Decreases command activation ref.count and refreshes + * states if count gets zero. + */ + void HandleCommandDeactivationL(); + + /** + * Callback function to handle exit timeout. + * @param aAny pointer to instance of this class. + * @return KErrNone always. + */ + static TInt DoHandleExitTimeout( TAny* aAny ); + + /** + * Callback function to exit. + * @param aAny pointer to instance of this class. + * @return KErrNone always. + */ + static TInt DoExit( TAny* aAny ); + + /** + * Checks whether viewfinder is currently in main pane. + * @return ETrue if viewfinder is in main pane. + */ + TBool IsViewFinderInMainPane() const; + +public: + /** + * Checks whether viewfinder is currently in context pane. + * @return ETrue if viewfinder is in context pane. + */ + TBool IsViewFinderInContextPane() const; +private: + /** + * Updates context pane icon + */ + void UpdateContextPaneIconL(); + + /** + * Enables or disables the incall bubble. + */ + void SetIncallBubbleAllowedInUsualL( TBool aAllowed ); + + /** + * Shows progress dialog using given resource. + */ + void ShowProgressDialogL( TInt aResourceId, + MProgressDialogCallback* aCallback = NULL ); + + /** + * Hides (completes) progress dialog. + */ + void HideProgressDialogL(); + + /** + * Static async callback for switching viewfinder to MainPane, also + * starts image sharing. + */ + static TInt AsyncViewFinderToMainPaneAndShare( TAny* aPtr ); + + /** + * Static async callback for starting image share. + */ + static TInt AsyncShare( TAny* aPtr ); + + /** + * Static async callback for showing error note and resharing image. + */ + static TInt AsyncShowErrorAndRestartShare( TAny* aPtr ); + + /** + * Static async callback for handling layout change. + */ + static TInt DelayedHandleLayoutChanged( TAny* aPtr ); + + /** + * Gets current camera orientations for primary and secondary camera. + */ + void GetCameraOrientations(); + + /** + * Sets initial camera orientation. + */ + void SetInitialCameraOrientationL(); + + /** + * Sets current camera orientation. + */ + void SetCameraOrientationL(); + + /** + * Updates engine states. + */ + void RefreshStatesL(); + + /** + * Starts video preference feature specified by command id. + */ + void CmdAdjustVideoL( TInt aCommand ); + + /** + * AppUi has been initialized and its current state is EVtUiAppUiAnswered. + * Do any other needed initilization here e.g. start features. + */ + void AppUiInitDoneDoPostInitL(); + + /* + * This function decides how the wsevent should be handled + * if zoom mode is on. + * @param aEvent window server event. + * @return ETrue if caller function should return, EFalse otherwise. + */ + TBool ProcessWsEventIfZoomModeIsActiveL( const TWsEvent& aEvent ); + + /* + * This function hides the brightness, contrast, volume slider if their mode is on. + */ + void StopSliders(); + + /** + * Does pre handling to key events, especially for Zoom in and Zoom out + * HW keys. + * @param aEvent event. + */ + TBool PreHandleKeyEventL( const TWsEvent& aEvent ); + + /** + * Calls SimulateKeyEventL() for stored zoom key event. + */ + void SimulateStoredKeyEventL( const TEventCode aEventCode ); + + /** + * Stores zoom key event. If there is different zoom key event + * already stored, keyup event is sent for that event before + * new event is stored. + */ + void StoreKeyEventL( const TKeyEvent& aKeyEvent ); + + /** + * Callback function that calls TryToStartTb function + */ + static TInt DoTryToStartTbL( TAny* aAny ); + + /* + * Tries to start toolbar. Toolbar is started if + * option menus is not visible. + */ + void TryToStartTbL(); + + /* + * Update video prefrence + */ + void UpdateVBSettingL(); + + + /** + * Sets current rendering mode (i.e. default or dialer) + */ + void SetRenderingModeL( const TRenderingMode aMode, + MVtUiVideoWindow* aDownlink ); + + /** + * Updates rendering parameters. + */ + void UpdateRenderingParametersL(); + + /* + * Media state has been changed + */ + void MediaStateChangedL(); + + /* + * Updates volume slider + */ + void RefreshVolumeL(); + + /* + * Adjusts volume up or down one step. + */ + void AdjustVolumeL( TRemConCoreApiOperationId aOperationId ); + + private: + + // Pointer to stored downlink window. + MVtUiVideoWindow* iStoredDownlinkWindow; + + // Current rendering mode + TRenderingMode iRenderingMode; + + // Command framework instance + CVtUiCommandManager* iCommandManager; + + // Inner class. + class CInstance; + + // Model instance. Exists only while there is a video call. + CInstance* iInstance; + + // Inner class to observe all events. + class CEventObserver; + + // Inner class for verifying media gallery objects + class CVtUiAppUiMGVerifier; + + // Owned event observer. + CEventObserver* iEventObserver; + + // Owned blank control for reset & shutdown. + CVtUiBlankControl* iBlankControl; + + /** + * Enumerates disabled flags: + * EDisabledVideo - video disabled, + * EDisabledAudio - audio disabled, + * EVideoOptionsDisabled - video options disabled. + */ + enum TDisabledFlags + { + EDisabledVideo = 1, + EDisabledAudio = 2, + EVideoOptionsDisabled = 4 + }; + + // The Ihf Note id. + TInt iIhfNoteId; + + // Flags for disabled. Sum of subset of TDisabledFlags. + TInt iDisabledFlags; + + // Current softkey resource id. + TInt iCurrentSoftkeys; + + // Telephony variant. + TVtUiVideoTelephonyVariation iVTVariation; + + // Window group id of this application. + TInt iThisApplicationWgId; + + // Window group id of eikon server. + TInt iEikonServerWgId; + + // Window group id for AknCapServer + TInt iAknCapServerWgId; + + // Window group id for Akn Notifier Server + TInt iAknNfyServerWgId; + + // Owned active executor for initialisation / uninitialisation. + CVtUiActiveExec* iActiveExec; + + // Owned current dialog on execution. + CEikDialog* iExecDialog; + + // Owned blank dialog. + CEikDialog* iExecBlankDialog; + + // Reference to request status. + TRequestStatus* iShutdownRequest; + + // Owned active executor for command execution. + CVtUiActiveExec* iCmdActiveExec; + + // Owned current dialog on command execution. + CEikDialog* iCmdExecDialog; + + // Owned blank dialog on command execution. + CEikDialog* iCmdExecBlankDialog; + + + // Owned timer for making sure that + // the application is terminated in time. + CPeriodic* iExitTimer; + + // DTMF tone, used as parameter to KVtEngStartDtmfTone. + TPckgBuf< TChar > iDtmfTone; + + // Pointer to uplink window. + MVtUiVideoWindow* iUplinkWindow; + + // Pointer to downlink window. + MVtUiVideoWindow* iDownlinkWindow; + + // Query dialog for switching to voice call + CAknQueryDialog* iCreateVoiceCallDlg; + + // Progress dialog shown when initializing + CAknProgressDialog* iProgressDlg; + + // ASync callback. + CAsyncCallBack* iAsyncCallback; + + // Async callback for layout change + CAsyncCallBack* iLayoutChangeCallback; + + // Camera orientation for primary camera + MVtEngMedia::TCameraOrientation iPrimaryCameraOrientation; + + // Camera orientation for secondary camera + MVtEngMedia::TCameraOrientation iSecondaryCameraOrientation; + + // Currently used camera orientation + MVtEngMedia::TCameraOrientation iCurrentCameraOrientation; + + // Current loudspeaker volume + TInt iLoudspeakerVolume; + + // Current handset volume + TInt iHandsetVolume; + + // Ui states (media, audio, boolean variables) + TVtUiStates* iUiStates; + + // Component manager instance + CVtUiComponentManager* iComponentManager; + + // Feature manager instance + CVtUiFeatureManager* iFeatureManager; + + // Pointer to cba + CEikButtonGroupContainer* iCba; + + // Active number source + MVtUiNumberSource* iNumberSource; + + TVtUiAppStateBase* iState; + + // Stored zoom key event + TKeyEvent iStoredKeyEvent; + + // ETrue if incoming call is waiting call + TBool iIsWaitingCallState; + + // ETrue if key event has been stored + TBool iIsStoredKeyEvent; + + // Timer for starting the toolbar + CPeriodic* iTbPeriodic; + + // Owned volume control class for adjusting + // engine side volume + CVtUiVolumeControl* iVolCtrl; + + private: // Friend classes + + // Inner class. + friend class CInstance; + + // Inner class. + friend class CEventObserver; + + private: + + // Class for active command handling + class TActiveCommand + { + + public: + + /** + * Constructor. + * @param aActiveCommands array of command ids. + * @param aCommand command id. + */ + TActiveCommand( RArray< TInt >& aActiveCommands, TInt aCommandId ); + + /** + * Destructor + */ + ~TActiveCommand(); + + /** + * Adds command to active commands + */ + void OpenL(); + + private: + + /** + * Removes command from active commands + */ + void Close(); + + private: + + // Reference to array of active command ids. + RArray< TInt >& iActiveCommands; + + // Command id. + const TInt iCommandId; + + }; + + + private: + // Active command ids. + RArray< TInt > iActiveCommands; + // The last time swap image operation occured. + TTime iLastSwapTime; + // Incall bubble. + CAknIncallBubble* iIncallBubble; + //This flag is used to check if orientation changed before some action + //Currently is only used for prepare remote render and start remote render + TBool iIsLandScapeOrientation; + //flag indicates layoutchang session + TBool iLayoutChg; + //save cmd for later use + TInt iDelayedCmd; + }; + +#endif // CVTUIAPPUI_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiBitmapManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiBitmapManager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,188 @@ +/* +* Copyright (c) 2004, 2005 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: Bitmap manager for Video Telephone application. +* +*/ + + + +#ifndef CVTUIBITMAPMANAGER_H +#define CVTUIBITMAPMANAGER_H + +// INCLUDES +#include +#include +#include "videotelui.hrh" + +// DATA TYPES + +/** +* Type definition for bitmap pool identifier. +* Zero is reserved as invalid identifier. +*/ +typedef TInt TVtUiBitmapPoolId; + +// FORWARD DECLARATION +class CFbsBitmap; + +// CLASS DECLARATION + +/** +* Bitmap manager for Video Telephone application. +* @since Series 60 2.8 +*/ +class CVtUiBitmapManager + : public CBase + { + public: // Constructors and destructor + + /** + * Constructor. + */ + CVtUiBitmapManager(); + + /** + * Destructor. + */ + ~CVtUiBitmapManager(); + + public: // New functions + + /** + * Adds bitmaps to the pool. + * @param aBitmapId bitmap identifier. + * @param aBitmapMaskId bitmap mask identifier, + * KErrNotFound if no mask. + * @param aExpectDefaultColor ETrue if default color is to be expected. + * @return bitmap pool identifier. + */ + TVtUiBitmapPoolId AddBitmapsL( + TVtUiBitmapId aBitmapId, + TVtUiBitmapId aBitmapMaskId, + TBool aExpectDefaultColor ); + + /** + * Adds bitmap to the pool.Note that this bitmap does not have mask. + * @param aBitmapId bitmap identifier. + * @param aExpectDefaultColor ETrue if default color is to be expected. + * @return bitmap pool identifier. + */ + TVtUiBitmapPoolId AddBitmapL( + TVtUiBitmapId aBitmapId, + TBool aExpectDefaultColor ); + + /** + * Removes bitmap from the pool. + * @param aId bitmap pool identifier. + */ + void RemoveBitmap( TVtUiBitmapPoolId aId ); + + /** + * Sets size of the specified bitmap. This method must be + * called before bitmap is used. + * + * @param aId bitmap pool identifier. + * @param aSize size of the bitmap. + */ + void SetSize( + TVtUiBitmapPoolId aId, + const TSize& aSize ); + + /** + * Sets size and default color of the specified bitmap. + * This method must be called before bitmap is used. + * + * @param aId bitmap pool identifier. + * @param aSize size of the bitmap. + * @param aDefaultColor default color of the bitmap. + */ + void SetSizeAndColor( + TVtUiBitmapPoolId aId, + const TSize& aSize, + const TRgb& aDefaultColor ); + + /** + * Sets aspect ratio preservation status. + * @param aId bitmap pool identifier. + * @param aPreserve ETrue if aspect ration is to be preserved. + */ + void SetAspectRatio( + TVtUiBitmapPoolId aId, + TBool aPreserve ); + + /** + * This method is called to inform that bitmap is required. + * @param aId bitmap pool identifier. + */ + void RequireBitmap( TVtUiBitmapPoolId aId ); + + /** + * Gets bitmap & its mask. + * @param aId bitmap pool identifier. + * @param aBitmap it will be updated to hold bitmap pointer, + * or NULL if bitmap is not available. This pointer + * must not be kept any longer than absolutely required. + * @param aBitmapMask it will be updated to hold bitmap mask pointer, + * or NULL if bitmap mask is not available. This pointer + * must not be kept any longer than absolutely required. + */ + void GetBitmaps( + TVtUiBitmapPoolId aId, + CFbsBitmap*& aBitmap, + CFbsBitmap*& aBitmapMask ); + + /** + * Gets bitmap & its mask. + * @param aId bitmap pool identifier. + * @param aBitmap it will be updated to hold bitmap pointer, + * or NULL if bitmap is not available. This pointer + * must not be kept any longer than absolutely required. + */ + void GetBitmap( + TVtUiBitmapPoolId aId, + CFbsBitmap*& aBitmap ); + + /** + * Invalidates bitmaps. This is called on theme / layout change. + */ + void InvalidateBitmaps(); + + private: + + // Inner class. + class CBitmapInfo; + + /** + * Finds bitmap based on pool identifier. + * @param aId bitmap pool identifier. + * @return KErrNotFound if not found, or index to array. + */ + TInt Find( TVtUiBitmapPoolId aId ) const; + + private: + + // Owned array of bitmap information instances. + RPointerArray< CBitmapInfo > iBitmapArray; + + // Bitmap pool identifier used to generate bitmaps. + TVtUiBitmapPoolId iBitmapId; + + // Temporary instance for getting bitmap file name. + TFileName iTmpFileName; + + }; + +#endif // CVTUIBITMAPMANAGER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiBlankControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiBlankControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2004 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: Blank control for Video Telephone application. +* +*/ + + + +#ifndef CVTUIBLANKCONTROL_H +#define CVTUIBLANKCONTROL_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Blank control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiBlankControl + : public CCoeControl + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtUiBlankControl(); + + /** + * Symbian constructor. + * @param aRect control rectangle. + */ + void ConstructL( const TRect& aRect ); + + /** + * C++ destructor. + */ + ~CVtUiBlankControl(); + + public: // New functions + + /** + * Sets blanker active / inactive. + * @param aStatus ETrue if to be activated. + */ + void SetActive( TBool aStatus ); + + protected: // Functions from base classes + + /** + * From CCoeControl, handles key events. + * @param aKeyEvent key event. + * @param aType type of event. + */ + virtual TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * From CCoeControl, draws the control. + * @param aRect area to be drawn. + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl, handles size changes. + */ + virtual void SizeChanged(); + + /** + * From CCoeControl, handles position changes. + */ + virtual void PositionChanged(); + + private: + + // ETrue if blanker is active. + TBool iBlankerActive; + + }; + +#endif // CVTUIBLANKCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiBlankDialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiBlankDialog.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2004 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: Blank dialog for Video Telephone application. +* +*/ + + + +#ifndef CVTUIBLANKDIALOG_H +#define CVTUIBLANKDIALOG_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Blank dialog for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiBlankDialog + : public CEikDialog + { + public: // Constructors and destructor + + /** + * Constructor. + * + * @param aSelfPtr optional pointer to itself. + */ + CVtUiBlankDialog( CEikDialog** aSelfPtr ); + + /** + * Destructor. If a pointer was passed in constructor, + * it will be cleared here. + */ + ~CVtUiBlankDialog(); + + public: // New functions + + /** + * Executes blank dialog, no wait flag set. + */ + void ExecuteDialogNoWaitLD(); + + /** + * Executes blank dialog. + * @param aRequest request status, optional. + */ + void ExecuteDialogLD( + TRequestStatus* aRequest ); + + protected: // New functions + + /** + * Completes dialog with error. + * Note: this method will delete the dialog. + * @param aError error code. + */ + void Complete( const TInt aError ); + + protected: // Functions from base classes + + /** + * @see CEikDialog::PreLayoutDynInitL. + */ + void PreLayoutDynInitL(); + + /** + * @see CEikDialog::PostLayoutDynInitL. + */ + void PostLayoutDynInitL(); + + /** + * @see CEikDialog::OkToExitL. + */ + TBool OkToExitL( TInt aButtonId ); + + /** + * @see CEikDialog::Draw. + */ + void Draw( const TRect& aRect ) const; + + private: + + // Pointer to itself. + CEikDialog** iSelfPtr; + + // Error code. + TInt* iError; + + // Request status. + TRequestStatus* iRequest; + }; + +#endif // CVTUIBLANKDIALOG_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiContextControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiContextControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2004, 2005 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: Context pane control for Video Telephone application. +* +*/ + + + +#ifndef CVTUICONTEXTCONTROL_H +#define CVTUICONTEXTCONTROL_H + +// INCLUDES +#include +#include "cvtuivideocontrolbase.h" + +// FORWARDS +class CVtUiAppUi; +class TVtUiStates; + +/** +* Context pane control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiContextControl : public CVtUiVideoControlBase, + public MAknWsEventObserver + { + + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aBitmapManager bitmap manager. + * @param aLargeViewfinder ETrue if large viewfinder wanted. + * @param aAppUi application UI. + * @param aUiStates UI states. + */ + static CVtUiContextControl* NewL( + CVtUiBitmapManager& aBitmapManager, + CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates ); + + /** + * C++ destructor. + */ + ~CVtUiContextControl(); + + /** + * LayoutRemoteVideo + */ + void LayoutRemoteVideo(); + + public: // from CCoeControl + + /** + * @see CCoeControl::HandlePointerEventL + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + + private: // from CVtUiVideoControlBase + + /** + * @see CVtUiVideoControlBase::HandleSizeChanged + */ + void HandleSizeChanged(); + + /** + * @see CVtUiVideoControlBase::DrawColoredBackground + */ + void DrawColoredBackground( CWindowGc& aGc ) const; + + /** + * @see CVtUiVideoControlBase::StreamBlitPosition + */ + TPoint StreamBlitPosition() const; + + /** + * @see CVtUiVideoControlBase::StreamBlitPosition + */ + TRect StreamClippingRect() const; + + /** + * @see CVtUiVideoControlBase::BlindImage + */ + CFbsBitmap* BlindImage() const; + + /** + * @see CVtUiVideoControlBase::BlindMask + */ + CFbsBitmap* BlindMask() const; + + /** + * @see CVtUiVideoControlBase::BlindBlitPosition + */ + TPoint BlindBlitPosition() const; + + public: // from MAknWsEventObserver + + /** + * @see MAknWsEventObserver::HandleWsEventL + */ + void HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ); + + private: + + /** + * C++ constructor. + */ + CVtUiContextControl( + CVtUiBitmapManager& aBitmapManager, + CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates ); + + /** + * Symbian constructor. + */ + void ConstructL(); + + private: + + // Background icon identifier. + TVtUiBitmapPoolId iBackgroundId; + + // Blind icon identifier. + TVtUiBitmapPoolId iBlindId; + + // Blind icon mask identifier. + TVtUiBitmapPoolId iBlindMaskId; + + // Reference to application UI. + CVtUiAppUi& iAppUi; + + // Reference to UI states. + TVtUiStates& iUiStates; + + // Background bitmap layout. + TAknLayoutRect iBackGround; + + // Blind icon rect + TRect iBlindRect; + + // Stream rect + TRect iStreamRect; + + // ETrue if it is ok to swap images on button up + TBool iOkToSwapOnButtonUp; + + }; + +#endif // CVTUICONTEXTCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiDoc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiDoc.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2004 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: Document class for Video Telephone application. +* +*/ + + + +#ifndef CVTUIDOC_H +#define CVTUIDOC_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Document class for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiDoc + : public CAknDocument + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aApp application instance. + */ + CVtUiDoc( CEikApplication& aApp ); + + public: // Functions from base classes + + /** + * From CAknDocument, creates application UI instance. + * @return application UI instance. + */ + virtual CEikAppUi* CreateAppUiL(); + + /** + * From CAknDocument, updates task name. + * @param aWgName window group name instance. + */ + virtual void UpdateTaskNameL( CApaWindowGroupName* aWgName ); + + }; + +#endif // CVTUIDOC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiExecuteCmdDialog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiExecuteCmdDialog.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,126 @@ +/* +* Copyright (c) 2004 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: Dialog for command execution for Video Telephone application. +* +*/ + + + +#ifndef CVTUIEXECUTECMDDIALOG_H +#define CVTUIEXECUTECMDDIALOG_H + +// INCLUDES +#include "CVtUiBlankDialog.h" +#include + +// FORWARD DECLARATIONS +class MVtEngCommandHandler; +class MVtUiEngineCommandManager; + +// CLASS DECLARATION + +/** +* Dialog for command execution for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiExecuteCmdDialog + : public CVtUiBlankDialog, + private MVtEngCommandObserver + { + public: // Constructors and destructor + + /** + * Constructor. + * + * @param aSelfPtr optional pointer to itself. + * @param aCommandHandler command handler. + * @param aCommandManager command manager. + */ + CVtUiExecuteCmdDialog( + CEikDialog** aSelfPtr, + MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager ); + + /** + * Destructor. + */ + ~CVtUiExecuteCmdDialog(); + + public: // New functions + + /** + * Executes command dialog. + * @param aCommandId command identifier. + * @param aParams parameters. + * @param aRequest request status, optional. + */ + void ExecuteCmdLD( + const TVtEngCommandId aCommandId, + TDesC8* aParams, + TRequestStatus* aRequest ); + + protected: // Functions from base classes + + /** + * @see CVtUiBlankDialog::PostLayoutDynInitL. + */ + void PostLayoutDynInitL(); + + private: + + /** + * @see MVtEngCommandObserver::HandleVTCommandPerformedL. + */ + virtual void HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ); + + /** + * Handles execution failure. + * @param aResult error code. + */ + void HandleExecuteFailed( TInt aResult ); + + private: + + // Inner class. + class CActiveCmd; + + // Friend. + friend class CActiveCmd; + + // Ref to command handler. + MVtEngCommandHandler& iCommandHandler; + + // Ref to command manager. + MVtUiEngineCommandManager& iCommandManager; + + // Command to be executed. + TVtEngCommandId iCommand; + + // Owned parameters. + HBufC8* iCommandParams; + + // ETrue if command has been completed. + TBool iCommandCompleted; + + // Owned active object to perform the command. + CActiveCmd* iActiveCmd; + + }; + +#endif // CVTUIEXECUTECMDDIALOG_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiMainControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiMainControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2004, 2005 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: Main pane control for Video Telephone application. +* +*/ + + + +#ifndef CVTUIMAINCONTROL_H +#define CVTUIMAINCONTROL_H + +// INCLUDES +#include "cvtuivideocontrolbase.h" + +// CLASS DECLARATION +class TVtUiStates; +class TAknTextLineLayout; + +/** +* Main pane control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiMainControl : public CVtUiVideoControlBase + { + + public: // Constructors and destructor + + /** + * Constructor. + * @param aBitmapManager bitmap manager. + * @param aUiStates Ui states class. + */ + static CVtUiMainControl* NewL( CVtUiBitmapManager& aBitmapManager, + TVtUiStates& aUiStates ); + + /** + * C++ destructor. + */ + ~CVtUiMainControl(); + + public: // New functions. + + /** + * Sets SQCif mode on/off. + * @param aIsSupported whether on/off + */ + void SupportSQCif( TBool aIsSupported ); + + /** + * LayoutRemoteVideo + */ + void LayoutRemoteVideo(); + + private: // from CVtUiVideoControlBase + + /** + * @see CVtUiContextControl::HandleSizeChanged + */ + void HandleSizeChanged(); + + /** + * @see CVtUiContextControl::DrawWaitingText + */ + TBool DrawWaitingText( CWindowGc& aGc ) const; + + /** + * @see CVtUiContextControl::StreamBlitPosition + */ + TPoint StreamBlitPosition() const; + + /** + * @see CVtUiContextControl::StreamClippingRect + */ + TRect StreamClippingRect() const; + + /** + * @see CVtUiContextControl::BlindImage + */ + CFbsBitmap* BlindImage() const; + + /** + * @see CVtUiContextControl::BlindMask + */ + CFbsBitmap* BlindMask() const; + + /** + * @see CVtUiContextControl::BlindBlitPosition + */ + TPoint BlindBlitPosition() const; + + /** + * @see CVtUiContextControl::WaitingTextLayout + */ + TAknTextLineLayout WaitingTextLayout( TInt aLine ); + + private: + + /** + * Private constructor. + */ + CVtUiMainControl( CVtUiBitmapManager& aBitmapManager, + TVtUiStates& aUiStates ); + + /** + * C++ constructor. + * @param aBitmapManager bitmap manager. + */ + CVtUiMainControl(); + + /** + * Symbian constructor. + */ + void ConstructL(); + + private: + + // Background layout. + TAknLayoutRect iBackgroundLayout; + + // Blind icon identifier. + TVtUiBitmapPoolId iBlindId; + + // Blind icon mask identifier. + TVtUiBitmapPoolId iBlindMaskId; + + // Blind icon layout. + TAknLayoutRect iBlindLayout; + + // Stream layout. + TAknLayoutRect iStreamLayoutRect; + + // ETrue if sqcif is used in remote video. + TBool iSQCifRemote; + + // reference to uistates + TVtUiStates& iUiStates; + + }; + +#endif // CVTUIMAINCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiMutedControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiMutedControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2004 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: Navi pane control for Video Telephone application. +* +*/ + + + +#ifndef CVTUIMUTEDCONTROL_H +#define CVTUIMUTEDCONTROL_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION + +/** +* Navi pane control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiMutedControl + : public CCoeControl + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CVtUiMutedControl(); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * C++ destructor. + */ + ~CVtUiMutedControl(); + + public: // Functions from base classes + + /** + * From CCoeControl, handles resource change. + * @param aType type of change. + */ + virtual void HandleResourceChange( + TInt aType ); + + protected: // Functions from base classes + + /** + * From CCoeControl, draws the control. + * @param aRect area to be drawn. + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl, handles size changes. + */ + virtual void SizeChanged(); + + /** + * From CCoeControl, handles position changes. + */ + virtual void PositionChanged(); + + /** + * From CCoeControl, returns amount of component controls. + * @return amount of component controls. + */ + virtual TInt CountComponentControls() const; + + /** + * From CCoeControl, returns specified control. + * @param aIndex index of control. + * @return control. + */ + virtual CCoeControl* ComponentControl( + TInt aIndex ) const; + + private: + + // Owned muted label. + CEikLabel* iMutedLabel; + + }; + +#endif // CVTUIMUTEDCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiNaviPane.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiNaviPane.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2004, 2005 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: Controller for navi pane for Video Telephone application. +* +*/ + + + +#ifndef CVTUINAVIPANE_H +#define CVTUINAVIPANE_H + +// INCLUDES +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CAknNavigationControlContainer; +class CAknNavigationDecorator; +class CVtUiNaviPaneControl; +class CVtUiAppUi; + +// CONSTANTS + +// Minimum volume. +const TInt KVtUiVolumeMinimum = 0; + +// Maximum volume. +const TInt KVtUiVolumeMaximum = 10; + +// CLASS DECLARATION + +/** +* Controller for navi pane for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiNaviPane : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aNaviPane reference to navipane. + * @param aAppUi application UI. + */ + static CVtUiNaviPane* NewL( + CAknNavigationControlContainer& aNaviPane, + CVtUiAppUi& aAppUi ); + + /** + * C++ destructor. + */ + ~CVtUiNaviPane(); + + public: // New functions + + /** + * Updates current speaker. + * @param aLoudspeaker Loudspeaker if ETrue, handset otherwise. + */ + void SetCurrentSpeaker( + const TBool aLoudspeaker ); + + /** + * Changes muted status. + * @param aStatus status. + */ + void SetMuted( + const TBool aStatus ); + + /** + * Updates call duration. + * @param aDuration current duration. + * @param aEnabled ETrue if call duration enabled. + */ + void SetCallDuration( + const TTimeIntervalSeconds& aDuration, + const TBool aEnabled ); + + /** + * Commits changes. This method should be called after above + * Set* methods to make sure that display is up to date. + */ + void CommitL(); + + /** + * Gets speaker volume. + * @param aLoudspeaker ETrue if loudspeaker, EFalse if handset. + * @param aValue it will be updated to contain volume of the speaker. + */ + void GetSpeakerVolume( + const TBool aLoudspeaker, + TInt& aValue ) const; + + /** + * Handles resource changes. + * @param aType type of change. + */ + void HandleResourceChange( + TInt aType ); + + protected: // From base classes + + /** + * Called by CActive when operation needs to be canceled. + */ + void DoCancel(); + + /** + * Called by CActiveScheduler when operation has been + * finished. + */ + void RunL(); + + private: + + /** + * C++ constructor. + * @param aNaviPane navipane instance. + * @param aAppUi application UI. + */ + CVtUiNaviPane( + CAknNavigationControlContainer& aNaviPane, + CVtUiAppUi& aAppUi ); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * Pushes indicators after timeout. + */ + void PushAfterTimeout(); + + /** + * Pushes new decorator to navi pane replacing the + * previous one. + * @param aNew new to replace the old one. + */ + void PushL( CAknNavigationDecorator* aNew ); + + /** + * Returns indicator that should be used currently. + * @return indicator to be shown. + */ + CAknNavigationDecorator* DefaultIndicator() const; + + private: + + // Slider types in navipane + enum TSliderControlType + { + ENone, + EZoom, // Zoom control visible + EVolume // Volume control visible + }; + + + // Holds current slider type + TSliderControlType iSliderType; + + // Ref to navi pane. + CAknNavigationControlContainer& iNaviPane; + + // Ref to top navi pane element. + CAknNavigationDecorator* iCurrent; + + // Owned controller for call duration + CAknNavigationDecorator* iMainIndicators; + + // Reference to navi pane control. + CVtUiNaviPaneControl* iNaviPaneControl; + + // Owned muted indicator. + CAknNavigationDecorator* iMutedIndicator; + + // Owned timer instance. + RTimer iTimer; + + // ETrue if call duration was enabled. + TBool iOldCallDurationEnabled; + + // ETrue if call duration is enabled. + TBool iCallDurationEnabled; + + // ETrue if loudspeaker, EFalse if handset. + TBool iLoudspeaker; + + // Old microphone status. + TBool iOldMicrophoneMuted; + + // ETrue if microphone is muted. + TBool iMicrophoneMuted; + + // Reference to application UI. + CVtUiAppUi& iAppUi; + }; + +#endif // CVtUiNaviPane_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiNaviPaneControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiNaviPaneControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,147 @@ +/* +* Copyright (c) 2004, 2005 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: Navi pane control for Video Telephone application. +* +*/ + + + +#ifndef CVTUINAVIPANECONTROL_H +#define CVTUINAVIPANECONTROL_H + +// INCLUDES +#include +#include + +// CONSTANTS + +// Maximum length of call duration buffer. +const TInt KVtUiCallDurationBufferLength = 16; + +// FORWARD DECLARATIONS +class CVtUiNaviPane; + +// CLASS DECLARATION + +/** +* Navi pane control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiNaviPaneControl + : public CCoeControl + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aNaviPane eference to navipane. + */ + CVtUiNaviPaneControl( CVtUiNaviPane& aNaviPane ); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * C++ destructor. + */ + ~CVtUiNaviPaneControl(); + + public: // New functions + + /** + * Sets call duration. + * @param aDuration call duration. + * @param aEnabled ETrue if enabled. + */ + void SetCallDuration( + const TTimeIntervalSeconds& aDuration, + const TBool aEnabled ); + + /** + * Updates screen to reflect changes. + */ + void CommitL(); + + protected: // Functions from base classes + + /** + * From CCoeControl, draws the control. + * @param aRect area to be drawn. + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl, handles size changes. + */ + virtual void SizeChanged(); + + /** + * From CCoeControl, handles position changes. + */ + virtual void PositionChanged(); + + private: + + /** + * Gets call duration text. + * @return reference to text. + */ + const TDesC& GetCallDurationText() const; + + /** + * Appends character to the buffer. + * @param aBuffer buffer. + * @param aChar character. + */ + static void AppendChar( + TDes& aBuffer, + const TChar& aChar ); + + /** + * Appends a number to the buffer. + * @param aBuffer buffer. + * @param aNumber number, 0 .. 99. + */ + static void AppendNum( + TDes& aBuffer, + const TInt aNumber ); + + private: + + // Call duration layout. + TAknLayoutText iCallDurationLayout; + + // ETrue if call duration is enabled. + TBool iCallDurationEnabled; + + // Duration in seconds. + TTimeIntervalSeconds iCallDuration; + + // Buffer for call duration. + mutable TBuf< KVtUiCallDurationBufferLength > iCallDurationBuffer; + + // Current speaker, ETrue if loudspeaker, EFalse if handset. + TBool iLoudspeaker; + + // Reference to navipane. + CVtUiNaviPane& iNaviPane; + + }; + +#endif // CVTUINAVIPANECONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiNumberEntryActivationControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiNumberEntryActivationControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,118 @@ +/* +* Copyright (c) 2004 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: Number entry activation control for +* Video Telephone application. +* +*/ + + + +#ifndef CVTUINUMBERENTRYACTIVATIONCONTROL_H +#define CVTUINUMBERENTRYACTIVATIONCONTROL_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CVtUiAppUi; + +// CLASS DECLARATION + +/** +* Number entry activation control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiNumberEntryActivationControl + : public CCoeControl + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aAppUi application ui. + */ + CVtUiNumberEntryActivationControl( CVtUiAppUi& aAppUi ); + + /** + * Symbian constructor. + * @param aRect initial area. + */ + void ConstructL( const TRect& aRect ); + + /** + * C++ destructor. + */ + ~CVtUiNumberEntryActivationControl(); + + public: // Functions from base classes + + /** + * @see CCoeControl::SizeChanged. + */ + virtual void SizeChanged(); + + /** + * @see CCoeControl::PositionChanged. + */ + virtual void PositionChanged(); + + /** + * @see CCoeControl::Draw. + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * @see CCoeControl::OfferKeyEventL. + */ + virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + public: // New functions + + /** + * Set control's activation status. + * @param aIsActive ETrue if key events should + * be handled oterherwise EFalse. + */ + void SetActive( TBool aIsActive ); + + private: + + /** + * Checks if event should open number entry. + * @param aKeyEvent event. + * @param aDtmfTone event as character tone. + * @return ETrue if number entry should be opened. + */ + static TBool IsNumericEvent( + const TKeyEvent& aKeyEvent, + TChar& aDtmfTone ); + + private: + + // Reference to application ui. + CVtUiAppUi& iAppUi; + + // ETrue if this control has been added to stack. + TBool iAddedToStack; + + // ETrue if key events should be handled oterherwise EFalse. + TBool iIsActive; + + }; + +#endif // CVTUINUMBERENTRYACTIVATIONCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiRemoteVideoControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiRemoteVideoControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2006 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: class for Remote Video Control. +* +*/ + +#ifndef CVTUIREMOTEVIDEOCONTROL_H_ +#define CVTUIREMOTEVIDEOCONTROL_H_ + +#include +#include + +class CVtUiVideoControlBase; +class CVtUiAppUi; + +/** + * CVtUiRemoteVideoControl + * + * Remote Video control. + * + * @since S60 v5.0 + */ +class CVtUiRemoteVideoControl : public CCoeControl, + public MAknWsEventObserver + { +public: + + /** + * Static Constructor. + */ + static CVtUiRemoteVideoControl* NewL(CVtUiAppUi& aAppUi); + + RWindow& GetRWindow(); + + /** + * Destructor + */ + ~CVtUiRemoteVideoControl(); + +protected: + + /** + * Constructor + */ + CVtUiRemoteVideoControl(CVtUiAppUi& aAppUi); + + /** + * 2nd constructor + */ + void ConstructL(); + +public: // from CCoeControl + + /** + * @see CCoeControl::HandlePointerEventL + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + +public: // from MAknWsEventObserver + + /** + * @see MAknWsEventObserver::HandleWsEventL + */ + void HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ); + +protected: // virtual methods + + /** + * The size changed method. If you need to do special handling after the + * control's size has changed, overwrite this method. + */ + virtual void HandleSizeChanged(); + +private: // from CCoeControl + /** + * @see CCoeControl::Draw + */ + void Draw( const TRect& aRect ) const; + + /** + * @see CCoeControl::SizeChanged + */ + void SizeChanged(); + + /** + * @see CCoeControl::PositionChanged + */ + void PositionChanged(); + + /** + * The draw method. + */ + void DoDraw( CWindowGc& aGc ) const; + +private: + + // Reference to application UI. + CVtUiAppUi& iAppUi; + + + }; + +#endif /*CVTUIREMOTEVIDEOCONTROL_H_*/ diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/CVtUiZoomControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/CVtUiZoomControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,268 @@ +/* +* Copyright (c) 2004, 2005 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: Navi pane zoom indicator control for +* Video Telephone application. +* +*/ + + + +#ifndef CVTUIZOOMCONTROL_H +#define CVTUIZOOMCONTROL_H + +// INCLUDES +#include +#include +#include "CVtUiBitmapManager.h" + +// CLASS DECLARATION + +/** +* Navi pane zoom indicator control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiZoomControl + : public CCoeControl + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aBitmapManager bitmap manager. + */ + CVtUiZoomControl( CVtUiBitmapManager& aBitmapManager ); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * C++ destructor. + */ + ~CVtUiZoomControl(); + + public: // New functions + + /** + * Sets zoom parameters. + * @param aStepCount amount of steps, 0 if zooming disabled. + * @param aCurrentStep current step, 0 .. aStepCount. + */ + void SetZoomParams( + const TInt aStepCount, + const TInt aCurrentStep ); + + /** + * Commits changes. + */ + void CommitL(); + + /** + * Returns ETrue if zooming is enabled. + * @return ETrue if enabled. + */ + TBool IsZoomEnabled() const; + + /** + * Gets zoom parameters. + * @param aStepCount amount of steps, 0 if zooming disabled. + * @param aCurrentStep current step, 0 .. aStepCount. + */ + void GetZoomParams( + TInt& aStepCount, + TInt& aCurrentStep ) const; + + /** + * Updates zoom. This method should be called periodically during zooming. + * @return ETrue if zoom step was updated. + */ + TBool UpdateZoomL(); + + /** + * Stops zoom. + */ + void StopZoom(); + + public: // Functions from base classes + + /** + * From CCoeControl, handles key events. + * @param aKeyEvent key event. + * @param aType type of event. + * @return response indicating if key was consumed. + */ + virtual TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * From CCoeControl, handles resource change. + * @param aType type of change. + */ + virtual void HandleResourceChange( + TInt aType ); + + protected: // Functions from base classes + + /** + * From CCoeControl, draws the control. + * @param aRect area to be drawn. + */ + virtual void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl, handles size changes. + */ + virtual void SizeChanged(); + + /** + * From CCoeControl, handles position changes. + */ + virtual void PositionChanged(); + + private: + + /** + * Calculates amount of steps to be shown. + * @param aFullSteps amount of full steps. + * @param aPartialStep partial steps, 0 .. 255. + */ + void DetermineSteps( + TInt& aFullSteps, + TInt& aPartialStep ) const; + + /** + * Generates zoom mask bitmap. + * @param aAreaBitmap maximum bitmap, ownership not transferred. + * @param aPartial partial amount. + * @param aRow area row number. + * @param aRowSize size of the row. + * @return ETrue if successful, EFalse otherwise. + */ + TBool GenerateZoomMaskBitmap( + CFbsBitmap* aMaskBitmap, + const TInt aPartial, + const TInt aRow, + const TSize& aRowSize ) const; + + /** + * Generates zoom mask bitmap. + * @param aAreaBitmap maximum bitmap, ownership not transferred. + * @param aPartial partial amount. + * @param aRow area row number. + * @param aRowSize size of the row. + */ + void DoGenerateZoomMaskBitmap( + CFbsBitmap* aMaskBitmap, + const TInt aPartial, + const TInt aRow, + const TSize& aRowSize ) const; + + /** + * Creates bitmaps. + * @return error code. + */ + TInt CreateBitmaps(); + + /** + * Creates bitmaps. + */ + void CreateBitmapsL(); + + /** + * Returns size of the temporary bitmaps. + * @return size of the temporary bitmaps. + */ + TSize SizeOfBitmap() const; + + /** + * Gets position and source rect. + * @param aPosition it will contain position. + * @param aSourceRect it will contain source rectangle. + * @param aZoomStep zoom step. + */ + void GetPositionAndRect( + TPoint& aPosition, + TRect& aSourceRect, + const TInt aZoomStep ) const; + + private: + + // Inner class. + class CBitmap; + + // Reference to bitmap manager. + CVtUiBitmapManager& iBitmapManager; + + // Zoom direction bitmap identifier. + TVtUiBitmapPoolId iZoomDirId; + + // Zoom area bitmap identifier. + TVtUiBitmapPoolId iZoomAreaId; + + // Zoom min bitmap identifier. + TVtUiBitmapPoolId iZoomMinId; + + // Zoom max bitmap identifier. + TVtUiBitmapPoolId iZoomMaxId; + + // Zoom pane rectangle. + TRect iZoomPaneRect; + + // Zoom direction layout. + TAknLayoutRect iZoomDirLayout; + + // Zoom area layout. + TAknLayoutRect iZoomAreaLayout; + + // Current step, 0 .. iMaxZoomStep. + TInt iCurrentZoomStep; + + // Maximum step. + TInt iMaxZoomStep; + + // Used partial value used in iZoomMaskBitmap + // generation. + mutable TInt iZoomMaskPartial; + + // Used row value used in iZoomMaskBitmap + // generation. + mutable TInt iZoomMaskRow; + + // Owned partial soft mask. + CBitmap* iZoomPartialMask; + + // Owned partial shade (soft mask). + CBitmap* iZoomPartialShade; + + // Owned partial shade mask. + CBitmap* iZoomPartialShadeMask; + + // Zoom direction +1 or -1. 0 if no + // zoom ongoing. + TInt iZoomDirection; + + // Zoom step at the start of zooming. + TInt iZoomStepStart; + + // Start time of zooming. + TTime iZoomStartTime; + + }; + +#endif // CVTUIZOOMCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/MVtUiEngineCommandManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/MVtUiEngineCommandManager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2004 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: Command manager class for Video Telephone application. +* +*/ + + + +#ifndef MVTUICOMMANDMANAGER_H +#define MVTUICOMMANDMANAGER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MVtEngCommandObserver; + +// CLASS DECLARATION + +/** +* Command manager class for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class MVtUiEngineCommandManager + { + public: // New functions + + /** + * Adds observer. + * @param aObserver observer to be added. + */ + virtual void AddObserverL( MVtEngCommandObserver& aObserver ) = 0; + + /** + * Removes observer. + * @param aObserver observer to be removed. + */ + virtual void RemoveObserver( MVtEngCommandObserver& aObserver ) = 0; + + }; + +#endif // MVTUICOMMANDMANAGER_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/MVtUiVideoWindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/MVtUiVideoWindow.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2004 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: Interface for controlling a video window +* for Video Telephone application. +* +*/ + + + +#ifndef MVTUIVIDEOWINDOW_H +#define MVTUIVIDEOWINDOW_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFbsBitmap; + +// CLASS DECLARATION + +/** +* Interface for controlling a video window (uplink / downlink) for Video +* Telephone application. +* +* @since Series 60 2.6 +*/ +class MVtUiVideoWindow + { + public: // New functions + + /** + * Resets blind, stream bitmap and waiting image statuses. + */ + virtual void Reset() = 0; + + /** + * Changes blind status. + * @param aStatus new status, ETrue - on, EFalse - off. + */ + virtual void SetBlind( TBool aStatus ) = 0; + + /** + * Sets stream bitmap. + * @param aStreamBitmap bitmap. Ownership not transferred. + */ + virtual void SetStreamBitmap( CFbsBitmap* aStreamBitmap ) = 0; + + /** + * Sets stream bitmap for reserve, when Draw() routine is called. + * (e.g. when opening and closing menu) + * @param aStreamBitmap bitmap. Ownership not transferred. + */ + virtual void SetStreamBitmapReserve( CFbsBitmap* aStreamBitmap ) = 0; + + /** + * Sets waiting image status. + * @param aShowWaitingText ETrue if waiting text should be shown. + */ + virtual void SetWaiting( TBool aShowWaitingText ) = 0; + + /** + * Redraws image. + */ + virtual void Redraw() = 0; + + /** + * Set remote video control + */ + virtual void SetRemoteVideoControl( CCoeControl* aRemoteControl ) = 0; + + /** + * Layout the postion and the size of the remote video control + */ + virtual void LayoutRemoteVideo() = 0; + + /** + * Returns pointer to remote video control or NULL if no remote video control is present. + */ + virtual CCoeControl * RemoteVideoControl() = 0; + + }; + +#endif // CVTUICONTEXTCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/TVtUiCallParameters.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/TVtUiCallParameters.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2004 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: Call parameters class for Video Telephone application. +* +*/ + + + +#ifndef TVTUICALLPARAMETERS_H +#define TVTUICALLPARAMETERS_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Call parameters for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class TVtUiCallParameters + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + TVtUiCallParameters(); + + public: // New functions + + /** + * Resets parameters. + */ + void Reset(); + + /** + * Sets audio status. + * @param aEnabled ETrue if audio enabled, EFalse if disabled. + */ + void SetAudioStatus( const TBool aEnabled ); + + /** + * Gets audio status. + * @param aEnabled It will equal to ETrue if audio enabled, + * EFalse if disabled. + * @return error code, + * KErrNone if audio status has been set, + * KErrNotFound if not. + */ + TInt GetAudioStatus( TBool& aEnabled ) const; + + /** + * Sets video status. + * @param aEnabled enabled status. + */ + void SetVideoStatus( const TBool aEnabled ); + + /** + * Gets video status. + * @param aEnabled It will equal to ETrue if video enabled, + * EFalse if disabled. + * @return error code, + * KErrNone if video status has been set, + * KErrNotFound if not. + */ + TInt GetVideoStatus( TBool& aEnabled ); + + /** + * Sets selected camera. + * @param aPrimary ETrue if primary, EFalse if secondary. + */ + void SetSelectedCamera( const TBool aPrimary ); + + /** + * Gets selected camera. + * @param aPrimary It will equal to ETrue if primary has been selected, + * EFalse if secondary. + * @return error code, + * KErrNone if selected camera has been set, + * KErrNotFound if not. + */ + TInt GetSelectedCamera( TBool& aPrimary ); + + private: + + // Current flags. + TInt iFlags; + + }; + +#endif // TVTUICALLPARAMETERS_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/VideoTelephonyInternalCRKeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/VideoTelephonyInternalCRKeys.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2005-2006 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: Video Telephony internal Central Repository keys +* +*/ + + +#ifndef VIDEOTELEPHONYINTERNALCRKEYS_H +#define VIDEOTELEPHONYINTERNALCRKEYS_H + +#include + +/** +* Video Telephony Variation API +* Keys under this category are used in defining video telephony variation. +*/ +const TUid KCRUidVTVariation = {0x102072D0}; + +/** +* Video Telephony Local Variation Flags. Values are defined in +* VideoTelephonyVariant.hrh. +*/ +const TUint32 KVTLocalVariationFlags = 0x00000001; + +/** +* Video Telephony Configuration API +* Keys under this category are used for configuring video call behaviour. +* @since S60 3.1 +*/ +const TUid KCRUidVTConfiguration = {0x10281872}; + +/** +* This key controls minimum, normal and maximum frame rate for video encoder. +* Integer values in the string are between 0 and 31 separated by space. +* Example for key value is "5 10 5". +*/ +const TUint32 KVTVideoFrameRates = 0x00000001; + +/** +* Defines layout (screen orientation) used by Video Telephone application +* per active camera. Each camera has one of the following configurations: +* 1) "LS" = Landscape +* 2) "PR" = Portrait +* 3) "OL" = Obey device layout (normal operation) +* Camera values are: +* 1) "C1" = VT primary camera (inwards) +* 2) "C2" = VT secondary camera (outwards) +* Example value (portrait for cam1, landscape for cam2): C1:PR C2:LS +*/ +const TUint32 KVTCameraLayout = 0x00000002; + +/** +* Lists implementation UIDs for MPEG4, H.263 and H.264 encoders for video +* telephony in hexadecimal separated by space +*/ +const TUint32 KVTVideoEncoderUIDs = 0x00000003; + +/** +* Lists implementation UIDs for MPEG4, H.263 and H.264 decoders for video +* telephony in hexadecimal separated by space +*/ +const TUint32 KVTVideoDecoderUIDs = 0x00000004; + +/** +* Lists implementation UIDs for AMR-NB and future audio encoders for video +* telephony (in hex, separated by space) +*/ +const TUint32 KVTAudioEncoderUIDs = 0x00000005; + +/** +* Lists implementation UIDs for AMR-NB and future audio decoders for video +* telephony (in hex, separated by space) +*/ +const TUint32 KVTAudioDecoderUIDs = 0x00000006; + +/** +* Lists processing delay for MPEG4, H.263 and H.264 encoders for video +* telephony in unsigned 32-bit integers separated by space +*/ +const TUint32 KVTVideoEncoderDelay = 0x00000007; + +/** +* Lists processing delay for MPEG4, H.263 and H.264 decoders for video +* telephony in unsigned 32-bit integers separated by space +*/ +const TUint32 KVTVideoDecoderDelay = 0x00000008; + +/** +* Lists processing delay for AMR-NB and future audio encoders for video +* telephony (in unsigned 32-bit integers, separated by space) +*/ +const TUint32 KVTAudioEncoderDelay = 0x00000009; + +/** +* Lists processing delay for AMR-NB and future audio decoders for video +* telephony (in unsigned 32-bit integers, separated by space) +*/ +const TUint32 KVTAudioDecoderDelay = 0x0000000A; + +/* +* Defines number of toolbar buttons. Three buttons is minimum +* and seven is maximum. +*/ +const TUint32 KVTToolbarCommands = 0x0000000B; + +#endif // VIDEOTELEPHONYINTERNALCRKEYS_H + +// End of file \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/VideoTelephonyVariant.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/VideoTelephonyVariant.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2005 - 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" +* 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: Bit flag definitions for VT local variation. +* +*/ + + +#ifndef VIDEOTELEPHONYVARIANT_HRH +#define VIDEOTELEPHONYVARIANT_HRH + + +/** +* KVTLVFlagScalingMethodENearest defines whether the video image is +* scaled using Nearest algorithm, which is fast, but quality is low. +* When the flag is set ENearest is used. +* @since S60 v2.8 +*/ +#define KVTLVFlagScalingMethodENearest 0x00000001 + +/** +* KVTLVFlagScalingMethodEBilinear defines whether the video image is +* scaled using Bilinear algorithm, which offers the best quality, but in a +* slow way. When the flag is set Bilinear is used. +* @since S60 v2.8 +*/ +#define KVTLVFlagScalingMethodEBilinear 0x00000002 + +/** +* KVTLVFlagEnableBitReversal defines if bit order should be +* reversed in PV. +* When the flag is set bit order is reversed. +*/ +#define KVTLVFlagEnableBitReversal 0x00000004 + +/** +* KVTLVFlagEnableAMR_WB defines if AMR wideband is supported in video calls. +* @since S60 v5.0 +*/ +#define KVTLVFlagEnableAMR_WB 0x00000008 + +/** +* KVTLVFlagSupportMpeg4 defines whether the PV should support Mepg4. +* @since S60 v5.0 +*/ +#define KVTLVFlagDisableMpeg4 0x00000010 + +#endif // VIDEOTELEPHONYVARIANT_HRH + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/VtUiLayout.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/VtUiLayout.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,234 @@ +/* +* Copyright (c) 2004, 2005 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: Layout related accessory methods for Video Telephone +* application. +* +*/ + + + +#ifndef VTUILAYOUT_H +#define VTUILAYOUT_H + +// INCLUDES +#include "videotelui.hrh" +#include +#include + +// FORWARD DECLARATIONS +class TAknsItemID; + +// CLASS DECLARATION + +/** +* Layout related accessory methods for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class VtUiLayout + { + public: // New functions + + /** + * Returns application window rectangle. + * @param aRect rectangle to be filled. + */ + static void GetApplicationParentRect( + TRect& aRect ); + + // ELEMENTS RELATIVE TO APPLICATION WINDOW: + + /** + * Returns main pane layout. + * @param aLayout main pane layout. + */ + static void GetMainPaneLayout( + TAknWindowLineLayout& aLayout ); + + // ELEMENTS RELATIVE TO APPLICATION WINDOW: + + /** + * Returns layout for uplink video stream background. + * @param aLayout layout of qgn_graf_call_video_out_bg. + */ + static void GetFirstWindowBackgroundLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Returns layout for uplink video stream. + * @param aLayout layout of uplink video stream relative. + */ + static void GetFirstWindowStreamLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Returns layout of uplink video disabled icon. + * @param aLayout layout of qgn_indi_call_video_blind_out. + */ + static void GetFirstWindowStreamDisabledIconLayout( + TAknWindowLineLayout& aLayout ); + + // ELEMENTS RELATIVE TO MAIN PANE: + + /** + * Returns layout of background rectangle. + * @param aLayout layout of background rectangle. + */ + static void GetSecondWindowBackgroundLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Returns layout of downlink video stream. + * @param aLayout layout of downlink video stream. + * @param aUseSQCif ETrue if SQCIF layout is to be used. + */ + static void GetSecondWindowStreamLayout( + TAknWindowLineLayout& aLayout, + TBool aIsToolbar, + TBool aIsSubQCIF = EFalse ); + + /** + * Returns layout of downlink video stream (the whole picture). + * @param aLayout layout of downlink video stream. + * @param aUseSQCif ETrue if SQCIF layout is to be used. + */ + static void GetSecondWindowStreamWholeLayout( + TAknWindowLineLayout& aLayout, + TBool aIsToolbaraIsToolbar, + TBool aIsSubQCIF = EFalse ); + + /** + * Returns layout of downlink video disabled icon. + * @param aLayout layout of qgn_indi_call_video_blind_in. + */ + static void GetSecondWindowDisabledIconLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Returns layout of waiting text. + * @param aLayout layout. + * @param aFirstLine ETrue if first line, EFalse if second. + */ + static void GetSecondWindowWaitingTextLayout( + TAknTextLineLayout& aLayout, + const TBool aFirstLine ); + + /** + * Returns number entry area layout. + * @param aLayout layout. + */ + static void GetNumberEntryAreaLayout( + TAknWindowLineLayout& aLayout ); + + // ELEMENTS RELATIVE TO NAVI PANE: + + /** + * Returns layout of audio routing indicator. + * @param aLayoutlayout of qgn_indi__[muted]. + */ + static void GetAudioRoutingIconLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Returns layout of call duration text. + * @param aLayout layout of call duration text. + */ + static void GetCallDurationTextLayout( + TAknTextLineLayout& aLayout ); + + /** + * Returns layout of muted text. + * @param aLayout layout of muted text. + */ + static void GetMutedTextLayout( + TAknTextLineLayout& aLayout ); + + /** + * Gets zooming pane layout. + * @param aLayout layout of zooming pane. + */ + static void GetZoomPaneLayout( + TAknWindowLineLayout& aLayout ); + + // ELEMENTS RELATIVE TO ZOOMING PANE: + + /** + * Gets zoom direction icon layout. + * @param aLayout layout of zoom direction icon. + */ + static void GetZoomDirLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Gets zoom area layout. + * @param aLayout layout of zoom area. + */ + static void GetZoomAreaLayout( + TAknWindowLineLayout& aLayout ); + + /** + * Gets zoom step layout. + * @param aLayout layout of a zoom step. + * @param aZoomStep zoom step, 1 .. 11. + */ + static void GetZoomStepLayout( + TAknWindowLineLayout& aLayout, + TInt aZoomStep ); + + // OTHER UTILITY METHODS + + /** + * Returns skin identifier corresponding to the bitmap. + * + * @param aId identifier of the bitmap. + * @return skin identifier or KAknsIIDNone if no skin for this bitmap. + */ + static TAknsItemID MapBitmapToSkinId( TVtUiBitmapId aId ); + + /** + * Determines color skin identifier corresponding to the bitmap. + * + * @param aId bitmap identifier. + * @param aColorId it will contain color skin id. + * @param aColorIndex it will contain color index. + * @return ETrue if bitmap has color skin, EFalse otherwise. + */ + static TBool MapBitmapToColorId( + TVtUiBitmapId aId, + TAknsItemID& aColorId, + TInt& aColorIndex ); + + /** + * Resolves file name and index from bitmap identifier. + * @param aId bitmap identifier. + * @param aFileName it will contain the name of the file. + * @param aIndex it will contain the index. + */ + static void Resolve( + TVtUiBitmapId aId, + TFileName& aFileName, + TInt& aIndex ); + + /** + * Can be used for checking current orientation. + * @return ETrue if current application orientation is landscape, + * EFalse otherwise. + */ + static TBool IsLandscapeOrientation(); + + }; + +#endif // VTUILAYOUT_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/VtUiPanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/VtUiPanic.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2004 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: Panic methods and reasons for Video Telephone application. +* +*/ + + + +#ifndef VTUIPANIC_H +#define VTUIPANIC_H + +// INCLUDES +#include + +// DATA TYPES + +/** +* Enumerates all panic reasons. +*/ +enum TVtUiPanicReason + { + // Invalid index passed to VtUiLayout::Resolve. + EVtUiPanicInvalidBitmapId = 10, + // Invalid bitmap file in VtUiLayout::Resolve. + EVtUiPanicInvalidBitmapFile = 11, + // Reset must not fail. + EVtUiPanicResetFailed = 12, + // Communication not supported. + EVtUiPanicCommsNotSupported = 13, + // EIKON server handle not found. + EVtUiPanicEikonServerNotFound = 14, + // Prepare view finder not supported. + EVtUiPanicPrepareViewFinderNotSupported = 15, + // Prepare remote render not supported. + EVtUiPanicPrepareRemoteRenderNotSupported = 16, + // Mismatch in bitmap file names. + EVtUiPanicMismatchInBitmapFileNames = 17, + // Default color requirement mismatch. + EVtUiPanicDefaultColorRequireMismatch = 18, + // Application shutdown has timeouted. + EVtUiPanicApplicationShutdownTimeout = 100, + // Engine functionality does not match with required. + EVtUiPanicEngineFunctionalityAssert = 101, + // Renderer instance is not available + EVtUiPanicRendererNotFound = 200, + // Values out of range + EVtUiPanicOutOfRange = 300 + }; + +// CLASS DECLARATION + +/** +* Panic methods and reasons for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class VtUiPanic + { + public: // New functions + + /** + * Panics this process. + * @param aReason reason of panic. + */ + static void Panic( + TVtUiPanicReason aReason ); + + }; + +#endif // VTUIPANIC_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/VtUiUtility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/VtUiUtility.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2004 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: Utility methods for Video Telephone application. +* +*/ + + + +#ifndef VTUIUTILITY_H +#define VTUIUTILITY_H + +// INCLUDES +#include +#include +#include +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* Utility methods for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class VtUiUtility + { + public: // New functions + + /** + * Enumerates audio routing masks. + */ + enum TAudioRoutingMask + { + // Deactivate loudspeaker. + EDeactivateLoudspeaker = (1<<0), + // Activate loudspeaker. + EActivateLoudspeaker = (1<<1), + // Deactivate BT handsfree. + EDeactivateBtHandsfree = (1<<2), + // Activate BT handsfree. + EActivateBtHandsfree = (1<<3) + }; + + /** + * Gets audio routing availabilities. + * @param aAudio audio instance. + * @param aAvailable availability bitmap. + */ + static void GetAudioRoutingAvailability( + MVtEngAudio& aAudio, + TInt& aAvailable ); + + /** + * Gets outgoing media state. + * @param aMedia media instance. + * @param aAvailable availability bitmap. + */ + static void GetOutgoingMediaState( + MVtEngMedia& aMedia, + TInt& aAvailable ); + + /** + * Gets incoming media state. + * @param aMedia media instance. + * @param aAvailable availability bitmap. + */ + static void GetIncomingMediaState( + MVtEngMedia& aMedia, + TInt& aAvailable ); + + /** + * Checks if media has still image. + * @param aMedia media instance. + * @return ETrue if media has still image. + */ + static TBool HasStillImage( + MVtEngMedia& aMedia ); + + /** + * Gets freeze's current status. + * @param aMedia media instance. + * @return ETrue if active provider is frozen, EFalse otherwise. + */ + static TBool GetFreezeState( + MVtEngMedia& aMedia ); + + /** + * Checks if freeze is supported. + * @param aMedia media instance. + * @return ETrue if freeze is supported. + */ + static TBool IsFreezeSupported( + MVtEngMedia& aMedia ); + + /** + * Gets current local video quality setting. + * @param aMedia media instance. + * @param aVideoQuality Current local video quality settings. + */ + static void GetVideoQuality( + MVtEngMedia& aMedia, + MVtEngMedia::TVideoQuality& aVideoQuality ); + /** + * Gets current object sharing state. + * @param aMedia media instance. + * @param aShareObjectState contains current object sharing state on + * return. + */ + static void GetObjectSharingState( MVtEngMedia& aMedia, + MVtEngMedia::TShareObjectState& aShareObjectState ); + + /** + * Checks if zooming is allowed. + * @param aMedia media instance. + * @return ETrue if allowed, EFalse otherwise. + */ + static TBool IsZoomAllowed( + MVtEngMedia& aMedia ); + + /** + * Checks if the device has cameras currently attached. + * @param aMedia media instance. + * @return ETrue if there are cameras available. + */ + static TBool HasCameras( MVtEngMedia& aMedia ); + + /** + * Checks if the key event is DTMF enabled. + * @param aKeyEvent The key event. + * @param aDtmfTone DTMF tone character. + * @return ETrue if this event is DTMF event. + */ + static TBool IsDTMFEvent( const TKeyEvent& aKeyEvent, + TChar& aDtmfTone ); + + /** + * Checks if the character is DTMF enabled. + * @param aChar The character. + * @return ETrue if this character is DTMF character. + */ + static TBool IsDTMFCharacter( const TChar aChar ); + + private: + + /** + * Checks if audio routing is available. + * @param aAudio audio instance. + * @param aCurrent current speaker. + * @param aSource source speaker. + * @param aTarget target speaker. + */ + static TBool IsAudioRoutingAvailable( + MVtEngAudio& aAudio, + const MVtEngAudio::TAudioRoutingState aCurrent, + const MVtEngAudio::TAudioRoutingState aSource, + const MVtEngAudio::TAudioRoutingState aTarget ); + + }; + +#endif // VTUIUTILITY_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 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: UI command bases class definition. +* +*/ + + +#ifndef C_VTUICMDBASE_H +#define C_VTUICMDBASE_H + +#include + +/** + * CVtUiCmdBase + * + * Base class for UI commands. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdBase ) : public CBase + { + +public: // public methods + + /** + * Returns command id. + * + * @return This command's id. + */ + TInt CommandId() const; + +public: // public abstract methods + + /** + * Execute command + * + */ + virtual void HandleL() = 0; + + /** + * Returns ETrue if command is enabled. + * + * @return ETrue if this command is enabled (can be executed), EFalse + * otherwise. + */ + virtual TBool IsEnabled() const = 0; + +public: // public static methods + + /** + * Key comparing function type definition. + */ + typedef TInt ( *TKeyOrder ) ( const TInt*, const CVtUiCmdBase& ); + + /** + * Returns linear order object for ordered array inserting. + * + * @return TLinearOrder instance for searching and inserting CVtUiCmdBase + * based objects into RArray. + */ + static TLinearOrder< CVtUiCmdBase > LinearOrder(); + + /** + * Returns linear order object for ordered array inserting. + * + * @return Pointer to key comparaing function, that can be used in + * FindInOrder() method call. + */ + static TKeyOrder KeyOrder(); + +protected: + + /** + * C++ constructor. + * + * @aCommandId Id of this command. + * + */ + CVtUiCmdBase( TInt aCommandId ); + +protected: + + // Command id + const TInt iCommandId; + + }; + +#endif // C_VTUICMDBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdcontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdcontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,147 @@ +/* +* Copyright (c) 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: Command context base class definition. +* +*/ + + +#ifndef C_VTUICMDCONTEXT_H +#define C_VTUICMDCONTEXT_H + +#include + +#include "tvtuicmdcontexttype.h" + +class CVtUiCmdValidatorBase; +class CVtUiCmdValidationActionBase; +class MVtUiCommandManager; +class CVtUiCmdCustomValidationActionBase; + +/** + * CVtUiCmdContext + * + * Command context base class. This class defines context in which commands + * will be validated. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdContext ) : public CBase + { + +public: // public methods + + /** + * C++ destructor. + */ + ~CVtUiCmdContext(); + + /** + * Returns reference priority. + * + * @return Validator priority. + */ + TInt ReferencePriority() const; + + /** + * Returns context type. + * + * @return Context type. + */ + TVtUiCmdContextType ContextType() const; + + /** + * Adds validator to context. + * + * @param aValidator Validator reference to be added into this context. + * @return KErrNone if validator supports this context and adding succeeded. + * KErrNotSupported if validator does not support this context. + * Other system wide error code that may happen during add. + */ + TInt AddValidator( CVtUiCmdValidatorBase& aValidator ); + + /** + * Removes validator to context. + * + * @param aValidator Constant validator reference to be removed from this + * context. + * @return Validator priority. + */ + void RemoveValidator( const CVtUiCmdValidatorBase& aValidator ); + +public: // pure virtual methods + + /** + * Do validation. + * + * @param aAction Action to be validated. + */ + virtual void ValidateL( CVtUiCmdValidationActionBase& aAction ) = 0; + +protected: + + /** + * C++ constructor + */ + CVtUiCmdContext( MVtUiCommandManager& aCommandManager, + TVtUiCmdContextType aCtxType, TInt aReferencePriority ); + + /** + * Validates menu items. + */ + void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Validates softkey items. + */ + void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Validates toolbar items. + */ + void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Custom action validation. + */ + void CustomValidationL( CVtUiCmdCustomValidationActionBase& aAction ); + + /** + * Registers command context to command policy manager. + */ + void RegisterCommandContextL(); + + /** + * Unregisters command context from command policy manager. + */ + void UnregisterCommandContext(); + +protected: // data + + // Reference to policy manager (for cleanup) + MVtUiCommandManager& iCommandManager; + +private: // data + + // Validator list (ordered by priority) + RPointerArray< CVtUiCmdValidatorBase > iValidators; + + // Validator priority + const TInt iReferencePriority; + + // Context type. + const TVtUiCmdContextType iContextType; + + }; + +#endif // C_VTUICMDCONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdcustomvalidationactionbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdcustomvalidationactionbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 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: Custom command validation action class definition. +* +*/ + + +#ifndef C_VTUICMDCUSTOMVALIDATIONACTIONBASE_H +#define C_VTUICMDCUSTOMVALIDATIONACTIONBASE_H + +#include + +#include "cvtuicmdvalidationactionbase.h" + +/** + * CVtUiCmdCustomValidationActionBase + * + * Custom command validation action base class. This class is an extension to + * command validation action and defines new attribute Type ID that is used + * for defining type of the custom validation action. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdCustomValidationActionBase ) + : public CVtUiCmdValidationActionBase + { + +public: // typedefs + + // Custom type id type definition. + typedef TInt TCustomTypeId; + +public: + + /** + * Returns custom type id. + * @return Custom type id. + */ + TCustomTypeId CustomTypeId() const; + +protected: // new protected methods + + /** + * C++ constructor. + */ + CVtUiCmdCustomValidationActionBase( TCustomTypeId aCustomTypeId ); + +private: // data + + // Custom type id. + const TCustomTypeId iCustomTypeId; + + }; + +#endif // C_VTUICMDCUSTOMVALIDATIONACTIONBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdstatecheckaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdstatecheckaction.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 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: Command state check action. +* +*/ + + +#ifndef C_VTUICMDSTATECHECKACTION_H +#define C_VTUICMDSTATECHECKACTION_H + +#include "cvtuicmdcustomvalidationactionbase.h" + +/** + * CVtUiCmdStateCheckAction + * + * Custom validation action that concludes whether or not a command is allowed. + * Command validness is checked from its current state. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdStateCheckAction ) +: public CVtUiCmdCustomValidationActionBase + { + +public: + + /** + * Static constructor. + * + * @return Pointer to newly created instance of CVtUiCmdStateCheckAction. + */ + static CVtUiCmdStateCheckAction* NewL(); + + /** + * Sets command to be checked. + * + * @param aCommandId Id of command to be checked. + */ + void SetCommand( TInt aCommandId ); + + /** + * Sets command to be checked. + * + * @return ETrue is command set with SetCommand() is allowed to be + * executed. + */ + TBool IsCommandAllowed() const; + +public: // from CVtUiCmdValidationActionBase + + /** + * @see CVtUiCmdValidationActionBase::ProcessL + */ + void ProcessL( const MVtUiCmdValidatorCallBack& aCallBack ); + +private: + + /** + * C++ constructor. + */ + CVtUiCmdStateCheckAction(); + +private: // data + + // Id of command to be checked + TInt iCommandId; + + // ETrue if command defined by iCommandId is allowed + TBool iIsCommandAllowed; + + }; + +#endif // C_VTUICMDSTATECHECKACTION_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdvalidationactionbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdvalidationactionbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 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: Command validation action base class definition. +* +*/ + + +#ifndef C_VTUICMDVALIDATIONACTIONBASE_H +#define C_VTUICMDVALIDATIONACTIONBASE_H + +#include + +class CVtUiCmdValidatorBase; +class MVtUiCmdValidatorCallBack; + +/** + * CVtUiCmdValidationActionBase + * + * Command validation action base class. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdValidationActionBase ) : public CBase + { + +public: // public methods + + /** + * C++ destructor. + */ + ~CVtUiCmdValidationActionBase(); + + /** + * Called when validation process is about to begin. Resets internal + * variables. + */ + virtual void BeginProcess(); + + /** + * Called when validation process has finished. + */ + virtual void EndProcess(); + +public: // pure virtual methods + + /** + * Execute validation process. + * + * @param aCallBack Action validation callback routine that will be called + * for every item to be validated. + */ + virtual void ProcessL( const MVtUiCmdValidatorCallBack& aCallBack ) = 0; + +protected: + + /** + * Mark command handled. + * + * @param aCommandId Id of command that was handled. + */ + void CommandHandledL( TInt aCommandId ); + + /** + * Check whether command is already handled or not. + * + * @param aCommandId Id of command to be checked. + * @return ETrue if command was already handler, EFalse otherwise. + */ + TBool IsCommandHandled( TInt aCommandId ) const; + +private: // data + + // Array of handled commands. + RArray< TInt > iHandledCommands; + + }; + +#endif // C_VTUICMDVALIDATIONACTIONBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicmdvalidatorbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicmdvalidatorbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 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: Base class for command validators. +* +*/ + + +#ifndef C_VTUICMDVALIDATORBASE_H +#define C_VTUICMDVALIDATORBASE_H + +#include + +#include "tvtuicmdcontexttype.h" + +class CVtUiCmdValidationActionBase; +class CVtUiCmdCustomValidationActionBase; + +/** + * CVtUiCmdValidatorBase + * + * Base class for all validators. Validator implementations validate commands + * and other properties (like softkey resource IDs) on context basis. E.g. + * primary validator will validate commands in all contexts, while toolbar + * validator will do fine tuning for commands only in menu context, so that + * commands that are visible in toolbar are not shown in menu. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCmdValidatorBase ) : public CBase + { + +public: // public methods + + /** + * Returns validator priority. + * + * @return Validator priority. + */ + TInt Priority() const; + +public: // pure virtual methods + + /** + * Validates menu items. + * + * @param aAction Reference to validation action. + * @param aReferencePriority Context reference priority. + */ + virtual void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ) = 0; + + /** + * Validates softkey items. + * + * @param aAction Reference to validation action. + * @param aReferencePriority Context reference priority. + */ + virtual void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ) = 0; + + /** + * Validates toolbar items. + * + * @param aAction Reference to validation action. + * @param aReferencePriority Context reference priority. + */ + virtual void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ) = 0; + + /** + * Custom validation. + * + * @param aAction Reference to custom validation action. + * @param aReferencePriority Context reference priority. + */ + virtual void CustomValidationL( CVtUiCmdCustomValidationActionBase& aAction, + TInt aReferencePriority ) = 0; + + /** + * Query for context validation. + * + * @param aCtxType Command context type. + * @return ETrue if this instance validates given context type, EFalse + * otherwise. + */ + virtual TBool ValidatesContext( const TVtUiCmdContextType& aCtxType ) + const = 0; + +protected: + + /** + * C++ constructor + * + * @param aPriority Validator priority. + */ + CVtUiCmdValidatorBase( TInt aPriority ); + +private: // data + + // Validator priority + const TInt iPriority; + + }; + +#endif // C_VTUICMDVALIDATORBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicommandmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicommandmanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,231 @@ +/* +* Copyright (c) 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: Command manager class definition. +* +*/ + + +#ifndef C_VTUICOMMANDMANAGER_H +#define C_VTUICOMMANDMANAGER_H + +#include "mvtuicommandmanager.h" +#include "mvtuicommandui.h" +#include "tvtuilocalvariation.h" +#include "CVtUiAppUi.h" + +class TVtUiStates; +class CVtUiCommandPolicyManager; +class CVtUiPrimaryCmdPolicy; +class CVtUiCmdStateCheckAction; +class CVtUiExecutionContext; + +/** + * CVtUiCommandManager + * + * Acts as a proxy for Command UIs and Validators. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCommandManager ) : public CBase, + public MVtUiCommandManager, public MVtUiCommandUi + { + +public: + + /** + * Static constructor. + * + * @param aUiStates Constant reference to UI states object. + */ + static CVtUiCommandManager* NewL( const TVtUiStates& aUiStates, + CVtUiAppUi& aAppUi ); + + /** + * Destructor. + */ + ~CVtUiCommandManager(); + +public: + + /** + * Constant reference to UI states. + * + * @return Constant reference to UI states object. + */ + const TVtUiStates& UiStates() const; + + /** + * Constant reference to VT local variation. + * + * @return Constant reference to VT local variation object. + */ + const TVtUiVideoTelephonyVariation& VideoTelephonyVariation() const; + + /** + * Handles command. + * + * @param aCommandId Id of command to be handled. If given command is not + * found, command will be silently ignored. + */ + void HandleCommandL( TInt aCommandId ); + + /** + * Constant reference to CVtUiAppUi states. + * + * @return Constant reference to UI states object. + */ + const CVtUiAppUi& AppUi() const; + + +public: // from MVtUiCommandManager + + /** + * @see MVtUiCommandManager::AddCommandUi + */ + TInt AddCommandUi( MVtUiCommandUi& aCommandUi ); + + /** + * @see MVtUiCommandManager::RemoveCommandUi + */ + void RemoveCommandUi( MVtUiCommandUi& aCommandUi ); + + /** + * @see MVtUiCommandManager::ValidateMenuItemsL + */ + void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * @see MVtUiCommandManager::ValidateSoftkeyItemsL + */ + void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * @see MVtUiCommandManager::ValidateToolbarItemsL + */ + void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * @see MVtUiCommandManager::IsCommandAllowedL + */ + TBool IsCommandAllowedL( TInt aCommandId ); + + /** + * @see MVtUiCommandManager::RegisterCommandContext + */ + TInt RegisterCommandContext( CVtUiCmdContext& aContext ); + + /** + * @see MVtUiCommandManager::UnregisterCommandContext + */ + void UnregisterCommandContext( CVtUiCmdContext& aContext ); + + /** + * @see MVtUiCommandManager::AddValidator + */ + TInt AddValidator( CVtUiCmdValidatorBase& aValidator ); + + /** + * @see MVtUiCommandManager::RemoveValidator + */ + void RemoveValidator( CVtUiCmdValidatorBase& aValidator ); + + /** + * @see MVtUiCommandManager::RefreshL + */ + void RefreshL(); + + /** + * @see MVtUiCommandManager::AddCommandModifier + */ + TInt AddCommandModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * @see MVtUiCommandManager::RemoveCommandModifier + */ + void RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * @see MVtUiCommandManager::RegisterCommandL + */ + void RegisterCommandL( CVtUiCmdBase& aCommand ); + + /** + * @see MVtUiCommandManager::UnregisterCommand + */ + void UnregisterCommand( const CVtUiCmdBase& aCommand ); + +private: + + /** + * Constructor. + */ + CVtUiCommandManager( const TVtUiStates& aUiStates, CVtUiAppUi& aAppUi ); + + /** + * Symbian OS constructor. + * @param aModel Engine model. + */ + void ConstructL(); + + /** + * Called when a new command modifier is added + */ + TInt CommandModifierAdded( CVtUiCommandModifyBase& aModifier ); + + /** + * Called when a command modifier is removed + */ + void CommandModifierRemoved( CVtUiCommandModifyBase& aModifier ); + + /** + * Called when a new command ui is added + */ + TInt CommandUiAdded( MVtUiCommandUi& aCommandUi ); + + /** + * Called when a command ui is removed + */ + void CommandUiRemoved( MVtUiCommandUi& aCommandUi ); + +private: + + // Commands Uis + RPointerArray< MVtUiCommandUi > iCommandUis; + + // Command modifiers + RPointerArray< CVtUiCommandModifyBase > iCommandModifiers; + + // Registered commands + RPointerArray< CVtUiCmdBase > iCommands; + + // Command policy manager instance + CVtUiCommandPolicyManager* iCmdPolicyMgr; + + // Reference to UI states instance + const TVtUiStates& iUiStates; + + // Reference to VT local variation + TVtUiVideoTelephonyVariation iVtVariation; + + // Command state validation action + CVtUiCmdStateCheckAction* iCmdStateCheckAction; + + // Execution context (for command state validation) + CVtUiExecutionContext* iExecutionContext; + + // Reference to appui + const CVtUiAppUi& iAppUi; + }; + +#endif // C_VTUICOMMANDMANAGER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicommandmodifybase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicommandmodifybase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 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: Command modifier base class definition. +* +*/ + + +#ifndef C_VTUICOMMANDMODIFYBASE_H +#define C_VTUICOMMANDMODIFYBASE_H + +#include + +#include "mvtuicommandsetting.h" + +/** + * CVtUiCommandModifyBase + * + * Command modifier base class. Command modifiers can be used for modifying + * different command sets. E.g. in toolbar and number entry a command modifiers + * are being used for modifying softkeys. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCommandModifyBase ) : public CBase + { + +public: // static methods + + /** + * Returns TLinearOrder<> for priority ordering. + */ + static TLinearOrder< CVtUiCommandModifyBase > PriorityOrder(); + +private: // static methods + + /** + * Priority ordering function. + */ + static TInt PriorityOrderFunc( const CVtUiCommandModifyBase& aM1, + const CVtUiCommandModifyBase& aM2 ); + +public: // pure virtual methods + + /** + * Modifies command set. + */ + virtual void ModifyCommandsL( MVtUiCommandSetting& aCommandSettings ) = 0; + + /** + * Returns ETrue if this modifier supports given command set type. + */ + virtual TBool Supports( MVtUiCommandSetting::Type aType ) const = 0; + +protected: + + /** + * Constructor + */ + CVtUiCommandModifyBase( TInt aPriority ); + +private: + + // Modifier priority + const TInt iPriority; + + }; + +#endif // C_VTUICOMMANDMODIFYBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicommandpolicymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicommandpolicymanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 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: Command policy manager class definition. +* +*/ + + +#ifndef C_VTUICOMMANDPOLICYMANAGER_H +#define C_VTUICOMMANDPOLICYMANAGER_H + +#include + +#include "tvtuicmdcontexttype.h" + +class CVtUiCmdContext; +class CVtUiCmdValidatorBase; +class CVtUiCmdValidationActionBase; +class CVtUiCmdCustomValidationActionBase; +class CVtUiCommandManager; +class CVtUiPrimaryCmdPolicy; + +/** + * CVtUiCommandPolicyManager + * + * Contains pointers to all registered command contexts and commnd policy + * instances. When validation is required, calls proper methods in proper + * context for registered validators in validator priority order. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiCommandPolicyManager ) : public CBase + { + +public: // public methods + + /** + * Static constructor. + * + * @param aCmdManager Constant reference to command manager instance. + * @return Newly created instance of CVtUiCommandPolicyManager class. + */ + static CVtUiCommandPolicyManager* + NewL( const CVtUiCommandManager& aCmdManager ); + + /** + * C++ destructor. + */ + ~CVtUiCommandPolicyManager(); + + /** + * Registers command context. + * + * @param aContext Reference to command context to be registered. + * @return KErrNone if registration succeeded. + */ + TInt RegisterCommandContext( CVtUiCmdContext& aContext ); + + /** + * Unregisters command context. + * + * @param aContext Constant reference to command context to be unregistered. + */ + void UnregisterCommandContext( CVtUiCmdContext& aContext ); + + /** + * Adds validator to policy manager and registered contexts. + * + * @param aValidator Reference to validator to be added. + * @return KErrNone if add succeeded. + */ + TInt AddValidator( CVtUiCmdValidatorBase& aValidator ); + + /** + * Removes validator from policy manager and registered contexts. + * + * @param aValidator Constant reference to validator to be removed. + */ + void RemoveValidator( CVtUiCmdValidatorBase& aValidator ); + + /** + * Validates menu items for given action. + * + * @param aAction Reference to validation action to be carried on menu + * commmands. + */ + void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Validates softkey items for given action. + * + * @param aAction Reference to validation action to be carried on softkeys. + */ + void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Validates toolbar items for given action. + * + * @param aAction Reference to validation action to be carried on toolbar + * commands. + */ + void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction ); + + /** + * Custom validation for given action. + * + * @param Reference to custom validation action to be carried. + */ + void CustomValidateL( CVtUiCmdCustomValidationActionBase& aAction ); + +private: + + /** + * Constructor + */ + CVtUiCommandPolicyManager( const CVtUiCommandManager& aCmdManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Called when RegisterCommandContext() succeeds. + */ + void CommandContextRegistered( CVtUiCmdContext& aContext ); + + /** + * Called when UnregisterCommandContext() succeeds. + */ + void CommandContextUnregistered( CVtUiCmdContext& aContext ); + + /** + * Called when AddValidator() succeeds. + */ + void ValidatorAdded( CVtUiCmdValidatorBase& aValidator ); + + /** + * Called when RemoveValidator() succeeds. + */ + void ValidatorRemoved( CVtUiCmdValidatorBase& aValidator ); + + /** + * Returns command context by type. + */ + CVtUiCmdContext* FindCommandContextByType( + TVtUiCmdContextType aContextType ); + + /** + * Called from different validation routines. + */ + void ValidateL( TVtUiCmdContextType aContextType, + CVtUiCmdValidationActionBase& aAction ); + +private: // data + + // Context list (ordered by context type) + RPointerArray< CVtUiCmdContext > iContexts; + + // Validator list + RPointerArray< CVtUiCmdValidatorBase > iValidators; + + // Reference to command manager + const CVtUiCommandManager& iCommandManager; + + // Primary command policy, always exists. + CVtUiPrimaryCmdPolicy* iPrimaryCommandPolicy; + + }; + +#endif // C_VTUICOMMANDPOLICYMANAGER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicommandsetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicommandsetting.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 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: Command settings class definition. +* +*/ + + +#ifndef C_VTUICOMMANDSETTING_H +#define C_VTUICOMMANDSETTING_H + +#include + +#include "mvtuicommandsetting.h" + +class CVtUiCommandModifyBase; + +/** + * CVtUiCommandSetting + * + * Template commmand setting class that takes command setting action as a + * templated parameter. + * + * @since S60 v3.2 + */ +template < typename ACTION > +class CVtUiCommandSetting : public CBase, public MVtUiCommandSetting + { + +public: + + /** + * Destructor + */ + ~CVtUiCommandSetting(); + + /** + * Defines commands. + * + * @param aAction Action related to commands to be defined. + */ + void DefineCommandsL( const ACTION& aAction ); + + /** + * Adds new modifer + * + * @param aModifier Reference to modifier to be added to this setting + * instance. + * @return KErrNone if modifier could be added, KErrAlreadyExists if same + * modifier is already added or KErrArgument if another modifier with + * same priority is already added. + */ + TInt AddModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * Removes modifier + * + * @param aModifier Constant reference to modifier to be removed. + */ + void RemoveModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * Return command type + * + * @return Type of commands this setting class instance is defining. + */ + Type CommandType() const; + + /** + * Returns reference to action + * + * @return Constant reference to action that is related to this command + * definition process. + */ + const ACTION& Action(); + +protected: + + /** + * Constructor + */ + CVtUiCommandSetting( Type aCommandType ); + +private: + + // Modifiers + RPointerArray< CVtUiCommandModifyBase > iModifiers; + + // Command type + const Type iCommandType; + + // Stored action + const ACTION* iAction; + + }; + +#include "cvtuicommandsetting.inl" + +#endif // C_VTUICOMMANDSETTING_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuicommandsetting.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuicommandsetting.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,139 @@ +/* +* Copyright (c) 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: Command setting inline methods. +* +*/ + + +#include + +#include "cvtuicommandmodifybase.h" + +// ======== LOCAL FUNCTIONS ======== + +static const TInt KVtUiModifierArrayGranularity = 1; + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::~CVtUiCommandSetting +// --------------------------------------------------------------------------- +// +template < typename A > +CVtUiCommandSetting< A >::~CVtUiCommandSetting() + { + iModifiers.Reset(); + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::CVtUiCommandSetting +// --------------------------------------------------------------------------- +// +template < typename A > +CVtUiCommandSetting< A >::CVtUiCommandSetting( Type aCommandType ) : + iModifiers( KVtUiModifierArrayGranularity ), iCommandType( aCommandType ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::DefineCommandsL +// --------------------------------------------------------------------------- +// +template < typename A > +void CVtUiCommandSetting< A >::DefineCommandsL( const A& aAction ) + { + __VTPRINTENTER( "CmdSet< A >.DefineCommandsL" ) + iAction = &aAction; + if ( iModifiers.Count() > 0 ) + { + iModifiers[ iModifiers.Count() - 1 ]->ModifyCommandsL( *this ); + } + else + { + DoDefineCommandsL(); + } + iAction = NULL; + __VTPRINTEXIT( "CmdSet< A >.DefineCommandsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::AddModifier +// --------------------------------------------------------------------------- +// +template < typename A > +TInt CVtUiCommandSetting< A >::AddModifier( + CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "CmdSet< A >.AddModifier" ) + TInt result( KErrNone ); + if ( aModifier.Supports( iCommandType ) ) + { + TInt idx( iModifiers.FindInOrder( &aModifier, + CVtUiCommandModifyBase::PriorityOrder() ) ); + if ( idx == KErrNotFound ) + { + result = iModifiers.InsertInOrder( &aModifier, + CVtUiCommandModifyBase::PriorityOrder() ); + } + else + { + if ( iModifiers[ idx ] != &aModifier ) + { + // Priorities match, but instance is not same -> argument + // is not valid + result = KErrArgument; + } + } + } + __VTPRINTEXITR( "CmdSet< A >.AddModifier %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::RemoveModifier +// --------------------------------------------------------------------------- +// +template < typename A > +void CVtUiCommandSetting< A >::RemoveModifier( + CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "CmdSet< A >.RemoveModifier" ) + TInt idx( iModifiers.FindInOrder( &aModifier, + CVtUiCommandModifyBase::PriorityOrder() ) ); + + if ( idx != KErrNotFound ) + { + iModifiers.Remove( idx ); + } + __VTPRINTEXIT( "CmdSet< A >.RemoveModifier" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::CommandType +// --------------------------------------------------------------------------- +// +template < typename A > +MVtUiCommandSetting::Type CVtUiCommandSetting< A >::CommandType() const + { + return iCommandType; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandSetting< A >::Action +// --------------------------------------------------------------------------- +// +template < typename A > +const A& CVtUiCommandSetting< A >::Action() + { + return *iAction; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuiexecutioncontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuiexecutioncontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 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: Execution context class definition. +* +*/ + + +#ifndef C_VTUIEXECUTIONCONTEXT_H +#define C_VTUIEXECUTIONCONTEXT_H + +#include "cvtuicmdcontext.h" + +/** + * CVtUiExecutionContext + * + * Command execution context. This context is used for checking whether or not + * a command is allowed to be performed. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiExecutionContext ) : public CVtUiCmdContext + { + +public: // public methods + + /** + * C++ destructor. + */ + ~CVtUiExecutionContext(); + + /** + * Static constructor. + * + * @param aCommandManager Reference to command manager. + * @return Newly created instance of CVtUiExecutionContext class. + */ + static CVtUiExecutionContext* NewL( MVtUiCommandManager& aCommandManager ); + +public: // from CVtUiCmdContext + + /** + * @see CVtUiCmdContext::ValidateL + */ + void ValidateL( CVtUiCmdValidationActionBase& aAction ); + +private: + + /** + * C++ constructor + */ + CVtUiExecutionContext( MVtUiCommandManager& aCommandManager ); + + /** + * 2nd constructor, may leave. + */ + void ConstructL(); + +private: // data + + }; + +#endif // C_VTUIEXECUTIONCONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuifeaturecmdbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuifeaturecmdbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 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: Feature based UI command base class definition. +* +*/ + + +#ifndef C_VTUIFEATURECMDBASE_H +#define C_VTUIFEATURECMDBASE_H + +#include "cvtuicmdbase.h" + +class MVtUiFeature; + +/** + * CVtUiCmdBase + * + * Base class for all UI commands that are feature based. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiFeatureCmdBase ) : public CVtUiCmdBase + { + +public: // from CVtUiCmdBase + + /** + * @see CVtUiCmdBase::HandleL + */ + void HandleL(); + + /** + * @see CVtUiCmdBase::IsEnabled + */ + TBool IsEnabled() const; + +protected: + + /** + * C++ constructor. + * + * @aFeature Reference to a feature this command refers to. + * @aCommandId Id of this command. + * + */ + CVtUiFeatureCmdBase( MVtUiFeature& aFeature, TInt aCommandId ); + +protected: + + // Reference to command feature + MVtUiFeature& iFeature; + + }; + +#endif // C_VTUIFEATURECMDBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/cvtuiprimarycmdpolicy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/cvtuiprimarycmdpolicy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,141 @@ +/* +* Copyright (c) 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: Primary command policy class definition. +* +*/ + + +#ifndef C_VTUIPRIMARYCMDPOLICY_H +#define C_VTUIPRIMARYCMDPOLICY_H + +#include + +#include "tvtuicmdpolicypriority.h" +#include "cvtuicmdvalidatorbase.h" +#include "tvtuilocalvariation.h" + +class CVtUiCmdValidationActionBase; +class TVtUiStates; +class CVtUiAppUi; +/** + * CVtUiPrimaryCmdPolicy + * + * Primary policy is the highest priority policy. It does the basic validation, + * results of which can be modified by the lower priority validators. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiPrimaryCmdPolicy ) : public CVtUiCmdValidatorBase + { + +public: // public methods + + /** + * Static constructor. + * + * @param aUiStates Constant reference to UI states object. + * @return Newly created instace of CVtUiPrimaryCmdPolicy class. + */ + static CVtUiPrimaryCmdPolicy* NewL( const TVtUiStates& aUiStates, + const CVtUiAppUi& aAppUi ); + + /** + * Destructor + */ + ~CVtUiPrimaryCmdPolicy(); + +public: // from CVtUiCmdValidatorBase + + /** + * @see CVtUiCmdValidatorBase::ValidateMenuItemsL + */ + void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidateSoftkeyItemsL + */ + void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidateToolbarItemsL + */ + void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::CustomValidationL + */ + void CustomValidationL( CVtUiCmdCustomValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidatesContext + */ + TBool ValidatesContext( const TVtUiCmdContextType& aCtxType ) + const; + +private: + + /** + * C++ constructor + */ + CVtUiPrimaryCmdPolicy( const TVtUiStates& aUiStates, + const CVtUiAppUi& aAppUi ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Callback for menu validation. + */ + TBool ValidateMenuCommand( TInt aCommandId ) const; + + /** + * Callback for softkey resource id validation. + */ + TBool ValidateSoftkey( TInt aResourceId ) const; + + /** + * Callback for toolbar command validation. + */ + TBool ValidateToolbarCommand( TInt aCommandId ) const; + + /** + * Callback for command state validation. + */ + TBool ValidateCommandState( TInt aCommandId ) const; + + /** + * Callback for command validation. + */ + TBool ValidateCommand( TInt aCommandId, TBool& aHandled ) const; + +private: // data + + // UI states + const TVtUiStates& iUiStates; + + // Active idle local variation + TBool iAIEnabled; + + // Reference to appui + const CVtUiAppUi& iAppUi; + + }; + +#endif // C_VTUIPRIMARYCMDPOLICY_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/mvtuicommanditerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/mvtuicommanditerator.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 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: Command iterator API definition. +* +*/ + + +#ifndef M_VTUICOMMANDITERATOR_H +#define M_VTUICOMMANDITERATOR_H + +#include + +/** + * MVtUiCommandIterator + * + * API for iterating through set of commands. + * + * @since S60 v3.2 + */ +class MVtUiCommandIterator + { + +public: + + /** + * Returns ETrue if the iteration has more elements + * + * @return ETrue if iteration contains more commands (i.e. call to Next() + * will return a valid command), EFalse otherwise. + */ + virtual TBool HasNext() const = 0; + + /** + * Returns the next command in the iteration. + * + * @return Next command in the iteration. + */ + virtual TInt Next() = 0; + + }; + +#endif // M_VTUICOMMANDITERATOR_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/mvtuicommandmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/mvtuicommandmanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,162 @@ +/* +* Copyright (c) 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: Command manager API definition. +* +*/ + + +#ifndef M_VTUICOMMANDMANAGER_H +#define M_VTUICOMMANDMANAGER_H + +#include + +class CEikMenuPane; +class CVtUiCmdContext; +class CVtUiCmdValidatorBase; +class CVtUiCmdValidationActionBase; +class MVtUiCommandUi; +class CVtUiCommandModifyBase; +class CVtUiCmdCustomValidationActionBase; +class CVtUiCmdBase; + +/** + * MVtUiCommandManager + * + * Command manager API for other components. Command manager holds command UI + * instances and does command validation for all registered commands. + * + * @since S60 v3.2 + */ +class MVtUiCommandManager + { + +public: + + /** + * Adds new command ui to command manager. + * @param aCommandUi Reference to command ui to be added. + * @return KErrNone if command ui was added successfully. + */ + virtual TInt AddCommandUi( MVtUiCommandUi& aCommandUi ) = 0; + + /** + * Removes command ui from command manager. + * @param aCommandUi Constant reference to command ui to be removed. + * + */ + virtual void RemoveCommandUi( MVtUiCommandUi& aCommandUi ) = 0; + + /** + * Validate menu items in given manu pane. + * + * @param aAction Reference to action to be carried on all menu commands. + */ + virtual void ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction ) = 0; + + /** + * Validate softkeys. + * + * @param aAction Reference to action to be carried on all softkeys. + */ + virtual void ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& aAction ) = 0; + + /** + * Validate toolbar buttons. + * + * @param aAction Reference to action to be carried on all toolbar commands. + */ + virtual void ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& aAction ) = 0; + + /** + * Validate command. + * + * @param aCommandId Id of command that is being checked. + * @return ETrue if command can be executed, EFalse otherwise. + */ + virtual TBool IsCommandAllowedL( TInt aCommandId ) = 0; + + /** + * Registers command context. + * + * @param aContext Reference to command context to be registered. + * @return KErrNone if registration succeeded. + */ + virtual TInt RegisterCommandContext( CVtUiCmdContext& aContext ) = 0; + + /** + * Unregisters command context. + * + * @param aContext Reference to command context to be unregistered. + */ + virtual void UnregisterCommandContext( CVtUiCmdContext& aContext ) = 0; + + /** + * Adds validator to policy manager and registered contexts. + * + * @param aValidator Reference to validator to be added. + * @return KErrNone if registration succeeded. + */ + virtual TInt AddValidator( CVtUiCmdValidatorBase& aValidator ) = 0; + + /** + * Removes validator from policy manager and registered contexts. + * + * @param aValidator Constant reference to validator to be removed. + */ + virtual void RemoveValidator( CVtUiCmdValidatorBase& aValidator ) = 0; + + /** + * Refresh command uis. + */ + virtual void RefreshL() = 0; + + /** + * Add new command modifier. + * + * @param aModifier Reference to command modifier to be added to every + * registered command setting. + * @return KErrNone if modifier could be added, KErrAlreadyExists if same + * modifier is already added or KErrArgument if another modifier with + * same priority is already added. + */ + virtual TInt AddCommandModifier( CVtUiCommandModifyBase& aModifier ) = 0; + + /** + * Remove command modifier. + * + * @param aModifier Reference to command modifier to be removed from every + * registered command setting. + */ + virtual void RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ) = 0; + + /** + * Registers new command to command manager. + * + * @param aCommand Reference to command to be registered. + */ + virtual void RegisterCommandL( CVtUiCmdBase& aCommand ) = 0; + + /** + * Unregisters command from command manager. + * + * @param aCommand Constant reference to command to be unregistered. + */ + virtual void UnregisterCommand( const CVtUiCmdBase& aCommand ) = 0; + + }; + +#endif // M_VTUICOMMANDMANAGER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/mvtuicommandsetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/mvtuicommandsetting.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 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: Command iterator API definition. +* +*/ + + +#ifndef M_VTUICOMMANDSETTING_H +#define M_VTUICOMMANDSETTING_H + +#include + +/** + * MVtUiCommandSetting + * + * Command Setting API. + * + * @since S60 v3.2 + */ +class MVtUiCommandSetting + { + +public: + + /** + * Command types. + */ + enum Type + { + /** Softkeys */ + ECommandTypeSoftkeys + }; + +public: // pure virtual methods + + /** + * Does the base command definition. If no modifiers are registered, then + * this method is called from DefineCommandsL(), otherwise this method may + * be called by the modifier, but it is not required to do so. + */ + virtual void DoDefineCommandsL() = 0; + + }; + + +#endif // M_VTUICOMMANDSETTING_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/mvtuicommandui.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/mvtuicommandui.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 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: Command UI API definition. +* +*/ + + +#ifndef M_VTUICOMMANDUI_H +#define M_VTUICOMMANDUI_H + +#include + +class CVtUiCommandModifyBase; + +/** + * MVtUiCommandUi + * + * Command UI API. Defines methods for adding/removing command modifiers and + * method to refresh related command UI. + * + * @since S60 v3.2 + */ +class MVtUiCommandUi + { + +public: + + /** + * Refresh command ui. + */ + virtual void RefreshL() = 0; + + /** + * Add new command modifier. + * + * @param aModifier Reference to modifier to be added to this command ui. + * @return KErrNone if modifier could be added, KErrAlreadyExists if same + * modifier is already added or KErrArgument if another modifier with + * same priority is already added. + */ + virtual TInt AddCommandModifier( CVtUiCommandModifyBase& aModifier ) = 0; + + /** + * Remove command modifier. + * + * @param aModifier Reference to modifier to be removed from this command + * ui. + */ + virtual void RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ) = 0; + + }; + +#endif // M_VTUICOMMANDUI_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tVtuifeaturevariation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tVtuifeaturevariation.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 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: Video Telephone feature variation class definition. +* +*/ + + +#ifndef T_VTUIFEATUREVARIATION_H +#define T_VTUIFEATUREVARIATION_H + +#include +#include + +/** + * TVtUiVariationBase + * + * Base class for feature variation classes. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiFeatureVariationBase ) + { + +public: + + /** + * Returns variation feature ID. + */ + virtual TUint32 FeatureId() const = 0; + +protected: + + /** + * Return whether or not feature is supported by Featuremanager. + * @return ETrue if feature is supported by Featuremanager. + */ + virtual TBool IsFeatureSupported( const TUint32 aId) const; + + }; + +/** + * TVtUiHelpVariation + * + * Help variation class. Uses Featuremanager to verify if feture is + * supported. This class should be instanced only once and same instance + * should be passesd as reference to modules that need this feature variation + * information. + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiHelpVariation ) : public TVtUiFeatureVariationBase + { + +public: + + /** + * Return whether or help variation is supported. + * + * @return ETrue if help supported. + */ + TBool IsHelpSupported() const; + +private: // from TVtUiFeatureVariationBase + + TUint32 FeatureId() const; + + }; +/** + * TVtUiDPVariation + * + * Display Post (DP) variation class. Uses Featuremanager to verify if feture is + * supported. This class should be instanced only once and same instance + * should be passesd as reference to modules that need this feature variation + * information. + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiDPVariation ) : public TVtUiFeatureVariationBase + { + +public: + + /** + * Return whether or DP variation is supported. + * + * @return ETrue if DP supported. + */ + TBool IsDPSupported() const; + +private: // from TVtUiFeatureVariationBase + + TUint32 FeatureId() const; + + }; +/** + * TVtUiBTVariation + * + * BlueTooth (BT) variation class. Uses Featuremanager to verify if feture is + * supported. This class should be instanced only once and same instance + * should be passesd as reference to modules that need this feature variation + * information. + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiBTVariation ) : public TVtUiFeatureVariationBase + { + +public: + + /** + * Return whether or BT variation is supported. + * + * @return ETrue if BT supported. + */ + TBool IsBTSupported() const; + +private: // from TVtUiFeatureVariationBase + + TUint32 FeatureId() const; + + }; +/** + * TVtUiSideVolumeKeysVariation + * + * Side volume keys variation class. Uses Featuremanager to verify if feture is + * supported. This class should be instanced only once and same instance + * should be passesd as reference to modules that need this feature variation + * information. + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiSideVolumeKeysVariation ) : public TVtUiFeatureVariationBase + { + +public: + + /** + * Return whether or Side volume keys variation is supported. + * + * @return ETrue if Side volume keys supported. + */ + TBool IsSideVolumeKeysSupported() const; + +private: // from TVtUiFeatureVariationBase + + TUint32 FeatureId() const; + + }; +/** + * TVtUiActiveIdleFetManVariation + * + * Active Idle feature manager variation class. Uses Featuremanager to verify if feture is + * supported. This class should be instanced only once and same instance + * should be passesd as reference to modules that need this feature variation + * information. + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiActiveIdleFetManVariation ) : public TVtUiFeatureVariationBase + { + +public: + + /** + * Return whether or Acvtive Idle variation is supported. + * + * @return ETrue if Acvtive Idle supported. + */ + TBool IsActiveIdleFetManSupported() const; + +private: // from TVtUiFeatureVariationBase + + TUint32 FeatureId() const; + + }; +#endif // T_VTUIFEATUREVARIATION_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtflagcontainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtflagcontainer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,108 @@ +/* +* Copyright (c) 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: Flag container class definition. +* +*/ + + +#ifndef T_VTFLAGCONTAINER_H +#define T_VTFLAGCONTAINER_H + +#include + +/** + * TVtFlagContainer + * + * Flag container is a class that holds maximum of 32 different flags. Also + * contains methods for setting, clearing and getting the flag state. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtFlagContainer ) + { +public: + + /** + * Constructor. + */ + inline TVtFlagContainer(); + +protected: + + /** + * Clears all flags. + */ + inline void Clear(); + + /** + * Tests flag. + */ + inline TBool IsFlag( TUint32 aFlags ) const; + + /** + * Sets flag(s). + */ + inline void SetFlag( TUint32 aFlags ); + + /** + * Clears flag(s). + */ + inline void ClearFlag( TUint32 aFlags ); + + /** + * Gets flag value. + */ + inline TUint32 Value() const; + + /** + * Sets flag value. + */ + inline void SetValue( TUint32 aValue ); + +private: + + // Current flags + TUint32 iFlags; + + }; + +/** + * TVtUpdateableFlagContainer + * + * A flag container with Update() method that can be called to get + * flags updated in one pass. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUpdateableFlagContainer ) : public TVtFlagContainer + { +public: + + /** + * Issues flag updation. + */ + inline void Update(); + +private: + + /** + * Called when flags needs to be updated (as a result to call Update()). + */ + virtual void UpdateFlags() = 0; + + }; + +#include "tvtflagcontainer.inl" + +#endif // T_VTFLAGCONTAINER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtflagcontainer.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtflagcontainer.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 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: Flag container class inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::TVtFlagContainer +// ----------------------------------------------------------------------------- +// +TVtFlagContainer::TVtFlagContainer() + { + Clear(); + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::Clear +// ----------------------------------------------------------------------------- +// +void TVtFlagContainer::Clear() + { + iFlags = 0; + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::IsFlag +// ----------------------------------------------------------------------------- +// +TBool TVtFlagContainer::IsFlag( TUint32 aFlags ) const + { + return ( iFlags & aFlags ); + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::SetFlag +// ----------------------------------------------------------------------------- +// +void TVtFlagContainer::SetFlag( TUint32 aFlags ) + { + iFlags |= aFlags; + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::ClearFlag +// ----------------------------------------------------------------------------- +// +void TVtFlagContainer::ClearFlag( TUint32 aFlags ) + { + iFlags &= ~aFlags; + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::Value +// ----------------------------------------------------------------------------- +// +TUint32 TVtFlagContainer::Value() const + { + return iFlags; + } + +// ----------------------------------------------------------------------------- +// TVtFlagContainer::SetValue +// ----------------------------------------------------------------------------- +// +void TVtFlagContainer::SetValue( TUint32 aValue ) + { + iFlags = aValue; + } + +// ----------------------------------------------------------------------------- +// TVtUpdateableFlagContainer::Update +// ----------------------------------------------------------------------------- +// +void TVtUpdateableFlagContainer::Update() + { + Clear(); + UpdateFlags(); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuiaudiostate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuiaudiostate.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,121 @@ +/* +* Copyright (c) 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: Audio state class definition. +* +*/ + + +#ifndef T_VTUIAUDIOSTATE_H +#define T_VTUIAUDIOSTATE_H + +#include + +#include "tvtflagcontainer.h" + +class CVtEngModel; + +/** + * TVtUiAudioState + * + * Contains status information about video telephony audio. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiAudioState ) : public TVtUpdateableFlagContainer + { +public: + + /** + * Constructor + * + * @param aModel Reference to VT engine model. + */ + inline TVtUiAudioState( CVtEngModel& aModel ); + + /** + * Return whether audio is enabled or not. + * + * @return ETrue if audio is enabled EFalse otherwise. + */ + inline TBool IsAudio() const; + + /** + * Return whether BT handsfree can be activated or not. + * + * @return ETrue if BT handsfree can be activated EFalse otherwise. + */ + inline TBool CanActivateBtHf() const; + + /** + * Return whether BT handsfree can be deactivated or not. + * + * @return ETrue if BT handsfree can be deactivated EFalse otherwise. + */ + inline TBool CanDeactivateBtHf() const; + + /** + * Return whether loudspeaker can be activated or not. + * + * @return ETrue if loudpseaker can be activated EFalse otherwise. + */ + inline TBool CanActivateLoudspeaker() const; + + /** + * Return whether loudspeaker can be deactivated or not. + * + * @return ETrue if loudspeaker can be deactivated EFalse otherwise. + */ + inline TBool CanDeactivateLoudspeaker() const; + + /** + * Return whether or not audio is permanently stopped. + * + * @return ETrue if audio is permanently stopped. + */ + inline TBool IsAudioPermanentlyStopped() const; + +private: // from TVtUpdateableFlagContainer + + /** + * @see TVtUpdateableFlagContainer::UpdateFlags + */ + void UpdateFlags(); + +private: + + // Enumeration for audio state flags. + enum TFlags + { + /** Is set if audio is currently enabled. */ + EIsAudio = ( 1<<0 ), + /** Is set if BT handsfree can be activated. */ + ECanActivateBtHf = ( 1<<1 ), + /** Is set if BT handsfree can be deactivated. */ + ECanDeactivateBtHf = ( 1<<2 ), + /** Is set if loudspeaker can be activated. */ + ECanActivateLoudspeaker = ( 1<<3 ), + /** Is set if loudspeaker can be deactivated. */ + ECanDeactivateLoudspeaker = ( 1<<4 ), + /** Set if audio is permanently stopped */ + EIsAudioPermanentlyStopped = ( 1<<5 ) + }; + + // Reference to engine model instance + CVtEngModel& iModel; + + }; + +#include "tvtuiaudiostate.inl" + +#endif // T_VTUIAUDIOSTATE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuiaudiostate.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuiaudiostate.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 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: Audio state class inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::TVtUiAudioState +// ----------------------------------------------------------------------------- +// +TVtUiAudioState::TVtUiAudioState( CVtEngModel& aModel ) +: iModel( aModel ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::IsAudio +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::IsAudio() const + { + return IsFlag( EIsAudio ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::CanActivateBtHf +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::CanActivateBtHf() const + { + return IsFlag( ECanActivateBtHf ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::CanDeactivateBtHf +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::CanDeactivateBtHf() const + { + return IsFlag( ECanDeactivateBtHf ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::CanActivateLoudspeaker +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::CanActivateLoudspeaker() const + { + return IsFlag( ECanActivateLoudspeaker ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::CanDeactivateLoudspeaker +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::CanDeactivateLoudspeaker() const + { + return IsFlag( ECanDeactivateLoudspeaker ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsAudioPermanentlyStopped +// ----------------------------------------------------------------------------- +// +TBool TVtUiAudioState::IsAudioPermanentlyStopped() const + { + return IsFlag( EIsAudioPermanentlyStopped ); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuicmdcontexttype.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuicmdcontexttype.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 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: Command context types. +* +*/ + + +#ifndef T_VTUICMDCONTEXTTYPE_H +#define T_VTUICMDCONTEXTTYPE_H + +/** + * Command context types + * + * @since S60 3.2 + */ +enum TVtUiCmdContextType + { + /** Context type not defined yet */ + EVtUiCmdContextTypeUndefined = 0, + + /** Context type menu */ + EVtUiCmdContextTypeMenu, + + /** Context type softkey */ + EVtUiCmdContextTypeSoftkey, + + /** Context type toolbar */ + EVtUiCmdContextTypeToolbar, + + /** Context type execution */ + EVtUiCmdContextTypeExecution, + + /** Context type number entry */ + EVtUiCmdContextTypeNumberEntry + + }; + +#endif // T_VTUICMDCONTEXTTYPE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuicmdpolicypriority.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuicmdpolicypriority.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 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: Command policy priorities. +* +*/ + + +#ifndef T_VTUICMDPOLICYPRIORITY_H +#define T_VTUICMDPOLICYPRIORITY_H + +/** + * Command priority enumeration + * + * @since S60 3.2 + */ +enum TVtUiCmdPolicyPriority + { + /** Undefined priority value */ + EVtUiCmdPolicyPriorityUndefined = 0, + + /** Lowest possible priority */ + EVtUiCmdPolicyPriorityLowest = 1, + + /** Number entry policy priority */ + EVtUiCmdPolicyPriorityNumberEntry, + + /** Menu policy priority */ + EVtUiCmdPolicyPriorityMenu = 100, + + /** Softkey policy priority */ + EVtUiCmdPolicyPrioritySoftkey = 200, + + /** Toolbar policy priority */ + EVtUiCmdPolicyPriorityToolbar = 300, + + /** Primary policy priority, must be highest */ + EVtUiCmdPolicyPriorityPrimary, + + /** Highest possible priority */ + EVtUiCmdPolicyPriorityHighest = EVtUiCmdPolicyPriorityPrimary + + }; + +#endif // T_VTUICMDPOLICYPRIORITY_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuicmdvalidatorcallback.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuicmdvalidatorcallback.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 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: Command validator callback class definition. +* +*/ + + +#ifndef T_VTUICMDVALIDATORCALLBACK_H +#define T_VTUICMDVALIDATORCALLBACK_H + +#include + +/** + * MVtUiCmdValidatorCallBack + * + * Command validator callback API. + * + * @since S60 v3.2 + */ +class MVtUiCmdValidatorCallBack + { + +public: + + /** + * Invokes callback call. + */ + virtual TBool Call( TInt ) const = 0; + + }; + +/** + * TVtUiCmdValidatorCallBack + * + * Validator callback wrapper to maintain type safety. Also allows use of + * different types of instances for invocation of callback. + * + * @since S60 v3.2 + */ +template < class T > +NONSHARABLE_CLASS( TVtUiCmdValidatorCallBack ) +: public MVtUiCmdValidatorCallBack + { + + // Callback method type definition + typedef TBool ( T::*TCallBackMethod )( TInt ) const; + +public: + + /** + * Constructor + * + * @param aInstance Instance on which callback method will be called. + * @param aMethod Callback method to be called. + */ + TVtUiCmdValidatorCallBack( const T& aInstance, TCallBackMethod aMethod ); + + /** + * Executes callback. + * + * @param aParameter Callback parameter, e.g. command Id or resource Id. + * @return Callback result. + */ + TBool Call( TInt aParameter ) const; + +private: + + // Instance from which callback method will be invoke + const T* iInstance; + + // Callback method pointer + TCallBackMethod iMethod; + + }; + +#include "tvtuicmdvalidatorcallback.inl" + +#endif // T_VTUICMDVALIDATORCALLBACK_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuicmdvalidatorcallback.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuicmdvalidatorcallback.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 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: Command validator callback class inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtUiCmdValidatorCallBack< T >::TVtUiCmdValidatorCallBack +// ----------------------------------------------------------------------------- +// +template < class T > +TVtUiCmdValidatorCallBack< T >::TVtUiCmdValidatorCallBack( + const T& aInstance, TCallBackMethod aMethod ) + : iInstance( &aInstance ), iMethod( aMethod ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiCmdValidatorCallBack< T >::Call +// ----------------------------------------------------------------------------- +// +template < class T > +TBool TVtUiCmdValidatorCallBack< T >::Call( TInt aCommandId ) const + { + return ( iInstance->*iMethod )( aCommandId ); + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuicommandmodifierpriority.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuicommandmodifierpriority.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006 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: Command modifier priorities. +* +*/ + + +#ifndef VTUICOMMANDMODIFIERPRIORITIES_H +#define VTUICOMMANDMODIFIERPRIORITIES_H + +/** + * Enumerates Modifier priorities + * + * @since S60 3.2 + */ +enum TVtUiCmdModifierPriority + { + /** Undefined priority value */ + EVtUiCmdModifierPriorityUndefined = 0, + + /** Lowest possible priority */ + EVtUiCmdModifierPriorityLowest = 1, + + /** Menu Modifier priority */ + EVtUiCmdModifierPriorityToolbar = 100, + + /** Menu Modifier priority */ + EVtUiCmdModifierPriorityNumberEntry = 101, + + /** Highest possible priority */ + EVtUiCmdModifierPriorityHighest = 500, + }; + +#endif // VTUICOMMANDMODIFIERPRIORITIES_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuilocalvariation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuilocalvariation.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,231 @@ +/* +* Copyright (c) 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: Video Telephone local variation class definition. +* +*/ + + +#ifndef T_VTUILOCALVARIATION_H +#define T_VTUILOCALVARIATION_H + +#include + +#include "tvtflagcontainer.h" + +// User selectable Call answer status values +const TInt KAllwaysQuery = 0; +const TInt KAllwaysAllow = 2; +const TInt KNumberOfTbButtons = 6; + +/** + * TVtUiVariationBase + * + * Base class for local variation classes. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiVariationBase ) : public TVtFlagContainer + { +public: + + /** + * Reads variations from central reposityory. + * and set default value in case error + */ + virtual void ReadL( const TInt adefault = -1 ); + +protected: + + /** + * Returns UID of the repository to be read. + */ + virtual const TUid& Uid() const = 0; + + /** + * ID of the key inside repository to be read. + */ + virtual TUint32 Key() const = 0; + + /** + * Gets key value. + */ + virtual TUint32 ReceiveValue() const; + + }; + +/** + * TVtUiVideoTelephonyVariation + * + * Video Telephony variation class. Reads VT local variation flags from the + * CenRep and contains methods to query flag states. This class should be + * instanced only once and same instance should be passesd as reference to + * modules that need this local variation information. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiVideoTelephonyVariation ) : public TVtUiVariationBase + { + +public: + + /** + * Return whether or not ScalingMethodENearest is set in local variation. + * + * @return ETrue if ScalingMethodENearest local variation flag is set, + * EFalse otherwise. + */ + inline TBool IsScalingMethodENearest() const; + + /** + * Return whether or not ScalingMethodEBilinear is set in local variation. + * + * @return ETrue if ScalingMethodEBilinear local variation flag is set, + * EFalse otherwise. + */ + inline TBool IsScalingMethodEBilinear() const; + + /** + * Return whether or not EnableBitReversal is set in local variation. + * + * @return ETrue if EnableBitReversal local variation flag is set, EFalse + * otherwise. + */ + inline TBool IsEnableBitReversal() const; + +private: // from TVtUiVariationBase + + /** + * @see TVtUiVariationBase::Uid + */ + const TUid& Uid() const; + + /** + * @see TVtUiVariationBase::Key + */ + TUint32 Key() const; + }; + +/** + * TVtUiActiveIdleVariation + * + * Active Idle variation class. Reads AI local variation flags from the + * CenRep and contains methods to query flag states. This class should be + * instanced only once and same instance should be passesd as reference to + * modules that need this local variation information. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiActiveIdleVariation ) : public TVtUiVariationBase + { + +public: + /** + * Return whether or not active idle is enabled in local variation. + * + * @return ETrue if active idle is enabled in local variation. + */ + TBool IsActiveIdleEnabled(); + +private: // from TVtUiVariationBase + + /** + * @see TVtUiVariationBase::Uid + */ + const TUid& Uid() const; + + /** + * @see TVtUiVariationBase::Key + */ + TUint32 Key() const; + +private: + }; + +/** + * TVtUiGsMuteVariation + * + * General settings (Gs) variation class. Reads GS local variation flags from the + * CenRep and contains methods to query flag states and values. This class should be + * instanced only once and same instance should be passesd as reference to + * modules that need this local variation information. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiGsMuteVariation ) : public TVtUiVariationBase + { + +public: + + /** + * Returns Gs mute state value from CanRep. + * + * @return Gs mute state value. + */ + TUint32 GsMuteState(); + +private: // from TVtUiVariationBase + + /** + * @see TVtUiVariationBase::Uid + */ + const TUid& Uid() const; + + /** + * @see TVtUiVariationBase::Key + */ + TUint32 Key() const; + +private: + }; + +/** + * TVtUiToolbarVariation + * + * Toolbar variation class. Reads TB local variation flags from the + * CenRep and contains methods to query flag states and values. This class should be + * instanced only once and same instance should be passesd as reference to + * modules that need this local variation information. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiToolbarVariation ) : public TVtUiVariationBase + { + +public: + /** + * Returns number of toolbar buttons from CanRep. + * + * @return number of toolbar buttons. + */ + TUint32 NumberOfButtons(); + +private: // from TVtUiVariationBase + + /** + * @see TVtUiVariationBase::Uid + */ + const TUid& Uid() const; + + /** + * @see TVtUiVariationBase::Key + */ + TUint32 Key() const; + +private: + }; + + +#include "tvtuilocalvariation.inl" + +#endif // T_VTUILOCALVARIATION_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuilocalvariation.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuilocalvariation.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 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: Video Telephone local variation class inline methods. +* +*/ + + +#include "VideoTelephonyVariant.hrh" + +// TVtUiVideoTelephonyVariation + +// ----------------------------------------------------------------------------- +// TVtUiVideoTelephonyVariation::IsScalingMethodENearest +// ----------------------------------------------------------------------------- +// +TBool TVtUiVideoTelephonyVariation::IsScalingMethodENearest() const + { + return IsFlag( KVTLVFlagScalingMethodENearest ); + } + +// ----------------------------------------------------------------------------- +// TVtUiVideoTelephonyVariation::IsScalingMethodEBilinear +// ----------------------------------------------------------------------------- +// +TBool TVtUiVideoTelephonyVariation::IsScalingMethodEBilinear() const + { + return IsFlag( KVTLVFlagScalingMethodEBilinear ); + } + +// ----------------------------------------------------------------------------- +// TVtUiVideoTelephonyVariation::IsEnableBitReversal +// ----------------------------------------------------------------------------- +// +TBool TVtUiVideoTelephonyVariation::IsEnableBitReversal() const + { + return IsFlag( KVTLVFlagEnableBitReversal ); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuimediastate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuimediastate.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 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: Media state class definition. +* +*/ + + +#ifndef T_VTUIMEDIASTATE_H +#define T_VTUIMEDIASTATE_H + +#include + +#include "tvtflagcontainer.h" + +class MVtEngMedia; +class MVtEngCommandHandler; + +/** + * TVtUiMediaState + * + * Contains information about media's (video) current status. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiMediaState ) : public TVtUpdateableFlagContainer + { +public: + + /** + * Constructor. + * + * @param aMedia Reference to VT engine media object. + * @param aCommandHandler Reference to command handler object. + */ + inline TVtUiMediaState( MVtEngMedia& aMedia, + MVtEngCommandHandler& aCommandHandler ); + + /** + * Return whether or not video is being sent. + * + * @return ETrue if video is being sent. + */ + inline TBool IsVideo() const; + + /** + * Return whether or not any camera is available in device. + * + * @return ETrue if any camera is available in device. + */ + inline TBool HasCamera() const; + + /** + * Return whether or not freeze is supported for active video source. + * + * @return ETrue if freeze is supported for active video source. + */ + inline TBool IsFreezeSupported() const; + + /** + * Return whether or not active video source is frozen. + * + * @return ETrue if video is frozen. + */ + inline TBool IsFrozen() const; + + /** + * Return whether or not share is active. + * + * @return ETrue if still image is being shared. + */ + inline TBool IsSharing() const; + + /** + * Return whether or not sharing is being initialized. + * + * @return ETrue if still image sharing is being initialized. + */ + inline TBool IsInitializingShare() const; + + /** + * Return whether or not primary camera is being used by VT. + * + * @return ETrue if primary camera is being used. + */ + inline TBool IsPrimaryCameraInUse() const; + + /** + * Return whether or not secondary camera is being used by VT. + * + * @return ETrue if secondary camera is being used. + */ + inline TBool IsSecondaryCameraInUse() const; + + /** + * Return whether or not it is possible to share. + * + * @return ETrue if sharing is not allowed. + */ + inline TBool IsNotAbleToShare() const; + + /** + * Return whether or not device has primary camera. + * + * @return ETrue if primary camera is available. + */ + inline TBool HasPrimaryCamera() const; + + /** + * Return whether or not device has secondary camera. + * + * @return ETrue if secondary camera is available. + */ + inline TBool HasSecondaryCamera() const; + + /** + * Return whether or not active video source supports contrast setting. + * + * @return ETrue if contrast settingis allowed. + */ + inline TBool IsContrastSupported() const; + + /** + * Return whether or not active video source supports white balance setting. + * + * @return ETrue if white balance setting is allowed. + */ + inline TBool IsWhiteBalanceSupported() const; + + /** + * Return whether or not active video source supports color tone setting. + * + * @return ETrue if colour tone setting is allowed. + */ + inline TBool IsColorToneSupported() const; + + /** + * Return whether or not active video source supports brightness setting. + * + * @return ETrue if brightness setting is allowed. + */ + inline TBool IsBrightnessSupported() const; + + /** + * Return whether or not video is permanently stopped. + * + * @return ETrue if video is permanently stopped. + */ + inline TBool IsVideoPermanentlyStopped() const; + +private: // from TVtUpdateableFlagContainer + + /** + * @see TVtUpdateableFlagContainer::UpdateFlags + */ + void UpdateFlags(); + +private: + + // Enumeration for media state flags. + enum TFlags + { + /** Set if video is currently enabled. */ + EIsVideo = ( 1<<0 ), + /** Set if device has any cameras */ + EHasCamera = ( 1<<1 ), + /** Set if current active video source supports freezing */ + EIsFreezeSupported = ( 1<<2 ), + /** Set if current active video source is frozen */ + EIsFrozen = ( 1<<3 ), + /** Set if sharing is active */ + EIsSharing = ( 1<<4 ), + /** Set if sharing is being initialized */ + EIsInitializingShare = ( 1<<5 ), + /** Set if device's primary camera is being used by VT application */ + EIsPrimaryCameraInUse = ( 1<<6 ), + /** Set if device's secondary camera is being used by VT application */ + EIsSecondaryCameraInUse = ( 1<<7 ), + /** Set if it is not possible to share */ + EIsNotAbleToShare = ( 1<<8 ), + /** Set if device has primary camera */ + EHasPrimaryCamera = ( 1<<9 ), + /** Set if device has secondary camera */ + EHasSecondaryCamera = ( 1<<10 ), + /** Set if current video source supports contrast setting */ + EIsContrastSupported = ( 1<<11 ), + /** Set if current video source supports white balance setting */ + EIsWhiteBalanceSupported = ( 1<<12 ), + /** Set if current video source supports color tone setting */ + EIsColorToneSupported = ( 1<<13 ), + /** Set if current video source supports brightness setting */ + EIsBrightnessSupported = ( 1<<14 ), + /** Set if video is permanently stopped*/ + EIsVideoPermanentlyStopped = ( 1<<15 ) + }; + + // Reference to engine media instance. + MVtEngMedia& iMedia; + + // Reference to engine command handler instance. + MVtEngCommandHandler& iCommandHandler; + }; + +#include "tvtuimediastate.inl" + +#endif // T_VTUIMEDIASTATE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuimediastate.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuimediastate.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,171 @@ +/* +* Copyright (c) 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: Media state class inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::TVtUiMediaState +// ----------------------------------------------------------------------------- +// +TVtUiMediaState::TVtUiMediaState( MVtEngMedia& aMedia, + MVtEngCommandHandler& aCommandHandler ) + : iMedia( aMedia ), iCommandHandler( aCommandHandler ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsVideo +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsVideo() const + { + return IsFlag( EIsVideo ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::HasCamera +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::HasCamera() const + { + return IsFlag( EHasCamera ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsFreezeSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsFreezeSupported() const + { + return IsFlag( EIsFreezeSupported ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsFrozen +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsFrozen() const + { + return IsFlag( EIsFrozen ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsSharing +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsSharing() const + { + return IsFlag( EIsSharing ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsInitializingShare +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsInitializingShare() const + { + return IsFlag( EIsInitializingShare ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsPrimaryCameraInUse +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsPrimaryCameraInUse() const + { + return IsFlag( EIsPrimaryCameraInUse ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsSecondaryCameraInUse +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsSecondaryCameraInUse() const + { + return IsFlag( EIsSecondaryCameraInUse ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsNotAbleToShare +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsNotAbleToShare() const + { + return IsFlag( EIsNotAbleToShare ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::HasPrimaryCamera +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::HasPrimaryCamera() const + { + return IsFlag( EHasPrimaryCamera ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::HasSecondaryCamera +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::HasSecondaryCamera() const + { + return IsFlag( EHasSecondaryCamera ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsContrastSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsContrastSupported() const + { + return IsFlag( EIsContrastSupported ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsWhiteBalanceSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsWhiteBalanceSupported() const + { + return IsFlag( EIsWhiteBalanceSupported ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsColorToneSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsColorToneSupported() const + { + return IsFlag( EIsColorToneSupported ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsBrightnessSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsBrightnessSupported() const + { + return IsFlag( EIsBrightnessSupported ); + } + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::IsVideoPermanentlyStopped +// ----------------------------------------------------------------------------- +// +TBool TVtUiMediaState::IsVideoPermanentlyStopped() const + { + return IsFlag( EIsVideoPermanentlyStopped ); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuistates.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuistates.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,679 @@ +/* +* Copyright (c) 2007 - 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" +* 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: UI states class definition. +* +*/ + + +#ifndef T_VTUISTATES_H +#define T_VTUISTATES_H + +#include + +#include "tvtuimediastate.h" +#include "tvtuiaudiostate.h" + +class CVtEngModel; +class MVtEngCameraPreferences; + +/** + * TVtUiStates + * + * Contains information about Application UI's current status. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiStates ) : public TVtFlagContainer + { + +public: // enumerations + + /** + * Application execution state (will be set by the app state classes) + */ + enum TVtUiExecState + { + EExecStateStarting, + EExecStateRunning, + EExecStateResetting, + EExecStateFinalized + }; + +public: + + /** + * Constructor. + */ + TVtUiStates( CVtEngModel& aModel ); + + /** + * Updates UI states. + */ + void Update(); + + /** + * Return whether or not ColorToneSetting + * is supported by current camera. + * + * @return ETrue if at least one color tone setting is available, + * EFalse otherwise. + */ + TBool IsColorToneSettingAvailable() const; + + /** + * Return whether or not WhiteBalanceSetting + * is supported by current camera. + * + * @return ETrue if at least one white balance setting is available, + * EFalse otherwise. + */ + TBool IsWhiteBalanceSettingAvailable() const; + + /** + * Return whether or not ontrast setting + * is supported by current camera. + * + * @return ETrue if at contrast setting is available, + * EFalse otherwise. + */ + TBool IsContrastSettingAvailable() const; + + /** + * Return whether or not brightness setting + * is supported by current camera. + * + * @return ETrue if brightness setting is available, + * EFalse otherwise. + */ + TBool IsBrightnessSettingAvailable() const; + + /** + * Returns reference to media state object + * + * @return Reference to media state object. + */ + inline const TVtUiMediaState& MediaState() const; + + /** + * Returns reference to audio state object + * + * @return Reference to audio state object. + */ + inline const TVtUiAudioState& AudioState() const; + + /** + * Sets or clears EIsCLIReceived + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetCLIReceived( TBool aSet ); + + /** + * Check if EIsCLIReceived is set + * + * @return ETrue if EIsCLIReceived is set EFalse otherwise + */ + inline TBool IsCLIReceived() const; + + /** + * Sets or clears EIsLayoutChangeNeeded + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetLayoutChangeNeeded( TBool aSet ); + + /** + * Check if EIsLayoutChangeNeeded is set + * + * @return ETrue if EIsLayoutChangeNeeded is set EFalse otherwise + */ + inline TBool IsLayoutChangeNeeded() const; + + /** + * Sets or clears EIsBlankControlAdded + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetBlankControlAdded( TBool aSet ); + + /** + * Check if EIsBlankControlAdded is set + * + * @return ETrue if EIsBlankControlAdded is set EFalse otherwise + */ + inline TBool IsBlankControlAdded() const; + + /** + * Sets or clears EIsLaunchOkOptionsMenu + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetLaunchOkOptionsMenu( TBool aSet ); + + /** + * Check if EIsLaunchOkOptionsMenu is set + * + * @return ETrue if EIsLaunchOkOptionsMenu is set EFalse otherwise + */ + inline TBool IsLaunchOkOptionsMenu() const; + + /** + * Sets or clears EIsDeviceLockOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetDeviceLockOn( TBool aSet ); + + /** + * Check if EIsDeviceLockOn is set + * + * @return ETrue if EIsDeviceLockOn is set EFalse otherwise + */ + inline TBool IsDeviceLockOn() const; + + /** + * Sets or clears EDetailsReceived + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetDetailsReceived( TBool aSet ); + + /** + * Check if EDetailsReceived is set + * + * @return ETrue if EDetailsReceived is set EFalse otherwise + */ + inline TBool IsDetailsReceived() const; + + /** + * Sets or clears EWaitingForFirstFrame + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetWaitingForFirstFrame( TBool aSet ); + + /** + * Check if EWaitingForFirstFrame is set + * + * @return ETrue if EWaitingForFirstFrame is set EFalse otherwise + */ + inline TBool IsWaitingForFirstFrame() const; + + /** + * Sets or clears EUseSQCif + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetUseSQCif( TBool aSet ); + + /** + * Check if EUseSQCif is set + * + * @return ETrue if EUseSQCif is set EFalse otherwise + */ + inline TBool IsUseSQCif() const; + + /** + * Sets or clears EIsViewFindersInitialPlaceContextPane + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetViewFindersInitialPlaceContextPane( TBool aSet ); + + /** + * Check if EIsViewFindersInitialPlaceContextPane is set + * + * @return ETrue if EIsViewFindersInitialPlaceContextPane is set EFalse + * otherwise + */ + inline TBool IsViewFindersInitialPlaceContextPane() const; + + /** + * Sets or clears EViewFinderToMainPane + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetViewFinderToMainPane( TBool aSet ); + + /** + * Check if EViewFinderToMainPane is set + * + * @return ETrue if EViewFinderToMainPane is set EFalse otherwise + */ + inline TBool IsViewFinderToMainPane() const; + + /** + * Sets or clears EIsCaptureModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetCaptureModeOn( TBool aSet ); + + /** + * Check if EIsCaptureModeOn is set + * + * @return ETrue if EIsCaptureModeOn is set EFalse otherwise + */ + inline TBool IsCaptureModeOn() const; + + /** + * Sets or clears EIsThisApplicationForeground + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetThisApplicationForeground( TBool aSet ); + + /** + * Check if EIsThisApplicationForeground is set + * + * @return ETrue if EIsThisApplicationForeground is set EFalse otherwise + */ + inline TBool IsThisApplicationForeground() const; + + /** + * Sets or clears EIsDisableBlindSetting + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetDisableBlindSetting( TBool aSet ); + + /** + * Check if EIsDisableBlindSetting is set + * + * @return ETrue if EIsDisableBlindSetting is set EFalse otherwise + */ + inline TBool IsDisableBlindSetting() const; + + /** + * Sets or clears EExecShowCameraInUse + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetExecShowCameraInUse( TBool aSet ); + + /** + * Check if EExecShowCameraInUse is set + * + * @return ETrue if EExecShowCameraInUse is set EFalse otherwise + */ + inline TBool IsExecShowCameraInUse() const; + + /** + * Check if EIsZoomModeOn is set + * + * @return ETrue if EIsZoomModeOn is set EFalse otherwise + */ + inline TBool IsZoomModeOn() const; + + /** + * Sets or clears EIsZoomModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetZoomModeOn( TBool aSet ); + + /** + * Check if EIsWhiteBalanceModeOn is set + * + * @return ETrue if EIsWhiteBalanceModeOn is set EFalse otherwise + */ + inline TBool IsWhiteBalanceModeOn() const; + + /** + * Sets or clears EIsWhiteBalanceModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetWhiteBalanceModeOn( TBool aSet ); + + /** + * Check if EIsColorToneModeOn is set + * + * @return ETrue if EIsColorToneModeOn is set EFalse otherwise + */ + inline TBool IsColorToneModeOn() const; + + /** + * Sets or clears EIsColorToneModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetColorToneModeOn( TBool aSet ); + + /** + * Check if EBrightnessModeOn is set + * + * @return ETrue if EBrightnessModeOn is set EFalse otherwise + */ + inline TBool IsBrightnessModeOn() const; + + /** + * Sets or clears EBrightnessModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetBrightnessModeOn( TBool aSet ); + + /** + * Check if EContrastModeOn is set + * + * @return ETrue if EContrastModeOn is set EFalse otherwise + */ + inline TBool IsContrastModeOn() const; + + /** + * Sets or clears EContrastModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetContrastModeOn( TBool aSet ); + + /** + * Sets or clears EIsNumberEntryOpen + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsNumberEntryOpen( TBool aSet ); + + /** + * Check if EIsNumberEntryOpen is set + * + * @return ETrue if EIsNumberEntryOpen is set EFalse otherwise + */ + inline TBool IsNumberEntryOpen() const; + + /** + * Sets or clears EIsToolbarAvailable + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsToolbarAvailable( TBool aSet ); + + /** + * Check if IsToolbarAvailable is set + * + * @return ETrue if IsToolbarAvailable is set EFalse otherwise + */ + inline TBool IsToolbarAvailable() const; + + /** + * Sets or clears EIsWaitingCall + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetWaitingCall( TBool aSet ); + + /** + * Check if there is waiting video/voice call. + * + * @return ETrue if waiting call is ongoing, EFalse otherwise + */ + inline TBool IsWaitingCall() const; + + /** + * Sets or clears EIsSelectingShare + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetSelectingShare( TBool aSet ); + + /** + * Check if user is selecting file to be shared. + * + * @return ETrue if user is selecting file, EFalse otherwise + */ + inline TBool IsSelectingShare() const; + + /** + * Sets or clears EIsDialerOpen + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsDialerOpen( TBool aSet ); + + /** + * Check if video DTMF dialer is open. + * + * @return ETrue if dialer is open, EFalse otherwise + */ + inline TBool IsDialerOpen() const; + + /** + * Sets or clears EIsFixedToolbarVisible + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsFixedToolbarVisible( TBool aSet ); + + /** + * Check if fixed toolbar is visible. + * + * @return ETrue iftoolbar is visible, EFalse otherwise + */ + inline TBool IsFixedToolbarVisible() const; + + /** + * Sets or clears EIsDialerActivating + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsDialerActivating( TBool aSet ); + + /** + * Check if dialer is being activated + * + * @return ETrue if dialer is being activated, EFalse otherwise + */ + inline TBool IsDialerActivating() const; + + /** + * Adjusts command activating reference count + * + * @param aSet ETrue if setting will be increased, EFalse if + * decreased. + */ + void SetIsCommandActivating( TBool aSet ); + + /** + * Check if command activating ref.count is greater than zero + * + * @return ETrue if any command is being activated, EFalse otherwise + */ + inline TBool IsCommandActivating() const; + + /** + * Check if EIsVolumeModeOn is set + * + * @return ETrue if EIsVolumeModeOn is set EFalse otherwise + */ + inline TBool IsVolumeModeOn() const; + + /** + * Sets or clears EIsVolumeModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetVolumeModeOn( TBool aSet ); + + /** + * Check if EIsVideoQualityModeOn is set + * + * @return ETrue if EIsVideoQualityModeOn is set EFalse otherwise + */ + inline TBool IsVideoQualityModeOn() const; + + /** + * Sets or clears EIsVideoQualityModeOn + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + + inline void SetVideoQualityModeOn( TBool aSet ); + /** + * Sets or clears EIsFloatingToolbarVisible + * + * @param aSet ETrue if setting will be set, EFalse otherwise. + */ + inline void SetIsFloatingToolbarVisible( TBool aSet ); + + /** + * Check if floating toolbar is visible. + * + * @return ETrue iftoolbar is visible, EFalse otherwise + */ + inline TBool IsFloatingToolbarVisible() const; + + /** + * Returns application's execution state. + * @return Application's current execution state. + */ + TVtUiExecState ExecState() const; + +private: // methods to be accessed only by certain classes (see friends) + + /** + * Sets application's execution state. + * @param aState Application's new execution state. + */ + void SetExecState( const TVtUiExecState aState ); + +private: + + // Enumeration for ui state flags. + enum TFlags + { + /** Set if CLI is received */ + EIsCLIReceived = ( 1<<0 ), + + /** Set if layout change is needed */ + EIsLayoutChangeNeeded = ( 1<<1 ), + + /** Set if blank control has been added to control stack */ + EIsBlankControlAdded = ( 1<<2 ), + + /** Set if launch ok in options menu */ + EIsLaunchOkOptionsMenu = ( 1<<3 ), + + /** Set if device lock is on */ + EIsDeviceLockOn = ( 1<<4 ), + + /** Set if details have been received */ + EDetailsReceived = ( 1<<5 ), + + /** Set if waiting for first frame */ + EWaitingForFirstFrame = ( 1<<6 ), + + /** Set if SQCIF is being used */ + EUseSQCif = ( 1 << 7 ), + + /** Set if images was in context pane before freeze, unset if not */ + EViewFindersInitialPlaceContextPane = ( 1<<8 ), + + /** Set if viewfinder has to be moved to mainpane, when imageshare is + ready */ + EViewFinderToMainPane = ( 1<<9 ), + + /** Set if capture mode is on, unset if off */ + EIsCaptureModeOn = ( 1<<10 ), + + /** Set if application on foreground */ + EIsThisApplicationForeground = ( 1<<11 ), + + /** Set if blind setting should be temporarily disabled. + This is used in preventing blind bitmap from flashing + while operations involving multiple engine commands/events + take place (e.g. 'Swap image places' and layout switch). */ + EIsDisableBlindSetting = ( 1<<12 ), + + /** Set if camera in use note should be shown. */ + EExecShowCameraInUse = ( 1<<13 ), + + /** Set if zooming slider indicators is shown in navi pane. + Toolbar also dims other toolbar controls except zoom + mode control.*/ + EIsZoomModeOn = ( 1<<14 ), + + /** Set if contrast mode is on, unset if off */ + EIsContrastModeOn = ( 1<<15 ), + + /** Set if brightness mode is on, unset if off */ + EIsBrightnessModeOn = ( 1<<16 ), + + /** Set if number entry is open in UI (do not use this flag in new code) + */ + EIsNumberEntryOpen = ( 1<<17 ), + + /** Set if toolbar is available in UI */ + EIsToolbarAvailable = ( 1<<18 ), + + /** Set if waiting call exists */ + EIsWaitingCall = ( 1<<19 ), + + /** Set if initializing share */ + EIsSelectingShare = ( 1<<20 ), + + /** Set if initializing share */ + EIsDialerOpen = ( 1<<21 ), + + /** Set if white balance mode is on, unset if off */ + EIsWhiteBalanceModeOn = ( 1<<22 ), + + /** Set if color tone mode is on, unset if off */ + EIsColorToneModeOn = ( 1 << 23 ), + + /** Set if fixed toolar is visible, unset if not */ + EIsFixedToolbarVisible = ( 1 << 24 ), + + /** Set if dialer is being activated, unset if not */ + EIsDialerActivating = ( 1 << 25 ), + + /** Set if volume mode is on, unset if off */ + EIsVolumeModeOn = ( 1 << 26 ), + + /** Set if floating toolar is visible, unset if not */ + EIsFloatingToolbarVisible = ( 1 << 27 ), + + /** Set if video quality mode is on, unset if not */ + EIsVideoQualityModeOn = ( 1 << 28 ) + }; + + // Engine media state + TVtUiMediaState iMediaState; + + // Engine audio state + TVtUiAudioState iAudioState; + + // Refrence to engine + CVtEngModel& iModel; + + // Refrence to camera prefrences + MVtEngCameraPreferences* iCameraPref; + + // Application execution state + TVtUiExecState iExecState; + + // Reference count of command activating. Enables command to be set + // active several times and action to take only when count is reset + // back to zer0. + TUint iCommandActivatingRefCount; + +private: // friends + + friend class TVtUiAppStateBase; + + }; + +#include "tvtuistates.inl" + +#endif // T_VTUISTATES_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/commands/tvtuistates.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/commands/tvtuistates.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,596 @@ +/* +* Copyright (c) 2007 - 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" +* 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: UI states class inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtUiStates::MediaState +// ----------------------------------------------------------------------------- +// +const TVtUiMediaState& TVtUiStates::MediaState() const + { + return iMediaState; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::AudioState +// ----------------------------------------------------------------------------- +// +const TVtUiAudioState& TVtUiStates::AudioState() const + { + return iAudioState; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetCLIReceived +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetCLIReceived( TBool aSet ) + { + aSet ? SetFlag( EIsCLIReceived ) : ClearFlag( EIsCLIReceived ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsCLIReceived +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsCLIReceived() const + { + return IsFlag( EIsCLIReceived ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetLayoutChangeNeeded +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetLayoutChangeNeeded( TBool aSet ) + { + aSet ? SetFlag( EIsLayoutChangeNeeded ) : + ClearFlag( EIsLayoutChangeNeeded ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsLayoutChangeNeeded +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsLayoutChangeNeeded() const + { + return IsFlag( EIsLayoutChangeNeeded ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetBlankControlAdded +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetBlankControlAdded( TBool aSet ) + { + aSet ? SetFlag( EIsBlankControlAdded ) : + ClearFlag( EIsBlankControlAdded ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsBlankControlAdded +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsBlankControlAdded() const + { + return IsFlag( EIsBlankControlAdded ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetLaunchOkOptionsMenu +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetLaunchOkOptionsMenu( TBool aSet ) + { + aSet ? SetFlag( EIsLaunchOkOptionsMenu ) : + ClearFlag( EIsLaunchOkOptionsMenu ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsLaunchOkOptionsMenu +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsLaunchOkOptionsMenu() const + { + return IsFlag( EIsLaunchOkOptionsMenu ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetDeviceLockOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetDeviceLockOn( TBool aSet ) + { + aSet ? SetFlag( EIsDeviceLockOn ) : + ClearFlag( EIsDeviceLockOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsDeviceLockOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsDeviceLockOn() const + { + return IsFlag( EIsDeviceLockOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetDetailsReceived +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetDetailsReceived( TBool aSet ) + { + aSet ? SetFlag( EDetailsReceived ) : + ClearFlag( EDetailsReceived ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsDetailsReceived +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsDetailsReceived() const + { + return IsFlag( EDetailsReceived ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetWaitingForFirstFrame +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetWaitingForFirstFrame( TBool aSet ) + { + aSet ? SetFlag( EWaitingForFirstFrame ) : + ClearFlag( EWaitingForFirstFrame ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsWaitingForFirstFrame +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsWaitingForFirstFrame() const + { + return IsFlag( EWaitingForFirstFrame ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetUseSQCif +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetUseSQCif( TBool aSet ) + { + aSet ? SetFlag( EUseSQCif ) : + ClearFlag( EUseSQCif ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsUseSQCif +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsUseSQCif() const + { + return IsFlag( EUseSQCif ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetViewFindersInitialPlaceContextPane +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetViewFindersInitialPlaceContextPane( TBool aSet ) + { + aSet ? SetFlag( EViewFindersInitialPlaceContextPane ) : + ClearFlag( EViewFindersInitialPlaceContextPane ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsViewFindersInitialPlaceContextPane +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsViewFindersInitialPlaceContextPane() const + { + return IsFlag( EViewFindersInitialPlaceContextPane ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetViewFinderToMainPane +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetViewFinderToMainPane( TBool aSet ) + { + aSet ? SetFlag( EViewFinderToMainPane ) : + ClearFlag( EViewFinderToMainPane ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsViewFinderToMainPane +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsViewFinderToMainPane() const + { + return IsFlag( EViewFinderToMainPane ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetCaptureModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetCaptureModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsCaptureModeOn ) : + ClearFlag( EIsCaptureModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsCaptureModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsCaptureModeOn() const + { + return IsFlag( EIsCaptureModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetThisApplicationForeground +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetThisApplicationForeground( TBool aSet ) + { + aSet ? SetFlag( EIsThisApplicationForeground ) : + ClearFlag( EIsThisApplicationForeground ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsThisApplicationForeground +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsThisApplicationForeground() const + { + return IsFlag( EIsThisApplicationForeground ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetDisableBlindSetting +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetDisableBlindSetting( TBool aSet ) + { + aSet ? SetFlag( EIsDisableBlindSetting ) : + ClearFlag( EIsDisableBlindSetting ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsDisableBlindSetting +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsDisableBlindSetting() const + { + return IsFlag( EIsDisableBlindSetting ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetExecShowCameraInUse +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetExecShowCameraInUse( TBool aSet ) + { + aSet ? SetFlag( EExecShowCameraInUse ) : + ClearFlag( EExecShowCameraInUse ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsExecShowCameraInUse +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsExecShowCameraInUse() const + { + return IsFlag( EExecShowCameraInUse ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsZoomModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsZoomModeOn() const + { + return IsFlag( EIsZoomModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetZoomModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetZoomModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsZoomModeOn ) : + ClearFlag( EIsZoomModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsWhiteBalanceModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsWhiteBalanceModeOn() const + { + return IsFlag( EIsWhiteBalanceModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetWhiteBalanceModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetWhiteBalanceModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsWhiteBalanceModeOn ) : + ClearFlag( EIsWhiteBalanceModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsColorToneModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsColorToneModeOn() const + { + return IsFlag( EIsColorToneModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetColorToneModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetColorToneModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsColorToneModeOn ) : + ClearFlag( EIsColorToneModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsBrightnessModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsBrightnessModeOn() const + { + return IsFlag( EIsBrightnessModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetBrightnessModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetBrightnessModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsBrightnessModeOn ) : + ClearFlag( EIsBrightnessModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsContrastModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsContrastModeOn() const + { + return IsFlag( EIsContrastModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetContrastModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetContrastModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsContrastModeOn ) : + ClearFlag( EIsContrastModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsNumberEntryOpen +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsNumberEntryOpen( TBool aSet ) + { + aSet ? SetFlag( EIsNumberEntryOpen ) : + ClearFlag( EIsNumberEntryOpen ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsNumberEntryOpen +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsNumberEntryOpen() const + { + return IsFlag( EIsNumberEntryOpen ); + } + + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsToolbarAvailable +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsToolbarAvailable( TBool aSet ) + { + aSet ? SetFlag( EIsToolbarAvailable ) : + ClearFlag( EIsToolbarAvailable ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsToolbarAvailable +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsToolbarAvailable() const + { + return IsFlag( EIsToolbarAvailable ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates:::SetWaitingCall +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetWaitingCall( TBool aSet ) + { + aSet ? SetFlag( EIsWaitingCall ) : + ClearFlag( EIsWaitingCall ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsWaitingCall +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsWaitingCall() const + { + return IsFlag( EIsWaitingCall ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates:::SetSelectingShare +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetSelectingShare( TBool aSet ) + { + aSet ? SetFlag( EIsSelectingShare ) : + ClearFlag( EIsSelectingShare ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsSelectingShare +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsSelectingShare() const + { + return IsFlag( EIsSelectingShare ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsDialerOpen +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsDialerOpen( TBool aSet ) + { + aSet ? SetFlag( EIsDialerOpen ) : + ClearFlag( EIsDialerOpen ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsDialerOpen +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsDialerOpen() const + { + return IsFlag( EIsDialerOpen ); + } + + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsFixedToolbarVisible +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsFixedToolbarVisible( TBool aSet ) + { + aSet ? SetFlag( EIsFixedToolbarVisible ) : + ClearFlag( EIsFixedToolbarVisible ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsFixedToolbarVisible +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsFixedToolbarVisible() const + { + return IsFlag( EIsFixedToolbarVisible ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsDialerActivating +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsDialerActivating( TBool aSet ) + { + aSet ? SetFlag( EIsDialerActivating ) : + ClearFlag( EIsDialerActivating ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsDialerActivating +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsDialerActivating() const + { + return IsFlag( EIsDialerActivating ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsCommandActivating +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsCommandActivating() const + { + return iCommandActivatingRefCount > 0; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsVolumeModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsVolumeModeOn() const + { + return IsFlag( EIsVolumeModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetVolumeModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetVolumeModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsVolumeModeOn ) : + ClearFlag( EIsVolumeModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsFloatingToolbarVisible +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsFloatingToolbarVisible( TBool aSet ) + { + aSet ? SetFlag( EIsFloatingToolbarVisible ) : + ClearFlag( EIsFloatingToolbarVisible ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsFloatingToolbarVisible +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsFloatingToolbarVisible() const + { + return IsFlag( EIsFloatingToolbarVisible ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsVideoQualityModeOn +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsVideoQualityModeOn() const + { + return IsFlag( EIsVideoQualityModeOn ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetVideoQualityModeOn +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetVideoQualityModeOn( TBool aSet ) + { + aSet ? SetFlag( EIsVideoQualityModeOn ) : + ClearFlag( EIsVideoQualityModeOn ); + } \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/cvtuicomponentmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/cvtuicomponentmanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,435 @@ +/* +* Copyright (c) 2006 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: Component manager implementation. +* +*/ + + +#ifndef C_VTUICOMPONENTMANAGER_H +#define C_VTUICOMPONENTMANAGER_H + +#include + +#include "mvtuicomponentmanager.h" +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" + +/** + * CVtUiComponentManager + * + * Component manager implementation. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiComponentManager ) + : public CBase, public MVtUiComponentManager + { + +public: // public methods + + /** + * Static constructor. + * + * @return Newly created instance of CVtUiComponentManager class. + */ + static CVtUiComponentManager* NewL(); + + /** + * Destructor. + */ + ~CVtUiComponentManager(); + + /** + * Called when a Ws event is delivered. + * + * @param aEvent Window server event. + * @param aDestination Event destination control. + */ + void HandleWsEventL( const TWsEvent& aEvent, CCoeControl *aDestination ); + + /** + * Called when a resource change is informed. + * + * @param aType Type of change. + */ + void HandleResourceChangeL( TInt aType ); + + /** + * Called when a keyevent needs handling. + * + * @param aKeyEvent Key event structure. + * @param aCode Event code. + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType); + + /** + * Called when a layout change is informed. + * + */ + void HandleLayoutChangeL(); + +public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::ChangeWsEventRegistration + */ + TInt ChangeWsEventRegistration( MVtUiWindowServerEventObserver& aObserver, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeResourceChangeRegistration + */ + TInt ChangeResourceChangeRegistration( + MVtUiResourceChangeObserver& aObserver, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeKeyEventRegistration + */ + TInt ChangeKeyEventRegistration( MVtUiKeyEventObserver& aComponent, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeLayoutChangeRegistration + */ + TInt ChangeLayoutChangeRegistration( MVtUiLayoutChangeObserver& aComponent, + TAction aAction ); + + /** + * @see MVtUiComponentManager::ChangeComponentRegistration + */ + TInt ChangeComponentRegistration( TVtUiComponentState& aComponentState, + TAction aAction ); + + /** + * @see MVtUiComponentManager::RequestActivation + */ + void RequestActivationL( MVtUiComponent::TComponentId aId ); + + /** + * @see MVtUiComponentManager::DeActivateComponentL + */ + void DeActivateComponentL( MVtUiComponent::TComponentId aId ); + +private: // private classes + + /** + * TStateListItem + * + * Contains one component's state in state list. + */ + class TStateListItem + { + + public: // public type definitions + + /** + * Compare by key type definition. + */ + typedef TInt (*TKeyCmpFunc) + ( const MVtUiComponent::TComponentId*, const TStateListItem& ); + + public: // public methods + + /** + * Constructor + * + * @param aState Constant reference to component state. + */ + TStateListItem( const TVtUiComponentState& aState ); + + /** + * Returns component id. + * + * @return Component's id. + */ + MVtUiComponent::TComponentId ComponentId() const; + + /** + * Returns component's state. + * + * @return Component's state. + */ + TVtUiComponentState::TState State() const; + + /** + * Sets component's state. + * + * @param aState Component's new state. + */ + void SetState( TVtUiComponentState::TState aState ); + + /** + * Returns const reference to block list. + * + * @return Constant reference to block list. + */ + const TVtUiBlockList& BlockList() const; + + /** + * Sets this object as root. + */ + void SetRoot(); + + /** + * Returns ETrue if this object is root. + * + * @return ETrue if this item is root, EFalse otherwise. + */ + TBool IsRoot() const; + + /** + * Sets this object as visited. + */ + void SetVisited(); + + /** + * Returns ETrue if this object is visited. + * + * @return ETrue if this item has been visited, EFalse otherwise. + */ + TBool IsVisited() const; + + public: // static public methods + + /** + * Returns TLinearOrder for RArray operations. Ordered by component id. + * + * @return TLinearOrder insntace for RArray operations. Ordering will + * be done based on component Id. + */ + static TLinearOrder< TStateListItem > LinearOrder(); + + /** + * Returns key order function for RArray operations. + * + * @return Key compare method pointer for RArray operations. + */ + static TKeyCmpFunc KeyOrder(); + + /** + * Returns TLinearOrder for RArray operations. Ordered by component + * state. + * + * @return TLinearOrder instance for RArray operations. Ordering will + * be done based on component state. + */ + static TLinearOrder< TStateListItem > StateOrder(); + + private: // static private methods + + /** + * StateListItem compare method. + */ + static TInt ItemCmpFunc( const TStateListItem& aItem1, + const TStateListItem& aItem2 ); + + /** + * StateListItem vs key compare method. + */ + static TInt KeyCmpFunc( const MVtUiComponent::TComponentId* aKey, + const TStateListItem& aItem ); + + /** + * StateListItem by state compare method. + */ + static TInt StateCmpFunc( const TStateListItem& aItem1, + const TStateListItem& aItem2 ); + + private: // data + + // Component's ID + MVtUiComponent::TComponentId iComponentId; + + // Component's state + TVtUiComponentState::TState iState; + + // Block mask (IDs which will be blocked by this component) + TVtUiBlockListBitField iBlockList; + + // ETrue if this component is the root compoent, EFalse otherwise + TBool iIsRoot; + + // ETrue if this component has been already visited (i.e. evaluated) + TBool iIsVisited; + + }; + + /** + * TStateList + * + * Contains list of component states. This list can be modified and when all + * modifications are ready, the whole list can be commited at once. + * + */ + class TStateList + { + + public: // public methods + + /** + * Constructor. + */ + TStateList(); + + /** + * Destructor. + */ + ~TStateList(); + + /** + * Add new item to state list. + * + * @param aItem Reference to item to be added to the list. + */ + void AddItemL( TStateListItem& aItem ); + + /** + * Returns number of items in state list. + * + * @return Number of items on list. + */ + TInt ItemCount() const; + + /** + * Find state list item by component id. + * + * @param aComponentId Id of component that will be searched. + * @return Index of the component or KErrNotFound if component with + * given Id could not be found. + */ + TInt FindItem( MVtUiComponent::TComponentId aComponentId ) const; + + /** + * Returns reference to state list item at given index. + * + * @param aIndex Index of the item to be fetched. + * @return Reference to item at given index. + */ + TStateListItem& At( TInt aIndex ); + + /** + * Returns const reference to state list item at given index. + * + * @param aIndex Index of the item to be fetched. + * @return Constant reference to item at given index. + */ + const TStateListItem& At( TInt aIndex ) const; + + /** + * Sorts list using given linear order. + * + * @param aOrder TLinearObject that will be used in sorting. + */ + void Sort( + TLinearOrder< CVtUiComponentManager::TStateListItem > aOrder ); + + private: // data + + // List items + RArray< TStateListItem > iItems; + + }; + +private: // enumerations + + /** + * Activation actions + */ + enum TActivationAction + { + /** Hide component */ + EHide, + /** Show component */ + EShow + }; + +private: + + /** + * Constructor + */ + CVtUiComponentManager(); + + /** + * 2nd constructor, may leave + */ + void ConstructL(); + + /** + * Adds or removes component from given array. + */ + template < class T > + TInt AddOrRemoveComponent( RPointerArray< T >& aArray, T* aComponent, + TAction aAction ); + + /** + * Returns linear order object for array operations. + */ + static TLinearOrder< MVtUiComponent > ComponentOrder(); + + /** + * Returns linear order object for array operations. + */ + static TLinearOrder< TVtUiComponentState > ComponentStateOrder(); + + /** + * Starts activation process. + */ + void DoActivationL( TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ); + + /** + * Starts deactivation process. + */ + void DoDeactivationL( TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ); + + /** + * Calculates activation. + */ + void CalculateActivationL( const TVtUiBlockList& aBlockList, + const TVtUiBlockList& aExclList, TStateList& aStateList, + TActivationAction aAction ); + + /** + * Commits activation calculation results. + */ + void CommitStateListL( TStateList& aList ); + + /** + * Constructs component state list before the calculations. + */ + void ConstructStateListL( TStateList& aList ); + +private: // data + + // Window server event listeners + RPointerArray< MVtUiWindowServerEventObserver > iWsEventObservers; + + // Resource change event listeners + RPointerArray< MVtUiResourceChangeObserver > iResourceChangeObservers; + + // Key event listeners + RPointerArray< MVtUiKeyEventObserver > iKeyEventObservers; + + // Layout change listeners + RPointerArray< MVtUiLayoutChangeObserver > iLayoutChangeObservers; + + // Registered components + RPointerArray< TVtUiComponentState > iComponents; + + }; + +#endif // C_VTUICOMPONENTMANAGER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuicomponent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuicomponent.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2006 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: VT UI Component API definition. +* +*/ + + +#ifndef M_VTUICOMPONENT_H +#define M_VTUICOMPONENT_H + +#include + +class CCoeControl; + +/** + * MVtUiComponent + * + * UI component API definition. + * + * @since S60 v3.2 + */ +class MVtUiComponent + { + +public: // enumerations + + /** + * Component Ids. + */ + enum TComponentId + { + /** NULL component Id */ + EComponentIdNull = 0, + /** Toobar component Id */ + EComponentIdToolbar = ( 1 << 0 ), + /** Number entry component Id */ + EComponentIdNumberEntry = ( 1 << 1 ), + /** Video quality component id */ + EComponentIdVideoQuality = ( 1 << 2 ), + /** White balance feature id */ + EComponentIdWhiteBalance = ( 1 << 3 ), + /** Color tone component id */ + EComponentIdColorTone = ( 1 << 4 ), + /** Brightness component id */ + EVComponentIdBrightness = ( 1 << 5 ), + /** Contrast component id */ + EVComponentIdContrast = ( 1 << 6 ), + /** Dialer component id */ + EComponentIdDialer = ( 1 << 7 ), + /** Volume component id */ + EComponentIdVolume = ( 1 << 8 ), + /** Zoom component id */ + EComponentIdZoom = ( 1 << 9 ) + }; + +public: // public methods + + /** + * Returns component id. + * + * @return Component's id. + */ + virtual TComponentId ComponentId() const = 0; + + /** + * Returns this component as a CCoeControl. + * + * @return Component as a pointer to CCoeControl or NULL if this component + * is not inherited from CCoeControl. + */ + virtual CCoeControl* ComponentAsControl() = 0; + + /** + * Activates component. + */ + virtual void DoActivateL() = 0; + + /** + * Deactivates component. + */ + virtual void DoDeactivateL() = 0; + + }; + +#endif // M_VTUICOMPONENT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuicomponentmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuicomponentmanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,131 @@ +/* +* Copyright (c) 2006 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: VT UI Component manager API definition. +* +*/ + + +#ifndef M_VTUICOMPONENTMANAGER_H +#define M_VTUICOMPONENTMANAGER_H + +#include + +#include "mvtuicomponent.h" + +class TVtUiComponentState; +class MVtUiWindowServerEventObserver; +class MVtUiResourceChangeObserver; +class MVtUiKeyEventObserver; +class MVtUiLayoutChangeObserver; + +/** + * MVtUiComponentManager + * + * Component manager API definition. + * + * @since S60 v3.2 + */ +class MVtUiComponentManager + { + +public: // enumerations + + /** + * Registration action. + */ + enum TAction + { + /** Register action */ + ERegister, + + /** Unregister action */ + EUnregister + }; + +public: // public methods + + /** + * Register or unregister Ws event listening. + * + * @param aComponent Observer whose registration will be changed. + * @param aAction Registration action + * @see MVtUiComponentManager::TAction + * @return KErrNone if registration action succeeded. + */ + virtual TInt ChangeWsEventRegistration( + MVtUiWindowServerEventObserver& aComponent, + TAction aAction ) = 0; + + /** + * Register or unregister resource change event listening. + * + * @param aComponent Observer whose registration will be changed. + * @param aAction Registration action + * @see MVtUiComponentManager::TAction + * @return KErrNone if registration action succeeded. + */ + virtual TInt ChangeResourceChangeRegistration( + MVtUiResourceChangeObserver& aComponent, + TAction aAction ) = 0; + + /** + * Register or unregister key event listening. + * + * @param aComponent Observer whose registration will be changed. + * @param aAction Registration action + * @see MVtUiComponentManager::TAction + * @return KErrNone if registration action succeeded. + */ + virtual TInt ChangeKeyEventRegistration( MVtUiKeyEventObserver& aComponent, + TAction aAction ) = 0; + + /** + * Register or unregister layout change listening. + * + * @param aComponent Observer whose registration will be changed. + * @param aAction Registration action + * @see MVtUiComponentManager::TAction + * @return KErrNone if registration action succeeded. + */ + virtual TInt ChangeLayoutChangeRegistration( MVtUiLayoutChangeObserver& aComponent, + TAction aAction ) = 0; + + /** + * Register or unregister component. + * + * @param aComponent Observer whose registration will be changed. + * @param aAction Registration action + * @see MVtUiComponentManager::TAction + * @return KErrNone if registration action succeeded. + */ + virtual TInt ChangeComponentRegistration( TVtUiComponentState& aComponent, + TAction aAction ) = 0; + + /** + * Request component activation. + * + * @param aId Id of component to be activated. + */ + virtual void RequestActivationL( MVtUiComponent::TComponentId aId ) = 0; + + /** + * Deactivate component. + * + * @param aId Id of component to be deactivated. + */ + virtual void DeActivateComponentL( MVtUiComponent::TComponentId aId ) = 0; + + }; + +#endif // M_VTUICOMPONENTMANAGER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuikeyeventobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuikeyeventobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2006 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: Key event observer API for components. +* +*/ + + +#ifndef M_VTUIKEYEVENTOBSERVER_H +#define M_VTUIKEYEVENTOBSERVER_H + +#include +#include + +/** + * MVtUiKeyEventObserver + * + * Keyevent observer API definition. + * + * @since S60 v3.2 + */ +class MVtUiKeyEventObserver + { + +public: + + /** + * Called when key event handling is required. + * + * @param aEvent The key event. + * @param aCode The type of key event: EEventKey, EEventKeyUp or + * EEventKeyDown. + * @return Indicates whether or not the key event was used. + */ + virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ) = 0; + + }; + +#endif // M_VTUIKEYEVENTOBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuilayoutchangeobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuilayoutchangeobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 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: Layout change observer API definition. +* +*/ + + +#ifndef M_VTUILAYOUTCHANGEOBSERVER_H +#define M_VTUILAYOUTCHANGEOBSERVER_H + +#include + +/** + * MVtUiLayoutChangeObserver + * + * Layout change observer API definition. + * + * @since S60 v3.2 + */ +class MVtUiLayoutChangeObserver + { + +public: + + /** + * Called when layout have been changed. + * + */ + virtual void HandleLayoutChangeL() = 0; + + }; + +#endif // M_VTUIRESOURCECHANGEOBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuiresourcechangeobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuiresourcechangeobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006 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 change observer API definition. +* +*/ + + +#ifndef M_VTUIRESOURCECHANGEOBSERVER_H +#define M_VTUIRESOURCECHANGEOBSERVER_H + +#include + +/** + * MVtUiResourceChangeObserver + * + * Resource change observer API definition. + * + * @since S60 v3.2 + */ +class MVtUiResourceChangeObserver + { + +public: + + /** + * Called when resources have been changed. + * + * @param aType The type of resources that have changed. + */ + virtual void HandleResourceChangeL( TInt aType ) = 0; + + }; + +#endif // M_VTUIRESOURCECHANGEOBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/mvtuiwindowservereventobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/mvtuiwindowservereventobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2006 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: Window Server event observer API definition. +* +*/ + + +#ifndef M_VTUIWINDOWSERVEREVENTOBSERVER_H +#define M_VTUIWINDOWSERVEREVENTOBSERVER_H + +class TWsEvent; +class CCoeControl; + +/** + * MVtUiWindowServerEventObserver + * + * Window Server event observer API definition. + * + * @since S60 v3.2 + */ +class MVtUiWindowServerEventObserver + { + +public: + + /** + * Called when window server event handling is required. + * + * @param aEvent A window server event. + * @param aDestination The control associated with the event. + * This is only relevant for pointer events. + */ + virtual void HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ) = 0; + + }; + +#endif // M_VTUIWINDOWSERVEREVENTOBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/tvtuiblocklists.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/tvtuiblocklists.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2006 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: VT UI component state definition. +* +*/ + + +#ifndef T_VTUIBLOCKLISTS_H +#define T_VTUIBLOCKLISTS_H + +#include + +#include "mvtuicomponent.h" + +/** + * CVtUiBlockListIterator + * + * Class for iterating through component's block list. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiBlockListIterator ) : public CBase + { + +public: // public abstract methods + + /** + * Returns ETrue if there is more component Ids left in the iterator. + * + * @return ETrue if there is more Ids left, EFalse otherwise. + */ + virtual TBool HasNext() const = 0; + + /** + * Returns next component id. + * + * @return Next component Id. + */ + virtual MVtUiComponent::TComponentId Next() = 0; + + }; + +/** + * TVtUiBlockList + * + * Base class for component block lists. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiBlockList ) + { + +public: // public methods + + /** + * Destructor. + */ + virtual ~TVtUiBlockList(); + +public: // public abstract methods + + /** + * Returns ETrue if block list is empty. + * + * @return ETrue if this block list is empty, EFalse otherwise. + */ + virtual TBool IsEmpty() const = 0; + + /** + * Returns ETrue if block list contains given component id. + * + * @param aId Component Id to check. + * @return ETrue if this block list contains given component Id, EFalse + * otherwise. + */ + virtual TBool Contains( MVtUiComponent::TComponentId aId ) const = 0; + + /** + * Merges this block list with given block list. + * + * @param aBlockList List to merge into this block list. + */ + virtual void Union( const TVtUiBlockList& aBlockList ) = 0; + + /** + * Returns new instance of block list iterator. Instance is owned by the + * caller, but it is also pushed to cleanupstack. + * + * @return Instance to block list iterator. Iterator is for this block + * list instance. + */ + virtual CVtUiBlockListIterator* IteratorLC() const = 0; + +protected: // protected methods + + /** + * Constructor. + */ + TVtUiBlockList(); + + }; + +/** + * TVtUiBlockListBitField + * + * Component block list in which component IDs are defined as bits (i.e. + * only single bit is set per ID). + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiBlockListBitField ) : public TVtUiBlockList + { + +public: // public methods + + /** + * Default construct, initialized block list as empty. + */ + TVtUiBlockListBitField(); + + /** + * Constructor that initializes block list. + * + * @param aBlockMask Component Ids that will be added to block list. + */ + TVtUiBlockListBitField( TUint aBlockMask ); + +public: // from + + /** + * @see TVtUiBlockList::IsEmpty + */ + TBool IsEmpty() const; + + /** + * @see TVtUiBlockList::Contains + */ + TBool Contains( MVtUiComponent::TComponentId aId ) const; + + /** + * @see TVtUiBlockList::Union + */ + void Union( const TVtUiBlockList& aBlockList ); + + /** + * @see TVtUiBlockList::IteratorLC + */ + CVtUiBlockListIterator* IteratorLC() const; + +private: // inner classes + + /** + * CVtUiBListIteratorBF + * + * @since S60 v3.2 + */ + class CVtUiBListIteratorBF : public CVtUiBlockListIterator + { + + public: // public methods + + /** + * Static constructor + * + * @param aBlockMask Components Ids. + */ + static CVtUiBListIteratorBF* NewLC( const TUint& aBlockMask ); + + private: // private methods + + /** + * Constructor + */ + CVtUiBListIteratorBF( const TUint& aBlockMask ); + + private: // from CVtUiBlockListIterator + + /** + * @see CVtUiBlockListIterator::HasNext + */ + TBool HasNext() const; + + /** + * @see CVtUiBlockListIterator::Next + */ + MVtUiComponent::TComponentId Next(); + + private: // data + + // Blockmask from TVtUiBlockListBitField + const TUint iBlockMask; + + // Current id + TUint iCurrent; + + }; + +private: // data + + // Block list as bit field, this requires that component ids are defined + // as bitfields. + TUint iBlockMask; + + }; + +#endif // T_VTUIBLOCKLISTS_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/compman/tvtuicomponentstate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/compman/tvtuicomponentstate.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2006 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: VT UI component state definition. +* +*/ + + +#ifndef T_VTUICOMPONENTSTATE_H +#define T_VTUICOMPONENTSTATE_H + +#include + +#include "tvtuiblocklists.h" + +/** + * TVtUiComponentState + * + * Component state definition. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TVtUiComponentState ) + { + +public: // enumerations + + enum TState + { + /** Component is inactive */ + EInactive, + + /** Component is activated but some other component is blocking it */ + EWaiting, + + /** Component is active */ + EActive + }; + +public: // public methods + + /** + * Activate component. + */ + void ActivateComponentL(); + + /** + * Blocks component. + */ + void BlockComponentL(); + + /** + * Deactivates component. + */ + void DeActivateComponentL(); + + /** + * Returns component's state. + * + * @return Component's current state. + */ + TState State() const; + + /** + * Returns component. + * + * @return Constant reference to component. + */ + const MVtUiComponent& Component() const; + + /** + * Returns const reference to the block list. + * + * @return Constant reference to component's block list. + */ + const TVtUiBlockList& BlockList() const; + + /** + * Returns reference to the block list. + * + * @return Reference to component's block list. + */ + TVtUiBlockList& BlockList(); + +protected: // protected methods + + /** + * Constructor + * + * @param aComponent Component for this state instance. + * @param aBlockList Block list for this state intance. + */ + TVtUiComponentState( MVtUiComponent& aComponent, + const TVtUiBlockList& aBlockList ); + +protected: + + // Reference to component + MVtUiComponent& iComponent; + + // Blocklist + TVtUiBlockListBitField iBlockList; + + // Component's state + TState iState; + + }; + +#endif // T_VTUICOMPONENTSTATE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/cvtuiappshutter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/cvtuiappshutter.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 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: Class responsible for application exit. +* +*/ + + +#ifndef C_VTUIAPPSHUTTER_H +#define C_VTUIAPPSHUTTER_H + +#include + +#include +#include +#include + +class CAsyncCallBack; +class MVtUiShutterObserver; +class MVtUiStateContext; + +/** +* Shutdown service for the application. This is singleton +* which deletes itself when shutdown is complete. +* +* @since S60 v3.2 +*/ +class CVtUiAppShutter : public CBase + { +public: + + /** + * Returns the instance of application shutter. + * + * @param aComms for sending call ending related commands to Phone. + * @param aObserver observer informed when shutdown is completed. + * @return the application shutter + */ + static CVtUiAppShutter* InstanceL( + MVtUiShutterObserver& aObserver ); + + /** + * Starts shutdown. + */ + void StartShutdown(); + + /** + * Starts shutdown because emergency call was requested by the user. + * If supplied number is detected other than emergency number this method + * leaves KErrArgument. + * @param aStateContext for accessing emergency number and local + * variation. + */ + void ShutdownWithEmergencyCallL( MVtUiStateContext& aStateContext ); + + /** + * Callback from emergency caller. + */ + void EmergencyCallDoneL(); + +private: + + /** + * Exits the application if no pending shutdown preparation + * is ongoing. Deletes itself as last action. + */ + void ShutdownIfReadyAndDestroy(); + + + /** + * Enques async callback. + */ + void EnqueCallbackL( TCallBack& aCallback ); + + /** + * Asynch callback handling response to emergency call creation. + */ + static TInt EmergencyResponseCallback( TAny* aAny ); + + /** C++ constructor */ + CVtUiAppShutter( MVtUiShutterObserver& aObserver ); + + /** destructor */ + ~CVtUiAppShutter(); + +private: // for making shutdown with emergency call + class CEmergencyCaller : public CBase, private MPhCltEmergencyCallObserver + { + public: + /** + * Dials emergency call. Object destroys itself when + * response is received. + */ + static CEmergencyCaller* DialEmergencyL( + CVtUiAppShutter& aObserver, + MVtUiStateContext& aStateContext ); + + // Destructor + ~CEmergencyCaller(); + + private: // C++ constructor + + CEmergencyCaller( + CVtUiAppShutter& aObserver, + MVtUiStateContext& aStateContext ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: // from MPhCltEmergencyCallObserver + /** + * @see MPhCltEmergencyCallObserver::HandleEmergencyDialL + */ + virtual void HandleEmergencyDialL( const TInt aStatus ); + + private: // Data + + // Emergency number + TPhCltTelephoneNumber iNumber; + + // Phone Server session + RPhCltServer iServer; + + // Emergency call handler + CPhCltEmergencyCall* iEmergency; + + // Observer for callback + CVtUiAppShutter& iObserver; + + // State context for gettin entered numbers and local variation + MVtUiStateContext& iStateContext; + }; +private: // Data + + /** + * Guard flags for completing shutdown. + * All must be cleared before shutdown + * can be completed. + */ + enum TShutterFlags + { + /** Waiting for call on StartShutdown() */ + EShutterWaitingStart, + /** Waiting for callback on emegency call request */ + EShutterWaitingEmergencyCallback, + }; + + // Asynch callback + CAsyncCallBack* iCallback; + + // guard flags + TBitFlags8 iPendingStateFlags; + + // Observer to notify when application exit + // is allowed. + MVtUiShutterObserver& iObserver; + + // Handles emergency call dialling + CEmergencyCaller* iEmergencyCaller; + + }; + +#endif // C_VTUIAPPSHUTTER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/cvtuidtmfbuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/cvtuidtmfbuffer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,138 @@ +/* +* Copyright (c) 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: DTMF buffer definition. +* +*/ + + +#ifndef C_VTUIDTMFBUFFER_H +#define C_VTUIDTMFBUFFER_H + +#include +#include "mvtuinumbersource.h" + +class CCoeEnv; +class TKeyEvent; + +// Maximum size of the DTMF buffer +const TInt KVtUiDTMFBufferSize = 64; + +/** +* TVtUiBaseComponentState +* +* Base componentstate definition. +* +* @since S60 v5.0 +*/ +class CVtUiDTMFBuffer : public CActive, public MVtUiNumberSource + { + +public: + + /** + * Static construction method. + * @param aCoeEnv Reference to CoeEnv object. + * @return Pointer to newly created instance of CVtUiDTMFBuffer. + */ + static CVtUiDTMFBuffer* NewL( const CCoeEnv& aCoeEnv ); + + /** + * C++ destructor. + */ + ~CVtUiDTMFBuffer(); + + /** + * Append one character to DTMF buffer. + * @param aChar Character to append. + * @return ETrue if the given character was appended (i.e. it is a DTMF) + */ + TBool Append( TChar aChar ); + + /** + * Clears the contents of the DTMF buffer. + */ + void Reset(); + + /** + * Promote this instance as current number source. + */ + void Activate(); + + /** + * Demote this instance from current number source position. + */ + void Deactivate(); + +public: // from MVtUiNumberSource + + /** + * @see MVtUiNumberSource::GetContents + */ + void GetContents( TDes& aContents ) const; + +private: // from CActive + + /** + * @see CActive::DoCancel + */ + void DoCancel(); + + /** + * @see CActive::RunL + */ + void RunL(); + +private: + + /** + * C++ constructor + */ + CVtUiDTMFBuffer( const CCoeEnv& aCoeEnv ); + + /** + * 2nd constructor, may leave. + */ + void ConstructL(); + + /** + * Starts buffer modification monitoring timer. If this timer expires, + * buffer will be reset. Timer is restarted when new character is added to + * the buffer. + */ + void StartTimer(); + + /** + * Called when buffer modification monitoring timer has expired. + */ + void TimerExpired( TInt aError ); + + /** + * Clears the contents of the DTMF buffer. + */ + void ResetBuffer(); + +private: + + // Reference to coeenv + const CCoeEnv& iCoeEnv; + + // Timer instance + RTimer iTimer; + + // DTMF buffer + TBuf< KVtUiDTMFBufferSize > iBuffer; + + }; + +#endif // C_VTUIDTMFBUFFER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/cvtuivideocontrolbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/cvtuivideocontrolbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,354 @@ +/* +* Copyright (c) 2006 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: Base class for video control. +* +*/ + + +#ifndef C_VTUIVIDEOCONTROLBASE_H +#define C_VTUIVIDEOCONTROLBASE_H + +#include +#include +#include + +#include "MVtUiVideoWindow.h" +#include "CVtUiBitmapManager.h" + +// FORWARD DECLARATIONS +class CVtUiBitmapManager; +class TAknTextLineLayout; +class CAknsBasicBackgroundControlContext; +/** + * CVtUiVideoControlBase + * + * Video control base class. + * + * @since S60 v5.0 + */ +class CVtUiVideoControlBase : public CCoeControl, public MVtUiVideoWindow + { + +protected: // enumerations + + // Rendering hints + enum TRenderingHint + { + // If this hint is set, then control's background is filled with color + // at index 0. This hint is mutually exclusive with ESkinnedBackground. + // If neither EColoredBackground nor ESkinnedBackground is set, then + // no background drawing is done. + EColoredBackground, + + // If this is set, then control's background is skinned. This hint is + // mutually exclusive with EColoredBackground. If neither + // EColoredBackground nor ESkinnedBackground is set, then no background + // drawing is done. + ESkinnedBackground, + + // If this hint is set, then no blind icon is drawn. + ENoBlindIcon, + + // If this hint is set, then no waiting text is shown. + ENoWaitingText + }; + +public: + + /** + * Destructor + */ + ~CVtUiVideoControlBase(); + +protected: + + /** + * Constructor + */ + CVtUiVideoControlBase( CVtUiBitmapManager& aBitmapManager ); + + /** + * 2nd constructor + */ + void BaseConstructL(); + + /** + * Sets (enables) rendering hints + */ + void SetRenderingHint( TRenderingHint aHint ); + + /** + * Clears (disables) rendering hints + */ + void ClearRenderingHint( TRenderingHint aHint ); + + /** + * Returns reference to bitmap manager. + */ + CVtUiBitmapManager& BitmapManager() const; + + /** + * Returns pointer to bitmap with given ID. + */ + CFbsBitmap* Bitmap( TVtUiBitmapPoolId aId ) const; + + /** + * Fixes given point suitable for DP (e.g. x coordinates of the point is + * even). + */ + TPoint AdjustPointForDP( const TPoint aPoint ) const; + + /** + * Fixes given rect suitable for DP (e.g. x coordinates and width of the + * rectangle are even). + */ + TRect AdjustRectForDP( const TRect aRect ) const; + +protected: // virtual methods + + /** + * Gets waiting text layout. + */ + virtual TAknTextLineLayout WaitingTextLayout( TInt aLine ); + + /** + * The size changed method. If you need to do special handling after the + * control's size has changed, overwrite this method. + */ + virtual void HandleSizeChanged(); + + /** + * Draws control background using current skin. If you need special + * background rendering in inherited control, override this method. + * There is no need to check ESkinnedBackground hint again in this method + * because it has been checked prior to calling. + */ + virtual void DrawSkinnedBackground( CWindowGc& aGc ) const; + + /** + * Draws control background using color. If you need special + * background rendering in inherited control, override this method. + * There is no need to check EColoredBackground hint again in this method + * because it has been checked prior to calling. + */ + virtual void DrawColoredBackground( CWindowGc& aGc ) const; + + /** + * Draws waiting text. If you need special waiting text rendering in + * inherited control, override this method. + * There is no need to check ENoWaitingText hint again in this method + * because it has been checked prior to calling. + */ + virtual TBool DrawWaitingText( CWindowGc& aGc ) const; + + /** + * Draws blind icon. If you need special blind icon rendering in inherited + * control, override this method. + * There is no need to check ENoBlindIcon hint again in this method + * because it has been checked prior to calling. + */ + virtual void DrawBlind( CWindowGc& aGc ) const; + + /** + * Draws stream. If you need special stream rendering in inherited control, + * override this method. iStreamBitmap cannot be NULL if this method is + * called. + */ + virtual void DrawStream( CWindowGc& aGc ) const; + + /** + * Returns blitting position (top-left corner) coordinates for the stream. + */ + virtual TPoint StreamBlitPosition() const; + + /** + * Returns clipping rectangle for the stream. + */ + virtual TRect StreamClippingRect() const; + + /** + * Returns pointer to blind bitmap or NULL if no bitmap is present. + */ + virtual CFbsBitmap* BlindImage() const; + + /** + * Returns pointer to blind mask or NULL if no mask is present. + */ + virtual CFbsBitmap* BlindMask() const; + + /** + * Returns blit position for blind icon. + */ + virtual TPoint BlindBlitPosition() const; + +public: // from MVtUiVideoWindow + + /** + * @see MVtUiVideoWindow::Reset + */ + void Reset(); + + /** + * @see MVtUiVideoWindow::SetBlind + */ + void SetBlind( TBool aStatus ); + + /** + * @see MVtUiVideoWindow::SetStreamBitmap + */ + void SetStreamBitmap( CFbsBitmap* aStreamBitmap ); + + /** + * @see MVtUiVideoWindow::SetStreamBitmapReserve + */ + void SetStreamBitmapReserve( CFbsBitmap* aStreamBitmap ); + + /** + * @see MVtUiVideoWindow::SetWaiting + */ + void SetWaiting( TBool aShowWaitingText ); + + /** + * @see MVtUiVideoWindow::Redraw + */ + void Redraw(); + + /** + * @see CCoeControl::MopSupplyObject + */ + TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); + + /** + * Set remote video control + */ + virtual void SetRemoteVideoControl( CCoeControl* aRemoteControl ); + + /** + * Layout the postion and the size of the remote video control + */ + virtual void LayoutRemoteVideo(); + + /** + * Returns pointer to remote video control or NULL if no remote video control is present. + */ + CCoeControl * RemoteVideoControl(); + +private: // from CCoeControl + + /** + * @see CCoeControl::Draw + */ + void Draw( const TRect& aRect ) const; + + /** + * @see CCoeControl::SizeChanged + */ + void SizeChanged(); + + /** + * @see CCoeControl::PositionChanged + */ + void PositionChanged(); + +private: + + /** + * Redraws stream bitmap. + */ + void RedrawStream(); + + /** + * Wraps waiting text if needed. + */ + void WrapOnDemand(); + + /** + * Wraps waiting text. + */ + void WrapWaitingTextL(); + + /** + * The draw method. + */ + void DoDraw( CWindowGc& aGc ) const; + + /** + * Draws control background. + */ + void DoDrawBackground( CWindowGc& aGc ) const; + + /** + * Draws waiting text. + */ + TBool DoDrawWaitingText( CWindowGc& aGc ) const; + + /** + * Draws blind icon. + */ + void DoDrawBlind( CWindowGc& aGc ) const; + + /** + * Draws stream. + */ + void DoDrawStream( CWindowGc& aGc ) const; + + TBool IsAlphaZero() const; + + void SetAlpha( CWindowGc& aGc ) const; + +protected: + + // ETrue if blind icon is shown. + TBool iBlindStatus; + + // Reference to stream bitmap. + CFbsBitmap* iStreamBitmap; + + // ETrue if waiting text should be shown. + TBool iWaitingTextShow; + + // Owned wrapped waiting text. + HBufC* iWaitingTextWrapped; + + // Owned wrapped waiting text. + CArrayFix< TPtrC >* iWaitingTextWrappedArray; + + // First line layout of waiting text. + TAknLayoutText iWaitingTextLine1Layout; + + // Second line layout of waiting text. + TAknLayoutText iWaitingTextLine2Layout; + + // Owned: background context. + CAknsBasicBackgroundControlContext* iBgContext; + + // Reference to remote video control. + CCoeControl* iRemoteVideoControl; + +private: + + // Pointer to bitmap manager. + CVtUiBitmapManager* iBitmapManager; + + // Rendering hints + TBitFlags32 iHints; + + // FrameUpdate() is called from AO. + CAsyncCallBack* iAsyncFrameUpdated; + + mutable TBool iSetAlpha; + + }; + +#endif // C_VTUIVIDEOCONTROLBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/cvtuifeaturebase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/cvtuifeaturebase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,99 @@ +/* +* Copyright (c) 2006 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: CVtUiFeatureBase implementation. +* +*/ + + +#ifndef C_VTUIFEATUREBASE_H +#define C_VTUIFEATUREBASE_H + +// INCLUDES +#include +#include "mvtuifeature.h" + +// CLASS DECLARATION +class CVtUiAppUi; +class CVtUiFeatureManager; + +/** +* Base class for Video Telephone application features. +* +* @since S60 3.2 +*/ +class CVtUiFeatureBase : public CBase, public MVtUiFeature + { + public: // public methods + /** + * C++ destructor. + */ + ~CVtUiFeatureBase(); + + public: // from MVtUiFeature + + /** @see MVtUiFeature */ + virtual void StartL(); + + /** @see MVtUiFeature */ + virtual void Stop() = 0; + + /** @see MVtUiFeature */ + virtual void InitFeatureL() = 0; + + /** @see MVtUiFeature */ + TVtUiFeatureState State() const; + + /** @see MVtUiFeature */ + TVtUiFeatureId Id() const; + + protected: + /** + * C++ constructor + * + */ + CVtUiFeatureBase( TVtUiFeatureId aId, + CVtUiFeatureManager& aFeatureManager ); + + /** + * BaseConstructL + * For child class to use. + * Calls constructL. + */ + void BaseConstructL(); + + /** + * Callback function that inits the features. + * @param aAny pointer to an instance of the class. + * @return always KErrNone. + */ + static TInt DoInitFeaturesL( TAny* aAny ); + + + protected: // data + + // Feature's unique Id + const TVtUiFeatureId iId; + + // Reference to featuremanager + CVtUiFeatureManager& iFeatureManager; + + // Features current state + MVtUiFeature::TVtUiFeatureState iFeatureState; + + // Owned asynch callback. + CAsyncCallBack* iAsyncCallback; + + }; + +#endif // C_VTUIFEATUREBASE_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/cvtuifeaturemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/cvtuifeaturemanager.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2004-2006 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: Feature manager for Video Telephone application. +* +*/ + + +#ifndef C_VTUIFEATUREMANAGER_H +#define C_VTUIFEATUREMANAGER_H + +// INCLUDES +#include +#include + +// CLASS DECLARATION +class MVtUiFeature; +class CVtUiAppUi; +class CVtUiFeatureBase; +class TVtUiStates; +class MVtUiCommandManager; +class MVtUiComponentManager; +class CVtEngModel; +/** +* Feature manager for Video Telephone application. +* +* @since S60 v3.2 +*/ +class CVtUiFeatureManager : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CVtUiFeatureManager* NewL( CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates, MVtUiCommandManager& aCommandManager, + MVtUiComponentManager& aComponentManager ); + + /** + * Destructor. + */ + ~CVtUiFeatureManager(); + + public: // New functions + + /** + * Return reference to CVtUiAppUi class. + */ + CVtUiAppUi& AppUi(); + + /** + * GetFeatureById + */ + MVtUiFeature* GetFeatureById( TInt aId ); + + /** + * TVtUiStates + */ + TVtUiStates& UiStates(); + + /** + * Command Manager + */ + MVtUiCommandManager& CommandManager(); + + /** + * Component Manager + */ + MVtUiComponentManager& ComponentManager(); + + /** + * Return reference to CVtEngModel class. + */ + CVtEngModel& Model(); + + private: + + /** + * Second phase constructor + */ + void ConstructL(); + + /** + * c++ constructor + */ + CVtUiFeatureManager( CVtUiAppUi& aAppUi, TVtUiStates& aUiStates, + MVtUiCommandManager& aCommandManager, + MVtUiComponentManager& aComponentManager ); + + /** + * Creates all features + */ + void CreateFeaturesL(); + + private: // data + + // Feature list + RPointerArray< CVtUiFeatureBase > iFeatures; + + // Ref to application ui. + CVtUiAppUi& iAppUi; + + // Reference to UI states instance + TVtUiStates& iUiStates; + + // Reference to command manager API + MVtUiCommandManager& iCommandManager; + + // Reference to component manager API + MVtUiComponentManager& iComponentManager; + + // Engine model. + CVtEngModel* iModel; + + }; + +#endif // C_VTUIFEATUREMANAGER_H +// End of File \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuicmdclosedialer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuicmdclosedialer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 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: Dialer close command. +* +*/ + + +#ifndef C_VTUICMDCLOSEDIALER_H +#define C_VTUICMDCLOSEDIALER_H + +#include "cvtuifeaturecmdbase.h" + +class MVtUiCommandManager; + +/** + * CVtUiCmdCloseDialer + * + * @since S60 v5.0 + */ +class CVtUiCmdCloseDialer : public CVtUiFeatureCmdBase + { + +public: + + /** + * Static constructor + * + * @param aCommandManager Reference to command manager. + * @param aFeature Reference to minidialer feature. + * @return Newly created instance to CVtUiCmdCloseDialer. + */ + static CVtUiCmdCloseDialer* NewL( MVtUiCommandManager& aCommandManager, + MVtUiFeature& aFeature ); + + /** + * Destructor + */ + ~CVtUiCmdCloseDialer(); + +private: // from CVtUiFeatureCmdBase + + /** + * @see CVtUiFeatureCmdBase::HandleL + */ + void HandleL(); + + /** + * @see CVtUiFeatureCmdBase::IsEnabled + */ + TBool CVtUiCmdCloseDialer::IsEnabled() const; + +private: + + /** + * Constructor + */ + CVtUiCmdCloseDialer( MVtUiCommandManager& aCommandManager, + MVtUiFeature& aFeature ); + + /** + * 2nd constructor + */ + void ConstructL(); + +private: + + // Reference to command manager API. + MVtUiCommandManager& iCommandManager; + + }; + +#endif // C_VTUICMDCLOSEDIALER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuicmdopendialer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuicmdopendialer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 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: Dialer open command. +* +*/ + + +#ifndef C_VTUICMDOPENDIALER_H +#define C_VTUICMDOPENDIALER_H + +#include "cvtuifeaturecmdbase.h" + +class MVtUiCommandManager; + +/** + * CVtUiCmdOpenDialer + * + * @since S60 v5.0 + */ +class CVtUiCmdOpenDialer : public CVtUiFeatureCmdBase + { + +public: + + /** + * Static constructor + * + * @param aCommandManager Reference to command manager. + * @param aFeature Reference to minidialer feature. + * @return Newly created instance to CVtUiCmdOpenDialer. + */ + static CVtUiCmdOpenDialer* NewL( MVtUiCommandManager& aCommandManager, + MVtUiFeature& aFeature ); + + /** + * Destructor + */ + ~CVtUiCmdOpenDialer(); + +private: + + /** + * Constructor + */ + CVtUiCmdOpenDialer( MVtUiCommandManager& aCommandManager, + MVtUiFeature& aFeature ); + + /** + * 2nd constructor + */ + void ConstructL(); + +private: + + // Reference to command manager API. + MVtUiCommandManager& iCommandManager; + + }; + +#endif // C_VTUICMDOPENDIALER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuidialer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuidialer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 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: Dialer UI feature. +* +*/ + + +#ifndef C_VTUIDIALER_H +#define C_VTUIDIALER_H + +#include "cvtuifeaturebase.h" +#include "mvtuidialer.h" + +class CVtUiFeatureCmdBase; +class CVtUiDialerContainer; + +/** + * CVtUiDialer + * + * Mini dialer UI feature definition. + * + * @since S60 v5.0 + */ +class CVtUiDialer : public CVtUiFeatureBase, public MVtUiDialer + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to featuremanager. + * @return Newly created instance to CVtUiDialer. + */ + static CVtUiDialer* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiDialer(); + +public: // from CVtUiFeatureBase + + /** + * @see CVtUiFeatureBase::StartL + */ + void StartL(); + + /** + * @see CVtUiFeatureBase::Stop + */ + void Stop(); + + /** + * @see CVtUiFeatureBase::InitFeatureL + */ + void InitFeatureL(); + +private: // from MVtUiDialer + + /** + * @see MVtUiDialer::VideoWindow + */ + MVtUiVideoWindow& VideoWindow() const; + + /** + * @see MVtUiDialer::VideoControl + */ + CCoeControl& VideoControl() const; + +private: + + /** + * Constructor + */ + CVtUiDialer( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Preapres feature before start. + */ + void PrepareL(); + + /** + * Unprepares feature after stop. + */ + void Unprepare(); + +private: + + // Open command + CVtUiFeatureCmdBase* iCmdOpen; + + // Open command + CVtUiFeatureCmdBase* iCmdClose; + + // Dialer container + CVtUiDialerContainer* iDialerContainer; + + }; + +#endif // C_VTUIDIALER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuidialercontainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuidialercontainer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,263 @@ +/* +* Copyright (c) 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: Dialer container class. +* +*/ + + +#ifndef C_VTUIDIALERCONTAINER_H +#define C_VTUIDIALERCONTAINER_H + +#include +#include "CVtUiAppUi.h" +#include "mvtuicomponent.h" +#include "mvtuiresourcechangeobserver.h" +#include "mvtuikeyeventobserver.h" +#include "mvtuinumbersource.h" +#include "tvtuicomponentstate.h" + +// FORWARD DECLARATIONS +class MVtUiVideoWindow; +class MVtUiComponentManager; +class CVtUiBitmapManager; +class CVtUiDialerVideoControl; +class CVideoDTMFDialer; +class TVtUiStates; +class CVtUiDialerSKModifier; +class CVtUiFeatureManager; +class CVtUiDTMFBuffer; +class CAknsBasicBackgroundControlContext; + +// CONSTANTS +const TInt KVtUiDigitBufferSize = 128; + +/** + * TVtUiMiniDialerComponentState + * + * Mini dialer component state definition. + * + * @since S60 v5.0 + */ +class TVtUiDialerComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor + */ + TVtUiDialerComponentState( MVtUiComponent& aComponent ); + + }; + +/** + * CVtUiDialerContainer + * + * Mini dialer UI feature definition. + * + * @since S60 v5.0 + */ +class CVtUiDialerContainer : public CCoeControl, + public MVtUiResourceChangeObserver, public MVtUiComponent, + public MVtUiNumberSource, public MVtUiKeyEventObserver + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + * @param aComponentManager Reference to component manager. + * @param aBitmapManager Reference to bitmap manager. + * @return Newly created instance of CVtUiDialerContainer. + */ + static CVtUiDialerContainer* + NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiDialerContainer(); + + /** + * Registers component to component manager's event handling mechanism. + * @exception May leave with error KErrAlreadyExists, if the component + * has already been registered. + */ + void RegisterComponentL(); + + /** + * Unregisters component from component manager's event handling mechanism. + */ + void UnregisterComponent(); + + /** + * Returns video window. + * @return Pointer to video window. + */ + MVtUiVideoWindow* ComponentAsVideoWindow(); + + /** + * @see CCoeControl::MopSupplyObject + */ + TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); + +private: // from MVtUiResourceChangeObserver + + /** + * @see MVtUiResourceChangeObserver::HandleResourceChangeL + */ + void HandleResourceChangeL( TInt aType ); + + +private: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + void DoDeactivateL(); + +private: // from MVtUiNumberSource + + /** + * @see MVtUiNumberSource::GetContents + */ + void GetContents( TDes& aContents ) const; + +private: // from MVtUiKeyEventObserver + + /** + * @see MVtUiNumberSource::OfferKeyEventL + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ); + +private: // from CCoeControl + + /** + * @see CCoeControl::Draw + */ + void Draw( const TRect& aRect ) const; + + /** + * @see CCoeControl::SizeChanged + */ + void SizeChanged(); + + /** + * @see CCoeControl::PositionChanged + */ + void PositionChanged(); + + /** + * @see CCoeControl::CountComponentControls + */ + TInt CountComponentControls() const; + + /** + * @see CCoeControl::ComponentControl + */ + CCoeControl* ComponentControl( TInt aIndex ) const; + +private: + + /** + * Constructor + */ + CVtUiDialerContainer( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL( CVtUiBitmapManager& aBitmapManager ); + + /** + * Layouts this control. + */ + void LayoutDialerContainer(); + + /** + * Returns dialer's rect (wrapper to VtUiLayout). + */ + TRect DialerRect() const; + + /** + * Resets digit buffer. + */ + void Reset(); + + /** + * Appends new digit to digit buffer. If buffer is full, oldest digit is + * deleted. + */ + void AppendDigit( TChar aDigit ); + + /** + * Static callback method for deactivating dialer asynchronously. + */ + static TInt ASyncDoDeactivate( TAny* aSelf ); + +private: + + // Component state + TVtUiDialerComponentState iComponentState; + + // Feature manager instance + CVtUiFeatureManager* iFeatureManager; + + // Component manager + MVtUiComponentManager* iComponentManager; + + // UI states + TVtUiStates& iUiStates; + + // Video control instance + CVtUiDialerVideoControl* iVideoControl; + + // Dialer instance + CVideoDTMFDialer* iDialer; + + // Buffer for digits + CVtUiDTMFBuffer* iInputBuffer; + + // Rendering mode + CVtUiAppUi::TRenderingMode iMode; + + // Softkey modifier for dialer feature + CVtUiDialerSKModifier* iSKModifier; + + // Asynccallback instance for handling asynchronous deactivation. + CAsyncCallBack* iAsyncDeactivate; + + // Owned: background context. + CAknsBasicBackgroundControlContext* iBgContext; + + }; + +#endif // C_VTUIDIALERCONTAINER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuidialerskmodifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuidialerskmodifier.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 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: Dialer feature softkey modifier class. +* +*/ + + +#ifndef C_VTUIDIALERSKMODIFIER_H +#define C_VTUIDIALERSKMODIFIER_H + +// INCLUDES +#include +#include "cvtuicommandmodifybase.h" + +// FORWARD DECLARATIONS +class CVtUiFeatureManager; + +/** + * CVtUiDialerSKModifier + * + * Modifies softkeys for dialer control. + * + * @since S60 v5.0 + */ +class CVtUiDialerSKModifier : public CVtUiCommandModifyBase + { + +public: // static methods + /** + * Static constructor. + * + */ + static CVtUiDialerSKModifier* NewL( CVtUiFeatureManager& aFeatureMgr ); + + /** + * Destructor + */ + ~CVtUiDialerSKModifier(); + +public: // from base class + + /** + * @See CVtUiCommandModifyBase::ModifyCommandsL + */ + virtual void ModifyCommandsL( MVtUiCommandSetting& aCommandSettings ); + + /** + * @See CVtUiCommandModifyBase::Supports + */ + virtual TBool Supports( MVtUiCommandSetting::Type aType ) const; + +private: + /** + * C++ constructor + * + */ + CVtUiDialerSKModifier( CVtUiFeatureManager& aFeatureMgr ); + +private: // data + + // refrence to appui + CVtUiFeatureManager& iFeatureMgr; + + }; + +#endif // C_VTUIDIALERSKMODIFIER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/cvtuidialervideocontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/cvtuidialervideocontrol.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 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: Video control. +* +*/ + + +#ifndef C_VTUIDIALERVIDEOCONTROL_H +#define C_VTUIDIALERVIDEOCONTROL_H + +#include "cvtuivideocontrolbase.h" + +/** + * CVtUiDialerVideoControl + * + * Mini dialer UI feature definition. + * + * @since S60 v5.0 + */ +class CVtUiDialerVideoControl : public CVtUiVideoControlBase + { + +public: + + /** + * Static constructor + * @param aBitmapManager Reference to bitmap manager. + * @return Newly created instance of CVtUiDialerVideoControl. + */ + static CVtUiDialerVideoControl* NewL( CVtUiBitmapManager& aBitmapManager ); + + /** + * Destructor + */ + ~CVtUiDialerVideoControl(); +public: + /** + * LayoutRemoteVideo + */ + void LayoutRemoteVideo(); + +private: + + /** + * Constructor + */ + CVtUiDialerVideoControl( CVtUiBitmapManager& aBitmapManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + +private: // from CVtUiVideoControlBase + + /** + * @see CVtUiVideoControlBase::WaitingTextLayout + */ + TAknTextLineLayout WaitingTextLayout( TInt aLine ); + + }; + +#endif // C_VTUIDIALERVIDEOCONTROL_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/dialer/mvtuidialer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/dialer/mvtuidialer.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 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: Dialer API for VT application. +* +*/ + + +#ifndef M_VTUIDIALER_H +#define M_VTUIDIALER_H + +class MVtUiVideoWindow; +class CCoeControl; + +/** + * MVtUiDialer + * + * Mini dialer UI feature API for AppUi. + * + * @since S60 v5.0 + */ +class MVtUiDialer + { + +public: + + /** + * Get reference to video window control + * @return Reference to video window. + */ + virtual MVtUiVideoWindow& VideoWindow() const = 0; + + /** + * Get reference to video window control + * @return Reference to video control. + */ + virtual CCoeControl& VideoControl() const = 0; + + }; + +#endif // diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/menu/cvtuimenucontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/menu/cvtuimenucontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2006 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: Menu context class definition. +* +*/ + + +#ifndef C_VTUIMENUCONTEXT_H +#define C_VTUIMENUCONTEXT_H + +#include + +#include "cvtuicmdcontext.h" + +/** + * CVtUiMenuContext + * + * Menu command context class definition. + * + * @since S60 v3.2 + */ +class CVtUiMenuContext : public CVtUiCmdContext + { + +public: // public methods + + /** + * C++ destructor. + * + */ + ~CVtUiMenuContext(); + + /** + * Leave safe destructor. + * + */ + static CVtUiMenuContext* NewL( MVtUiCommandManager& aCommandManager ); + +public: // from CVtUiCmdContext + + /** + * @see CVtUiCmdContext::ValidateL + */ + void ValidateL( CVtUiCmdValidationActionBase& aAction ); + +private: + + /** + * C++ constructor + * + * @param aPriority Validator priority. + */ + CVtUiMenuContext( MVtUiCommandManager& aCommandManager ); + + /** + * 2nd consttuctor, may leave. + */ + void ConstructL(); + +private: // data + + }; + +#endif // C_VTUIMENUCONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/menu/cvtuimenuitemdimmeraction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/menu/cvtuimenuitemdimmeraction.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2006 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: Menu dimmer action class definition. +* +*/ + + +#ifndef C_VTUIMENUITEMDIMMERACTION_H +#define C_VTUIMENUITEMDIMMERACTION_H + +#include + +#include "cvtuicmdvalidationactionbase.h" + +class CEikMenuPane; + +/** + * CVtUiCmdValidationActionBase + * + * Menu item dimmer action definition. + * + * @since S60 v3.2 + */ +class CVtUiMenuItemDimmerAction : public CVtUiCmdValidationActionBase + { + +public: + + /** + * Leave-safe constructor. + * + */ + static CVtUiMenuItemDimmerAction* NewL(); + + /** + * Sets menu pane instance. + * + */ + void SetMenuPane( CEikMenuPane* aMenuPane ); + +public: // from CVtUiCmdValidationActionBase + + /** + * @see CVtUiCmdValidationActionBase::ProcessL + */ + void ProcessL( const MVtUiCmdValidatorCallBack& aCallBack ); + + /** + * @see CVtUiCmdValidationActionBase::EndProcess + */ + void EndProcess(); + +private: + + /** + * C++ constructor. + * + */ + CVtUiMenuItemDimmerAction(); + + /** + * Sets given menu command dimmed in menu. + * + */ + void SetItemDimmed( TInt aCommandId ); + +private: // data + + // Menu pane instance this action is currently working on + CEikMenuPane* iMenuPane; + + }; + +#endif // C_VTUIMENUITEMDIMMERACTION_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/menu/cvtuimenus.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/menu/cvtuimenus.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2006 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: Menu UI feature. +* +*/ + + +#ifndef C_VTUIMENUS_H +#define C_VTUIMENUS_H + +#include "cvtuifeaturebase.h" +#include "mvtuicommandui.h" + +class CVtUiMenuContext; +class CVtUiMenuItemDimmerAction; +class CEikMenuPane; +class CVtUiCommandModifyBase; + +/** + * CVtUiMenus + * + * Menu feature definition. + * + * @since S60 v3.2 + */ +class CVtUiMenus : public CVtUiFeatureBase, public MVtUiCommandUi + { + +public: + + /** + * Static constructor + */ + static CVtUiMenus* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiMenus(); + +public: + + /** + * Sets menu context. + */ + void SetMenuPane( CEikMenuPane* aMenuPane ); + +public: // from CVtUiFeatureBase + + /** + * @see CVtUiFeatureBase::StartL + */ + void StartL(); + + /** + * @see CVtUiFeatureBase::Stop + */ + void Stop(); + + /** + * @see CVtUiFeatureBase::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiCommandUi + + /** + * @see MVtUiCommandUi::RefreshL + */ + void RefreshL(); + + /** + * @see MVtUiCommandUi::AddCommandModifier + */ + TInt AddCommandModifier( CVtUiCommandModifyBase& ); + + /** + * @see MVtUiCommandUi::RemoveCommandModifier + */ + void RemoveCommandModifier( CVtUiCommandModifyBase& ); + +private: + + /** + * Constructor + */ + CVtUiMenus( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + +private: + + // Menu context instance + CVtUiMenuContext* iMenuCommandContext; + + // Menu dimmer action instance + CVtUiMenuItemDimmerAction* iMenuDimmerAction; + + }; + +#endif // C_VTUIMENUS_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/menu/tvtuimenucommanditerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/menu/tvtuimenucommanditerator.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2006 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: Menu command iterator class definition. +* +*/ + + +#ifndef T_VTUIMENUCOMMANDITERATOR_H +#define T_VTUIMENUCOMMANDITERATOR_H + +#include "mvtuicommanditerator.h" + +/** + * TVtUiMenuCommandIterator + * + * Menu command iterator class definition. + * + * @since S60 v3.2 + */ +class TVtUiMenuCommandIterator : public MVtUiCommandIterator + { + +public: // public methods + + /** + * C++ constructor + * + */ + TVtUiMenuCommandIterator( CEikMenuPane& aMenuPane ); + +public: // from MVtUiCommandIterator + + /** + * @see MVtUiCommandIterator::HasNext + */ + TBool HasNext() const; + + /** + * @see MVtUiCommandIterator::Next + */ + TInt Next(); + +private: + + // Pointer to menu pane to be iterated + CEikMenuPane* iMenuPane; + + // Current iteration point + TInt iCurrent; + + }; + +#endif // T_VTUIMENUCOMMANDITERATOR_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/mvtuifeature.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/mvtuifeature.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2004-2006 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: Observer interface for handling features +* +*/ + + +#ifndef MVTUIFEATURE_H +#define MVTUIFEATURE_H + +// INCLUDES +#include + +#include "tvtuifeatureids.h" + +// CLASS DECLARATION + +/** +* Interface for handling features +* +* @since S60 v3.2 +*/ +class MVtUiFeature + { + public: // New functions + /** + * ENotSupported + * feature is not supported in current configuration. + * EUnprepared + * starting may require some init code to run. + * EPreparing + * running initialization code. + * EReady + * feature can be started. + * EActive + * feature is running. + * EDisabled + * feature is supported but cannot be started at this time. + * EFailed + * started but failed (maybe temporary or permanent, feature specific) + */ + enum TVtUiFeatureState + { + ENotSupported, + EUnprepared, + EPreparing, + EReady, + EActive, + EDisabled, + EFailed + }; + + /** + * Starts the feature. + */ + virtual void StartL() = 0; + + /** + * Stops the feature. + */ + virtual void Stop() = 0; + + /** + * Current state of the feature + */ + virtual TVtUiFeatureState State() const = 0; + + /** + * Id() + */ + virtual TVtUiFeatureId Id() const = 0; + }; + +#endif // MVTUIFEATURE_H +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/numberentry/CVtUiNumberEntryControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/numberentry/CVtUiNumberEntryControl.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,196 @@ +/* +* Copyright (c) 2006 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: Number entry control for Video Telephone application. +* +*/ + + + +#ifndef CVTUINUMBERENTRYCONTROL_H +#define CVTUINUMBERENTRYCONTROL_H + +// INCLUDES +#include +#include + +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" +#include "mvtuinumbersource.h" + +// FORWARD DECLARATIONS +class MVtUiFeature; +class MVtUiComponentManager; +class TVtUiStates; +class MVtUiNumberEntryControlObserver; +class CVtUiDTMFBuffer; + +// CLASS DECLARATION + +/** +* TVtUiNumberEntryComponentState +* +* Component state implementation for Number Entry control. Component state is +* used by the Component Manager. +* +* @since S60 3.2 +*/ +class TVtUiNumberEntryComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor. + */ + TVtUiNumberEntryComponentState( MVtUiComponent& aComponent ); + + }; + +/** +* Number entry control for Video Telephone application. +* +* @since Series 60 2.6 +*/ +class CVtUiNumberEntryControl + : public CCoeControl, public MVtUiComponent + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aAppUi application ui. + * @param aUiStates ui states + */ + CVtUiNumberEntryControl( MVtUiFeature& aFeature, + TVtUiStates& aUiStates ); + + /** + * Symbian constructor. + * @param aRect initial area. + */ + void ConstructL( const TRect& aRect ); + + /** + * C++ destructor. + */ + ~CVtUiNumberEntryControl(); + + public: // New functions + + /** + * Opens number entry. + * @return ETrue if number entry was opened, EFalse otherwise. + */ + TBool OpenNumberEntry(); + + /** + * Returns ETrue if number entry is open. + * @return ETrue if number entry is open. + */ + TBool IsNumberEntryOpen() const; + + /** + * Closes number entry. + */ + void CloseNumberEntry(); + + /** + * Register component to component manager. + */ + void RegisterComponentL( MVtUiComponentManager& aComponentManager ); + + /** + * Unregister component to component manager. + */ + void UnregisterComponent( MVtUiComponentManager& aComponentManager ); + + /** + * Adds number entry control observer. + */ + void SetNumberEntryControlObserver( + MVtUiNumberEntryControlObserver* aObserver ); + + public: // Functions from base classes + + /** + * @see CCoeControl::OfferKeyEventL. + */ + virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + private: + + /** + * Callback function to close number entry. + * @param aAny pointer to an instance of this class. + * @return KErrNone. + */ + static TInt DoCloseNumberEntry( TAny* aAny ); + + /** + * Called from DoCloseNumberEntry when number entry needs to be closed. + */ + void HandleTimeoutCloseNumberEntry(); + + /** + * Return ETrue if menu or dialog is being displayed. + */ + TBool IsDisplayingMenuOrDialog() const; + + private: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + void DoDeactivateL(); + + private: + + // Reference to feature that owns this control. + MVtUiFeature& iFeature; + + // Number entry area layout. + TAknLayoutRect iNumberEntryAreaLayout; + + // Component state + TVtUiNumberEntryComponentState iComponentState; + + // UI States + TVtUiStates& iUiStates; + + // Number entry control observer + MVtUiNumberEntryControlObserver* iControlObserver; + + // Buffer for digits + CVtUiDTMFBuffer* iInputBuffer; + }; + +#endif // CVTUINUMBERENTRYCONTROL_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/numberentry/cvtuinumberentry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/numberentry/cvtuinumberentry.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2006 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: Number entry UI feature definition. +* +*/ + + +#ifndef C_VTUINUMBERENTRY_H +#define C_VTUINUMBERENTRY_H + +#include "mvtuicommandui.h" +#include "cvtuifeaturebase.h" +#include "mvtuinumberentrycontrolobserver.h" +#include "cvtuifeaturemanager.h" + +class CVtUiNumberEntryControl; + +/** + * CVtUiNumberEntry + * + * NumberEntry UI feature. + * + * @since S60 v3.2 + */ + class CVtUiNumberEntry : public CVtUiFeatureBase, + public MVtUiNumberEntryControlObserver + { + +public: + + /** + * Static constructor + */ + static CVtUiNumberEntry* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiNumberEntry(); + +public: // from CVtUiFeatureBase + + /** + * @see CVtUiFeatureBase::StartL + */ + void StartL(); + + /** + * @see CVtUiFeatureBase::Stop + */ + void Stop(); + + /** + * @see CVtUiFeatureBase::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiNumberEntryControlObserver + + /** + * @see MVtUiNumberEntryControlObserver::ControlActivatedL + */ + void ControlActivatedL(); + + /** + * @see MVtUiNumberEntryControlObserver::ControlDeactivated + */ + void ControlDeactivated(); + +private: + + /** + * Constructor + */ + CVtUiNumberEntry( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Prepares feature + */ + void PrepareL(); + + /** + * Unprepares feature + */ + void Unprepare(); + + /** + * Creates number entry control instance + */ + void CreateNumberEntryControlL(); + + /** + * Deletes number entry control instance + */ + void DeleteNumberEntryControl(); + +private: + + // Owned number entry control instance. + CVtUiNumberEntryControl* iNumberEntryControl; + + }; + +#endif // C_VTUINUMBERENTRY_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/numberentry/mvtuinumberentrycontrolobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/numberentry/mvtuinumberentrycontrolobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: Key event observer API for components. +* +*/ + + +#ifndef M_VTUINUMBERENTRYCONTROLOBSERVER_H +#define M_VTUINUMBERENTRYCONTROLOBSERVER_H + +/** +* MVtUiNumberEntryControlObserver +* +* Observer API for number entry control. +* +* @since S60 v3.2 +*/ +class MVtUiNumberEntryControlObserver + { + +public: + + /** + * Called when number entry control is activated. + */ + virtual void ControlActivatedL() = 0; + + /** + * Called when number entry control is deactivated. + */ + virtual void ControlDeactivated() = 0; + + }; + +#endif // M_VTUINUMBERENTRYCONTROLOBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuibrightness.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuibrightness.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 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: Brightness ui feature +* +*/ + + +#ifndef C_VTUIBRIGHTNESS_H +#define C_VTUIBRIGHTNESS_H + +#include "cvtuiprefsliderbase.h" + +/** +* CVtUiBrightness +* +* Brightness ui feature +* +* @since S60 v3.2 +*/ +class CVtUiBrightness : public CVtUiPrefSliderBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiBrightness* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiBrightness(); + +public: // from CVtUiPrefSliderBase + + /** + * @see CVtUiPrefSliderBase::StartL + */ + void StartL(); + + /** + * @see CVtUiPrefSliderBase::Stop + */ + void Stop(); + +protected: + + /* + * Constructor + */ + CVtUiBrightness( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUIBRIGHTNESS_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuibrightnesspopup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuibrightnesspopup.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 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: Brightness popup +* +*/ + + +#ifndef C_VTUIBRIGHTNESSPOPUP_H +#define C_VTUIBRIGHTNESSPOPUP_H + +#include "tvtuicomponentstate.h" +#include "cvtuiprefpopupbase.h" + + +/** +* CVtUiBrightnessPopup +* +* Brightness popup definition. +* +* @since S60 v3.2 +*/ +class CVtUiBrightnessPopup : public CVtUiPrefPopupBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiBrightnessPopup* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiBrightnessPopup(); + +protected: // from CVtUiPrefPopupBase + + // @see CVtUiPrefPopupBase::CurrentValue + TInt CurrentValue() ; + +private: + + /** + * Constructor + */ + CVtUiBrightnessPopup( CVtUiFeatureManager& aFeatureManager ); + + /* + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUIBRIGHTNESSPOPUP_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuicolortone.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuicolortone.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 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: Color tone feature. +* +*/ + + +#ifndef C_VTUICOLORTONE_H +#define C_VTUICOLORTONE_H + +#include +#include "cvtuiprefsettinglistbase.h" +#include "cvtuifeaturebase.h" +#include "tvtuicomponentstate.h" +#include "mvtuicomponent.h" +#include "mvtuilayoutchangeobserver.h" + +/** +* TVtUiColorToneComponentState +* +* Video quality componentstate definition. +* +* @since S60 v3.2 +*/ +class TVtUiColorToneComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor + * @param aComponent Reference to component. + */ + TVtUiColorToneComponentState( MVtUiComponent& aComponent ); + + }; + +/** +* CVtUiColorTone +* +* Color tone UI feature definition. +* +* @since S60 v3.2 +*/ +class CVtUiColorTone : public CVtUiPrefSettingListBase, + public MVtUiComponent, public MVtUiLayoutChangeObserver + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiColorTone* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiColorTone(); + +public: // from MVtUiFeature + + /** + * @see MVtUiFeature::StartL + */ + void StartL(); + + /** + * @see MVtUiFeature::Stop + */ + void Stop(); + + /** + * @see MVtUiFeature::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + MVtUiComponent::TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + void DoDeactivateL(); + +public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::HandleLayoutChangeL + */ + void HandleLayoutChangeL(); + +protected: // from base class + + /** + * @see CVtUiPrefSettingListBase::CurrentSelection + */ + virtual TInt CurrentSelection(); + + /** + * @see CVtUiPrefSettingListBase::SetItemsL + */ + virtual void SetItemsL( CDesCArray& aArray ); + + /** + * @see CVtUiPrefSettingListBase::SettingPageResId + */ + virtual TInt SettingPageResId() const; + + /** + * @see CVtUiPrefSettingListBase::SettingPageItemChangedL + */ + virtual void SettingPageItemChangedL( TInt aIndex ); + +private: + + /** + * Constructor + */ + CVtUiColorTone( CVtUiFeatureManager& aFeatureManager ); + + // Maps color tone enum to array index + TInt MapCTEnumToArrayIndex( MVtEngCameraPreferences::TColorTone& + aColorTone ) const; + + // Maps arrya index to color tone enum + MVtEngCameraPreferences::TColorTone MapArrayIndexToCTEnum( + TInt aIndex) const; + + // Callback function that stops the feature. + static TInt DoStopL( TAny* aAny ); + + // Callback function that starts the feature. + static TInt DoStartL( TAny* aAny ); + +private: + + // Component state + TVtUiColorToneComponentState iComponentState; + + }; + +#endif // CVTUICOLORTONE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuicontrast.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuicontrast.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 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: Contrast ui feature +* +*/ + + +#ifndef C_VTUICONTRAST_H +#define C_VTUICONTRAST_H + +#include "cvtuiprefsliderbase.h" + + +/** +* CVtUiContrast +* +* Contrast ui feature +* +* @since S60 v3.2 +*/ +class CVtUiContrast : public CVtUiPrefSliderBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiContrast* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiContrast(); + +public: // from CVtUiPrefSliderBase + + /** + * @see CVtUiPrefSliderBase::StartL + */ + void StartL(); + + /** + * @see CVtUiPrefSliderBase::Stop + */ + void Stop(); + +protected: + + /* + * Constructor + */ + CVtUiContrast( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUICONTRAST_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuicontrastpopup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuicontrastpopup.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 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: Contrast popup +* +*/ + + +#ifndef C_VTUICONTRASTPOPUP_H +#define C_VTUICONTRASTPOPUP_H + +#include "tvtuicomponentstate.h" +#include "cvtuiprefpopupbase.h" + + +/** +* CVtUiContrastPopup +* +* Contrast popup definition. +* +* @since S60 v3.2 +*/ +class CVtUiContrastPopup : public CVtUiPrefPopupBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiContrastPopup* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiContrastPopup(); + +protected: // from CVtUiPrefPopupBase + + // @see CVtUiPrefPopupBase::CurrentValue + TInt CurrentValue(); + +private: + + /** + * Constructor + */ + CVtUiContrastPopup( CVtUiFeatureManager& aFeatureManager ); + + /* + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUICONTRASTPOPUP_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuiprefpopupbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuiprefpopupbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 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: Base class for video preference popups +* +*/ + + +#ifndef C_VTUIPREFPOPUPBASE_H +#define C_VTUIPREFPOPUPBASE_H + + +#include "cvtuipopupbase.h" + +class MVtEngCameraPreferences; +class CVtUiFeatureManager; +/* +* CVtUiPrefPopupBase +* +* Base class for video preference popups +* +* @since S60 v3.2 +*/ +class CVtUiPrefPopupBase : public CVtUiPopupBase + { + +public: + + /** + * Destructor + */ + ~CVtUiPrefPopupBase(); + + +public: // from CVtUiPopupBase + + /** + * @see CVtUiPopupBase::HandleControlEventL + */ + void HandleControlEventL( + CCoeControl* aControl,TCoeEvent aEventType ); + + /** + * @see CVtUiPopupBase::UpdatePopupL + */ + void UpdatePopupL(); + +private: // from base class + + /** + * @see CVtUiPopupBase::OfferKeyEventL + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ); + +protected: // new functions + + // Does the actual viewfinder adjusting + void AdjustVideoL( TInt aValue ); + + // from base class CVtUiPopupBase::DoActivateL() + void DoActivateL(); + + // Gets current adjustvalue + virtual TInt CurrentValue() = 0; + +protected: + + /** + * Constructor + */ + CVtUiPrefPopupBase( CVtUiFeatureManager& aFeatureManager, + TVtUiBlockListBitField aBitField, TComponentId aComponentId, + TInt aCmdId ); + + /** + * 2nd constructor + */ + void BaseConstructL(); + +protected: + + // Pointer to camera preferences + MVtEngCameraPreferences* iCameraPref; + + // Reference to feature manager + CVtUiFeatureManager& iFeatureManager; + + // Engine command id + TInt iEngineCommandId; + + // Current value + TInt iCurrent; + }; + +#endif // C_VTUIPREFPOPUPBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuiprefsettinglistbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuiprefsettinglistbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,204 @@ +/* +* Copyright (c) 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: Base class for video preference setting list. +* +*/ + + +#ifndef C_VTUIPEFSETTINGLISTBASE_H +#define C_VTUIPEFSETTINGLISTBASE_H + +#include +#include "mvtuicommandui.h" +#include "cvtuifeaturebase.h" +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" +#include "tvtuifeatureids.h" +#include "mvtuisettingpageobserver.h" + +class CVtUiAppUi; +class CVtUiTransparentSettingPage; +class MVtEngCameraPreferences; + +/** +* CVtUiPrefSettingListBase +* +* Base class for color tone and white balance +* +* @since S60 v3.2 +*/ +class CVtUiPrefSettingListBase : public CVtUiFeatureBase, + public MAknSettingPageObserver, MVtUiSettingPageObserver + { + +public: + + /** + * Destructor + */ + ~CVtUiPrefSettingListBase(); + + /** + * has pending settingpange changed cmd cause camera cover switched. + */ + TBool IsPendingCmd(); + + /** + * handle pending settingpange command + */ + void HandlePendingCmdL(); + +public: // from MVtUiFeature + + /** + * @see MVtUiFeature::Stop + */ + virtual void Stop() = 0; + + /** + * @see MVtUiFeature::InitFeatureL + */ + virtual void InitFeatureL(); + +protected: // from MAknSettingPageObserver + + /** + * @see MAknSettingPageObserver::HandleSettingPageEventL + */ + void HandleSettingPageEventL( + CAknSettingPage* aSettingPage, + TAknSettingPageEvent aEventType ); + +protected: // from MVtUiSettingPageObserver + + /** + * @see MVtUiSettingPageObserver::ListStateChangedL + */ + void ListStateChangedL(); + +protected: + + // Gets currently selected list item + virtual TInt CurrentSelection() = 0; + + // Set items to setting page + virtual void SetItemsL( CDesCArray& aArray ) = 0; + + // Gets resource id for selection list + virtual TInt SettingPageResId() const = 0; + + // This function gets called when focus is moved + // to new item in the settin page list + virtual void SettingPageItemChangedL( TInt aIndex ) = 0; + + // Start function calls this + void StartSettingPageL(); + + // Stop function calls this + void StopSettingPageL(); + +public: // from CCoeControl + + /* + * @see CCoeControl::SizeChanged + */ + void SizeChanged(); + +public: + + /** + * Updates setting pages background bitmap + * @param aFrame Bitmap for setting page's backgound. + */ + void UpdateBackground( CFbsBitmap* aFrame ); + + /** + * Updates setting value + * E.g disabling video will reset camera settings. and + * after enabling video camera setting value needs to be restored. + */ + void UpdateSettingL(); + +protected: + + /** + * Constructor + */ + CVtUiPrefSettingListBase( CVtUiFeatureManager& aFeatureManager, + TVtUiFeatureId aFeatureId ); + + /** + * 2nd constructor + */ + void ConstructL(); + + // Reads item from resource and appends it to the array + void ReadAndAppendItemL( CDesCArray& aItems, TInt aResId ); + +private: + + // Does the initialisation of the setting page + void CreateSettingPageL(); + + // Resizes backround bitmap + void ResizeBackroundBitmapRect( ); + +protected: + + // Pointer to camera preferences + MVtEngCameraPreferences* iCameraPref; + + // The original value (which was active when the + // setting page was launched) + TInt iOriginalSelection; + + // Supported color tone or white balance modes + TUint32 iSupportedModes; + + // Contains currenltly supported items in setting page + RArray< TInt> iActiveItems; + + // whether or not has a pending command + TBool iPendingSettingChangeCmd; + +private: + + // Owned setting page instance + CVtUiTransparentSettingPage* iSettingPage; + + // Background bitmap for setting page + CFbsBitmap* iViewfinderBitmap; + + // Currently focused value + TInt iCurrentSelection; + + // Position of bitmap's top left corner + TPoint iBitmapTopLeftCorner; + + // Background bitmap's clip rect + TRect iBitmapClippingRect; + + // Reference to appui + CVtUiAppUi& iAppUi; + + // Window priority for context control + TInt iWindowPriority; + + // Window position for context control + TInt iWindowPosition; + + + }; + +#endif // CVTUIPEFSETTINGLISTBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuiprefsliderbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuiprefsliderbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 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: Base class for video pref sliders +* +*/ + + +#ifndef CVTUIPREFSLIDERBASE_H +#define CVTUIPREFSLIDERBASE_H + +#include "cvtuisliderbase.h" + +class CVtUiPopupBase; + +/** +* CVtUiPrefSliderBase +* +* Base class for video pref sliders +* +* @since S60 v3.2 +*/ +class CVtUiPrefSliderBase : public CVtUiSliderBase + { + +public: + + /** + * Destructor + */ + ~CVtUiPrefSliderBase(); + +public: // from CVtUiSliderBase + + /** + * @see CVtUiSliderBase::StartL + */ + void StartL(); + + /** + * @see CVtUiSliderBase::Stop + */ + void Stop(); + + /** + * @see CVtUiSliderBase::InitFeatureL + */ + void InitFeatureL(); + +protected: + + /* + * Constructor + */ + CVtUiPrefSliderBase( CVtUiFeatureManager& aFeatureManager, + TVtUiFeatureId aFeatureId ); + + /** + * 2nd constructor + */ + void BaseConstructL( ); + + }; + +#endif // CVTUIPREFSLIDERBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuiprefsliderskmodifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuiprefsliderskmodifier.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 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: Video preference slider softkey modifier class definition. +* +*/ + + +#ifndef C_VTUIPREFSLIDERMODIFIER_H +#define C_VTUIPREFSLIDERMODIFIER_H + +#include +#include "cvtuicommandmodifybase.h" + +class CVtUiAppUi; + +/** +* CVtUiPrefSliderSKModifier +* +* Video preference slider softkey modifier class definition. +* +* @since S60 v3.2 +*/ +class CVtUiPrefSliderSKModifier : public CVtUiCommandModifyBase + { + public: // static methods + /** + * Static constructor. + * @param aAppUi Reference to command appui. + * @param aResourceId Reference resource id. + */ + static CVtUiPrefSliderSKModifier* NewL( CVtUiAppUi& aAppUi, + TInt aResourceId ); + + /** + * Destructor + */ + ~CVtUiPrefSliderSKModifier(); + + public: // from base class + + /** + * @See CVtUiCommandModifyBase::ModifyCommandsL + */ + virtual void ModifyCommandsL( MVtUiCommandSetting& aCommandSettings ); + + /** + * @See CVtUiCommandModifyBase::Supports + */ + virtual TBool Supports( MVtUiCommandSetting::Type aType ) const; + + private: + /** + * C++ constructor + * + */ + CVtUiPrefSliderSKModifier( CVtUiAppUi& aAppUi, TInt aResourceId ); + + /** + * 2nd constructor + */ + void ConstructL(); + + private: // data + + // refrence to appui + CVtUiAppUi& iAppUi; + + // softkey resource id + TInt iResourceId; + + }; + +#endif // C_VTUIPREFSLIDERMODIFIER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuitransparentsettingpage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuitransparentsettingpage.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,103 @@ +/* +* Copyright (c) 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: CVtUiTransparentSettingPage API definition. +* +*/ + + +#ifndef CVTUITRANSPARENTSETTINGPAGE_H +#define CVTUITRANSPARENTSETTINGPAGE_H + +#include + +class MVtUiSettingPageObserver; +class CAknsBasicBackgroundControlContext; + +/** +* CVtUiTransparentSettingPage +* +* CVtUiTransparentSettingPage API definition. +* +* @since S60 v3.2 +*/ +class CVtUiTransparentSettingPage : public CAknTransparentCameraSettingPage +{ +public: // public methods + /** + * handle layoutChange + */ + void HandleLayoutChangeL(); + + /** + * Constructor. + * @param aResourceID Setting Page to use. + * @param aCurrentSelectionIndex The currently selected index. + * @param aItemArray List of option texts and their selection states. + * @param aAppUi Reference to AppUi. + * @return Newly created instance of CVtUiTransparentSettingPage class. + */ + CVtUiTransparentSettingPage( + TInt aResourceID, + TInt& aCurrentSelectionIndex, + const MDesCArray* aItemArray ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Destructor + */ + ~CVtUiTransparentSettingPage(); + + /** + * Adds setting page observer. + * @param aObserver Observer for setting page. + */ + void SetSettingPageEventStateObserver( + MVtUiSettingPageObserver* aObserver ); + +private: // from aknsettinpage + + /** + * @see CAknSettinPage::DynamicInitL + */ + void DynamicInitL(); + + /** + * @get the layout data in portrait or landscape mode + */ + void GetTheLayoutData(); + + /** + * @see CAknSettinPage::HandleControlEventL + */ + void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType ); + +private: // new functions + + /* + * Gets rect from layout data. + */ + TRect RectFromLayout( const TAknWindowComponentLayout& + aComponentLayout ) const; + +private: + + // Setting page observer + MVtUiSettingPageObserver* iSettingPageObserver; +}; + +#endif // CVTUITRANSPARENTSETTINGPAGE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuivideoquality.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuivideoquality.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,160 @@ +/* +* Copyright (c) 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: Video quality feature. +* +*/ + + +#ifndef C_VTUIVIDEOQUALITY_H +#define C_VTUIVIDEOQUALITY_H + +#include +#include "cvtuifeaturebase.h" +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" +#include "videotelui.hrh" + +/** +* TVtUiVideoQualityComponentState +* +* Video quality componentstate definition. +* +* @since S60 v3.2 +*/ +class TVtUiVideoQualityComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor + * @param aComponent Reference to component. + */ + TVtUiVideoQualityComponentState( MVtUiComponent& aComponent ); + + }; + +/** +* CVtUiVideoQuality +* +* Video quality UI feature definition. +* +* @since S60 v3.2 +*/ +class CVtUiVideoQuality : public CVtUiFeatureBase, + public MVtUiComponent + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiVideoQuality* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiVideoQuality(); + +public: // from MVtUiFeature + + /** + * @see MVtUiFeature::StartL + */ + void StartL(); + + /** + * @see MVtUiFeature::Stop + */ + void Stop(); + + /** + * @see MVtUiFeature::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + MVtUiComponent::TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + void DoDeactivateL(); + +private: + + // Creates icons for list + CGulIcon* CreateIconLC( TVtUiBitmapId aIconId, TVtUiBitmapId aMaskId ); + + // Shows the selection list + void ShowSelectionListL(); + + // Async the selection list + static TInt AsyncShowSelectionList( TAny* aPtr ); + + // Reads items from source to target array and updates the selection icon + // if needed. + void SetItemsL( CDesCArray& aTarget,const CDesCArray& aSource ); + + // Return curretly active item. + TInt ActiveItem() const; + + // Item selected, adjust video quality. + void ItemSelectedL( TInt aItemIndex ); + +private: + + /** + * Constructor + */ + CVtUiVideoQuality( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Callback function that stops the feature. + * @param aAny pointer to an instance of the class. + * @return always KErrNone. + */ + static TInt DoStop( TAny* aAny ); + +private: + + // Component state + TVtUiVideoQualityComponentState iComponentState; + + // Async callback for selection list + CAsyncCallBack* iShowSelectionListCallback; + }; + +#endif // CVTUIVIDEOQUALITY_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/cvtuiwhitebalance.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/cvtuiwhitebalance.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 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: White balance feature. +* +*/ + + +#ifndef C_VTUIWHITEBALANCE_H +#define C_VTUIWHITEBALANCE_H + +#include +#include "cvtuiprefsettinglistbase.h" +#include "tvtuicomponentstate.h" +#include "mvtuicomponent.h" +#include "mvtuilayoutchangeobserver.h" + +/** +* TVtUiWhiteBalanceComponentState +* +* Video quality componentstate definition. +* +* @since S60 v3.2 +*/ +class TVtUiWhiteBalanceComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor + * @param aComponent Reference to component. + */ + TVtUiWhiteBalanceComponentState( MVtUiComponent& aComponent ); + + }; + +/** +* CVtUiWhiteBalance +* +* White balance UI feature definition. +* +* @since S60 v3.2 +*/ +class CVtUiWhiteBalance : public CVtUiPrefSettingListBase, + public MVtUiComponent, public MVtUiLayoutChangeObserver + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiWhiteBalance* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiWhiteBalance(); + +public: // from MVtUiFeature + + /** + * @see MVtUiFeature::StartL + */ + void StartL(); + + /** + * @see MVtUiFeature:Stop + */ + void Stop(); + + /** + * @see MVtUiFeature::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + MVtUiComponent::TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + void DoDeactivateL(); + +public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::HandleLayoutChangeL + */ + void HandleLayoutChangeL(); + +protected: // from base class + + /** + * @see CVtUiPrefSettingListBase::CurrentSelection + */ + virtual TInt CurrentSelection(); + + /** + * @see CVtUiPrefSettingListBase::SetItemsL + */ + virtual void SetItemsL( CDesCArray& aArray ); + + /** + * @see CVtUiPrefSettingListBase::SettingPageResId + */ + virtual TInt SettingPageResId() const; + + /** + * @see CVtUiPrefSettingListBase::SettingPageItemChangedL + */ + virtual void SettingPageItemChangedL( TInt aIndex ); + +private: + + /** + * Constructor + */ + CVtUiWhiteBalance( CVtUiFeatureManager& aFeatureManager ); + + // Maps white balance enum to array index + TInt MapWBEnumToArrayIndex( MVtEngCameraPreferences::TWhiteBalance& + aWhiteBalance ) const; + + // Maps arrya index to white balance enum + MVtEngCameraPreferences::TWhiteBalance MapArrayIndexToWBEnum( TInt aIndex) const; + + // Callback function that stops the feature. + static TInt DoStopL( TAny* aAny ); + + // Callback function that starts the feature. + static TInt DoStartL( TAny* aAny ); + +private: + + // Component state + TVtUiWhiteBalanceComponentState iComponentState; + + }; + +#endif // CVTUIWHITEBALANCE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/prefs/mvtuisettingpageobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/prefs/mvtuisettingpageobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 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: Observer API for CVtUiTransparentSettingPage. +* +*/ + + +#ifndef M_VTUISETTINGPAGEOBSERVER_H +#define M_VTUISETTINGPAGEOBSERVER_H + +/** +* MVtUiSettingPageObserver +* +* Observer API for CVtUiTransparentSettingPage. +* +* @since S60 v3.2 +*/ +class MVtUiSettingPageObserver + { + +public: + + /** + * Called when EEventStateChanged event occurs + * in setting page. + */ + virtual void ListStateChangedL() = 0; + + }; + +#endif // M_VTUISETTINGPAGEOBSERVER_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/softkey/cvtuisoftkeycontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/softkey/cvtuisoftkeycontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2006 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: Softkey context class definition. +* +*/ + + +#ifndef C_VTUISOFTKEYCONTEXT_H +#define C_VTUISOFTKEYCONTEXT_H + +#include + +#include "cvtuicmdcontext.h" + +/** + * CVtUiSoftkeyContext + * + * Softkey command context class definition. + * + * @since S60 v3.2 + */ +class CVtUiSoftkeyContext : public CVtUiCmdContext + { + +public: // public methods + + /** + * C++ destructor. + */ + ~CVtUiSoftkeyContext(); + + /** + * Static constructor + * @param aCommandManager Reference to command manager. + */ + static CVtUiSoftkeyContext* NewL( MVtUiCommandManager& aCommandManager ); + +public: // virtual methods + + /** + * Make validations. + * + * @param aAction Reference to validation action base. + */ + void ValidateL( CVtUiCmdValidationActionBase& aAction ); + +private: + + /** + * C++ constructor + * + * @param aCommandManager Reference to command manager. + */ + CVtUiSoftkeyContext( MVtUiCommandManager& aCommandManager ); + + /** + * 2nd consttuctor, may leave. + */ + void ConstructL(); + + }; + +#endif // C_VTUISOFTKEYCONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/softkey/cvtuisoftkeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/softkey/cvtuisoftkeys.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2006 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: Softkey UI feature. +* +*/ + + +#ifndef C_VTUISOFTKEYS_H +#define C_VTUISOFTKEYS_H + +#include "mvtuicommandui.h" +#include "cvtuifeaturebase.h" + +class CEikButtonGroupContainer; +class CVtUiSoftkeySetting; +class CVtUiCommandModifyBase; +class CVtUiSoftkeyValidationAction; +class CVtUiSoftkeyContext; + +/** + * CVtUiSoftkeys + * + * Sofktey UI feature definition. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CVtUiSoftkeys ) : public CVtUiFeatureBase, + public MVtUiCommandUi + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + * @param aButtonGroupContainer Reference to button group container. + */ + static CVtUiSoftkeys* NewL( CVtUiFeatureManager& aFeatureManager, + CEikButtonGroupContainer& aButtonGroupContainer ); + + /** + * Destructor + */ + ~CVtUiSoftkeys(); + +public: + + /** + * Returns reference to application button group container. + */ + CEikButtonGroupContainer& ButtonGroup(); + +public: // from CVtUiFeatureBase + + /** + * @see CVtUiFeatureBase::StartL + */ + void StartL(); + + /** + * @see CVtUiFeatureBase::Stop + */ + void Stop(); + + /** + * @see CVtUiFeatureBase::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiCommandUi + + /** + * @see MVtUiCommandUi::RefreshL + */ + void RefreshL(); + + /** + * @see MVtUiCommandUi::AddCommandModifierL + */ + TInt AddCommandModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * @see MVtUiCommandUi::RemoveCommandModifierL + */ + void RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ); + +private: + + /** + * Constructor + */ + CVtUiSoftkeys( CVtUiFeatureManager& aFeatureManager, + CEikButtonGroupContainer& aButtonGroupContainer ); + + /** + * 2nd constructor + */ + void ConstructL(); + +private: + + // Softkey container + CEikButtonGroupContainer& iButtonGroupContainer; + + // Softkey context instance + CVtUiSoftkeyContext* iSoftkeyCommandContext; + + // Softkey setter + CVtUiSoftkeySetting* iSoftkeySetting; + + // Softkey validation action instance + CVtUiSoftkeyValidationAction* iSoftkeyValidationAction; + + }; + +#endif // C_VTUISOFTKEYS_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/softkey/cvtuisoftkeysetting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/softkey/cvtuisoftkeysetting.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2006 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: Softkey settings class definition. +* +*/ + + +#ifndef C_VTUISOFTKEYSETTING_H +#define C_VTUISOFTKEYSETTING_H + +#include "cvtuicommandsetting.h" + +class CVtUiSoftkeys; +class CVtUiSoftkeyValidationAction; + +/** + * CVtUiSoftkeySetting + * + * Softkey setting class definition. + * + * @since S60 v3.2 + */ +class CVtUiSoftkeySetting : + public CVtUiCommandSetting< CVtUiSoftkeyValidationAction > + { + +public: + + /** + * Constructor + * @param aSoftkeys Reference to softkeysr. + */ + CVtUiSoftkeySetting( CVtUiSoftkeys& aSoftkeys ); + + /** + * Destructor + */ + ~CVtUiSoftkeySetting(); + +public: // from CVtUiCommandSetting + + /** + * @see CVtUiCommandSetting::DoDefineCommandsL + */ + void DoDefineCommandsL(); + +private: + + // Softkey container + CVtUiSoftkeys* iSoftkeys; + + }; + +#endif // C_VTUISOFTKEYSETTING_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/softkey/cvtuisoftkeyvalidationaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/softkey/cvtuisoftkeyvalidationaction.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2006 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: Softkey validation action class definition. +* +*/ + + +#ifndef C_CVTUISOFTKEYVALIDATIONACTION_H +#define C_CVTUISOFTKEYVALIDATIONACTION_H + +#include + +#include "cvtuicmdvalidationactionbase.h" + +/** + * CVtUiSoftkeyValidationAction + * + * Softkey validation action definition. + * + * @since S60 v3.2 + */ +class CVtUiSoftkeyValidationAction : public CVtUiCmdValidationActionBase + { + +public: + + /** + * Static constructor + */ + static CVtUiSoftkeyValidationAction* NewL(); + +public: // from CVtUiCmdValidationActionBase + + /** + * @see CVtUiCmdValidationActionBase::BeginProcess + */ + void BeginProcess(); + + /** + * @see CVtUiCmdValidationActionBase::ProcessL + */ + void ProcessL( const MVtUiCmdValidatorCallBack& aCallBack ); + +public: // new methods + + /** + * Returns resource id after validation process. + */ + TInt ResourceId() const; + +private: + + /** + * C++ constructor. + * + */ + CVtUiSoftkeyValidationAction(); + +private: // data + + // Index to currently selected softkey + TInt iCurrentIdx; + + }; + +#endif // C_CVTUISOFTKEYVALIDATIONACTION_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuifixedtoolbar.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuifixedtoolbar.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,105 @@ +/* +* 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" +* 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: Fixed toolbar UI feature class definition. +* +*/ + + +#ifndef C_VTUIFIXEDTOOLBAR_H +#define C_VTUIFIXEDTOOLBAR_H + +#include "cvtuitoolbarbase.h" + +/** +* CVtUiFixedToolbar +* +* Toolbar UI feature definition. +* +* @since S60 3.2 +*/ +class CVtUiFixedToolbar : public CVtUiToolbarBase + { + public: // public methods + + /** + * Static constructor. + * @param aFeatureManager feature manager. + */ + static CVtUiFixedToolbar* NewL(CVtUiFeatureManager& aFeatureManager ); + + /** + * C++ destructor. + */ + ~CVtUiFixedToolbar(); + + public: // from CVtUiToolbarBase + + /** + * @see CVtUiToolbarBase::DoActivateL + */ + void DoActivateL(); + + /** + * @see CVtUiToolbarBase::DoDeactivateL + */ + void DoDeactivateL(); + + /** + * @see CVtUiToolbarBase::CreateToolbarButtonsL + */ + void CreateToolbarButtonsL(); + + /** + * @see CVtUiToolbarBase::PopulateCmdsIdsL + */ + void PopulateCmdsIdsL(); + + /** + * @see CVtUiToolbarBase::SetToolbarVisibilityAfterLayoutChange + */ + void SetToolbarVisibilityAfterLayoutChangeL( TBool aVisible ); + + private: + + // Hides/shows toolbar + void MakeToolbarVisible( const TBool aVisible ); + + // Dimms/undimms all toolbar buttons + void DimToolbarbuttons( TBool aIsDimmed ); + + // Sets toolbar visible + static TInt DoShowToolbarL( TAny* aAny ); + + // Sets toolbar buttons dimmed + static TInt DoDimToolbarButtons( TAny* aAny ); + + private: + + /** + * C++ constructor + */ + CVtUiFixedToolbar( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + private: // data + + // for callback usage + CIdle* iIdle; + }; + +#endif // C_VTUIFIXEDTOOLBAR_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuifloatingtoolbar.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuifloatingtoolbar.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2006 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: Floating toolbar UI feature class definition. +* +*/ + + +#ifndef C_VTUIFLOATINGTOOLBAR_H +#define C_VTUIFLOATINGTOOLBAR_H + +#include "cvtuitoolbarbase.h" +#include "mvtuiresourcechangeobserver.h" +#include + +/** +* CVtUiFloatingToolbar +* +* Toolbar UI feature definition. +* +* @since S60 3.2 +*/ +class CVtUiFloatingToolbar : public CVtUiToolbarBase, + public MVtUiResourceChangeObserver + { + public: // public methods + + /** + * Static constructor. + * @param aFeatureManager feature manager. + */ + static CVtUiFloatingToolbar* NewL( CVtUiFeatureManager& + aFeatureManager ); + + /** + * C++ destructor. + */ + ~CVtUiFloatingToolbar(); + + + public: // from CVtUiToolbarBase + + + /** + * @see CVtUiToolbarBase::DoActivateL + */ + void DoActivateL(); + + /** + * @see CVtUiToolbarBase::DoDeactivateL + */ + void DoDeactivateL(); + + /** + * @see CVtUiToolbarBase::CreateToolbarButtonsL + */ + void CreateToolbarButtonsL(); + + /** + * @see CVtUiToolbarBase::PopulateCmdsIdsL + */ + void PopulateCmdsIdsL(); + + public: // from MVtUiResourceChangeObserver + + /** + * @see MVtUiComponent::HandleResourceChangeL + */ + void HandleResourceChangeL( TInt aType ); + + private: + + /** + * C++ constructor + */ + CVtUiFloatingToolbar( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + /** + + /* + * Gets rect from layout data. + */ + TRect RectFromLayout( const TAknWindowComponentLayout& + aComponentLayout ) const; + + /* + * Sets toolbar layout. + */ + void LayoutToolbarL(); + + /* + * Gets variety for layoutdata. + */ + TInt GetVariety( TBool aIsLandscapeOrientation ); + + private: // data + + + + }; + +#endif // C_VTUIFLOATINGTOOLBAR_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuihidetoolbaritemaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuihidetoolbaritemaction.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2006 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: Toolbar hide item action class definition. +* +*/ + + +#ifndef C_VTUIHIDETOLLBARITEMACTION_H +#define C_VTUIHIDETOLLBARITEMACTION_H + +#include +#include "cvtuicmdvalidationactionbase.h" +#include "tvtuistates.h" + +class CVtUiToolbarBase; + +/** +* CVtUiHideToolbarItemAction +* +* Toolbar hide item action definition. +* +* @since S60 v3.2 +*/ +class CVtUiHideToolbarItemAction : public CVtUiCmdValidationActionBase + { + public: + + /** + * Leave-safe constructor. + * @param aToolbar Pointer to toolbar. + * @param aUiStates Reference to uistates. + */ + static CVtUiHideToolbarItemAction* NewL( CVtUiToolbarBase* aToolbar, + const TVtUiStates& aUiStates ); + + /** + * Destructor + * + */ + ~CVtUiHideToolbarItemAction(); + + public: // from CVtUiCmdValidationActionBase + + /** + * @See CVtUiCmdValidationActionBase::ProcessL + */ + void ProcessL( const MVtUiCmdValidatorCallBack& aCallBack ); + + + /** + * @See CVtUiCmdValidationActionBase::EndProcess + */ + virtual void EndProcess(); + + private: + + /** + * C++ constructor. + * + */ + CVtUiHideToolbarItemAction( CVtUiToolbarBase* aToolbar, + const TVtUiStates& aUiStates ); + + /** + * Sets given toolbar control hidden in toolbar. + * + */ + void SetItemHiddenL( TInt aCommandId ); + + /** + * Decides if toolbar control should be dimmed or shown. + * + */ + void HideOrShowToolbarControlL( TInt aCommandId ); + + private: // data + + // Toolbar instance this action is currently working on + CVtUiToolbarBase* iToolbar; + + // Reference to UI states instance + const TVtUiStates& iUiStates; + }; + +#endif // C_VTUIHIDETOLLBARITEMACTION_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuitoolbarbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuitoolbarbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,372 @@ +/* +* Copyright (c) 2006 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: Base class for toolbar. +* +*/ + + +#ifndef C_VTUITOOLBAR_H +#define C_VTUITOOLBAR_H + +#include +#include +#include + +#include "mvtuifeature.h" +#include "CVtUiAppUi.h" +#include "cvtuifeaturebase.h" +#include "mvtuicommandui.h" +#include "mvtuicomponent.h" +#include "mvtuiresourcechangeobserver.h" +#include "tvtuicomponentstate.h" +#include "mvtuilayoutchangeobserver.h" +#include + +class MVtuiFeature; +class CAknToolbar; +class CVtUiToolbarItem; +class TVtUiFeatureState; +class TVtUiStates; +class CVtUiToolbarContext; +class CVtUiToolbarCmdPolicy; +class CVtUiHideToolbarItemAction; +class CVtUiFeatureManager; +class CVtUiToolbarSKModifier; +class CVtUiToolbarButton; + +/** +* TVtUiToolbarComponentState +* +* Toolbar componentstate definition. +* +* @since S60 v3.2 +*/ +class TVtUiToolbarComponentState : public TVtUiComponentState + { + +public: + + /** + * Constructor + * @param aComponent Reference to component. + */ + TVtUiToolbarComponentState( MVtUiComponent& aComponent ); + + }; + +/** +* CVtUiToolbar +* +* Toolbar UI feature definition. +* +* @since S60 3.2 +*/ +class CVtUiToolbarBase : public CVtUiFeatureBase, public MAknToolbarObserver, + public MVtUiCommandUi, public MVtUiComponent, + public MVtUiLayoutChangeObserver + { + public: // public methods + + /** + * C++ destructor. + */ + ~CVtUiToolbarBase(); + + public: // from MAknToolbarObserver + + /** + * @see MAknToolbarObserver::DynInitToolbarL + */ + void DynInitToolbarL( + TInt aResourceId, + CAknToolbar* aToolbar ); + + /** + * @see MAknToolbarObserver::DynInitToolbarL + */ + void OfferToolbarEventL( TInt aCommand ); + + public: // from MVtUiFeature + /** + * @see MVtUiFeature::StartL + */ + void StartL(); + + /** + * @see MVtUiFeature::Stop + */ + void Stop(); + + /* + * @see MVtUiFeature::InitFeatureL + */ + void InitFeatureL(); + + public: // from MVtUiCommandUi + + /** + * @see MVtUiCommandUi::RefreshL + */ + void RefreshL(); + + /** + * @see MVtUiCommandUi::AddCommandModifier + */ + TInt AddCommandModifier( CVtUiCommandModifyBase& aModifier ); + + /** + * @see MVtUiCommandUi::RemoveCommandModifier + */ + void RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ); + + public: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + virtual void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + virtual void DoDeactivateL(); + + public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::HandleLayoutChangeL + */ + void HandleLayoutChangeL(); + + public: + + /** + * Return number of commands in toolbar. + * @return Number of commands. + */ + TInt NumberOfToolbarControls() const; + + /** + * Maps command id array index to command id. + * @param aIndex Command id array index. + * @return Command id associated with index. + */ + TInt CommandIdByCmdIdsArrayIndex( TInt aIndex ) const; + + /** + * Updates toolbar's buttons states and + * redraws the toolbar. + */ + void UpdateToolbarL(); + + /** + * EHidden + * command is hidden + * EDimmed + * command is dimmed + * EShown + * command is visible + */ + enum TCmdStateFlags + { + ENotInitialized = -1, + EHidden, + EDimmed, + EShown + }; + + /** + * Sets visibility of toolbar commands. + * @param aCmdId command id. + * @param aNewState command's new state. + * @return ETrue if command is available, otherwise EFalse. + */ + void SetCmdIdVisibilityStateL( TInt aCmdId, TCmdStateFlags aNewState); + + /** + * Cheks if command is available in toolbar. + * @param aCmdId command id. + * @return ETrue if command is available, otherwise EFalse. + */ + TBool IsCommandInToolbar( TInt aCmdId ) const; + + protected: + + /** + * C++ constructor + */ + CVtUiToolbarBase( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd phase constructor + */ + void BaseConstructL(); + + protected: + + /** + * Creates toolbar buttons + */ + virtual void CreateToolbarButtonsL(); + + /* + * Appends all the commnands used by toolbar to an array. + */ + virtual void PopulateCmdsIdsL(); + + /* + * Sets toolbar visibility after layoutchange + */ + virtual void SetToolbarVisibilityAfterLayoutChangeL( TBool aVisible ); + + /** + * Creates all toolbar items() + */ + void CreateToolbarItemL( TInt aResourceId, + TInt aCommandId, CVtUiAppUi& appUi ); + + /** + * Finds command from array by command id. + */ + CVtUiToolbarButton* FindToolbarItemByCommandId( const TInt aCommandId ); + + /* + * Starts or stops to block pointer events + * @param aIsBlocking ETrue if events are blocked + * otherwise EFalse + */ + void BlockPointerEvents( TBool aIsBlocking ); + + /* + * Starts or stops to block key events + * @param aIsBlocking ETrue if events are blocked + * otherwise EFalse + */ + void BlockKeyEvents( TBool aIsBlocking ); + + /* + * Cheks if dialer component is active + * @return ETrue if dialer is aactive, otherwise EFalse. + */ + TBool IsDialerActive() const; + + /** + * Dims toolbar. + * @param aDimmed ETrue ETrue to dim the toolbar, + * EFalse to set the toolbar as not dimmed + */ + void DimToolbar( const TBool aDimmed, const TBool aDrawNow ); + private: + + /** + * Hides command from toolbar. + */ + void HideToolbarButton( const TInt aCommandId, const TBool aHide, + const TBool aDrawNow ); + + /** + * Dims command from toolbar. + */ + void DimToolbarButton( const TInt aCommandId, const TBool aDimmed, + const TBool aDrawNow ); + + /** + * Maps toggle button id to single command id. + */ + TInt MapCmdIdToChilId( TInt aCmdId ); + + /** + * Maps single command id to toggle button id. + */ + TInt MapCmdIdToParentId( TInt aCmdId ); + + /* + * Checks if command id associated with toggle button is visible. + * Togglle button has two states and two command ids which has their + * own state values. See from .rss file. + */ + TBool IsCmdIdVisibleInToggleButton( TInt aCmdId ); + + /* + * Checks if both command ids in togglebutton are dimmed. + */ + TBool IsToggleButtonHidden( TInt aFirstCmdId, TInt aSecondCmdId ); + + /* + * Removes registrations. + */ + void Clean(); + + protected: // data + + // array of supported commmand ids + RArray iCmdIds; + + // current focus id + TInt iCmdFocus; + + // owned toolbar control + CAknToolbar* iToolbar; + + // Number of supported toolbar buttons + TInt iNumberOfToolbarButtons; + + private: // data + + // struct used by iCmdStates array + class TCommandState + { + public: + TInt iCmdId; + TCmdStateFlags iOldState; + TCmdStateFlags iNewState; + }; + + // owned toolbar item array + RPointerArray iToolBarControls; + + // toolbar context instance + CVtUiToolbarContext* iToolbarCtx; + + // owned hide toolbar item action + CVtUiHideToolbarItemAction* iHideToolbarItemAction; + + // Toolbar command policy instance + CVtUiToolbarCmdPolicy* iToolbarCmdPolicy; + + // owned softkey modifier + CVtUiToolbarSKModifier* iToolbarSKModifier; + + // array which hold state information of the commands + RArray iCmdStates; + + // Component state + TVtUiToolbarComponentState iComponentState; + + // ETrue if capture mode was on in previous update + TBool iWasCaptureModePreviousState; + + }; + +#endif // C_VTUITOOLBAR_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuitoolbarbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuitoolbarbutton.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,131 @@ +/* +* Copyright (c) 2006 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: CVtUiToolbarButton class definition. +* +*/ + + +#ifndef C_VTUITOOLBARBUTTON_H +#define C_VTUITOOLBARBUTTON_H + +#include + +class CVtUiAppUi; + +/** +* CVtUiToolbarButton +* +* Toolbar button class definition. +* +* @since S60 3.2 +*/ +class CVtUiToolbarButton : public CAknButton + { + public: + + /** + * Static constructor. + * @param aResourceId Resource id. + * @param aAppUi Reference to appui. + * @param aCmdId Reference to command id. + */ + static CVtUiToolbarButton* NewL( TInt aResourceId, + CVtUiAppUi& aAppUi, TInt aCmdId ); + + /** + * Static constructor. + * @param aResourceId Resource id. + * @param aAppUi Reference to appui. + * @param aCmdId Reference to command id. + */ + static CVtUiToolbarButton* NewLC( TInt aResourceId, + CVtUiAppUi& aAppUi, TInt aCmdId ); + + /** + * C++ destructor. + */ + ~CVtUiToolbarButton(); + + /* + * Shows help text for a certain period of time. + */ + void ShowHelpL(); + + /* + * Return commmand id + */ + TInt CmdId() const; + + /* + * Starts or stops to block pointer events + * @param aIsBlocking ETrue if events are blocked + * otherwise EFalse + */ + void BlockPointerEvents( TBool aIsBlocking ); + + /* + * Starts or stops to block key events + * @param aIsBlocking ETrue if events are blocked + * otherwise EFalse + */ + void BlockKeyEvents( TBool aIsBlocking ); + + + /* @see CAknButton::OfferKeyEventL */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /* @see CAknButton::HandlePointerEventL */ + void HandlePointerEventL( const TPointerEvent& + aPointerEvent ); + + /* @see CAknButton::StatesCount */ + TInt StatesCount() const; + + private: + + /** + * Constructor + */ + CVtUiToolbarButton( CVtUiAppUi& aAppUi, TInt aCmdId ); + + private: + + /** + * Checks whether key events should be blocked. + */ + TBool IsCommandActive() const; + + private: + + // reference to appui + CVtUiAppUi& iAppUi; + + // command id + TInt iCmdId; + + // Flag to indicate is key event blocking on + TBool iIsBlockingKeyEvents; + + // Flag to indicate is pointer event blocking on + TBool iIsBlockingPointerEvents; + + // time stamp to limit pointerevents + TTime iTimeStamp; + + TBool isLimitingPointers; + + }; + +#endif // C_VTUITOOLBARBUTTON_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuitoolbarcmdpolicy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuitoolbarcmdpolicy.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,100 @@ +/* +* 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: Toolbar command policy implementation. +* +*/ + + +#ifndef C_VTUITOOLBARCMDPOLICY_H +#define C_VTUITOOLBARCMDPOLICY_H + +#include + +#include "tvtuicmdpolicypriority.h" +#include "cvtuicmdvalidatorbase.h" + +class CVtUiCmdValidationActionBase; +class CVtUiToolbarBase; + +/** +* CVtUiToolbarCmdPolicy +* +* Toolbar command policy implementation. +* +* @since S60 v3.2 +*/ +class CVtUiToolbarCmdPolicy : public CVtUiCmdValidatorBase + { + public: // public methods + + /** + * Static constructor. + * @param aToolbar Reference to toolbar. + */ + static CVtUiToolbarCmdPolicy* NewL( CVtUiToolbarBase& aToolbar ); + + public: // from CVtUiCmdValidatorBase + + /** + * @see CVtUiCmdValidatorBase::ValidateMenuItemsL + */ + void ValidateMenuItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidateSoftkeyItemsL + */ + void ValidateSoftkeyItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidateToolbarItemsL + */ + void ValidateToolbarItemsL( CVtUiCmdValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::CustomValidationL + */ + void CustomValidationL( CVtUiCmdCustomValidationActionBase& aAction, + TInt aReferencePriority ); + + /** + * @see CVtUiCmdValidatorBase::ValidatesContext + */ + TBool ValidatesContext( const TVtUiCmdContextType& aCtxType ) + const; + + private: + + /** + * C++ constructor + * + */ + CVtUiToolbarCmdPolicy( CVtUiToolbarBase& aToolbar ); + + /** + * Callback for menu validation. + * + */ + TBool ValidateMenuCommand( TInt aCommandId ) const; + + private: // data + + // Reference to cvtuitoolbar + CVtUiToolbarBase& iToolbar; + + }; + +#endif // C_VTUITOOLBARCMDPOLICY_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuitoolbarcontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuitoolbarcontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2006 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: Toolbar context class definition. +* +*/ + + +#ifndef C_VTUITOOLBARCONTEXT_H +#define C_VTUITOOLBARCONTEXT_H + +#include + +#include "cvtuicmdcontext.h" + +class CVtUiCmdValidatorBase; + +/** Toolbar context reference priority */ +const TInt KVtUiToolbarContextPriority = 50; + +/** +* CVtUiToolbarContext +* +* Toolbar context class definition. +* +* @since S60 v3.2 +*/ +class CVtUiToolbarContext : public CVtUiCmdContext + { + public: // public methods + + /** + * C++ destructor. + * + */ + ~CVtUiToolbarContext(); + + /** + * Leave safe destructor. + * @param aCommandManager Reference to command manager. + */ + static CVtUiToolbarContext* NewL( + MVtUiCommandManager& aCommandManager ); + + public: // from CVtUiCmdContext + + /** + * @see CVtUiCmdContext::ValidateL + */ + void ValidateL( CVtUiCmdValidationActionBase& aAction ); + + private: + + /** + * C++ constructor + * + * @param aCommandManager Reference to command manager. + */ + CVtUiToolbarContext( MVtUiCommandManager& aCommandManager ); + + /** + * 2nd consttuctor, may leave. + */ + void ConstructL(); + + }; + +#endif // C_VTUITOOLBARCONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/cvtuitoolbarskmodifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/cvtuitoolbarskmodifier.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2006 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: Toolbar softkey modifier class definition. +* +*/ + + +#ifndef C_VTUITOOLBARSKMODIFIER_H +#define C_VTUITOOLBARSKMODIFIER_H + +#include +#include "cvtuicommandmodifybase.h" + +class CVtUiAppUi; +class TVtUiStates; + +/** +* CVtUiToolbarSKModifier +* +* Toolbar softkey modifier class definition. +* +* @since S60 v3.2 +*/ +class CVtUiToolbarSKModifier : public CVtUiCommandModifyBase + { + public: // static methods + /** + * Static constructor. + * @param aAppUi Reference to command appui. + * @param aUiStates Reference to uistates. + */ + static CVtUiToolbarSKModifier* NewL( CVtUiAppUi& aAppUi, + const TVtUiStates& aUiStates ); + + /** + * Destructor + */ + ~CVtUiToolbarSKModifier(); + + public: // from base class + + /** + * @See CVtUiCommandModifyBase::ModifyCommandsL + */ + virtual void ModifyCommandsL( MVtUiCommandSetting& aCommandSettings ); + + /** + * @See CVtUiCommandModifyBase::Supports + */ + virtual TBool Supports( MVtUiCommandSetting::Type aType ) const; + + private: + /** + * C++ constructor + * + */ + CVtUiToolbarSKModifier( CVtUiAppUi& aAppUi, + const TVtUiStates& aUiStates ); + + /** + * 2nd constructor + */ + void ConstructL(); + + private: // data + + // refrence to appui + CVtUiAppUi& iAppUi; + + // UI states + const TVtUiStates& iUiStates; + + }; + +#endif // C_VTUITOOLBARSKMODIFIER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/toolbar/tvtuitoolbarcommanditerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/toolbar/tvtuitoolbarcommanditerator.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 2006 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: Toolbar command iterator class definition. +* +*/ + + +#ifndef T_VTUITOOLBARCOMMANDITERATOR_H +#define T_VTUITOOLBARCOMMANDITERATOR_H + +#include "mvtuicommanditerator.h" + +class CVtUiToolbarBase; + +/** +* TVtUiToolbarCommandIterator +* +* Toolbar command iterator class definition. +* +* @since S60 v3.2 +*/ +class TVtUiToolbarCommandIterator : public MVtUiCommandIterator + { + +public: // public methods + + /** + * C++ constructor + * @param aToolbar Reference to toolbar. + */ + TVtUiToolbarCommandIterator( CVtUiToolbarBase& aToolbar ); + +public: // from MVtUiCommandIterator + + /** + * @see MVtUiCommandIterator::HasNext + */ + TBool HasNext() const; + + /** + * @see MVtUiCommandIterator::Next + */ + TInt Next(); + +private: + + // Pointer to Toolbar + CVtUiToolbarBase* iToolbar; + + // Current iteration point + TInt iCurrent; + + }; + +#endif // T_VTUITOOLBARCOMMANDITERATOR_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/tvtuifeatureids.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/tvtuifeatureids.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2006 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: Feature ids. +* +*/ + + +#ifndef T_VTUIFEATUREIDS_H +#define T_VTUIFEATUREIDS_H + +/** + * + * Feature IDs. + * + */ +enum TVtUiFeatureId + { + /** Toolbar feature id */ + EVtUiFeatureIdToolbar = 1, + + /** Softkey feature id */ + EVtUiFeatureIdSoftkey, + + /** Menu feature id */ + EVtUiFeatureIdMenu, + + /** Mini Dialer feature id */ + EVtUiFeatureIdMiniDialer, + + /** Number entry feature id */ + EVtUiFeatureIdNumberEntry, + + /** Video quality feature id */ + EVtUiFeatureIdVideoQuality, + + /** White balance feature id */ + EVtUiFeatureIdWhiteBalance, + + /** Color tone feature id */ + EVtUiFeatureIdColourTone, + + /** Brightness feature id */ + EVtUiFeatureIdBrightness, + + /** Contrast feature id */ + EVtUiFeatureIdContrast, + + /** Dialer feature id */ + EVtUiFeatureIdDialer, + + /** Volume feature id */ + EVtUiFeatureIdVolume, + + /** Zoom feature id */ + EVtUiFeatureIdZoom + }; + +#endif // T_VTUIFEATUREIDS_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/volume/cvtuivolume.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/volume/cvtuivolume.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 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: Volume ui feature +* +*/ + + +#ifndef C_VTUIVOLUME_H +#define C_VTUIVOLUME_H + +#include "cvtuisliderbase.h" + +/** +* CVtUiVolume +* +* Volume ui feature +* +* @since S60 v3.2 +*/ +class CVtUiVolume : public CVtUiSliderBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiVolume* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiVolume(); + + /** + * Refresh volume popup status. + */ + void RefreshL(); + +public: // from CVtUiSliderBase + + /** + * @see CVtUiSliderBase::StartL + */ + void StartL(); + + /** + * @see CVtUiSliderBase::Stop + */ + void Stop(); + + /* + * Return current slider's volume value + */ + TInt GetVolumeValue(); + +protected: + + /* + * Constructor + */ + CVtUiVolume( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUIVOLUME_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/volume/cvtuivolumecontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/volume/cvtuivolumecontrol.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,118 @@ +/* +* 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" +* 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: Volume control adjusts engine side volume values. +* +*/ + + + +#ifndef CVTUIVOLUMECONTROL_H +#define CVTUIVOLUMECONTROL_H + + +#include +#include +#include + +class MVtEngCommandHandler; +class MVtUiEngineCommandManager; +class CVtUiFeatureManager; + + +/** +* Volume control adjusts engine side volume values. +* +* @since Series 60 v5.0 +*/ +class CVtUiVolumeControl + : public CBase, + private MVtEngCommandObserver + { + public: // Constructors and destructor + + // Type for volume settings. + typedef MVtEngAudio::TVtEngOutputVolume TVolume; + + /** + * Constructor. + * + * @param aSelfPtr optional pointer to itself. + * @param aCommandHandler command handler. + * @param aAudio audio interface. + * @param aCommandManager command manager. + * @param aFeatureManager Reference to feature manager. + */ + CVtUiVolumeControl( + MVtEngCommandHandler& aCommandHandler, + MVtEngAudio& aAudio, + MVtUiEngineCommandManager& aCommandManager, + CVtUiFeatureManager& aFeatureManager ); + + /* + * 2nd phase constructor + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CVtUiVolumeControl(); + +public: // New functions + + // Adjust volume to new value + void AdjustVolumeL( TVolume aVolume ); + +private: + + /** + * @see MVtEngCommandObserver::HandleVTCommandPerformedL. + */ + virtual void HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ); + + // Checks if volume is changed in slider + TBool IsVolumeChangedL(); + +private: + + // Reference to command handler. + MVtEngCommandHandler& iCommandHandler; + + // Reference to audio interface. + MVtEngAudio& iAudio; + + // Reference to command manager. + MVtUiEngineCommandManager& iCommandManager; + + // ETrue if command is performed. + TBool iCommandPerformed; + + // Volume being updated to engine. + TVolume iVolume; + + // Volume pointer descriptor. + TPtrC8 iVolumePtr; + + // Reference to featuremanager + CVtUiFeatureManager& iFeatureManager; + + // Is control adjusting volume + TBool iIsActive; + }; + +#endif // CVtUiVolumeControl_H + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/volume/cvtuivolumepopup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/volume/cvtuivolumepopup.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,118 @@ +/* +* Copyright (c) 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: Volume popup definition +* +*/ + + +#ifndef C_VTUIVOLUMEPOPUP_H +#define C_VTUIVOLUMEPOPUP_H + +#include "tvtuicomponentstate.h" +#include "cvtuipopupbase.h" +#include "mvtengaudio.h" + +class CVtUiFeatureManager; +class CVtEngModel; + +/** +* CVtUiVolumePopup +* +* Volume popup definition. +* +* @since S60 v3.2 +*/ +class CVtUiVolumePopup : public CVtUiPopupBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiVolumePopup* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiVolumePopup(); + + /** + * Refresh volume popup status. + */ + void RefreshL(); + + /** + * Update volume popup and audio routing + */ + void UpdateVolumeAndRoutingL(); + +private: // from base class + + /** + * @see CVtUiPopupBase::DoActivateL + */ + void DoActivateL(); + + /** + * @see CVtUiPopupBase::OfferKeyEventL + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ); + + /** + * @see CVtUiPopupBase::HandleControlEventL + */ + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + +private: + + /** + * Constructor + */ + CVtUiVolumePopup( CVtUiFeatureManager& aFeatureManager ); + + /* + * 2nd constructor + */ + void ConstructL(); + + /** + * Returns current output volume for given routing. + */ + TInt OutputVolume( MVtEngAudio::TAudioRoutingState aRouting ) const; + + /** + * Updates volume + */ + void UpdateVolumeL(); + +private: + + // Engine model + CVtEngModel& iModel; + + // Stored audio routing state. + MVtEngAudio::TAudioRoutingState iAudioRouting; + + // Stored volume + TInt iVolume; + + // Reference to feature manager + CVtUiFeatureManager& iFeatureManager; + + }; + +#endif // C_VTUIVOLUMEPOPUP_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/zoom/cvtuizoom.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/zoom/cvtuizoom.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 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: Zoom ui feature +* +*/ + + +#ifndef C_VTUIZOOM_H +#define C_VTUIZOOM_H + +#include "cvtuisliderbase.h" + +/** +* CVtUiZoom +* +* Zoom ui feature +* +* @since S60 v3.2 +*/ +class CVtUiZoom : public CVtUiSliderBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiZoom* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiZoom(); + + /** + * Refresh zoom popup status. + */ + void RefreshL(); + +public: // from CVtUiSliderBase + + /** + * @see CVtUiSliderBase::StartL + */ + void StartL(); + + /** + * @see CVtUiSliderBase::Stop + */ + void Stop(); + + /** + * @see CVtUiSliderBase::ComponenStateChangedL + */ + void ComponenStateChangedL(); + +protected: + + /* + * Constructor + */ + CVtUiZoom( CVtUiFeatureManager& aFeatureManager ); + + /** + * 2nd constructor + */ + void ConstructL(); + + }; + +#endif // C_VTUIZOOM_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/features/zoom/cvtuizoompopup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/features/zoom/cvtuizoompopup.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,121 @@ +/* +* Copyright (c) 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: Zoom popup definition +* +*/ + + +#ifndef C_VTUIZOOMPOPUP_H +#define C_VTUIZOOMPOPUP_H + +#include "tvtuicomponentstate.h" +#include "cvtuipopupbase.h" + +class CVtUiFeatureManager; +class MVtEngMedia; + +/** +* CVtUiZoomPopup +* +* Zoom popup definition. +* +* @since S60 v3.2 +*/ +class CVtUiZoomPopup : public CVtUiPopupBase + { + +public: + + /** + * Static constructor + * @param aFeatureManager Reference to feature manager. + */ + static CVtUiZoomPopup* NewL( CVtUiFeatureManager& aFeatureManager ); + + /** + * Destructor + */ + ~CVtUiZoomPopup(); + + /** + * Refresh zoom popup status. + */ + void RefreshL(); + +private: // from CVtUiPopupBase + + /** + * @see CVtUiPopupBase::DoActivateL + */ + void DoActivateL(); + +private: // from base class + + /** + * @see CVtUiPopupBase::OfferKeyEventL + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ); + + /** + * @see CVtUiPopupBase::HandleControlEventL + */ + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + +private: + + /** + * Constructor + */ + CVtUiZoomPopup( CVtUiFeatureManager& aFeatureManager ); + + /* + * 2nd constructor + */ + void ConstructL(); + + /* + * Updates zoom adjust range according to current active provider. + */ + void UpdateAdjustRangeL(); + + /** + * Returns current zoom step or KErrNotFound if an error happens. + */ + TInt CurrentZoomStep() const; + + /** + * Returns maximum zoom step or KErrNotFound if an error happens. + */ + TInt MaxZoomStep() const; + + void ScaleAndSetZoomFactorL( TInt aValue ); + +private: + + // Reference to feature manager + CVtUiFeatureManager& iFeatureManager; + + // Engine media + MVtEngMedia& iMedia; + + // Current zoom + TInt iCurrent; + + // Maximum zoom value + TInt iMax; + + }; + +#endif // C_VTUIZOOMPOPUP_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/mvtuinumbersource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/mvtuinumbersource.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2006 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: Number Source API +* +*/ + + +#ifndef M_VTUINUMBERSOURCE_H +#define M_VTUINUMBERSOURCE_H + +#include + +/** + * MVtUiNumberSource + * + * @since S60 v3.2 + */ +class MVtUiNumberSource + { + +public: + + /** + * Gets number typed by the user. + * + */ + virtual void GetContents( TDes& aContents ) const = 0; + + }; + +#endif // M_VTUINUMBERSOURCE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/mvtuishutterobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/mvtuishutterobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 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: Interface for reporting application shutdown readiness. +* +*/ + + +#ifndef M_MVTUISHUTTEROBSERVER_H +#define M_MVTUISHUTTEROBSERVER_H + + +/** +* Observer interface for reporting shutdown readiness. +* +* @since S60 v3.2 +*/ +class MVtUiShutterObserver + { +public: + + /** + * Called when application can exit. + */ + virtual void HandleShutdownReady() = 0; + }; + +#endif // M_MVTUISHUTTEROBSERVER_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/mvtuistatecontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/mvtuistatecontext.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 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: Interface for state objects to request application services. +* +*/ + + +#ifndef M_MVTUISTATECONTEXT_H +#define M_MVTUISTATECONTEXT_H + +#include +#include +#include "mvtuishutterobserver.h" + +class TVtUiAppStateBase; +class CVtEngModel; +class MVtUiNumberSource; +class TVtUiVideoTelephonyVariation; + +/** +* Provides service interface for application state objects. +* +* @since S60 v3.2 +*/ +class MVtUiStateContext : public MVtUiShutterObserver + { + public: + + /** + * Starts first phase of startup when prepare is received. + */ + virtual void StartupPhase1L() = 0; + + /** + * Starts application shutdown. + */ + virtual void ShutdownL() = 0; + + /** + * Starts second phase of startup. + */ + virtual void StartupPhase2L() = 0; + + /** + * Sets application to foreground and background. + * @param aForeground ETrue => foreground, EFalse => background + */ + virtual void ChangeApplicationFocus( const TBool aForeground ) = 0; + + /** + * Changes current application state. + * @param aState new state + */ + virtual void ChangeState( TVtUiAppStateBase* aState ) = 0; + + /** + * Starts DTMF tone. + * @param aTone DTMF tone. + */ + virtual void StartDtmfTone( const TChar& aTone ) = 0; + + /** + * Stops tarts DTMF tone. + */ + virtual void StopDtmfTone() = 0; + + /** + * Returns model. + * @return model + */ + virtual CVtEngModel& Model() = 0; + + /** + * Returns video telephony variation. + * @return variation + */ + virtual const TVtUiVideoTelephonyVariation& + VideoTelephonyVariation() const = 0; + /** + * Returns source containing numbers typed by the user. + * @return number soure + */ + virtual MVtUiNumberSource* NumberSource() const = 0; + + /** + * Executes engine command. + * @param aCommand command id + * @param aParams command params + */ + virtual void DoExecuteCmdL( const TVtEngCommandId aCommand, + TDesC8* aParams ) = 0; + + /** + * Refreshes application UI. + * @param aRefreshFlags identifies what to refresh + */ + virtual void RefreshL( const TInt aRefreshFlags ) = 0; + + /** + * Updates engine states. + */ + virtual void RefreshStatesL() = 0; + + /** + * Handles layout change. + */ + virtual void DoHandleLayoutChangedL() = 0; + + /** + * Sets call id. + */ + virtual void SetCallIdL( const TInt aCallId ) = 0; + + /** + * Sets display text of remote end. + */ + virtual TBool SetCallNameL( const TDesC& aName ) = 0; + + /** + + + /** + * Refresh flags + */ + enum TRefreshFlags + { + /** Navipane is refreshed */ + ENaviPane = 0x01, + /** Softkeys are refreshed */ + ESoftkeys = 0x02, + /** Refreshes blind (video availability) status */ + EBlind = 0x04, + /** Refreshes state sync with call handling */ + ESynchronise = 0x08, + /** Refreshes internal states (media etc) */ + EUiStates = 0x10, + /** Refreshes everything */ + EAll = ENaviPane | + ESoftkeys | + EBlind | + ESynchronise | + EUiStates + }; + }; + + +#endif // M_MVTUISTATECONTEXT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/sliders/cvtuipopupbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/sliders/cvtuipopupbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,275 @@ +/* +* Copyright (c) 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: Base class for video telephone popups +* +*/ + + +#ifndef C_VTUIPOPUPBASE_H +#define C_VTUIPOPUPBASE_H + +#include + +#include "mvtuicomponent.h" +#include "tvtuicomponentstate.h" +#include "tvtuifeatureids.h" +#include "mvtuiresourcechangeobserver.h" +#include "mvtuikeyeventobserver.h" + +class CAknVolumePopup; +class MVtUiComponentManager; +class MVtUiComponentStateObserver; +class CFbsBitmap; + +/** +* TVtUiBaseComponentState +* +* Base componentstate definition. +* +* @since S60 v3.2 +*/ +class TVtUiBaseComponentState : public TVtUiComponentState + { + +public: + /** + * Constructor + * @param aComponent Reference to component. + */ + TVtUiBaseComponentState( MVtUiComponent& aComponent, + TVtUiBlockListBitField aBitField ); + }; + +/** +* CVtUiPopupBase +* +* Base class for vide telephone popups +* +* @since S60 v3.2 +*/ +class CVtUiPopupBase : public CBase, public MVtUiComponent, + public MVtUiResourceChangeObserver, public MCoeControlObserver, + public MVtUiKeyEventObserver + { + +public: + + /** + * Destructor + */ + ~CVtUiPopupBase(); + +public: // from MVtUiComponent + + /** + * @see MVtUiComponent::ComponentId + */ + TComponentId ComponentId() const; + + /** + * @see MVtUiComponent::ComponentAsControl + */ + CCoeControl* ComponentAsControl(); + + /** + * @see MVtUiComponent::DoActivateL + */ + virtual void DoActivateL(); + + /** + * @see MVtUiComponent::DoDeactivateL + */ + virtual void DoDeactivateL(); + +public: // from MVtUiComponentManager + + /** + * @see MVtUiComponentManager::HandleResourceChangeL + */ + void HandleResourceChangeL( TInt aType ); + +public: // from MCoeControlObserver + + /** + * @see MCoeControlObserver::HandleControlEventL + */ + virtual void HandleControlEventL( + CCoeControl* aControl,TCoeEvent aEventType ) = 0; + +public: // from MVtUiKeyEventObserver + + /** + * @see CCoeControl::MVtUiKeyEventObserver + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aEvent, TEventCode aCode ); + +public: // new functions + + /** + * Set popup to be pemanently visible i.e. tapping outside + * the control doesn't close the control. + * @param aPermanent If Etrue popup will be visible all the time, + * otherwise popup is closed and next time will obey timeout. + */ + void SetPermanenVisibility( TBool aPermanent ); + + /** + * Set new component observer + * @param iCompStateObserver New observer + */ + void SetObserver( MVtUiComponentStateObserver& aCompStateObserver ); + + /** + * Gets slider control value. + * @return value within slider control's value range + */ + TInt Value() const; + + /** + * update popup itself + */ + virtual void UpdatePopupL(); + +protected: // new functions + + /** + * Set new value to slider control. + * @param aValue value within slider control's value range. + */ + void SetValue( TInt aValue ); + + /** + * Scales the given value to slider control's value range + * and sets it to the slider control + * @param aValue value within popup control's value range. + */ + void ScaleAndSetValue( TInt aValue ); + + /** + * Gets value from the slider control and scales it + * @return value within popup control's value range + */ + TInt ScaledValue() const; + + /** + * Gets value from the slider control and scales it + * @param aValue value in popup control's value range. + * @return value within slider control's value range + */ + TInt SliderValueWithScaling( TInt aValue ) const; + + /** + * Set new end point values popup control + * These values are not same as slider's range + */ + void SetMinAndMaxValues( TInt aMax, TInt aMin ); + + /* + * Set adjust range of the slider + */ + void SetAdjustRange( TInt aMinimumValue, TInt aMaximumValue, + TInt aStepCount ); + + /** + * Set value type for vertical slider control + */ + void SetValueType( TInt aValueType ); + + /** + * Shows popup. + */ + void ShowPopupL(); + + /** + * Opens popup. + */ + void OpenPopupL(); + + /** + * Closes popup + */ + void ClosePopup(); + + /** + * Set time out time in seconds + */ + void SetTimeOut( TInt aTime ); + + /** + * Checks whether popup is visible + */ + TBool IsPopUpVisible(); + +protected: + + /** + * Constructor + */ + CVtUiPopupBase( MVtUiComponentManager& aComponentManager, + TVtUiBlockListBitField aBitField, TComponentId aComponentId ); + + /** + * 2nd constructor + */ + void BaseConstructL(); + +private: + + /** + * Position of the popup + */ + TPoint PopupPosition() const; + + /** + * Sets popup controls's value + */ + void SetPopupValue( TInt aValue ); + +protected: // Set in child constructor + + // Reference to component manager + MVtUiComponentManager& iComponentManager; + + // Component state + TVtUiBaseComponentState iComponentState; + + // Component id + TComponentId iComponentId; + +private: + + // class for slider handling + CAknVolumePopup* iPopup; + + // Interface for component state observing + MVtUiComponentStateObserver* iCompStateObserver; + + // Maximum value + TInt iMax; + + // Minimum value + TInt iMin; + + // Number of steps + TInt iStepCount; + + // Time out for showing popup + TInt iTimeOutTime; + + // Scaling constant + TInt iScalingConstant; + + }; + +#endif // CVTUIPEFSLIDERBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/sliders/cvtuisliderbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/sliders/cvtuisliderbase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 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: Base class for video telephone sliders +* +*/ + + +#ifndef C_VTUISLIDERBASE_H +#define C_VTUISLIDERBASE_H + +#include "cvtuifeaturebase.h" +#include "mvtuicomponent.h" +#include "mvtuicomponentstateobserver.h" + +class CVtUiPopupBase; + +/** +* CVtUiSliderBase +* +* Base class for vide telephone sliders +* +* @since S60 v3.2 +*/ +class CVtUiSliderBase : public CVtUiFeatureBase, public MVtUiComponentStateObserver + { + +public: + + /** + * Destructor + */ + ~CVtUiSliderBase(); + + /** + * update slider itself + */ + void UpdateSlider(); + +public: // from MVtUiFeature + + /** + * @see MVtUiFeature::StartL + */ + void StartL(); + + /** + * @see MVtUiFeature::Stop + */ + void Stop(); + + /** + * @see MVtUiFeature::InitFeatureL + */ + void InitFeatureL(); + +public: // from MVtUiComponentStateObserver + + /** + * @see MVtUiComponentStateObserver::ComponenStateChangedL + */ + virtual void ComponenStateChangedL(); + + /** + * @see CVtUiPopupBase::SetPermanenVisibility + */ + void SetPermanenVisibility( TBool aPermanent ); + +protected: + + /* + * Constructor + */ + CVtUiSliderBase( CVtUiFeatureManager& aFeatureManager, + TVtUiFeatureId aFeatureId ); + + /** + * 2nd constructor + */ + void ConstructL(); + + /** + * Sets popup pointer. + */ + void SetPopup( CVtUiPopupBase* aPopup ); + + /** + * Gets popup reference. + */ + CVtUiPopupBase& Popup(); + + /** + * Gets popup const reference. + */ + const CVtUiPopupBase& Popup() const; + +private: + + // pop up base + CVtUiPopupBase* iPopup; + + }; + +#endif // CVTUIPEFSLIDERBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/sliders/mvtuicomponentstateobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/sliders/mvtuicomponentstateobserver.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 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: Observer API for popup based controls +* +*/ + + +#ifndef M_VTUICOMPONENTSTATEOBSERVER_H +#define M_VTUICOMPONENTSTATEOBSERVER_H + +/** +* MVtUiComponentStateObserver +* +* Observer API for popup based controls +* +* @since S60 v3.2 +*/ +class MVtUiComponentStateObserver + { + +public: + + /** + * Called when component state changes + */ + virtual void ComponenStateChangedL() = 0; + + }; + +#endif // M_VTUICOMPONENTSTATEOBSERVER_H \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/tvtuiappstatebase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/tvtuiappstatebase.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,250 @@ +/* +* Copyright (c) 2007 - 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" +* 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: Base class for application states. +* +*/ + + +#ifndef T_VTUIAPPSTATEBASE_H +#define T_VTUIAPPSTATEBASE_H + +#include +#include +#include "mvtuistatecontext.h" +#include "mvtuishutterobserver.h" +#include "tvtuistates.h" + +/** +* Base class for application states related to application startup, normal +* operation and shutdown. AppUi delegates decision making by forwarding +* events/commands it receives to current state. +* Not all event handlers declared by the base class are applicable in +* all concrete states. All methods returning TEventResponse imply that it may +* consume the event completely and caller should not process it further. +* +* It should be kept in mind that as new functionality is added to application, +* state classes may need changes if e.g. handling of specific event should be +* allowed in appUi. By default event handler in specific state may consume all +* events. Note that in this context e.g. HandleCommandL is considered as an +* event handler. +* +* @since S60 v3.2 +*/ +class TVtUiAppStateBase : public MVtUiShutterObserver + { +public: // new functions + + /** + * Return value from state's event handlers. + */ + enum TEventResponse + { + /** Event was handled by a state and should + * not be further processed by caller. + */ + EEventHandled, + /** Event can be handled by caller. */ + EEventNotHandled + }; + + /** + * Performs state dependent actions when phase 1 of + * startup is completed. + */ + virtual void AppUiStartupPhase1DoneL(); + + /** + * Performs state dependent actions when startup fails. + */ + virtual void AppUiStartupFailedL(); + + /** + * Performs state dependent actions when phase 2 of + * startup is completed. + */ + virtual void AppUiStartupPhase2DoneL(); + + /** + * Handles completion of shutdown. + */ + virtual void ShutdownDoneL(); + + /** + * Handles completion of an VT engine command. + * @param aCommand completed command + * @param aError error + * @return event response, is caller allowed to handle event + */ + virtual TEventResponse HandleVTCommandPerformedL( + const TVtEngCommandId aCommand, + const TInt aError ); + + /** + * Handles event from the engine. + * @param aEvent + * @return event response, is caller allowed to handle event + */ + virtual TEventResponse HandleVtEventL( const TInt aEvent ); + + /** + * Handles command from the user (or application framework). + * @param aCommand + * @return event response, is caller allowed to handle event + */ + virtual TEventResponse HandleCommandL( const TInt aCommand ); + + /** + * Performs state dependent actions for foreground change event. + * @param aIsForeground foreground status passed from UI framework + * @return ETrue if application should behave as in foreground + */ + virtual TBool HandleForegroundChangedL( const TBool aIsForeground ); + + /** + * Performs state dependent previous actions for foreground change event. + * @param aIsForeground foreground status passed from UI framework + * @return ETrue if application should behave as in foreground + */ + virtual TBool PreHandleForegroundChangedL( const TBool aIsForeground ); + /** + * Performs state dependent actions for layout change. + */ + virtual void HandleLayoutChangedL(); + + /** + * Sends DTMF tone if allowed by current state. + * @param aTone DTMF tone to send + */ + virtual void StartDtmfTone( const TChar& aTone ); + + /** + * Stops DTMF tone if allowed by current state. + */ + virtual void StopDtmfTone(); + + /** + * Sets initial application state. + * @param aCtx state context providing services to states + * @param aUiStates ui states + */ + static void SetInitialStateL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates); + +protected: // for concrete state classes + + /** + * Destructor, for cleanup. + */ + virtual ~TVtUiAppStateBase(); + + /** + * Performs entry action for a state. + */ + virtual void OpenL(); + + /** + * Performs exit action for a state and deletes that state. + */ + virtual void Close(); + + /** + * Sets current state. + */ + void ChangeStateL( TVtUiAppStateBase& aNewState ); + + /** + * Sets transition to resetting state as cleanup item. + */ + void CleanupResetPushL(); + + /** + * Starts shutdown when leave occurred. + */ + static void TransitionToReset( TAny* aAny ); + + + /** + * Ends the call if necessary and starts shutdown. + * @return ETrue if shutdown started. + */ + TBool CheckEndActiveCallL(); + + /** + * Returns engine session state. + * @param aUpdate is state forced to update + * @return session state + */ + MVtEngSessionInfo::TSessionState SessionState( + const TBool aUpdate ) const; + + /** + * Sets forced lights state in the system. + */ + void SetLightsState( const TBool aOn ); + + /** + * Delegates engine command execution to the state context. + */ + template < typename T > + inline void ExecuteEngineCommand( + TInt aCommand, T& aParam ); + + /** + * Sets execution state. + */ + void SetExecState( const TVtUiStates::TVtUiExecState aState ); + +protected: // constructor + + // c++ constructor + TVtUiAppStateBase( MVtUiStateContext& aCtx, TVtUiStates& aUiStates ); + +private: // from MVtUiShutterObserver + + /** + * Handles 'shutdown ready' event. + */ + virtual void HandleShutdownReady(); + +private: // new functions + + /** + * Updates applications lock state and sends to background if + * the device is locked. + */ + void HandleDeviceLockEventL( const TBool aDeviceIsLocked ); + +protected: // data members + + // Context providing services to states + MVtUiStateContext& iCtx; + + // Various application specific state information + TVtUiStates& iUiStates; + + /** Prevents sending end call command to call handling if ETrue. + * It is not allowed when call clearing is network originated. + */ + + /** + * shutdown request received + */ + static TBool iShutdownRequested; + + }; + +#include "tvtuiappstatebase.inl" + +#endif // T_VTUIAPPSTATEBASE_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/tvtuiappstatebase.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/tvtuiappstatebase.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 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: Base class for application states. +* +*/ + + +template < typename T > +inline void TVtUiAppStateBase::ExecuteEngineCommand( + TInt aCommand, T& aParam ) + { + TPtrC8 params( reinterpret_cast< TUint8* >( &aParam ), + sizeof( T ) ); + TRAP_IGNORE( iCtx.DoExecuteCmdL( aCommand, ¶ms ) ); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/tvtuiappstates.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/tvtuiappstates.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,274 @@ +/* +* Copyright (c) 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: Concrete application state classes +* +*/ + + +#ifndef T_VTUIAPPSTATES_H +#define T_VTUIAPPSTATES_H + +#include "tvtuiappstatebase.h" +#include +#include + +class CAknQueryDialog; + +/** +* Initial application state. Responsible for startup phase 1 and +* startup phase 2 (see EVtUiAppUiStartup in CVtUiAppUi.cpp). +* Certain other state changes are required for phase 2 and history +* of their reception is handled with precondition flags. +* +* @since S60 v3.2 +*/ +class TVtUiStateStarting : public TVtUiAppStateBase + { +public: + /** + * returns singleton instance of TVtUiStateStarting + * @param aCtx state context + * @param aUiStates UI states + * @return singleton + */ + static TVtUiStateStarting* InstanceL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ); + +public: // from TVtUiAppStateBase + + /** @see TVtUiAppStateBase */ + virtual void AppUiStartupPhase1DoneL(); + + /** @see TVtUiAppStateBase */ + virtual void AppUiStartupPhase2DoneL(); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleVtEventL( TInt aEvent ); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleCommandL( const TInt aCommand ); + + /** @see TVtUiAppStateBase */ + virtual TBool HandleForegroundChangedL( TBool aIsForeground ); + +private: // from TVtUiAppStateBase + + /** @see TVtUiAppStateBase */ + virtual void OpenL(); + + /** @see TVtUiAppStateBase */ + virtual void Close(); + +private: // new methods + + void CheckSessionStateL(); + static TInt AsynchOpen( TAny* aAny ); + + void DoOpenL(); + + /** Preconditions that must be passed in order to proceed + * to Phase 2 in startup. + */ + enum TPreconditions + { + /** waiting for CLI from engine*/ + EWaitingCLI, + /** waiting for phase1 to complete */ + EWaitingPhase1ToComplete, + /** waiting for engine to get proper state */ + EWaitingSessionState + }; + + /** + * Clears precondition passed as argument and checks if any + * preconditions hold and if not proceeds to phase 2 of startup. + */ + void CheckPhase2StartupL( const TPreconditions aClearCondition ); + + void HandleCLIReceivedL(); + +private: // constructors and destructors + + // c++ constructor + TVtUiStateStarting( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ); + + // Destructor + virtual ~TVtUiStateStarting(); + +private: // data members + + // Precondition for state change to running + TBitFlags8 iPreconditions; + + // Singleton + static TVtUiStateStarting* iInstance; + + // Starts phase1 startup in state state context. Needed because + // initial state is opened from within state context construction. + CAsyncCallBack* iStartCallback; + }; + +/** +* Application state that is active in normal operation. +* +* @since S60 v3.2 +*/ +class TVtUiStateRunning : public TVtUiAppStateBase + { +public: + /** + * returns singleton instance of TVtUiStateRunning + * @param aCtx state context + * @param aUiStates UI states + * @return singleton + */ + static TVtUiStateRunning* InstanceL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ); + +public: // from TVtUiAppStateBase + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleVtEventL( TInt aEvent ); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleCommandL( const TInt aCommand ); + + /** @see TVtUiAppStateBase */ + virtual TBool HandleForegroundChangedL( TBool aIsForeground ); + + /** @see TVtUiAppStateBase */ + virtual TBool PreHandleForegroundChangedL( TBool aIsForeground ); + /** @see TVtUiAppStateBase */ + virtual void HandleLayoutChangedL(); + + /** @see TVtUiAppStateBase */ + virtual void StartDtmfTone( const TChar& aTone ); + + /** @see TVtUiAppStateBase */ + virtual void StopDtmfTone(); + + /** @see TVtUiAppStateBase */ + virtual void OpenL(); + +private: // from TVtUiAppStateBase + /** @see TVtUiAppStateBase */ + virtual void Close(); + +private: // constructors and destructors + + // c++ constructor + TVtUiStateRunning( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ); + + // Destructor + virtual ~TVtUiStateRunning(); + +private: // new functions + + /** Requests call handling subsystem to initiate a voice call. + * Starts shutdown of the application. + */ + void CreateVoiceCallL(); + + /** Dials emergency call and starts shutdown */ + void DialEmergencyCallL(); + + void ShutdownWithEngineCommandL( const TInt aCommand ); + +private: // data members + // singleton + static TVtUiStateRunning* iInstance; + // Create voice call query instance + CAknQueryDialog* iCreateVoiceCallDlg; + }; + +/** +* Application state that is active during shutdown. +* +* @since S60 v3.2 +*/ +class TVtUiStateResetting : public TVtUiAppStateBase + { +public: + /** + * returns singleton instance of TVtUiStateResetting + * @param aCtx state context + * @param aUiStates UI states + * @param aCommand engine command to send when resetting state activates + * @return singleton + */ + static TVtUiStateResetting* InstanceL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates, + const TVtEngCommandId aCommand = KVtEngCommandNone ); + +public: // from TVtUiAppStateBase + + /** @see TVtUiAppStateBase */ + virtual void AppUiStartupFailedL(); + + /** @see TVtUiAppStateBase */ + virtual void ShutdownDoneL(); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleVtEventL( TInt aEvent ); + + /** @see TVtUiAppStateBase */ + virtual TEventResponse HandleCommandL( const TInt aCommand ); + + /** @see TVtUiAppStateBase */ + virtual TBool HandleForegroundChangedL( TBool aIsForeground ); + + /** @see TVtUiAppStateBase */ + virtual void HandleLayoutChangedL(); + +private: // from TVtUiAppStateBase + + /** @see TVtUiAppStateBase */ + virtual void OpenL(); + + /** @see TVtUiAppStateBase */ + virtual void Close(); + +private: // constructors and destructors + + // c++ constructor + TVtUiStateResetting( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates, + const TVtEngCommandId aCommand = KVtEngCommandNone ); + + // Destructor + virtual ~TVtUiStateResetting(); + +private: // data members + + // Singleton + static TVtUiStateResetting* iInstance; + + // Used in user originated shutdown (end active call/switch to voice) + TVtEngCommandId iCommand; + }; + +#endif // T_VTUIAPPSTATES_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/tvtuiwsevent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/tvtuiwsevent.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2006 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: VT UI window server event definition. +* +*/ + + +#ifndef T_VTUIWSEVENT_H +#define T_VTUIWSEVENT_H + +#include + +/** + * TVtUiWsEvent + * + * VT UI WS event code enumerations. Name 'code' used instead of 'type' to keep + * naming consistent with with window server. + */ +enum TVtUiWsEventCodes + { + // New number source activated + EVtUiWsEventNumberSourceActivate = EEventUser + 6000, + // Number source deactivated + EVtUiWsEventNumberSourceDeactivate, + // Enter rendering mode + EVtUiWsEventBeginRenderingMode, + // Leave rendering mode + EVtUiWsEventEndRenderingMode + }; + +/** + * TVtUiWsEvent + * + * Base class for VT UI ws events + * + * @since S60 v3.2 + */ +template < class T > +class TVtUiWsEvent : public TWsEvent + { + +public: + + /** + * Constructor + * + * @param aType Event type @see TVtUiWsEventCodes. + */ + inline TVtUiWsEvent( TInt aType, T* aData ); + + /** + * Return data contained in this event. + */ + inline T* Data() const; + + }; + +#include "tvtuiwsevent.inl" + +#endif // T_VTUIWSEVENT_H diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/tvtuiwsevent.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/tvtuiwsevent.inl Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2006 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: VT UI window server event inline methods. +* +*/ + + +// ----------------------------------------------------------------------------- +// TVtUiWsEvent::TVtUiWsEvent +// ----------------------------------------------------------------------------- +// +template < class T > +TVtUiWsEvent< T >::TVtUiWsEvent( TInt aType, T* aData ) + { + SetType( aType ); + Int()[ 0 ] = ( TInt ) aData; + } + +// ----------------------------------------------------------------------------- +// TVtUiWsEvent::Data +// ----------------------------------------------------------------------------- +// +template < class T > +T* TVtUiWsEvent< T >::Data() const + { + return ( T* )Int()[ 0 ]; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/inc/videotelui.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/inc/videotelui.hrh Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004-2006 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: Header for constants. +* +*/ + + +#ifndef VIDEOTELUI_HRH +#define VIDEOTELUI_HRH + +// CONSTANTS + +// Video Telephone application UID. +#define KVtUiAppUidValue 0x101F8681 + +// Enumerates commands +enum + { + // Enable submenu + EVtUiCmdEnableMain = 5000, + // Enable video + EVtUiCmdEnableVideo, //5001 + // Enable audio + EVtUiCmdEnableAudio, //5002 + // Enable both video and audio + EVtUiCmdEnableBoth, //5003 + // Disable submenu + EVtUiCmdDisableMain, //5004 + // Disable video + EVtUiCmdDisableVideo, //5005 + // Disable audio + EVtUiCmdDisableAudio, //5006 + // Disable both video and audio + EVtUiCmdDisableBoth, //5007 + // Deactivate BT handsfree + EVtUiCmdDeactivateBT, //5008 + // Deactivet BT and activate HF (used in toolbar) + EVtUiCmdSwitchFromBTToIHF, //5009 + // Activate BT handsfree + EVtUiCmdActivateBT, //5010 + // Activate loudspeaker + EVtUiCmdActivateLoudspeaker, //5011 + // Deactivate loudspeaker + EVtUiCmdDeactivateLoudspeaker, //5012 + // End active call + EVtUiCmdEndActiveCall, //5013 + // Use primary camera + EVtUiCmdUsePrimaryCamera, //5014 + // Use secondary camera + EVtUiCmdUseSecondaryCamera, //5015 + // Swap images' places + EVtUiCmdSwapImagesPlaces, //5016 + // Zoom + EVtUiCmdZoom, //5017 + // Send DTMF + EVtUiCmdSendDTMF, //5018 + // Switch to voice call + EVtUiCmdCreateVoice, //5019 + // Enable capture mode + EVtUiCmdSnapshot, //5020 + // Freeze outgoing video + EVtUiCmdCapture, //5021 + // Disable capture mode + EVtUiCmdCancelCapture, //5022 + // Go to Idle. + EVtUiCmdGoToIdle, //5023 + // Other items + EVtUiCmdOkOptions = 6000, + // Dial emergency + EVtUiCmdDialEmergency, + // Share object image + EVtUiCmdShareObjectImage = 6100, + // Share object video clip + EVtUiCmdShareObjectVideoClip, //6101 + // Stop sharing image object + EVtUiCmdStopSharingObjectImage, //6102 + // Stop sharing video clip object + EVtUiCmdStopSharingObjectVideoClip, //6103 + // Activates zoom mode + EVtUiCmdToolbarActivateZoomMode, //6104 + // Toggles disable video/ enable video + EVtUiCmdToolbarToggleVideo, //6105 + // Toggles mute audio/ unmute audi + EVtUiCmdToolbarToggleMicrophone, //6106 + // Changes audio routing + EVtUiCmdToolbarAudioRouting, //6107 + // Toggles primary/secondary camera + EVtUiCmdToolbarToggleCamera, //6108 + // Adjust video submenu + EVtUiCmdAdjustVideo, //6109 + // Adjust video preferences + EVtUiCmdAdjustVideoVideoQuality, //6110 + // Adjust video white balance + EVtUiCmdAdjustVideoWhiteBalance, //6111 + // Adjust video brightness + EVtUiCmdAdjustVideoBrightness, //6112 + // Adjust video contrast + EVtUiCmdAdjustVideoContrast, //6113 + // Adjust video colour tone + EVtUiCmdAdjustVideoColourTone, //6114 + // Dialer close + EVtUiDialerExit //6115 + }; + +// Enumerates bitmap identifiers +enum TVtUiBitmapId + { + // Reserved to indicate no bitmap. + EVtUiBitmapNone, + // Viewfinder background. + EVtUiBitmap_qgn_graf_call_video_out_bg, + // Viewfinder background mask. + EVtUiBitmap_qgn_graf_call_video_out_bg_mask, + // Blind in icon. + EVtUiBitmap_qgn_indi_call_video_blind_in, + // Blind out icon. + EVtUiBitmap_qgn_indi_call_video_blind_out, + // Earpiece icon. + EVtUiBitmap_qgn_indi_earpiece, + // Earpiece icon mask. + EVtUiBitmap_qgn_indi_earpiece_mask, + // Loudspeaker icon. + EVtUiBitmap_qgn_indi_speaker, + // Loudspeaker icon mask. + EVtUiBitmap_qgn_indi_speaker_mask, + // Zoom area mask. + EVtUiBitmap_qgn_graf_zoom_area, + // Zoom direction bitmap. + EVtUiBitmap_qgn_indi_zoom_dir, + // Zoom direction bitmap mask. + EVtUiBitmap_qgn_indi_zoom_dir_mask, + // Zoom area minimum icon. + EVtUiBitmap_qgn_indi_zoom_min, + // Zoom area maximum icon. + EVtUiBitmap_qgn_indi_zoom_max, + // Scalable blind in icon soft mask, + EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon, + // Scalable blind out icon soft mask, + EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon, + // Current active list item indicator + EVtUiBitmap_qgn_prop_sub_current, + // Current active list item indicator mask + EVtUiBitmap_qgn_prop_sub_current_mask + }; + +#endif // VIDEOTELUI_HRH + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/loc/videotelui.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/loc/videotelui.loc Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,396 @@ +/* +* Copyright (c) 2004 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: Localisation texts for Video Telephone application. +* +*/ + + +// LOCALISATION STRINGS + +// d: Text shown in fast swap window while there is active video call. +// l: cell_app_pane_t1 +// r: 2.6 +// +#define qtn_apps_videophone_grid "Video tel" + +// d: It is text for menu option. If it is selected, +// d: then submenu is opened containing Video / Audio / Both +// d: items. +// l: list_single_pane_t1_cp2/opt3 +// r: 2.6 +// +#define qtn_incal_enable_main_option "Enable" + +// d: It is text for submenu option. It enables / disables +// d: video. +// l: list_single_popup_submenu_pane_t1 +// r: 2.6 +// +#define qtn_incal_change_video_option "Video" + +// d: It is text for submenu option. It enables / disables +// d: audio. +// l: list_single_popup_submenu_pane_t1 +// r: 2.6 +// +#define qtn_incal_change_audio_option "Audio" + +// d: It is text for submenu option. It enables / disables +// d: both audio and video. +// l: list_single_popup_submenu_pane_t1 +// r: 2.6 +// +#define qtn_incal_change_both_option "Both" + +// d: It is text for menu option. If it is selected, +// d: then submenu is opened containing Video / Audio / Both +// d: items. +// l: list_single_pane_t1_cp2/opt3 +// r: 2.6 +// +#define qtn_incal_disable_main_option "Disable" + +// d: It is text for menu option. If it is selected, +// d: then zoom mode is activated. +// l: list_single_pane_t1_cp2 +// r: 2.6 +// +#define qtn_incal_zoom_own_video "Zoom" + +// d: It is the prompt in confirmation query shown when +// d: incoming video call is answered. +// l: popup_note_window +// r: 3.2 +// +#define qtn_incal_send_video_image "Allow video image?" + +// d: It is text for options menu list item. +// d: It opens touch input window for sending DTMF tones +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_send_dtmf_tone_option "Activate keypad" + +// d: It it text shown in title pane during active +// d: video call. %N is replaced with call index. +// l: title_pane_t2/opt9 +// r: 2.6 +// +#define qtn_call_number_video "Call %N" + +// d: It is text shown in main pane until the first image +// d: is received. +// l: main_list_empty_pane +// r: 2.6 +// +#define qtn_incal_waiting_image "Waiting image..." + +// d: It is text shown in a note when video call is +// d: answered and camera activation fails, because +// d: camera is in use in other application. +// l: popup_note_window +// r: 2.6 +// +#define qtn_incal_close_camcorder "Camera already in use an other application." + +// d: It is text in softkey to enable audio (unmute microphone). +// l: control_pane_t1/opt7 +// r: 2.6 +// +#define qtn_incal_softk_enable_audio "Enable audio" + +// d: It is text for menu option. If it is selected, +// d: then swaps locations of uplink and downlink +// d: video streams. +// l: list_single_pane_t1_cp2 +// r: 2.8 +// +#define qtn_incal_swap_vt_images "Swap images' places" + +// d: It is text shown in a note when "use primary +// d: camera" or "use secondary camera" operations fails. +// l: popup_note_window +// r: 2.6 +// +#define qtn_err_cam_swap "Other camera wasn't usable" + +// d: It is text for menu option. If it is selected, +// d: then new softkeys are now Capture and Cancel. +// l: list_single_pane_t1_cp2 +// r: 3.1 +// +#define qtn_incal_snapshot_option "Snapshot" + +// d: It is text for right softkey in freeze mode. +// l: control_pane_t1/opt7 +// r: 3.1 +// +#define qtn_softk_capture "Capture" + +// d: It is text for switch +// d: to voice query dialog. +// l: popup_note_window +// r: 3.1 +#define qtn_query_create_voice_call "End active call and create voice call to the same contact?" + +// d: It is text for menu option. +// d: It switches video to voice call. +// l: list_single_pane_t1_cp2 +// r: 3.1 +#define qtn_incal_video_to_voice "Switch to voice call" + +// d: It is text for menu option. +// d: It opens dialog for selecting image to be shared with peer. +// l: list_single_pane_t1_cp2 +// r: 3.1 +#define qtn_incal_video_call_share_file "Share file" + +// d: It is text for softkey option. +// d: It stops sending selected image to peer. +// l: control_pane_t1/opt7 +// r: 3.1 +#define qtn_softk_disable_share "Disable share" + +//d: Error note text when user selects image that cannot be opened. +//d: Corrupted or unsupported image selected. +//l: popup_note_window +//r:3.1 +// +#define qtn_tel_info_unable_open_image "Unable to open image" + +//d: Error note text when user selects multiframe image that is corrupted. +//d: Corrupted image selected. +//l: popup_note_window +//r: 5.0 +// +#define qtn_incal_note_decoding_failed "Unable to animate image" + +//d: Error note text when user selects a DRM protected image. +//d: DRM protected media gallery object selected. +//l: popup_note_window +//r:3.1 +// +#define qtn_drm_not_allowed "Unable to select protected objects" + +//d: Text for image initializing wait note +//d: Shown when image to be shared is being initialized. +//l: popup_note_wait_window +//r:3.1 +// +#define qtn_vt_progress_decoding_image "Decoding image" + +//d: Toolbar tooltip for disable video. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_disable_video "Disable video sending" + +//d: Toolbar tooltip for enable video. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_enable_video "Enable video sending" + + +//d: Toolbar tooltip for mute microphone. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_mute_microphone "Mute microphone" + +//d: Toolbar tooltip for unmute microphone. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_unmute_microphone "Unmute microphone" + +//d: Toolbar tooltip for swap images. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_swap_images "Change image order" + +//d: Toolbar tooltip for secondary camera. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_secondary_cam "Use secondary camera" + +//d: Toolbar tooltip for primary camera. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_primary_cam "Use primary camera" + +//d: Toolbar tooltip for zoom. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_zoom "Activate zoom mode" + +//d: Toolbar tooltip for share. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_share "Share file" + +//d: Toolbar tooltip for send snapshot. +//l: popup_preview_text_window_t1 +//r:3.2 +// +#define qtn_vt_tooltip_send_snapshot "Send snapshot" + +// d: It is text for menu option. +// d: It opens submenu with Received video quality / White balance / +// d: Brightness / Contrast / Colour tone +// l: list_single_pane_t1_cp2/opt3 +// r: 5.0 +#define qtn_incal_video_adjust_option "Adjust video" + +// d: It is text for submenu option. +// d: It opens list query dialog with options Normal / Details / Motion. +// l: list_single_popup_submenu_pane_t1 +// r: 5.0 +#define qtn_incal_video_prefer_option "Received video quality" + +// d: It is text for list query option. +// d: It adjusts incoming video frame rate to 10 frames per second. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_normal_list_option "Normal" + +// d: It is text for list query option. +// d: It adjusts incoming video frame rate to 5 frames per second. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_details_list_option "Details" + +// d: It is text for list query option. +// d: It adjusts incoming video frame rate to 15 frames per second. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_motion_list_option "Motion" + +// d: It is text for submenu option. +// d: It opens list query dialog with options Automatic / Sunny / Cloudy / +// d: Incandescent / Fluorescent +// l: list_single_popup_submenu_pane_t1 +// r: 5.0 +#define qtn_incal_video_white_balance_option "White balance" + +// d: It is text for list query option. +// d: It adjusts incoming video frame rate to 15 frames per second. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_automatic_option "Automatic" + +// d: It is text for list query option. +// d: It adjusts white balance of outgoing video. +// d: It sets white balance to Sunny. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_sunny_option "Sunny" + +// d: It is text for list query option. +// d: It adjusts white balance of outgoing video. +// d: It sets white balance to Cloudy. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_cloudy_option "Cloudy" + +// d: It is text for list query option. +// d: It adjusts white balance of outgoing video. +// d: It sets white balance to Incandescent. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_incandescent_option "Incandescent" + +// d: It is text for list query option. +// d: It adjusts white balance of outgoing video. +// d: It sets white balance to Fluorescent. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_fluorescent_option "Fluorescent" + +// d: It is text for submenu option. +// d: It shows control for adjusting outgoing video Brightness. +// l: list_single_popup_submenu_pane_t1 +// r: 5.0 +#define qtn_incal_video_brightness_option "Brightness" + +// d: It is text for submenu option. +// d: It shows control for adjusting outgoing video Contrast. +// l: list_single_popup_submenu_pane_t1 +// r: 5.0 +#define qtn_incal_video_contrast_option "Contrast" + +// d: It is text for submenu option. +// d: It opens list query dialog with options Normal / Sepia / +// d: Black and white / Negative +// l: list_single_popup_submenu_pane_t1 +// r: 5.0 +#define qtn_incal_video_colour_tone_option "Colour tone" + +// d: It is text for list query option. +// d: It adjusts colour tone of outgoing video. +// d: It sets colour tone to Normal. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_ct_normal_option "Normal" + +// d: It is text for list query option. +// d: It adjusts colour tone of outgoing video. +// d: It sets colour tone to Sepia. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_sepia_option "Sepia" + +// d: It is text for list query option. +// d: It adjusts colour tone of outgoing video. +// d: It sets colour tone to Black and white. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_b_and_w_option "Black and white" + +// d: It is text for list query option. +// d: It adjusts colour tone of outgoing video. +// d: It sets colour tone to Negative. +// l: list_single_pane_t1_cp2 +// r: 5.0 +#define qtn_incal_negative_option "Negative" + +// d: Toolbar tooltip for changing audio routing to handset. +// l: popup_preview_text_window_t1 +// r: 5.0 +// +#define qtn_vt_tooltip_audio_handset "Audio to handset" + +// d: Toolbar tooltip for changing audio routing to loudspeaker. +// l: popup_preview_text_window_t1 +// r: 5.0 +// +#define qtn_vt_tooltip_audio_loudspeaker "Audio to loudspeaker" + +// d: Toolbar tooltip for changing audio routing to bluetooth handsfree. +// l: popup_preview_text_window_t1 +// r: 5.0 +// +#define qtn_vt_tooltip_audio_bthf "Audio to Bluetooth handsfree" + +// d: It is text in softkey to open dialer (for dtmf sending). +// l: control_pane_t1/opt7 +// r: 5.0 +// +#define qtn_incal_softk_dialer "Dialer" + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/rom/videotelui.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/rom/videotelui.iby Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2004-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: IBY file + * +*/ + + +#ifndef __VIDEOTELUI_IBY__ +#define __VIDEOTELUI_IBY__ + +REM Video Telephone application + +#ifdef __CS_VIDEO_TELEPHONY + +S60_APP_EXE(videotelui) +S60_APP_AIF_ICONS(videotelui) +S60_APP_BITMAP(videotelui) + +// Enabler for eclipsing ROM binaries +data=ZSYSTEM\install\videotelui_stub.sis system\install\videotelui_stub.sis +data=ZPRIVATE\10003a3f\apps\videotelui_reg.rsc private\10003a3f\import\apps\videotelui_reg.rsc + +#if defined ( RD_VT_RTF ) + +data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\VtStartRecord.wav System\sounds\digital\VtStartRecord.wav +data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\VtStopRecord.wav System\sounds\digital\VtStopRecord.wav + +#endif //RD_VT_RTF +#endif // __CS_VIDEO_TELEPHONY +#endif diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/rom/videoteluiResources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/rom/videoteluiResources.iby Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2004-2005 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 + * +*/ + + +#ifndef __VIDEOTELUI_RESOURCES_IBY__ +#define __VIDEOTELUI_RESOURCES_IBY__ + +#ifdef __CS_VIDEO_TELEPHONY +data=DATAZ_\APP_RESOURCE_DIR\videotelui.rsc APP_RESOURCE_DIR\videotelui.rsc +#endif // __CS_VIDEO_TELEPHONY + +#endif \ No newline at end of file diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiActivateBtHfDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiActivateBtHfDialog.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2004-2006 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 the CVtUiActivateBtHfDialog class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiActivateBtHfDialog.h" +#include "MVtUiEngineCommandManager.h" +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiActivateBtHfDialog::CVtUiActivateBtHfDialog +// ----------------------------------------------------------------------------- +// +CVtUiActivateBtHfDialog::CVtUiActivateBtHfDialog( + CEikDialog** aSelfPtr, + TInt* aError, + MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager ) + : CAknWaitDialog( aSelfPtr ), + iCommandHandler( aCommandHandler ), + iCommandManager( aCommandManager ), + iError( aError ), + iAudioRouting( MVtEngAudio::EActivateBT ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiActivateBtHfDialog::~CVtUiActivateBtHfDialog +// ----------------------------------------------------------------------------- +// +CVtUiActivateBtHfDialog::~CVtUiActivateBtHfDialog() + { + if ( iError ) + { + *iError = KErrCancel; + iError = NULL; + } + + if ( iCommandPerformed ) + { + iCommandHandler.CancelCommand( KVtEngSetAudioRouting ); // ignore error + } + iCommandManager.RemoveObserver( *this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiActivateBtHfDialog::ExecuteDialogLD +// ----------------------------------------------------------------------------- +// +void CVtUiActivateBtHfDialog::ExecuteDialogLD() + { + CleanupStack::PushL( this ); + iCommandManager.AddObserverL( *this ); + SetTone( CAknNoteDialog::ENoTone ); + CleanupStack::Pop( this ); + + ExecuteLD( R_VIDEOTELUI_BTHF_CONNECT_WAIT_NOTE ); + } + +// ----------------------------------------------------------------------------- +// CVtUiActivateBtHfDialog::PostLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CVtUiActivateBtHfDialog::PostLayoutDynInitL() + { + iCommandHandler.ExecuteL( KVtEngSetAudioRouting, &iAudioRouting ); + iCommandPerformed = ETrue; + + CAknWaitDialog::PostLayoutDynInitL(); + } + +// ----------------------------------------------------------------------------- +// CVtUiActivateBtHfDialog::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +void CVtUiActivateBtHfDialog::HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ) + { + if ( aCommand == KVtEngSetAudioRouting ) + { + if ( iError ) + { + *iError = aError; + iError = NULL; + } + + ProcessFinishedL(); + } + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiActiveExec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiActiveExec.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2004 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 the CVtUiActiveExec class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiActiveExec.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::CVtUiActiveExec +// ----------------------------------------------------------------------------- +// +CVtUiActiveExec::CVtUiActiveExec( + const TInt aPriority ) + : CActive( aPriority ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::~CVtUiActiveExec +// ----------------------------------------------------------------------------- +// +CVtUiActiveExec::~CVtUiActiveExec() + { + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::Start +// ----------------------------------------------------------------------------- +// +void CVtUiActiveExec::Start( + TInt aStartState, + MVtUiActiveExec& aExec ) + { + Cancel(); + + iInitialState = aStartState; + iCurrentState = aStartState; + iNextState = aStartState; + + iActiveExec = &aExec; + + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::InitialState +// ----------------------------------------------------------------------------- +// +TInt CVtUiActiveExec::InitialState() const + { + return iInitialState; + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::RequestStatus +// ----------------------------------------------------------------------------- +// +TInt CVtUiActiveExec::RequestStatus() const + { + return iStatus.Int(); + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::RunL +// ----------------------------------------------------------------------------- +// +void CVtUiActiveExec::RunL() + { + User::LeaveIfError( iStatus.Int() ); + TBool synch = ETrue; + + // Execute to the next asynchronous operation. + while ( synch ) + { + iCurrentState = iNextState; + if ( iCurrentState ) + { + synch = iActiveExec->ActiveExecExecuteL( + *this, + iCurrentState, + iNextState, + iStatus ); + + if ( !synch ) + { + SetActive(); + } + } + else + { + iActiveExec->ActiveExecDone( *this, iInitialState ); + if ( !IsActive() ) + { + iInitialState = 0; + } + + synch = EFalse; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtUiActiveExec::DoCancel() + { + if ( iActiveExec ) + { + iActiveExec->ActiveExecCancel( *this, iCurrentState ); + + iCurrentState = 0; + iActiveExec = NULL; + iInitialState = 0; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiActiveExec::RunError +// ----------------------------------------------------------------------------- +// +TInt CVtUiActiveExec::RunError( TInt aError ) + { + if ( iActiveExec->ActiveExecContinue( *this, iCurrentState, aError ) ) + { + iNextState = iCurrentState; + + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + } + else + { + if ( !IsActive() ) + { + iInitialState = 0; + } + } + + return KErrNone; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiAllowVideoDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiAllowVideoDialog.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004 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 the CVtUiAllowVideoDialog class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiAllowVideoDialog.h" +#include +#include + +// CONSTANTS + +// Timeout for allow video query. +const TInt KVtUiAllowVideoDialogTimeout = 5000000; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::CVtUiAllowVideoDialog +// ----------------------------------------------------------------------------- +// +CVtUiAllowVideoDialog::CVtUiAllowVideoDialog( + CEikDialog** aSelfPtr, + const TTone& aTone ) + : CAknQueryDialog( aTone ), + iSelfPtr( aSelfPtr ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::~CVtUiAllowVideoDialog +// ----------------------------------------------------------------------------- +// +CVtUiAllowVideoDialog::~CVtUiAllowVideoDialog() + { + if ( iSelfPtr ) + { + *iSelfPtr = NULL; + iSelfPtr = NULL; + } + + if ( iRequestStatus ) + { + User::RequestComplete( iRequestStatus, KErrNone ); + iRequestStatus = NULL; + } + + delete iQueryTimer; + } + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::ExecuteDialogLD +// ----------------------------------------------------------------------------- +// +void CVtUiAllowVideoDialog::ExecuteDialogLD( + TRequestStatus& aStatus ) + { + aStatus = KRequestPending; + + HBufC* prompt = StringLoader::LoadLC( R_VIDEOTELUI_QTN_SEND_VIDEO_IMAGE ); + + PrepareLC( R_VIDEOTELUI_ALLOW_VIDEO_QUERY ); + SetPromptL( *prompt ); + RunLD(); + + CleanupStack::PopAndDestroy( prompt ); + iRequestStatus = &aStatus; + } + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::PostLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CVtUiAllowVideoDialog::PostLayoutDynInitL() + { + CAknQueryDialog::PostLayoutDynInitL(); + + iQueryTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + iQueryTimer->Start( + KVtUiAllowVideoDialogTimeout, + KVtUiAllowVideoDialogTimeout, + TCallBack( DoDismissDialogTimeoutL, this ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAllowVideoDialog::OkToExitL( TInt aCommand ) + { + const TBool exit = + CAknQueryDialog::OkToExitL( aCommand ); + + if ( exit ) + { + CVtUiAllowVideoDialog::TResult result = + CVtUiAllowVideoDialog::EQueryCanceled; + + switch ( aCommand ) + { + case EAknSoftkeyOk: + case EAknSoftkeyYes: + result = CVtUiAllowVideoDialog::EUserAllowed; + break; + + case EAknSoftkeyNo: + result = CVtUiAllowVideoDialog::EUserDenied; + break; + + default: + break; + } + + if ( iRequestStatus ) + { + User::RequestComplete( iRequestStatus, result ); + iRequestStatus = NULL; + } + } + + return exit; + } + +// ----------------------------------------------------------------------------- +// CVtUiAllowVideoDialog::DoDismissDialogTimeoutL +// ----------------------------------------------------------------------------- +// +TInt CVtUiAllowVideoDialog::DoDismissDialogTimeoutL( TAny* aAny ) + { + CVtUiAllowVideoDialog* self = + static_cast< CVtUiAllowVideoDialog* >( aAny ); + + TRequestStatus* status = self->iRequestStatus; + self->iRequestStatus = NULL; + + delete self; + + User::RequestComplete( + status, + CVtUiAllowVideoDialog::EQueryDismissedTimeout ); + + return KErrNone; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiApp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiApp.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2004 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 the CVtUiApp application class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiApp.h" +#include "CVtUiDoc.h" +#include "videotelui.hrh" + +#include + +// CONSTANTS + +// UID of Video Telephone application. +const TUid KVtUiAppUid = { KVtUiAppUidValue }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiApp::CVtUiApp +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiApp::CVtUiApp() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiApp::CreateDocumentL +// Creates CVtUiDoc instance. +// ----------------------------------------------------------------------------- +// +CApaDocument* CVtUiApp::CreateDocumentL() + { + return new ( ELeave ) CVtUiDoc( *this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiApp::AppDllUid +// Returns application uid. +// ----------------------------------------------------------------------------- +// +TUid CVtUiApp::AppDllUid() const + { + return KVtUiAppUid; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// --------------------------------------------------------- +// NewApplication implements +// +// Creates an instance of application. +// +// Returns: an instance of CVtUiApp +// --------------------------------------------------------- +// +LOCAL_C CApaApplication* NewApplication() + { + return new CVtUiApp; + } + +// --------------------------------------------------------- +// E32Main implements +// +// It is called when executable is started. +// +// Returns: error code. +// --------------------------------------------------------- +// +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication( NewApplication ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiAppUi.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,7302 @@ +/* +* Copyright (c) 2004 - 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" +* 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 the CVtUiAppUi application UI class. +* +*/ + + + +// INCLUDE FILES +#include "videotelui.hrh" +#include "CVtUiAppUi.h" +#include "CVtUiMainControl.h" +#include "CVtUiContextControl.h" +#include "CVtUiNumberEntryActivationControl.h" +#include "CVtUiNaviPane.h" +#include "VtUiLayout.h" +#include "MVtUiEngineCommandManager.h" +#include "CVtUiExecuteCmdDialog.h" +#include "CVtUiAllowVideoDialog.h" +#include "CVtUiBlankControl.h" +#include "VtUiLayout.h" +#include "VtUiUtility.h" +#include "VtUiPanic.h" +#include "CVtUiActivateBtHfDialog.h" +#include "CVtUiRemoteVideoControl.h" +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CVtUiBitmapManager.h" + +#include +#include +#include +#include + +#include "cvtuifeaturemanager.h" +#include "cvtuicomponentmanager.h" +#include "cvtuicommandmanager.h" +#include "tvtuistates.h" +#include "cvtuimenus.h" +#include "cvtuisoftkeys.h" +#include "cvtuitoolbarbase.h" +#include "cvtuiwhitebalance.h" +#include "cvtuicolortone.h" +#include "cvtuibrightness.h" +#include "cvtuicontrast.h" +#include +#include +#include +#include "tvtuiwsevent.h" +#include "mvtuinumbersource.h" +#include "tVtuifeaturevariation.h" +#include "cvtuidialer.h" +#include "tvtuiappstates.h" +#include "cvtuivolume.h" +#include "cvtuizoom.h" +#include "cvtuivolumecontrol.h" + +using namespace ContentAccess; + +// CONSTANTS + +// Engine orientation to application orientation map +const CVtUiAppUi::TAppUiOrientation engToAppOrientation[] = { + CVtUiAppUi::EAppUiOrientationLandscape, + CVtUiAppUi::EAppUiOrientationPortrait, + CVtUiAppUi::EAppUiOrientationUnspecified }; + +// Amount of help contexts. +const TInt KVtUiHelpContextAmount = 1; + +// UID of Video Telephone application. +const TUid KVtUiAppUid = { KVtUiAppUidValue }; + +// Granularity of command observer array. +const TInt KVtUiCommandObserverArrayGranularity = 5; + +// Default call index. +const TInt KVtUiDefaultCallId = 1; + +// Control priority for the blank control. Above all other controls. +const TInt KVtUiBlankControlPriority = + ECoeStackPriorityEnvironmentFilter + 100; + +// Exit timeout. +const TInt KVtUiExitTimeout = 10000000; + +// UID of the main telephone application +const TUid KVtUiTelephoneUid = { 0x100058B3 }; + +// Reset value for volume +const TInt KVolumeResetValue = -1; + + +// Name of the EIKON server window group. +_LIT( KVtUiEikonServer, "EikonServer" ); + +// Name of the AknCapServer window group. +_LIT( KVtUiAknCapServer, "*akncapserver*" ); + +// Name of the AknNotifierServer window group. +_LIT( KVtUiAknNotifierServer, "*aknnfysrv*" ); + +// Volume repeat delay. +const TInt KVtUiVolumeRepeatDelay = KAknStandardKeyboardRepeatRate; + +// Volume repeat long delay. +const TInt KVtUiVolumeRepeatLongDelay = KAknKeyboardRepeatInitialDelay; + +// Start time for toolbar timer +const TTimeIntervalMicroSeconds32 KStartTime( 600000 ); + +// period time for toolbar timer +const TTimeIntervalMicroSeconds32 KPeriodTime( 300000 ); + +// The maximum frequency that user can swap image places. +const TInt64 KVtUiMaxSwapImagesFreq( 1000000 ); + +// Enumerates methods used in event handling. This enumeration MUST +// match with methodArray local array. +enum TVtUiHandleEvents + { + // Refresh states + EVtUiRefreshStates = 1 << 0, + // Handle remote problem. + EVtUiHandleVideoFrameRemoteProblem = 1 << 1, + // Handle local problem. + EVtUiHandleVideoFrameLocalProblem = 1 << 2, + // Refresh navipane. + EVtUiRefreshNaviPane = 1 << 3, + // Refresh softkeys. + EVtUiRefreshSoftkeys = 1 << 4, + // Refresh blind icon status. + EVtUiRefreshBlind = 1 << 5, + // Stop showing waiting image text. + EVtUiStopWaitingImage = 1 << 6, + // Rx resolution changed. + EVtUiChangeRemoteVideoLayout = 1 << 7, + // Show initializing image progress + EVtUiShowImageInitializingProgress = 1 << 8, + // Hide initializing image progress + EVtUiHideImageInitializingProgress = 1 << 9, + // Set camera orientation + EVtUiSetOrientation = 1 << 10, + //Handle media status change + EVtUiMediaStateChanged = 1 << 11, + //Show decoding error note + EVtUiShowDecodingError = 1 << 12, + // Stop the white balance and color tone + EVtUiStopWBOrColortone = 1 << 13, + // refresh Menu + EVtUiRefreshMenu = 1 << 14, + // Stop brightness and contrast slider + EVtUiStopBrightnessOrContrast = 1 << 15, + // refresh zoom popup + EVtUiRefreshZoomPopup = 1 << 16 + }; + +// Enumerates states for CVtUiActiveExec. +enum + { + // Operation finished. Must equal to zero. + EVtUiAppUiNone, + + // Active execution states for iActiveExec: + + // Startup (prepare engine): + EVtUiAppUiStartup = 100, // 100 + // Close dialogs. + EVtUiAppUiStartupCloseDialogs = EVtUiAppUiStartup, // 100 + // Initialise engine. + EVtUiAppUiStartupInitEngine, // 101 + // Prepare viewfinder. + EVtUiAppUiStartupPrepareViewfinder, // 102 + // Prepare remote render. + EVtUiAppUiStartupPrepareRemoteRender, // 103 + // Remove blank. + EVtUiAppUiStartupRemoveBlank, // 104 + + // Shutdown (reset engine): + EVtUiAppUiShutdown = 300, // 300 + // Close dialogs. + EVtUiAppUiShutdownCloseDialogs = EVtUiAppUiShutdown, // 300 + // Hide application. + EVtUiAppUiShutdownHideApplication, // 301 + // Reset engine. + EVtUiAppUiShutdownResetEngine, // 302 + // Remove blank. + EVtUiAppUiShutdownRemoveBlank, // 303 + + // Answered: + EVtUiAppUiAnswered = 500, // 500 + // Show blank dialog. + EVtUiAppUiAnsweredStart = EVtUiAppUiAnswered, // 500 + // Refresh navipane. + EVtUiAppUiAnsweredRefreshNavi, // 501 + // Refresh softkeys. + EVtUiAppUiAnsweredRefreshSoftkeys, // 502 + // Start remote render. + EVtUiAppUiAnsweredStartRemoteRender, // 503 + + // Prepares camera + EVtUiAppUiAnsweredCheckCamera, // 504 + // Choose if it's needed to show query or directly activate camera. + EVtUiAppUiAnsweredChoose, // 505 + // Set still image as source. + EVtUiAppUiAnsweredQuerySetupStill, // 506 + // Set none as source. + EVtUiAppUiAnsweredQuerySetupNone, // 507 + // Start viewfinder. + EVtUiAppUiAnsweredQuerySetupStart, // 508 + // Show "allow video image" query. + EVtUiAppUiAnsweredQueryShow, // 509 + // Check if user allowed video image. + EVtUiAppUiAnsweredQueryDecide, // 510 + // Select camera as source. + EVtUiAppUiAnsweredQuerySelectCamera, // 511 + // Select still image as source. + EVtUiAppUiAnsweredQuerySelectStill, // 512 + // Select none as source. + EVtUiAppUiAnsweredQuerySelectNone, // 513 + // Start viewfinder. + EVtUiAppUiAnsweredQueryStartViewfinder, // 514 + // Finish. + EVtUiAppUiAnsweredQueryFinish, // 515 + // Select camera as source. + EVtUiAppUiAnsweredSelectCamera, // 516 + // Select still image as source. + EVtUiAppUiAnsweredSelectStill, // 517 + // Select none as source. + EVtUiAppUiAnsweredSelectNone, // 518 + // Start viewfinder. + EVtUiAppUiAnsweredStartViewfinder, // 519 + // Finish. + EVtUiAppUiAnsweredFinish, // 520 + + // Prepares camera + EVtUiAppUiAnsweredDoPrepareCamera // 521 + }; + +/** +* Enumerates background layers +*/ +enum TVtUiBackgroundLayers + { + // Idle state background. + EVtUiLayerBackground = 0, + // Wallpaper layout. + EVtUiLayerWallpaper = 1, + // Amount of layers. + EVtUiLayerCount = 2 + }; + +// MODULE DATA STRUCTURES + +/** +* Asynchronous command executor that does not use dialog for waiting the +* execution completion. +* @since Series 60 5.0 +*/ +class CVtEngCmdExec : public CBase, private MVtEngCommandObserver + { + +public: + /** + * Static constructor. + */ + static CVtEngCmdExec* NewL( MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager, + CEikButtonGroupContainer& aCBA ); + + /** + * Executes given command asynchronously, waiting the command completion. + */ + void ExecuteCmdLD( const TVtEngCommandId aCommandId ); + + /** + * Destructor. + */ + ~CVtEngCmdExec(); + +private: // from MVtEngCommandObserver + + /** + * @see MVtEngCommandObserver::HandleVTCommandPerformedL + */ + void HandleVTCommandPerformedL( TVtEngCommandId aCommand, + const TInt aError ); + +private: + + /** + * Constructor. + */ + CVtEngCmdExec( MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager, + CEikButtonGroupContainer& aCBA ); + +private: + + CActiveSchedulerWait iWait; + + MVtEngCommandHandler& iCommandHandler; + + MVtUiEngineCommandManager& iCommandManager; + + TVtEngCommandId iCommandId; + + CEikButtonGroupContainer& iCBA; + + }; + +// ----------------------------------------------------------------------------- +// CVtEngCmdExec::NewL +// ----------------------------------------------------------------------------- +// +CVtEngCmdExec* CVtEngCmdExec::NewL( MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager, CEikButtonGroupContainer& aCBA ) + { + CVtEngCmdExec* self = new ( ELeave ) CVtEngCmdExec( aCommandHandler, + aCommandManager, aCBA ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtEngCmdExec::ExecuteCmdLD +// ----------------------------------------------------------------------------- +// +void CVtEngCmdExec::ExecuteCmdLD( const TVtEngCommandId aCommandId ) + { + __VTPRINTENTER("CVtEngCmdExec::ExecuteCmdLD") + CleanupStack::PushL( this ); + iCommandId = aCommandId; + iCommandManager.AddObserverL( *this ); + iCommandHandler.ExecuteL( aCommandId, NULL ); + iCBA.SetCommandSetL( R_VIDEOTELUI_SOFTKEYS_EMPTY ); + iCBA.DrawNow(); + iWait.Start(); + CleanupStack::PopAndDestroy(); // this + __VTPRINTEXIT("CVtEngCmdExec::ExecuteCmdLD") + } + +// ----------------------------------------------------------------------------- +// CVtEngCmdExec::~CVtEngCmdExec +// ----------------------------------------------------------------------------- +// +CVtEngCmdExec::~CVtEngCmdExec() + { + __VTPRINTENTER("CVtEngCmdExec::~CVtEngCmdExec") + if ( iWait.IsStarted()) + { + __VTPRINT(DEBUG_GEN, "CVtEngCmdExec::~CVtEngCmdExec AsyncStop") + iWait.AsyncStop(); + } + iCommandManager.RemoveObserver( *this ); + __VTPRINTEXIT("CVtEngCmdExec::~CVtEngCmdExec") + } + +// ----------------------------------------------------------------------------- +// CVtEngCmdExec::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +void CVtEngCmdExec::HandleVTCommandPerformedL( TVtEngCommandId aCommand, + const TInt aError ) + { + __VTPRINTENTER("CVtEngCmdExec::HandleVTCommandPerformedL") + if ( iCommandId == aCommand ) + { + if ( iWait.IsStarted()) + { + __VTPRINT(DEBUG_GEN, "CVtEngCmdExec::HandleVTCommandPerformedL AsyncStop") + iWait.AsyncStop(); + } + else + { + // request already completed + } + } + else + { + // wrong command ID + } + __VTPRINTEXIT("CVtEngCmdExec::HandleVTCommandPerformedL") + } + +// ----------------------------------------------------------------------------- +// CVtEngCmdExec::CVtEngCmdExec +// ----------------------------------------------------------------------------- +// +CVtEngCmdExec::CVtEngCmdExec( MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager, CEikButtonGroupContainer& aCBA ) + : iCommandHandler( aCommandHandler ), + iCommandManager( aCommandManager ), iCBA( aCBA ) + { + } + +/** +* Encapsulates all instances related to user interface. +* @since Series 60 2.6 +*/ +class CVtUiAppUi::CInstance + : public CBase + { + public: // Constructors and destructors + + /** + * Two-phased constructor. + * @param aAppUi reference to application UI. + */ + static CInstance* NewL( CVtUiAppUi& aAppUi ); + + /** + * Destructor. + */ + ~CInstance(); + + /** + * Called when side volume key is pressed. + */ + void VolumeKeyPressedL(); + + /** + * Create remote video control. + */ + void CreateRemoteVideoControl(); + + private: + + /** + * Constructor. + */ + CInstance( CVtUiAppUi& aAppUi ); + + /** + * Symbian OS constructor. + */ + void ConstructL(); + + /** + * Relayout controls. + */ + void LayoutChanged(); + + private: + + // Parent can access members. + friend class CVtUiAppUi; + + // Ref to application UI. + CVtUiAppUi& iAppUi; + + // Owned bitmap manager. + CVtUiBitmapManager* iBitmapManager; + + // ETrue if iMainControl has been added to stack. + TBool iMainControlInStack; + + // Owned main pane control. + CVtUiMainControl* iMainControl; + + // ETrue if iContextControl has been added to stack. + TBool iContextControlInStack; + + // Owned context pane control. + CVtUiContextControl* iContextControl; + + // Owned remote video control. + CVtUiRemoteVideoControl* iRemoteVideoControl; + + //ETrue if iRemoteVideoControl has been added to stack. + TBool iRemoteVideoControlInStack; + + // Owned navi pane controller. + CVtUiNaviPane* iNaviPane; + + // ETrue if number entry has been added to stack. + TBool iNumberEntryInStack; + + // Owned number entry activation control. + CVtUiNumberEntryActivationControl* iNumberEntryActivation; + + }; + +/** +* Encapsulates event handling. +* @since Series 60 2.6 +*/ +class CVtUiAppUi::CEventObserver + : public CBase, + public MVtUiEngineCommandManager, + public MVtEngEventObserver, + public MVtEngCommandObserver, + public MVtEngFrameObserver, + private MBeating, + private MRemConCoreApiTargetObserver + { + public: // Constructors and destructors + + /** + * Two-phased constructor. + * @param aAppUi application UI. + */ + static CEventObserver* NewL( CVtUiAppUi& aAppUi ); + + /** + * Destructor. + */ + ~CEventObserver(); + + public: // New functions + + /** + * Returns engine model. + * @return model instance. + */ + inline CVtEngModel& Model(); + + /** + * Creates remote control framework session. + */ + void CreateRemConSessionL(); + + /** + * Deletes remote control framework session. + */ + void DeleteRemConSession(); + + /** + * Checks if command is supported by engine. + * @param aCommandId command. + * @return ETrue if supported, EFalse otherwise. + */ + TBool CommandSupported( const TInt aCommandId ) const; + + /** + * Checks if command is supported and synchronous. + * @param aCommandId command. + * @return ETrue if synchronous & supported, EFalse otherwise. + */ + TBool CommandSupportedAndSynchronous( + const TInt aCommandId ) const; + + /** + * Starts heartbeat timer. + */ + void StartBeatL(); + + /** + * Stops heartbeat timer. + */ + void StopBeat(); + + /** + * Stops volume repeat handling timer. + */ + void StopVolumeRepeatTimer(); + + /** + * Sends response to prepare. + * @param aResult result code. + */ + void SendPrepareResponse( const TInt aResult ); + + public: // Functions from base classes + + /** + * @see MVtUiCommandManager::AddObserverL. + */ + virtual void AddObserverL( MVtEngCommandObserver& aObserver ); + + /** + * @see MVtUiCommandManager::RemoveObserver. + */ + virtual void RemoveObserver( MVtEngCommandObserver& aObserver ); + + /** + * @see MVtEngEventObserver::HandleVtEventL. + */ + virtual void HandleVtEventL( TInt aEvent ); + + /** + * @see MVtEngCommandObserver::HandleVTCommandPerformedL. + */ + virtual void HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ); + + /** + * @see MVtEngFrameObserver::vtHandleFrameL. + */ + virtual void vtHandleFrameL( TFrameType aType, CFbsBitmap* aBitmap ); + + /** + * @see MVtEngFrameObserver::vtSetFrame + */ + virtual void vtSetFrame( TFrameType aType, CFbsBitmap* aBitmap ); + + /** + * @see MBeating::Beat. + */ + virtual void Beat(); + + /** + * @see MBeating::Synchronize. + */ + virtual void Synchronize(); + + + private: + + /** + * Constructor. + * @param aAppUi application UI. + */ + CEventObserver( CVtUiAppUi& aAppUi ); + + /** + * Symbian OS constructor. + */ + void ConstructL(); + + /** + * Executes CVtUiAppUi methods. + * @param aBits sum of subset of TVtUiHandleEvents. + */ + void DoExecuteL( TInt aBits ); + /** + * Handles volume change. + * @param aButtonAct button action. + */ + void HandleVolumeChange( + TRemConCoreApiButtonAction aButtonAct ); + /** + * Handles mute change. + * @param aButtonAct button action. + */ + void HandleRemMuteChange( + TRemConCoreApiButtonAction aButtonAct ); + /** + * @see MRemConCoreApiTargetObserver::MrccatoCommand. + */ + virtual void MrccatoCommand( + TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ); + + /** + * Callback function to handle volume repeat. + * @param aAny pointer to an instance of this class. + * @return KErrNone. + */ + static TInt DoHandleVolumeRepeat( TAny* aAny ); + + private: + + // Type definition for CVtUiAppUi member functions. + typedef void (CVtUiAppUi::*TMethodL)(); + + // Ref to application ui. + CVtUiAppUi& iAppUi; + + // Engine model. + CVtEngModel* iModel; + + // ETrue when command events are being sent. + TBool iInCommandPerformed; + + // Owned array of observers. + RPointerArray< MVtEngCommandObserver > iCommandObservers; + + // Owned heart beat timer to update call duration. + CHeartbeat* iBeat; + + + // Owned interface selector instance. + CRemConInterfaceSelector* iRemConInterfaceSelector; + + // Pointer to target instance. Owned by iRemConInterfaceSelector. + CRemConCoreApiTarget* iRemConCoreApiTarget; + + // Owned timer for volume repeat handling. + CPeriodic* iRemConVolumeRepeatTimer; + + // Rencon operation id + TRemConCoreApiOperationId iRCCAOperationId; + + }; + +/** +* Verifies objects fetched using media gallery. Only non DRM protected +* objects are allowed. +* @since Series 60 3.1 +*/ +class CVtUiAppUi::CVtUiAppUiMGVerifier : + public CBase, + public MMGFetchVerifier + { + public: + + /** + * Static constructor, pushes created instance into cleanup stack. + */ + static CVtUiAppUiMGVerifier* NewLC( + CVtUiAppUi& aAppUi, CCoeEnv& aCoeEnv ); + + /** + * Destructor. + */ + ~CVtUiAppUiMGVerifier(); + + public: // from MMGFetchVerifier + + /** + * @see MMGFetchVerifier::VerifySelectionL + */ + TBool VerifySelectionL( const MDesCArray* aSelectedFiles ); + + private: + + /** + * 2nd constructor in two phase construction. + */ + void ConstructL(); + + /** + * Constructor. + */ + CVtUiAppUiMGVerifier( CVtUiAppUi& aAppUi, CCoeEnv& aCoeEnv ); + + private: + + // Reference to Application UI + CVtUiAppUi& iAppUi; + + // Pointer to COE + CCoeEnv* iCoeEnv; + + // Pointer to CManager which manages files and content access agents + CManager* iManager; + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUi +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CVtUiAppUi() + : iRenderingMode( ERenderingModeDefault ), + iLoudspeakerVolume( KVolumeResetValue ), + iHandsetVolume( KVolumeResetValue ), + iActiveCommands( 1 ), + iLayoutChg( EFalse ), + iDelayedCmd( 0 ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ConstructL() + { + VTLOGINIT + __VTPRINTENTER( "VtUi.ConstructL" ) + + FeatureManager::InitializeLibL(); + BaseConstructL( EAknEnableSkin | EAknEnableMSK ); + + iCba = Cba(); + // Must be done before creating features + iVTVariation.ReadL(); + + iEventObserver = CEventObserver::NewL( *this ); + iUiStates = new ( ELeave ) TVtUiStates( iEventObserver->Model() ); + iUiStates->Update(); + iUiStates->SetViewFindersInitialPlaceContextPane( ETrue ); + + TVtUiAppStateBase::SetInitialStateL( *this, *iUiStates ); + + iCommandManager = CVtUiCommandManager::NewL( *iUiStates, *this ); + + iComponentManager = CVtUiComponentManager::NewL(); + + iFeatureManager = CVtUiFeatureManager::NewL( *this, *iUiStates, + *iCommandManager, *iComponentManager ); + + iInstance = CInstance::NewL( *this ); + + CEikMenuBar* menu = iEikonEnv->AppUiFactory()->MenuBar(); + menu->SetContextMenuTitleResourceId( R_VIDEOTELUI_OK_MENUBAR ); + + + + CEikonEnv& eikEnv = *( iEikonEnv ); + eikEnv.SetSystem( ETrue ); + eikEnv.WsSession().ComputeMode( RWsSession::EPriorityControlDisabled ); + + iThisApplicationWgId = eikEnv.RootWin().Identifier(); + iEikonServerWgId = + eikEnv.WsSession().FindWindowGroupIdentifier( 0, KVtUiEikonServer ); + iAknCapServerWgId = + eikEnv.WsSession().FindWindowGroupIdentifier( 0, KVtUiAknCapServer ); + iAknNfyServerWgId = + eikEnv.WsSession().FindWindowGroupIdentifier( 0, + KVtUiAknNotifierServer ); + + __ASSERT_ALWAYS( + iEikonServerWgId != KErrNotFound, + VtUiPanic::Panic( EVtUiPanicEikonServerNotFound ) ); + (void)eikEnv.RootWin().EnableFocusChangeEvents(); + + + iUplinkWindow = iInstance->iContextControl; + iDownlinkWindow = iInstance->iMainControl; + + + if ( iCba ) + { + CCoeControl* control = iCba->ButtonGroup()->AsControl(); + static_cast< CEikCba* >( control )-> + SetSkinBackgroundId( KAknsIIDQsnBgAreaControlIdle ); + } + + iBlankControl = new ( ELeave ) CVtUiBlankControl; + iBlankControl->ConstructL( ClientRect() ); + AddToStackL( + iBlankControl, + KVtUiBlankControlPriority, + ECoeStackFlagRefusesFocus ); + + iUiStates->SetBlankControlAdded( ETrue ); + + iActiveExec = + new ( ELeave ) CVtUiActiveExec( CActive::EPriorityHigh ); + SetCallIdL( KVtUiDefaultCallId ); + + iExitTimer = CPeriodic::NewL( CActive::EPriorityHigh ); + CheckEngineFunctionality(); + + iAsyncCallback = + new ( ELeave ) CAsyncCallBack ( + TCallBack( &AsyncViewFinderToMainPaneAndShare, this ), + CActive::EPriorityStandard ); + + iLayoutChangeCallback = + new ( ELeave ) CAsyncCallBack( + TCallBack( &DelayedHandleLayoutChanged, this ), + CActive::EPriorityStandard ); + + iCurrentCameraOrientation = MVtEngMedia::EOrientationObeyLayoutSwitch; + + GetCameraOrientations(); + + SetInitialCameraOrientationL(); + + iVolCtrl= new ( ELeave )CVtUiVolumeControl( + Model().CommandHandler(), + Model().Audio(), + *iEventObserver, + *iFeatureManager); + iVolCtrl->ConstructL(); + + iIncallBubble = CAknIncallBubble::NewL(); + + iIsWaitingCallState = EFalse; + + __VTPRINTEXIT( "VtUi.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::~CVtUiAppUi +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::~CVtUiAppUi() + { + __VTPRINTENTER( "VtUi.~" ) + + iActiveCommands.Close(); + + delete iLayoutChangeCallback; + delete iAsyncCallback; + + if ( iUiStates && iUiStates->IsBlankControlAdded() ) + { + RemoveFromStack( iBlankControl ); + } + TInt lightsValue = 0; + if ( RProperty::Get( KPSUidCoreApplicationUIs, + KLightsVTForcedLightsOn, lightsValue ) == KErrNone ) + { + if ( lightsValue == EForcedLightsOn ) + { + __VTPRINT( DEBUG_GEN, "VtUi.~ Good night!" ) + (void) RProperty::Set( + KPSUidCoreApplicationUIs, + KLightsVTForcedLightsOn, + EForcedLightsOff ); + } + } + delete iActiveExec; + delete iInstance; + delete iBlankControl; + // Delete volume control before its dependencies are deleted. + delete iVolCtrl; + delete iEventObserver; + delete iExitTimer; + // Featuremanager must be destructed + // before componentmanager and commandmanager + delete iFeatureManager; + delete iComponentManager; + delete iCommandManager; + delete iUiStates; + + if ( iTbPeriodic ) + { + iTbPeriodic->Cancel(); + } + delete iTbPeriodic; + + if ( iIncallBubble ) + { + TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( ETrue ) ) + } + delete iIncallBubble; + + // Close all RComm sessions to prevent memory leaks. + REComSession::FinalClose(); + + FeatureManager::UnInitializeLib(); + __VTPRINTEXIT( "VtUi.~" ) + VTLOGUNINIT + } + +// ----------------------------------------------------------- +// CVtUiAppUi::SwitchLayoutToFlatStatusPaneL +// ----------------------------------------------------------- +// +void CVtUiAppUi::SwitchLayoutToFlatStatusPaneL( TBool aSwitch ) + { + __VTPRINTENTER( "VtUi.SwitchLayoutToFlatStatusPaneL" ) + CEikStatusPane* statusPane = StatusPane(); + + const TInt idleResId( + VtUiLayout::IsLandscapeOrientation() ? + R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL : + R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + + const TBool isStatusPaneFlat( + ( statusPane->CurrentLayoutResId() == + R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ) || + ( statusPane->CurrentLayoutResId() == + R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ) ); + + if ( aSwitch ) + { + if ( isStatusPaneFlat && VtUiLayout::IsLandscapeOrientation() ) + { + __VTPRINT( DEBUG_GEN, + "VtUi.SwitchLayoutToFlatStatusPaneL LAYOUT USUAL" ); + NaviPaneL()->Pop(); + statusPane->SwitchLayoutL( idleResId ); + } + else if ( !isStatusPaneFlat && !VtUiLayout::IsLandscapeOrientation() ) + { + __VTPRINT( DEBUG_GEN, + "VtUi.SwitchLayoutToFlatStatusPaneL USUAL FLAT" ); + NaviPaneL()->PushDefaultL(); + statusPane->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); + } + } + else + { + if ( isStatusPaneFlat ) + { + __VTPRINT( DEBUG_GEN, + "VtUi.SwitchLayoutToFlatStatusPaneL LAYOUT IDLE" ); + NaviPaneL()->Pop(); + statusPane->SwitchLayoutL( idleResId ); + } + } + // ApplyCurrentSettingsL is called whenever statuspane + // visibility status or pane layout changes. + statusPane->ApplyCurrentSettingsL(); + statusPane->DrawNow(); + // Make sure whole control is fully updated + iInstance->iMainControl->DrawNow(); + __VTPRINTEXIT( "VtUi.SwitchLayoutToFlatStatusPaneL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshL() + { + __VTPRINTENTER( "VtUi.Refresh" ) + RefreshBlind(); + RefreshNaviPaneL(); + __VTPRINTEXIT( "VtUi.Refresh" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshNaviPaneL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshNaviPaneL() + { + // Update only if navi pane exists + if ( iInstance ) + { + __VTPRINT( DEBUG_GEN, "VtUi.RefreshNavi" ) + CVtUiNaviPane* navi = iInstance->iNaviPane; + + // Refresh muted state + MVtEngMedia& media = Model().Media(); + TInt mediaAvail; + VtUiUtility::GetOutgoingMediaState( media, mediaAvail ); + mediaAvail = ~mediaAvail; + navi->SetMuted( mediaAvail & MVtEngMedia::EMediaAudio ); + + // Refresh call duration + MVtEngSessionInfo& session = Model().Session(); + MVtEngSessionInfo::TDuration duration; + TBool enabled; + if ( session.GetDuration( duration, enabled ) != KErrNone ) + { + enabled = EFalse; + } + navi->SetCallDuration( duration, enabled ); + + // Update all changes + navi->CommitL(); + + CheckBeatL( enabled ); + } + } + +void CVtUiAppUi::StopBrightnessOrContrast() + { + + MVtUiFeature* br = iFeatureManager->GetFeatureById( EVtUiFeatureIdBrightness ); + if ( br ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopBrightness" ) + if ( br->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopBrightnessOrContrast br->STOP" ) + br->Stop(); + } + } + + MVtUiFeature* cr = iFeatureManager->GetFeatureById( EVtUiFeatureIdContrast ); + if ( cr ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopContrast" ) + if ( cr->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopBrightnessOrContrast cr->STOP" ) + cr->Stop(); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshZoomPopupL() +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshZoomPopupL() + { + CVtUiZoom* zm = static_cast< CVtUiZoom* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdZoom ) ); + if( zm && iUiStates->IsZoomModeOn()) + zm->RefreshL(); + } +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshMenuL() +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshMenuL() + { + + CVtUiMenus* menus = static_cast< CVtUiMenus* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdMenu ) ); + if ( menus ) + { + iUiStates->Update(); + __VTPRINT( DEBUG_GEN, "VtUi.RefreshMenuL" ) + menus->RefreshL(); + CAknAppUi::ProcessCommandL( EEikCmdCanceled ); // does not leave + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshSoftkeysL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshSoftkeysL() + { + if ( iUiStates->IsThisApplicationForeground() ) + { + CVtUiSoftkeys* sk = static_cast< CVtUiSoftkeys* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdSoftkey ) ); + if ( sk ) + { + sk->RefreshL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshBlind +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshBlind() + { + if ( iInstance && !iUiStates->IsDisableBlindSetting() ) + { + __VTPRINTENTER( "VtUi.RefreshBlind" ) + TInt avail; + MVtEngMedia& media = Model().Media(); + + // Update blind flags.for outgoing media: + VtUiUtility::GetOutgoingMediaState( media, avail ); + avail = ~avail; + TBool noVideo( avail & MVtEngMedia::EMediaVideo ); + const TBool isFrozen( VtUiUtility::GetFreezeState ( media ) ); + MVtEngMedia::TMediaSource source( MVtEngMedia::EMediaNone ); + media.GetSource( source ); + if ( noVideo && !isFrozen && + ( source != MVtEngMedia::EMediaStillImage ) ) + { + iUplinkWindow->SetStreamBitmap( NULL ); + } + + iUplinkWindow->SetBlind( noVideo ); + iUplinkWindow->SetWaiting( EFalse ); + + if ( iUiStates->IsThisApplicationForeground() ) + { + // Update blind flags for incoming media: + VtUiUtility::GetIncomingMediaState( media, avail ); + avail = ~avail; + noVideo = ( avail & MVtEngMedia::EMediaVideo ); + if ( noVideo ) + { + iDownlinkWindow->SetStreamBitmap( NULL ); + } + iDownlinkWindow->SetBlind( noVideo ); + } + iDownlinkWindow->SetWaiting( iUiStates->IsWaitingForFirstFrame() ); + __VTPRINTEXIT( "VtUi.RefreshBlind" ) + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::OpenNumberEntryL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::OpenNumberEntryL() + { + __VTPRINTENTER( "VtUi.OpenNumberEntryL" ) + + CEikMenuBar* menuBar = iEikonEnv->AppUiFactory()->MenuBar(); + if ( IsDisplayingDialog() || ( menuBar && menuBar->IsDisplayed() ) ) + { + __VTPRINTEXIT( "VtUi.OpenNumberEntryL" ) + return EFalse; + } + + TInt error( KErrNotFound ); + + MVtUiFeature* numberEntry = + iFeatureManager->GetFeatureById( EVtUiFeatureIdNumberEntry ); + + MVtUiFeature* dialer = + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ); + + const TBool dialerActive( dialer && + ( dialer->State() == MVtUiFeature::EActive ) ); + + if ( numberEntry && !dialerActive ) + { + TRAP( error, numberEntry->StartL() ); + } + + const TBool result( !error ); + + if ( result ) + { + __VTPRINT( DEBUG_GEN, "VtUi.NumberEntry.StopZ" ) + RefreshSoftkeysL(); + } + + __VTPRINTEXITR( "VtUi.OpenNumberEntryL %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandlePhoneSendKeyL +// Handles EKeyPhoneSend key events. +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiAppUi::HandlePhoneSendKeyL( const TKeyEvent& /*aKeyEvent*/, + TEventCode aType ) + { + __VTPRINTENTER( "VtUi.HandlePhoneSendKeyL" ) + CEikMenuBar* menuBar = iEikonEnv->AppUiFactory()->MenuBar(); + if ( !( IsDisplayingDialog() || ( menuBar && menuBar->IsDisplayed() ) ) ) + { + const TBool isNumberSource( iUiStates->IsNumberEntryOpen() || + iUiStates->IsDialerOpen() ); + if ( ( aType == EEventKey ) && isNumberSource ) + { + ProcessCommandL( EVtUiCmdDialEmergency ); + } + } + __VTPRINTEXIT( "VtUi.HandlePhoneSendKeyL" ) + return EKeyWasConsumed; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StartDtmfTone +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StartDtmfTone( const TChar& aTone ) + { + // should be called only through current application state + iDtmfTone = aTone; + __VTPRINT2( DEBUG_GEN, "VtUi.DTMF.Start.%d", iDtmfTone() ) + if ( Execute( KVtEngStartDtmfTone, &iDtmfTone ) != KErrNone ) + { + iDtmfTone = 0; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StopDtmfTone +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StopDtmfTone() + { + // should be called only through current application state + if ( iDtmfTone() ) + { + __VTPRINT( DEBUG_GEN, "VtUi.DTMF.STOP" ) + (void) Execute( KVtEngStopDtmfTone, NULL ); + iDtmfTone = 0; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleWsEventL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleWsEventL( + const TWsEvent& aEvent, + CCoeControl* aDestination ) + { + __VTPRINTENTER( "VtUi.HandleWsEventL" ) + const TInt type = aEvent.Type(); + __VTPRINT2( DEBUG_GEN, "VtUi.HandleWsEventL type = %d", type ); + + // Zoom-in and Zoom-out keys need specific handling because keyup and + // keydown events cannot be checked from iCode field of TKeyEvent + if ( PreHandleKeyEventL( aEvent ) ) + { + __VTPRINTEXIT( "VtUi.HandleWsEventL (PreHandleKeyEventL)" ) + return; + } + + // Zoom mode is dismissed if some interrupting event happens prior timeout. + // Zoom mode can be interrupted with a keypress i.e. any keypress, except + // keys that are reserved for adjusting zoom dismiss zoom mode. Also any + // system event e.g. note or waiting call dismiss zoom mode. + if ( iUiStates->IsZoomModeOn() ) + { + if ( ProcessWsEventIfZoomModeIsActiveL( aEvent ) ) + { + __VTPRINTEXIT( "VtUi.HandleWsEventL (IsZoomModeOn)" ) + return; + } + } + // Zoom mode can be also activated with up and down arrow keys. + switch ( type ) + { + case EEventKey: + case EEventKeyUp: + case EEventKeyDown: + { + const TKeyEvent* keyEvent = aEvent.Key(); + const TBool isHwZoomKey( + keyEvent->iCode == EKeyZoomIn || + keyEvent->iCode == EKeyZoomOut ); + const TBool isZoomKey( + keyEvent->iScanCode == EStdKeyUpArrow || + keyEvent->iScanCode == EStdKeyDownArrow || + isHwZoomKey ); + + // Zoom mode can be also activated with up and down arrow keys. + if ( isZoomKey ) + { + const TBool isZoomAllowed( + !iEikonEnv->AppUiFactory()->MenuBar()->IsDisplayed() && + !iUiStates->MediaState().IsSharing() && + !iUiStates->MediaState().IsFrozen() && + !iUiStates->IsSelectingShare() && + VtUiUtility::IsZoomAllowed( Model().Media() ) && + !( iUiStates->IsNumberEntryOpen() && ShowNumberEntry() ) && + //there must not be the command which may switch provider to None + !IsActiveCommand( EVtUiCmdDisableVideo )&& + !IsActiveCommand( EVtUiCmdDisableBoth )&& + !IsActiveCommand( EVtUiCmdUsePrimaryCamera )&& + !IsActiveCommand( EVtUiCmdUseSecondaryCamera) ); + + if ( isZoomAllowed ) + { + // If menu is open, toolbar is available, video is frozen, + // sharing is on or user is selecting a file to be shared + // do not set zoom mode on. If HW zoom key was pressed, + // then zoom mode is activated even if toolbar is present. + if ( isHwZoomKey || !iUiStates->IsToolbarAvailable() ) + { + SetZoomModeL( ETrue ); + } + } + } + } + break; + default: + break; + } + + TBool partialForeGroundlost( EFalse ); + switch ( type ) + { + // Enter new rendering mode + case EVtUiWsEventBeginRenderingMode: + { + const TVtUiWsEvent< TRenderingMode >& event( + static_cast< const TVtUiWsEvent< TRenderingMode >& > + ( aEvent ) ); + MVtUiDialer* dialer = static_cast< CVtUiDialer* > ( + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ) ); + __ASSERT_ALWAYS( dialer, + VtUiPanic::Panic( EVtUiPanicRendererNotFound ) ); + iInstance->iContextControl->MakeVisible( EFalse ); + SetRenderingModeL( *event.Data(), &dialer->VideoWindow() ); + } + break; + + // End rendering mode -> revert to previous + case EVtUiWsEventEndRenderingMode: + { + SetRenderingModeL( ERenderingModeDefault, iStoredDownlinkWindow ); + iInstance->iContextControl->MakeVisible( ETrue ); + iStoredDownlinkWindow = NULL; + } + break; + + // New number source have been activated + case EVtUiWsEventNumberSourceActivate: + { + const TVtUiWsEvent< MVtUiNumberSource >& event( + static_cast< const TVtUiWsEvent< MVtUiNumberSource >& > + ( aEvent ) ); + iNumberSource = event.Data(); + } + break; + + case EVtUiWsEventNumberSourceDeactivate: + { + const TVtUiWsEvent< MVtUiNumberSource >& event( + static_cast< const TVtUiWsEvent< MVtUiNumberSource >& > + ( aEvent ) ); + if ( iNumberSource == event.Data() ) + { + iNumberSource = NULL; + } + } + break; + + + // VT goes background e.g. selected application from fastswap + case KAknFullOrPartialForegroundLost: + { + // If capture mode is on stop it + if ( iUiStates->IsCaptureModeOn() ) + { + CmdCancelCaptureL(); + } + SetIncallBubbleAllowedInUsualL( ETrue ); + const TInt windowGroupId = + iCoeEnv->WsSession().GetFocusWindowGroup(); + + // In S60 5.0 we get PartialFocusLost also for some notes and + // overally items that are somehow overlapping screen instead of + // FocusLost. In those cases we should not put app to background. + if( ( windowGroupId != iThisApplicationWgId ) && + ( windowGroupId != iEikonServerWgId ) && + ( windowGroupId != iAknCapServerWgId ) && + ( windowGroupId != iAknNfyServerWgId ) ) + { + partialForeGroundlost = ETrue; + } + + // Fall through to EEventFocusLost event + } + case EEventFocusLost: + { + // If focus window group is not this application nor window server, + // then this application can not be in focus. + const TInt windowGroupId = + iCoeEnv->WsSession().GetFocusWindowGroup(); + + if ( ( windowGroupId != iThisApplicationWgId ) && + ( windowGroupId != iEikonServerWgId ) && + ( windowGroupId != iAknCapServerWgId ) && + ( windowGroupId != iAknNfyServerWgId ) || partialForeGroundlost ) + { + iCoeEnv->RootWin().DisableFocusChangeEvents(); + + TBool old = iUiStates->IsThisApplicationForeground(); + if ( old ) + { + TRAP_IGNORE( HandleForegroundChangedL( EFalse ) ); + } + } + } + break; + + case KAknFullOrPartialForegroundGained: + { + SetIncallBubbleAllowedInUsualL( EFalse ); + // Now this application is focused. + (void)iCoeEnv->RootWin().EnableFocusChangeEvents(); + TBool old = iUiStates->IsThisApplicationForeground(); + + if ( !old ) + { + (void) HandleLayoutChanged(); + TRAP_IGNORE( HandleForegroundChangedL( ETrue ) ); + } + } + break; + + case EEventKey: + case EEventKeyUp: + case EEventKeyDown: + { + // Key events with EModifierSpecial are received via FEP. + const TKeyEvent* keyEvent = aEvent.Key(); + if ( keyEvent->iModifiers & EModifierSpecial ) + { + TChar dtmfTone; + if ( VtUiUtility::IsDTMFEvent( *keyEvent, dtmfTone ) ) + { + if ( type == EEventKey ) + { + StartDtmfTone( dtmfTone ); + } + else if ( type == EEventKeyUp ) + { + StopDtmfTone(); + } + } + } + } + break; + + default: + break; + } + // Offer event to component manager + iComponentManager->HandleWsEventL( aEvent, aDestination ); + + // All events are sent to base class. + CAknAppUi::HandleWsEventL( aEvent, aDestination ); + __VTPRINTEXIT( "VtUi.HandleWsEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::PreHandleKeyEventL +// +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::PreHandleKeyEventL( const TWsEvent& aEvent ) + { + __VTPRINTENTER( "VtUi.PreHandleKeyEventL" ) + TBool consumed( EFalse ); + switch( aEvent.Type() ) + { + + case EEventKey: + { + // when both these are set, then it's our simulated key press + const TInt + modifiers( EModifierKeypad | EModifierSpecial ); + + const TKeyEvent* ptrKeyEventC = + aEvent.Key(); + + const TBool isHwZoomKey( + ptrKeyEventC->iCode == EKeyZoomIn || + ptrKeyEventC->iCode == EKeyZoomOut ); + + if ( isHwZoomKey && + ( ptrKeyEventC->iModifiers & modifiers ) != modifiers ) + { + __VTPRINT3( DEBUG_GEN, "VtUi.PreHandleKeyEventL keyc=%d scanc=%d", + ptrKeyEventC->iCode, ptrKeyEventC->iScanCode ) + consumed = ETrue; + + // Send EEventKeyDown only when iRepeats is 0 + if ( !ptrKeyEventC->iRepeats ) + { + TKeyEvent keyDownEvent( *ptrKeyEventC ); + keyDownEvent.iRepeats = 0; + iCoeEnv->SimulateKeyEventL( keyDownEvent, EEventKeyDown ); + } + + // Send EEventKey always + TKeyEvent keyEvent( *ptrKeyEventC ); + keyEvent.iModifiers |= modifiers; + iCoeEnv->SimulateKeyEventL( keyEvent, EEventKey ); + + // Que EEventKeyUp + TKeyEvent keyUpEvent( *ptrKeyEventC ); + keyUpEvent.iRepeats = 0; + StoreKeyEventL( keyUpEvent ); + } + else if ( ( ptrKeyEventC->iModifiers & modifiers ) == modifiers ) + { + __VTPRINT( DEBUG_GEN, + "VtUi.PreHandleKeyEventL own event spotted, removing mods" ) + // event is generated by us, remove modifiers + TKeyEvent* ptrKeyEvent = const_cast< TKeyEvent* >( ptrKeyEventC ); + ptrKeyEvent->iModifiers &= ~modifiers; + } + } + break; + + case EEventKeyUp: + if ( iIsStoredKeyEvent ) + { + if ( iStoredKeyEvent.iScanCode == aEvent.Key()->iScanCode ) + { + consumed = ETrue; + SimulateStoredKeyEventL( EEventKeyUp ); + } + } + break; + + default: + break; + + } + + __VTPRINTEXITR( "VtUi.PreHandleKeyEventL %d", consumed ) + return consumed; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SimulateStoredKeyEventL +// +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SimulateStoredKeyEventL( const TEventCode aEventCode ) + { + __VTPRINTENTER( "VtUi.SimulateStoredKeyEventL" ) + if ( iIsStoredKeyEvent ) + { + // Reset flag first because SimulateKeyEventL() is synchronous + iIsStoredKeyEvent = EFalse; + iCoeEnv->SimulateKeyEventL( iStoredKeyEvent, aEventCode ); + } + __VTPRINTEXITR( "VtUi.SimulateStoredKeyEventL %d", iIsStoredKeyEvent ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StoreKeyEventL +// +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StoreKeyEventL( const TKeyEvent& aKeyEvent ) + { + __VTPRINTENTER( "VtUi.StoreKeyEventL" ) + if ( iIsStoredKeyEvent && ( iStoredKeyEvent.iCode != aKeyEvent.iCode ) ) + { + SimulateStoredKeyEventL( EEventKeyUp ); + } + + if ( !iIsStoredKeyEvent ) + { + iIsStoredKeyEvent = ETrue; + iStoredKeyEvent = aKeyEvent; + } + __VTPRINTEXITR( "VtUi.StoreKeyEventL %d", iIsStoredKeyEvent ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoTryToStartTb +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::DoTryToStartTbL( TAny* aAny ) + { + CVtUiAppUi* self = static_cast< CVtUiAppUi* >( aAny ); + self->TryToStartTbL(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::UpdateVBSettingL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::UpdateVBSettingL() + { + // If white balance or color tone setting + // feauture exists update setting + CVtUiWhiteBalance* wb = static_cast< CVtUiWhiteBalance* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdWhiteBalance ) ); + + CVtUiColorTone* ct = static_cast< CVtUiColorTone* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdColourTone ) ); + + // If brightness or contrast slider + // feauture exists update them + CVtUiBrightness* br = static_cast< CVtUiBrightness* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdBrightness ) ); + + CVtUiContrast* contr = static_cast< CVtUiContrast* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdContrast ) ); + + + + if ( wb && iUiStates->IsWhiteBalanceSettingAvailable() ) + { + __VTPRINT( DEBUG_GEN,"VtUi.UpdateVBSettingL WB update" ) + wb->UpdateSettingL(); + } + + if ( ct && iUiStates->IsColorToneSettingAvailable() ) + { + __VTPRINT( DEBUG_GEN,"VtUi.UpdateVBSettingL CT update" ) + ct->UpdateSettingL(); + } + + if ( br && iUiStates->IsBrightnessSettingAvailable() ) + { + __VTPRINT( DEBUG_GEN,"VtUi.UpdateVBSettingL br update" ) + br->UpdateSlider(); + } + + if ( contr && iUiStates->IsContrastSettingAvailable() ) + { + __VTPRINT( DEBUG_GEN,"VtUi.UpdateVBSettingL contract update" ) + contr->UpdateSlider(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TryToStartTb +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::TryToStartTbL() + { + __VTPRINTENTER( "VtUi.TryToStartTbL" ) + CVtUiToolbarBase* tb = static_cast< CVtUiToolbarBase* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ) ); + if ( tb ) + { + // If menu, dialog or dialer is displayed do not start the toolbar, + // but let the timer run another round + CEikMenuBar* menuBar = iEikonEnv->AppUiFactory()->MenuBar(); + if ( !( menuBar && menuBar->IsDisplayed() ) && + !IsDisplayingDialog() && + !( + iUiStates->IsDialerActivating() || + iUiStates->IsDialerOpen() || + iUiStates->IsWhiteBalanceModeOn() || + iUiStates->IsColorToneModeOn() || + iUiStates->IsBrightnessModeOn() || + iUiStates->IsContrastModeOn() || + iUiStates->IsZoomModeOn() || + iUiStates->IsVolumeModeOn() || + iUiStates->IsCaptureModeOn() ) + ) + { + if ( iTbPeriodic ) + { + iTbPeriodic->Cancel(); + } + tb->StartL(); + } + } + __VTPRINTEXIT( "VtUi.TryToStartTbL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetRenderingModeL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetRenderingModeL( const TRenderingMode aMode, + MVtUiVideoWindow* aNewDownlink ) + { + __VTPRINTENTER( "VtUi.SetRenderingModeL" ) + __VTPRINT2( DEBUG_GEN, "VtUi.SetRenderingModeL=%d", aMode ); + iRenderingMode = aMode; + if ( aNewDownlink ) + { + if ( iDownlinkWindow != aNewDownlink ) + { + iStoredDownlinkWindow = iDownlinkWindow; + iDownlinkWindow = aNewDownlink; + iStoredDownlinkWindow->SetRemoteVideoControl(NULL); + iDownlinkWindow->SetRemoteVideoControl(iInstance->iRemoteVideoControl); + iDownlinkWindow->LayoutRemoteVideo(); + } + } + RefreshBlind(); + UpdateRenderingParametersL(); + __VTPRINTEXIT( "VtUi.SetRenderingModeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::UpdateRenderingParametersL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::UpdateRenderingParametersL() + { + __VTPRINTENTER( "VtUi.UpdateRenderingParametersL" ) + + MVtEngMedia& media = Model().Media(); + const TBool viewFinderStarted = + media.RenderingStarted( MVtEngMedia::EMediaOutgoing ); + const TBool remoteRenderStarted = + media.RenderingStarted( MVtEngMedia::EMediaIncoming ); + + // Clear bitmaps + iInstance->iContextControl->SetStreamBitmap( NULL ); + iInstance->iMainControl->SetStreamBitmap( NULL ); + + // Stop viewfinder & remote render. + if( viewFinderStarted ) + { + ExecuteCmdL( KVtEngStopViewFinder ); + } + ExecuteCmdL( KVtEngStopRenderRemote ); + + const TBool uplinkWindowEqualsContextControl = + ( iUplinkWindow == iInstance->iContextControl ); + + // Prepare viewfinder. + TVtEngRenderingOptions configViewfinder( + uplinkWindowEqualsContextControl ? + DetermineContextControlOptions() : + DetermineMainControlOptions( EFalse ) ); + ExecuteCmdL( KVtEngPrepareViewFinder, configViewfinder ); + + // Prepare remote render. + TRAPD ( err, { + TVtEngRenderingOptionsNGA configRemoteRenderNGA( + DetermineRemoteVideoControlOptionsNGA() ); + ExecuteCmdL( + KVtEngPrepareRemoteRenderNGA, + configRemoteRenderNGA ); + } ); + if ( err != KErrNone ) + { + if ( viewFinderStarted ) + { + // Start viewfinder. + ExecuteCmdL( KVtEngStartViewFinder ); + } + User::Leave ( err ); + } + + // Start remote render. + TRAP_IGNORE( ExecuteCmdL( KVtEngStartRenderRemote ) ); + + if ( viewFinderStarted ) + { + // Start viewfinder. + ExecuteCmdL( KVtEngStartViewFinder ); + } + + // Redraw remote video last frame to make sure that in layout change + // situation we still have something on screen. + iDownlinkWindow->Redraw(); + __VTPRINTEXIT( "VtUi.UpdateRenderingParametersL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::MediaStateChangedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::MediaStateChangedL() + { + CEikMenuBar* menuBar = iEikonEnv->AppUiFactory()->MenuBar(); + // close menu if it is shown + if ( menuBar && menuBar->IsDisplayed() ) + { + TKeyEvent keyEvent; + keyEvent.iCode = EKeyEscape; + menuBar->OfferKeyEventL( keyEvent, EEventKey ); + } + // Refresh toolbar + CVtUiToolbarBase* tb = static_cast< CVtUiToolbarBase* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ) ); + if ( tb ) + { + tb->RefreshL(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ProcessCommandL +// Processes commands. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ProcessCommandL( + TInt aCommand ) + { + __VTPRINTENTER( "VtUi.ProcessCommandL" ) + MVtEngCommandHandler& command = Model().CommandHandler(); + command.ExecuteL( KVtEngRequestLastRemoteFrame, NULL ); + + // only with fixed toolbar + if ( AknLayoutUtils::PenEnabled() ) + { + if ( iUiStates->IsFixedToolbarVisible()) + { + // When option menu is opened fixed toolbar should + // be set hidden + iUiStates->SetIsFixedToolbarVisible( EFalse ); + // Stop toolbar + MVtUiFeature* tb = + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ); + if ( tb ) + { + // timer could be active + if ( iTbPeriodic ) + { + iTbPeriodic->Cancel(); + } + tb->Stop(); + } + if ( !iTbPeriodic ) + { + iTbPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + } + // Toolbar doesn't come visible until options menu is closed. + iTbPeriodic->Start( KStartTime, KPeriodTime, TCallBack( DoTryToStartTbL, this ) ); + } + } + else + { + StopSliders(); + } + + iInstance->iMainControl->SetSize( iInstance->iMainControl->Size() ); + iInstance->iMainControl->DrawNow(); + + // Handle OK options menu. + const TInt menuResource = + iUiStates->IsLaunchOkOptionsMenu() ? + R_VIDEOTELUI_OK_MENUBAR : + R_VIDEOTELUI_MENUBAR; + + iUiStates->SetLaunchOkOptionsMenu( EFalse ); + + CEikMenuBar* menu = iEikonEnv->AppUiFactory()->MenuBar(); + if ( menu ) + { + menu->SetMenuTitleResourceId( menuResource ); + //Here we again set back the type of menu to "Options" when pressed LSK + menu->SetMenuType( CEikMenuBar::EMenuOptions ); + } + CAknAppUi::ProcessCommandL( aCommand ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::IsActiveCommand +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::IsActiveCommand( TInt aCommand ) const + { + return ( iActiveCommands.FindInOrder( aCommand ) != KErrNotFound ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::State +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase& CVtUiAppUi::State() + { + return *iState; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::BitmapManager +// ----------------------------------------------------------------------------- +// +CVtUiBitmapManager& CVtUiAppUi::BitmapManager() + { + return *iInstance->iBitmapManager; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TActiveCommand::TActiveCommand +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::TActiveCommand::TActiveCommand( RArray< TInt >& aActiveCommands, + TInt aCommandId ) + : iActiveCommands( aActiveCommands ), iCommandId( aCommandId ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TActiveCommand::~TActiveCommand +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::TActiveCommand::~TActiveCommand() + { + Close(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TActiveCommand::OpenL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::TActiveCommand::OpenL() + { + iActiveCommands.InsertInOrderL( iCommandId ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TActiveCommand::Close +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::TActiveCommand::Close() + { + TInt index( iActiveCommands.FindInOrder( iCommandId ) ); + if ( index != KErrNotFound ) + { + iActiveCommands.Remove( index ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleCommandL +// Handles commands. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleCommandL( + TInt aCommand ) + { + __VTPRINTENTER( "VtUi.HandleCommand" ) + + // Check if same command is already being performed. + if ( IsActiveCommand( aCommand ) || ( iState && + iState->HandleCommandL( aCommand ) == + TVtUiAppStateBase::EEventHandled ) ) + { + __VTPRINTEXIT( "VtUi.HandleCommand 0" ) + return; + } + + // Check if command is allowed to be performed. + if ( !IsCommandAllowedL( aCommand ) ) + { + ShowNotAllowedNoteL(); + __VTPRINTEXITR( "VtUi.HandleCommand %d", KErrAccessDenied ) + return; + } + + // delay mute cmd received during layout change (EGWG-7QQ3GZ) + if ( (aCommand == EVtUiCmdDisableAudio) || (aCommand == EVtUiCmdUsePrimaryCamera) + ||(aCommand == EVtUiCmdUseSecondaryCamera) + ||(aCommand == EVtUiCmdDisableVideo) ) + { + if ( iLayoutChg ) + { + iDelayedCmd = aCommand; + __VTPRINTEXIT( "VtUi.HandleCommand mute delayed due to LayoutChange" ) + return; + } + } + + TActiveCommand activeCommand( iActiveCommands, aCommand ); + // Close() will be called by the destructor, when instance goes out of + // scope + activeCommand.OpenL(); + + TBool refresh = EFalse; + CleanupPushRefreshL(); + + // Execute command + switch ( aCommand ) + { + case EAknCmdHelp: + CmdHelpL(); + break; + + case EVtUiCmdOkOptions: + iUiStates->SetLaunchOkOptionsMenu( ETrue ); + ProcessCommandL( EAknSoftkeyOptions ); + break; + + case EVtUiCmdEnableMain: + case EVtUiCmdDisableMain: + // Submenu is opened automatically. + break; + + case EVtUiCmdEnableVideo: + { + MVtEngMedia::TShareObjectState shareObjectState; + VtUiUtility::GetObjectSharingState( Model().Media(), + shareObjectState ); + if( shareObjectState != MVtEngMedia::ESharingImage ) + { + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdEnableVideoL(); + CleanupStack::PopAndDestroy(); + } + else + { + CmdStopShareImageL( refresh ); + EnableCommandActivatingAndCleanupPushL(); + CmdEnableVideoL(); + CleanupStack::PopAndDestroy(); + } + } + break; + + case EVtUiCmdEnableAudio: + refresh = ETrue; + CmdEnableAudioL(); + break; + + case EVtUiCmdEnableBoth: + EnableCommandActivatingAndCleanupPushL(); + CmdEnableAudioL(); + MVtEngMedia::TShareObjectState shareObjectState; + VtUiUtility::GetObjectSharingState( Model().Media(), + shareObjectState ); + if( shareObjectState != MVtEngMedia::ESharingImage ) + { + refresh = ETrue; + CmdEnableVideoL(); + } + else + { + CmdStopShareImageL( refresh ); + CmdEnableVideoL(); + } + // EnableCommandActivatingAndCleanupPushL + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdDisableVideo: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdDisableVideoL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdDisableAudio: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdDisableAudioL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdDisableBoth: + HandleCommandL( EVtUiCmdDisableAudio ); + HandleCommandL( EVtUiCmdDisableVideo ); + break; + + case EVtUiCmdActivateBT: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdActivateBtL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdDeactivateBT: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdDeactivateBtL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdActivateLoudspeaker: + case EVtUiCmdSwitchFromBTToIHF: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdActivateLoudspeakerL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdDeactivateLoudspeaker: + refresh = ETrue; + EnableCommandActivatingAndCleanupPushL(); + CmdDeactivateLoudspeakerL(); + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdUsePrimaryCamera: + refresh = ETrue; + CmdUseCameraL( ETrue ); + break; + + case EVtUiCmdUseSecondaryCamera: + refresh = ETrue; + CmdUseCameraL( EFalse ); + break; + + case EVtUiCmdSwapImagesPlaces: + refresh = ETrue; + CleanupPushEnableBlindL(); + iUiStates->SetDisableBlindSetting( ETrue ); + CmdSwapImagesPlacesL(); + CleanupStack::PopAndDestroy(); // CleanupPushEnableBlindL + break; + + case EVtUiCmdZoom: + refresh = ETrue; + // Toolbar uses this same command to set zoom on and off + // therefore this works as a toggle button + SetZoomModeL( !iUiStates->IsZoomModeOn() ); + + break; + + case EAknSoftkeyBack: + { + refresh = ETrue; + MVtUiFeature* numberEntry = + iFeatureManager->GetFeatureById( EVtUiFeatureIdNumberEntry ); + if ( numberEntry ) + { + numberEntry->Stop(); + } + } + break; + + case EVtUiCmdSnapshot: + EnableCommandActivatingAndCleanupPushL(); + CmdSnapshotL(); + // EnableCommandActivatingAndCleanupPushL + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdCapture: + CmdCaptureL(); + break; + + case EVtUiCmdCancelCapture: + CmdCancelCaptureL(); + break; + + case EVtUiCmdGoToIdle: + CmdGoToIdleL(); + break; + + // Object sharing related + + case EVtUiCmdShareObjectImage: + CmdInitializeShareImageL( refresh ); + break; + + case EVtUiCmdStopSharingObjectImage: + EnableCommandActivatingAndCleanupPushL(); + CmdStopShareImageL( refresh ); + // EnableCommandActivatingAndCleanupPushL + CleanupStack::PopAndDestroy(); + break; + + case EVtUiCmdAdjustVideoVideoQuality: + case EVtUiCmdAdjustVideoWhiteBalance: + case EVtUiCmdAdjustVideoBrightness: + case EVtUiCmdAdjustVideoContrast: + case EVtUiCmdAdjustVideoColourTone: + __VTPRINT( DEBUG_GEN, "VtUiHandleCommand.CmdAdjustVideoL" ); + CmdAdjustVideoL( aCommand ); + break; + + case EAknSoftkeyExit: + case EAknCmdExit: + case EEikCmdExit: + // handled by state + break; + + default: + iCommandManager->HandleCommandL( aCommand ); + break; + } + + if ( refresh ) + { + CleanupStack::PopAndDestroy(); // CleanupPushRefreshL + } + else + { + CleanupStack::Pop(); // CleanupPushRefreshL + } + __VTPRINTEXITR( "VtUi.HandleCommand %d", KErrNone ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DynInitMenuPaneL +// Initialises menu pane dynamically. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DynInitMenuPaneL( + TInt, + CEikMenuPane* aMenuPane ) + { + __VTPRINTENTER( "VtUi.DynInitMenuPaneL" ) + + CVtUiMenus* menus = static_cast< CVtUiMenus* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdMenu ) ); + if ( menus ) + { + iUiStates->Update(); + menus->SetMenuPane( aMenuPane ); + menus->RefreshL(); + } + __VTPRINTEXIT( "VtUi.DynInitMenuPaneL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleKeyEventL +// Handles key events. +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiAppUi::HandleKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + __VTPRINTENTER( "VtUi.HandleKeyEventL" ) + + TKeyResponse resp( EKeyWasNotConsumed ); + + if ( !iUiStates->IsNumberEntryOpen() || + ( iUiStates->IsNumberEntryOpen() && !ShowNumberEntry() ) ) + { + __VTPRINT( DEBUG_GEN, "VtUi.ToZoom" ) + + const TBool isHwZoomKey( aKeyEvent.iCode == EKeyZoomIn || + aKeyEvent.iCode == EKeyZoomOut ); + + // if outgoing video is frozen disable zoom + MVtEngMedia& media = Model().Media(); + if ( VtUiUtility::GetFreezeState ( media ) ) + { + if ( aKeyEvent.iScanCode == EStdKeyUpArrow || + aKeyEvent.iScanCode == EStdKeyDownArrow || + isHwZoomKey ) + { + __VTPRINTEXITR( "VtUi.HandleKeyEventL %d", EKeyWasConsumed ) + return EKeyWasConsumed; + } + } + + // Handle volume up & down + + } + + // If key event it not yet consumed, offer it to component manager + if ( resp == EKeyWasNotConsumed ) + { + resp = iComponentManager->OfferKeyEventL( aKeyEvent, aType ); + } + + __VTPRINTEXITR( "VtUi.HandleKeyEventL %d", resp ) + return resp; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleResourceChangeL +// Handles change of a resource. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleResourceChangeL( + TInt aType ) + { + __VTPRINTENTER( "VtUi.HandleResourceChangeL" ) + const TBool layoutChange = + aType == KEikDynamicLayoutVariantSwitch || + aType == KAknsMessageSkinChange; + if ( iInstance && layoutChange ) + { + iInstance->iBitmapManager->InvalidateBitmaps(); + } + + CAknAppUi::HandleResourceChangeL( aType ); + + if ( iInstance ) + { + if ( layoutChange ) + { + CVtUiToolbarBase* tb = static_cast< CVtUiToolbarBase* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ) ); + if( tb ) + { + tb->HandleLayoutChangeL(); + } + // Relayout controls + iBlankControl->SetRect( ClientRect() ); + iInstance->LayoutChanged(); + } + if ( iInstance->iNaviPane ) + { + iInstance->iNaviPane->HandleResourceChange( aType ); + } + if ( layoutChange ) + { + (void) HandleLayoutChanged(); + } + } + + iComponentManager->HandleResourceChangeL( aType ); + + __VTPRINTEXIT( "VtUi.HandleResourceChangeL"); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleForegroundEventL +// Handles foreground status change. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleForegroundEventL( TBool aForeground ) + { + CAknAppUi::HandleForegroundEventL( aForeground ); + + if ( !aForeground ) + { + StopDtmfTone(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::GetEikonEnv +// ----------------------------------------------------------------------------- +// +CEikonEnv* CVtUiAppUi::GetEikonEnv() + { + return iEikonEnv; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::GetCba +// ----------------------------------------------------------------------------- +// +CEikButtonGroupContainer* CVtUiAppUi::GetCba() + { + return iCba; + } + +// +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetZoomModeL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetZoomModeL( const TBool aEnableZoomMode, + const TBool aIsPermanent ) + { + __VTPRINTENTER( "VtUi.SetZoomModeL" ) + __VTPRINT2( DEBUG_GEN, "VtUi.SetZoomMo=%d", aEnableZoomMode ); + // If capture mode is on zoom mode cannot be changed + if ( iUiStates->IsCaptureModeOn() ) + { + __VTPRINTEXIT( "VtUi.SetZoomModeL.CaptureOn" ) + return; + } + CVtUiZoom* zoom = static_cast< CVtUiZoom* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdZoom ) ); + if ( zoom ) + { + if ( aEnableZoomMode ) + { + if( aIsPermanent ) + { + zoom->SetPermanenVisibility( aEnableZoomMode ); + } + zoom->StartL(); + } + else + { + if( aIsPermanent ) + { + zoom->SetPermanenVisibility( aEnableZoomMode ); + } + zoom->Stop(); + } + } + iUiStates->SetZoomModeOn( aEnableZoomMode ); + CVtUiToolbarBase* tb = static_cast< CVtUiToolbarBase* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ) ); + if ( tb ) + { + tb->RefreshL(); + } + + __VTPRINTEXIT( "VtUi.SetZoomModeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HelpContextL +// Returns help context array. +// ----------------------------------------------------------------------------- +// +CArrayFix* CVtUiAppUi::HelpContextL() const + { + CArrayFix* array = + new ( ELeave ) CArrayFixFlat( KVtUiHelpContextAmount ); + CleanupStack::PushL( array ); + + array->AppendL( + TCoeHelpContext( + KVtUiTelephoneUid, + KINCAL_HLP_VIDEO_CALL ) ); + + CleanupStack::Pop( array ); + return array; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecExecuteL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::ActiveExecExecuteL( + CVtUiActiveExec& /*aActiveExec*/, + const TInt aState, + TInt& aNextState, + TRequestStatus& aRequest ) + { + return ActiveExecInitExecuteL( + aState, + aNextState, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecContinue +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::ActiveExecContinue( + CVtUiActiveExec& /*aActiveExec*/, + TInt& aState, + const TInt aError ) + { + return ActiveExecInitContinue( aState, aError ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecCancel +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecCancel( + CVtUiActiveExec& /*aActiveExec*/, + TInt aState ) + { + ActiveExecInitCancel( aState ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecDone +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecDone( + CVtUiActiveExec& /*aActiveExec*/, + const TInt aInitialState ) + { + ActiveExecInitDone( aInitialState ); + } + +// state object service handlers + + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShutdownL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShutdownL() + { + __VTPRINTENTER( "VtUi.ShutdownL" ) + + CVtUiWhiteBalance* wb = static_cast< CVtUiWhiteBalance* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdWhiteBalance ) ); + CVtUiColorTone* ct = static_cast< CVtUiColorTone* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdColourTone ) ); + + if ( wb->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiWhiteBalance::DoDeactivateL" ); + wb->DoDeactivateL (); + } + if ( ct->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiColorTone::DoDeactivateL" ); + ct->DoDeactivateL( ); + } + + // close volume slider + CVtUiVolume* volume = static_cast< CVtUiVolume* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdVolume ) ); + if ( volume ) + { + volume->Stop(); + } + // if capture mode is on stop the zoom + if ( iUiStates->IsCaptureModeOn() ) + { + CVtUiZoom* zoom = static_cast< CVtUiZoom* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdZoom ) ); + if ( zoom ) + { + zoom->Stop(); + } + } + + iActiveExec->Start( EVtUiAppUiShutdown, *this ); + __VTPRINTEXIT( "VtUi.ShutdownL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StartupPhase1L +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StartupPhase1L() + { + __VTPRINTENTER( "VtUi.StartupPhase1L" ) + iActiveExec->Start( EVtUiAppUiStartup, *this ); + __VTPRINTEXIT( "VtUi.StartupPhase1L" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StartupPhase2L +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StartupPhase2L() + { + __VTPRINTENTER( "VtUi.StartupPhase2L" ) + iActiveExec->Start( EVtUiAppUiAnswered, *this ); + __VTPRINTEXIT( "VtUi.StartupPhase2L" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ChangeState +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ChangeState( TVtUiAppStateBase* aState ) + { + __VTPRINTENTER( "VtUi.ChangeState" ) + iState = aState; + __VTPRINTEXIT( "VtUi.ChangeState" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::IsCommandAllowedL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::IsCommandAllowedL( const TInt aCommand ) + { + return iCommandManager->IsCommandAllowedL( aCommand ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshDisabledFlagsL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshDisabledFlagsL() + { + // Refresh iDisabledFlags according to the current state. + TInt avail; + MVtEngMedia& media = Model().Media(); + VtUiUtility::GetOutgoingMediaState( media, avail ); + avail = ~avail; + + iDisabledFlags = 0; + if ( avail & MVtEngMedia::EMediaAudio ) + { + iDisabledFlags |= EDisabledAudio; + } + if ( avail & MVtEngMedia::EMediaVideo ) + { + iDisabledFlags |= EDisabledVideo; + } + + // If there are not cameras, then video options should be disabled. + if ( !VtUiUtility::HasCameras( media ) ) + { + iDisabledFlags |= EVideoOptionsDisabled; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshCameraOptionAvailability +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshCameraOptionAvailability( + TBool& aUsePrimaryCameraNotAllowed, + TBool& aUseSecondaryCameraNotAllowed ) + { + aUsePrimaryCameraNotAllowed = ETrue; + aUseSecondaryCameraNotAllowed = ETrue; + + // Check sources caps and current camera to see which + // items should be included to the menu. + + TInt sourcesCaps = 0; + MVtEngMedia& media = Model().Media(); + (void) media.GetSourcesCaps( sourcesCaps ); + + MVtEngMedia::TCameraId cameraId; + const TBool hasCameraId = + ( media.GetCurrentCameraId( cameraId ) == KErrNone ); + + if ( hasCameraId ) + { + // Camera is in use. Now selected camera is not included + // to the menu. + switch ( cameraId ) + { + case MVtEngMedia::EPrimaryCamera: + sourcesCaps &= + ~MVtEngMedia::ESourceCapsPrimaryCamera; + break; + + case MVtEngMedia::ESecondaryCamera: + sourcesCaps &= + ~MVtEngMedia::ESourceCapsSecondaryCamera; + break; + + default: + sourcesCaps = 0; + break; + } + } + else + { + // If camera is not in use, then the "enable video" option + // will automatically use one of the existing cameras. + // However, if there are two cameras, then we need + // to include secondary to the menu. + + const TInt bothCameras = + ( MVtEngMedia::ESourceCapsPrimaryCamera | + MVtEngMedia::ESourceCapsSecondaryCamera ); + sourcesCaps &= ~bothCameras; + if ( sourcesCaps == bothCameras ) + { + sourcesCaps &= + ~MVtEngMedia::ESourceCapsPrimaryCamera; + } + else + { + sourcesCaps = 0; + } + } + + sourcesCaps = ~sourcesCaps; + aUsePrimaryCameraNotAllowed = + ( sourcesCaps & MVtEngMedia::ESourceCapsPrimaryCamera ); + aUseSecondaryCameraNotAllowed = + ( sourcesCaps & MVtEngMedia::ESourceCapsSecondaryCamera ); + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::CmdCaptureL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdCaptureL() + { + //firstly need to know if underlying provider supports KVtEngFreeze + MVtEngCommandHandler& command = Model().CommandHandler(); + const TInt caps = command.GetCommandCaps( KVtEngFreeze ); + if ( (caps & MVtEngCommandHandler::EAttribEnabled) == 0) + { + return; + } + // end capture mode, image captured + iUiStates->SetCaptureModeOn( EFalse ); + // end zoom mode + SetZoomModeL( EFalse, ETrue ); + // freeze outgoing video + ExecuteCmdL( KVtEngFreeze ); + RefreshBlind(); + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::CmdSnapshotL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdSnapshotL() + { + __VTPRINTENTER( "VtUi.CmdSnapshotL" ) + + // zoom mode must be set on before capture mode is set on + SetZoomModeL( ETrue, ETrue ); + + // if outgoing video is already frozen + MVtEngMedia& media = Model().Media(); + const TBool isFrozen( VtUiUtility::GetFreezeState( media ) ); + if ( isFrozen ) + { + ExecuteCmdL( KVtEngUnfreeze ); + } + if ( !IsViewFinderInMainPane() ) + { + SwitchViewFinderToMainPaneL( !isFrozen ); + } + else if ( !isFrozen ) + { + iUiStates->SetViewFindersInitialPlaceContextPane( EFalse ); + } + + // set capture mode on + + iUiStates->SetCaptureModeOn( ETrue ); + RefreshStatesL(); + RefreshBlind(); + __VTPRINTEXIT( "VtUi.CmdSnapshotL" ) + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::CmdCancelCaptureL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdCancelCaptureL() + { + __VTPRINTENTER( "VtUi.CmdCancelCaptureL" ) + // end capture mode, image capture canceled + iUiStates->SetCaptureModeOn( EFalse ); + SetZoomModeL( EFalse, ETrue ); + RefreshStatesL(); + RestoreViewFinderL(); + RefreshBlind(); + __VTPRINTEXIT( "VtUi.CmdCancelCaptureL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdEnableVideoL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdEnableVideoL() + { + // if outgoing video is frozen + MVtEngMedia& media = Model().Media(); + if ( VtUiUtility::GetFreezeState( media ) ) + { + ExecuteCmdL( KVtEngUnfreeze ); + // swap images if needed + RestoreViewFinderL(); + } + else + { + ExecuteCmdL( KVtEngStopViewFinder ); + iUplinkWindow->SetStreamBitmap( NULL ); + MVtEngMedia::TMediaSource source = MVtEngMedia::EMediaCamera; + ExecuteCmdL( KVtEngSetSource, source ); + MVtEngMedia::TCameraId id; + if ( Model().Media().GetCurrentCameraId( id ) == KErrInUse ) + { + ShowCameraInUseNoteL(); + } + ExecuteCmdL( KVtEngStartViewFinder ); + } + // update VB settings + UpdateVBSettingL(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdEnableAudioL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdEnableAudioL() + { + ExecuteCmdL( KVtEngUnmuteOutgoingAudio ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdDisableVideoL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdDisableVideoL() + { + + if( iUiStates->IsZoomModeOn() ) + { + // if zoom feature is active, stop that + MVtUiFeature* zm = iFeatureManager->GetFeatureById( EVtUiFeatureIdZoom ); + if ( zm ) + { + if ( zm->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.CmdDisableVideoL zm->STOP" ) + zm->Stop(); + } + } + } + + ExecuteCmdL( KVtEngStopViewFinder ); + + iUplinkWindow->SetStreamBitmap( NULL ); + + TInt err = KErrNotFound; + if ( VtUiUtility::HasStillImage( Model().Media() ) ) + { + __VTPRINT( DEBUG_GEN, "VtUi.:CmdDisableVideoL.HasStill" ) + MVtEngMedia::TMediaSource source = MVtEngMedia::EMediaStillImage; + TRAP( err, ExecuteCmdL( KVtEngSetSource, source ) ); + } + if ( ( err != KErrNone ) ) + { + __VTPRINT( DEBUG_GEN, "VtUi.:CmdDisableVideoL.MediaNone" ) + MVtEngMedia::TMediaSource source = MVtEngMedia::EMediaNone; + ExecuteCmdL( KVtEngSetSource, source ); + } + + ExecuteCmdL( KVtEngStartViewFinder ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdDisableAudioL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdDisableAudioL() + { + ExecuteCmdL( KVtEngMuteOutgoingAudio ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdActivateBtL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdActivateBtL() + { + TInt error = KErrNone; + CVtUiActivateBtHfDialog* dialog = + new ( ELeave ) CVtUiActivateBtHfDialog( + NULL, + &error, + Model().CommandHandler(), + *iEventObserver ); + dialog->ExecuteDialogLD(); + + if ( error != KErrCancel ) + { + switch ( error ) + { + case KErrNone: + break; + + case KErrNoMemory: + case KErrNotSupported: + // Clear failure - to be handled in active scheduler. + User::Leave( error ); + break; + + default: + // Failed - still show local information note in error situation. + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_QTN_BT_DEVICE_NOT_AVAIL ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdDeactivateBtL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdDeactivateBtL() + { + // Command to Video tel engine + MVtEngAudio::TVtEngRoutingSetting audioSetting = + MVtEngAudio::EDeactivateBT; + + ExecuteCmdL( KVtEngSetAudioRouting, audioSetting ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdActivateLoudspeakerL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdActivateLoudspeakerL() + { + MVtEngAudio::TVtEngRoutingSetting audioSetting = + MVtEngAudio::EActivateHandsfree; + ExecuteCmdL( KVtEngSetAudioRouting, audioSetting ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdDeactivateLoudspeakerL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdDeactivateLoudspeakerL() + { + MVtEngAudio::TVtEngRoutingSetting audioSetting = + MVtEngAudio::EDeactivateHansfree; + ExecuteCmdL( KVtEngSetAudioRouting, audioSetting ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdSwapImagesPlacesL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdSwapImagesPlacesL() + { + __VTPRINTENTER( "VtUi.Swap" ) + + MVtEngMedia& media = Model().Media(); + const TBool viewFinderStarted = + media.RenderingStarted( MVtEngMedia::EMediaOutgoing ); + const TBool remoteRenderStarted = + media.RenderingStarted( MVtEngMedia::EMediaIncoming ); + + if ( viewFinderStarted ) + { + // Stop viewfinder. + __VTPRINT( DEBUG_GEN, "VtUi.Swap.VF.down" ) + ExecuteCmdL( KVtEngStopViewFinder ); + } + // Stop remote render. + __VTPRINT( DEBUG_GEN, "VtUi.Swap.RR.down" ) + ExecuteCmdL( KVtEngStopRenderRemote ); + + // Clear windows. + iUplinkWindow->Reset(); + iDownlinkWindow->Reset(); + + const TBool uplinkWindowEqualsContextControl = + ( iUplinkWindow == iInstance->iContextControl ); + + // Prepare viewfinder. + __VTPRINT( DEBUG_GEN, "VtUi.Swap.VF.upd" ) + TVtEngRenderingOptions configViewfinder( + uplinkWindowEqualsContextControl ? + DetermineMainControlOptions( EFalse ) : + DetermineContextControlOptions() ); + ExecuteCmdL( KVtEngPrepareViewFinder, configViewfinder ); + + // Swap windows. + if ( ERenderingModeDialer == iRenderingMode ) + { + MVtUiVideoWindow* tmpWindow = iUplinkWindow; + iUplinkWindow = iStoredDownlinkWindow; + iStoredDownlinkWindow = tmpWindow; + } + else + { + MVtUiVideoWindow* tmpWindow = iUplinkWindow; + iUplinkWindow = iDownlinkWindow; + iDownlinkWindow = tmpWindow; + } + iUplinkWindow->SetRemoteVideoControl(NULL); + iDownlinkWindow->SetRemoteVideoControl(iInstance->iRemoteVideoControl); + iDownlinkWindow->LayoutRemoteVideo(); + + // Prepare remote render. + __VTPRINT( DEBUG_GEN, "VtUi.Swap.RR.upd" ) + TRAPD ( err, { + TVtEngRenderingOptionsNGA configRemoteRenderNGA( + DetermineRemoteVideoControlOptionsNGA() ); + ExecuteCmdL( + KVtEngPrepareRemoteRenderNGA, + configRemoteRenderNGA ); + } ); + + if ( err != KErrNone ) + { + if ( viewFinderStarted ) + { + // Start viewfinder. + ExecuteCmdL( KVtEngStartViewFinder ); + } + User::Leave ( err ); + } + // Start remote render. + __VTPRINT( DEBUG_GEN, "VtUi.Swap.RR.up" ) + if ( remoteRenderStarted ) + { + ExecuteCmdL( KVtEngStartRenderRemote ); + } + + __VTPRINT( DEBUG_GEN, "VtUi.Swap.VF.up" ) + if ( viewFinderStarted ) + { + // Start viewfinder. + ExecuteCmdL( KVtEngStartViewFinder ); + } + + iDownlinkWindow->Redraw(); + + // Refresh blind & waiting will be handled in HandleCommandL. + __VTPRINTEXIT( "VtUi.Swap" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdUseCameraL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdUseCameraL( const TBool aPrimaryCamera ) + { + EnableCommandActivatingAndCleanupPushL(); + MVtEngMedia& media = Model().Media(); + + MVtEngMedia::TMediaSource selectedSource = + ( aPrimaryCamera ) ? + MVtEngMedia::EMediaCameraPri : MVtEngMedia::EMediaCameraSec; + + TInt available = 0; + VtUiUtility::GetOutgoingMediaState( media, available ); + if ( available & MVtEngMedia::EMediaVideo ) + { + ExecuteCmdL( KVtEngStopViewFinder ); + + iUplinkWindow->SetStreamBitmap( NULL ); + TRAPD( err, ExecuteCmdL( KVtEngSetSource, selectedSource ) ); + + if ( err == KErrNone ) + { + ExecuteCmdL( KVtEngStartViewFinder ); + } + else + { + ShowOtherCameraNotUsableNoteL(); + } + } + else + { + MVtEngMedia::TPrepareCameraParams params; + params.iMediaSource = selectedSource; + params.iInitialize = EFalse; + TRAPD( err, ExecuteCmdL( KVtEngPrepareCamera, params ) ); + if ( err != KErrNone ) + { + ShowOtherCameraNotUsableNoteL(); + } + } + CleanupStack::PopAndDestroy(); // EnableCommandActivatingAndCleanupPushL + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdHelpL +// Launches help application. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdHelpL() + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), + AppHelpContextL() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::PrepareExitL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::PrepareExitL() + { + __VTPRINTENTER( "VtUi.PrepareExitL" ) + // Cancel progress dialog + HideProgressDialogL(); + // Cancel menu. + CAknAppUi::ProcessCommandL( EEikCmdCanceled ); // does not leave + + if ( !iExitTimer->IsActive() ) + { + __VTPRINT( DEBUG_GEN, "VtUi.Exit.Timer.Go" ) + iExitTimer->Start( + KVtUiExitTimeout, + KVtUiExitTimeout, + TCallBack( DoHandleExitTimeout, this ) ); + } + + // Asynchronous shutdown - execute command. + iBlankControl->SetActive( ETrue ); + __VTPRINTEXIT( "VtUi.PrepareExitL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdUpdateZoomL +// This method is called to update zoom step to the Video Telephone engine +// side from the HandleKeyEventL method. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdUpdateZoomL() + { + __VTPRINTENTER( "VtUi.UpdZm" ) + + __VTPRINTEXIT( "VtUi.UpdZm" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetZoomFactorL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetZoomFactorL( TInt aZoomStep ) + { + __VTPRINTENTER( "VtUi.SetZoomFactorL" ) + MVtEngMedia& media = Model().Media(); + if ( VtUiUtility::IsZoomAllowed( media ) ) + { + ExecuteCmdL( KVtEngSetZoomStep, aZoomStep ); + } + __VTPRINTEXIT( "VtUi.SetZoomFactorL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdUpdateVolumeL +// This method is called to update volume to the Video Telephone engine +// side +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdUpdateVolumeL( MVtEngAudio::TVtEngOutputVolume aVolume ) + { + __VTPRINTENTER( "VtUi.CmdUpdateVolumeL" ) + iVolCtrl->AdjustVolumeL( aVolume ); + __VTPRINTEXIT( "VtUi.CmdUpdateVolumeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdGoToIdleL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdGoToIdleL() + { + __VTPRINTENTER( "VtUi.CmdGoToIdleL" ) + TInt idleUid = 0; + if ( RProperty::Get( + KPSUidAiInformation, + KActiveIdleUid, + idleUid ) == KErrNone ) + { + __VTPRINT2( DEBUG_GEN, "Idle UID: %d", idleUid ) + TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTask task = taskList.FindApp( TUid::Uid( idleUid ) ); + if ( task.Exists() ) + { + __VTPRINT( DEBUG_GEN, "Idle task found") + RProperty::Set( KPSUidUikon, KUikVideoCallTopApp, KVtUiAppUid.iUid ); + task.BringToForeground(); + } + } + __VTPRINTEXIT( "VtUi.CmdGoToIdleL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdInitializeShareImageL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdInitializeShareImageL( TBool& aNeedRefresh ) + { + __VTPRINTENTER( "VtUi.CmdInitializeShareImageL" ) + EnableCommandActivatingAndCleanupPushL(); + + MVtUiFeature* tb = + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ); + if ( tb ) + { + // timer could be active + if ( iTbPeriodic ) + { + iTbPeriodic->Cancel(); + } + tb->Stop(); + } + CDesCArray* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( selectedFiles ); + CVtUiAppUi::CVtUiAppUiMGVerifier* verifier = + CVtUiAppUi::CVtUiAppUiMGVerifier::NewLC( *this, *iCoeEnv ); + + // number erntry is not availabe while media gallery is open + iInstance->iNumberEntryActivation->SetActive( EFalse ); + iUiStates->SetSelectingShare( ETrue ); + + TBool result( EFalse ); + TRAPD( err, result = + MGFetch::RunL( *selectedFiles, EImageFile, EFalse, verifier ) ); + + // leave occured + if ( err != KErrNone ) + { + if ( iUiStates->ExecState() == TVtUiStates::EExecStateRunning ) + { + ShowUnableToOpenNoteL(); + } + else + { + __VTPRINTEXIT( "VtUi.CmdInitializeShareImageL 1" ) + Exit(); + } + } + + if ( result && ( selectedFiles->Count() > 0 ) ) + { + MVtEngMedia::TShareObjectState shareObjectState; + VtUiUtility::GetObjectSharingState( Model().Media(), shareObjectState ); + iUiStates->SetViewFinderToMainPane( + shareObjectState == MVtEngMedia::ENotSharing ); + MVtEngMedia::TShareObjectImageParameters + parameters( selectedFiles->operator[]( 0 ) ); + ExecuteCmdL( KVtEngInitializeShareImage, parameters ); + aNeedRefresh = ETrue; + } + else // selection canceled start toolbar timer + { + if ( !iTbPeriodic ) + { + iTbPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + } + iTbPeriodic->Cancel(); + iTbPeriodic->Start( KStartTime, KPeriodTime, TCallBack( DoTryToStartTbL, this ) ); + } + CleanupStack::PopAndDestroy( 2 ); // selectedFiles, verifier + // number entry is availabe again + iInstance->iNumberEntryActivation->SetActive( ETrue ); + iUiStates->SetSelectingShare( EFalse ); + CleanupStack::PopAndDestroy(); // EnableCommandActivatingAndCleanupPushL(); + + __VTPRINTEXIT( "VtUi.CmdInitializeShareImageL 0" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdShareImageL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdShareImageL() + { + ExecuteCmdL( KVtEngStartShareImage ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdStopShareImageL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CmdStopShareImageL( TBool& aNeedRefresh ) + { + ExecuteCmdL( KVtEngStopShareImage ); + RestoreViewFinderL(); + aNeedRefresh = ETrue; + // update VB settings + UpdateVBSettingL(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleWaitingStateChange +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleWaitingStateChange( TBool aIsWaiting ) + { + // Dialer must be closed in case of waiting call + MVtUiFeature* dialer = + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ); + if ( dialer ) + { + dialer->Stop(); + } + iUiStates->SetWaitingCall( aIsWaiting ); + if (aIsWaiting == EFalse && + iIsWaitingCallState != EFalse && + !iUiStates->IsThisApplicationForeground() ) + { + iIsWaitingCallState = EFalse; + ChangeApplicationFocus( ETrue ); + TRAP_IGNORE ( SetHiddenL( EFalse ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitExecuteL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::ActiveExecInitExecuteL( + const TInt aState, + TInt& aNextState, + TRequestStatus& aRequest ) + { + __VTPRINTENTER( "VtUi.InitExec" ) + __VTPRINT2( DEBUG_GEN, "VtUi.InitExec.st=%d", aState ) + + TBool synch = EFalse; + + switch ( aState ) + { + // Startup chain: + case EVtUiAppUiStartupCloseDialogs: + // Close all dialogs. + iBlankControl->SetActive( EFalse ); + AknDialogShutter::ShutDialogsL( *iEikonEnv ); + iBlankControl->SetActive( ETrue ); + + synch = ETrue; + aNextState = EVtUiAppUiStartupInitEngine; + break; + + case EVtUiAppUiStartupInitEngine: + iUplinkWindow = iInstance->iContextControl; + iDownlinkWindow = iInstance->iMainControl; + ActiveExecInitExecuteCommandL( KVtEngInitializeEngine, aRequest ); + aNextState = EVtUiAppUiStartupPrepareViewfinder; + break; + + case EVtUiAppUiStartupPrepareViewfinder: + ActiveExecInitPrepareViewFinderL( aRequest ); + iUplinkWindow->SetStreamBitmap( NULL ); + aNextState = EVtUiAppUiStartupPrepareRemoteRender; + break; + + case EVtUiAppUiStartupPrepareRemoteRender: + + iInstance->CreateRemoteVideoControl(); + ActiveExecInitPrepareRemoteRenderL( aRequest ); + iDownlinkWindow->SetStreamBitmap( NULL ); + aNextState = EVtUiAppUiStartupRemoveBlank; + break; + + case EVtUiAppUiStartupRemoveBlank: + // Finally remove blank control. + iBlankControl->SetActive( EFalse ); + aNextState = EVtUiAppUiNone; + synch = ETrue; + break; + + // Shutdown chain: + case EVtUiAppUiShutdownCloseDialogs: + { + // Close all dialogs. + iBlankControl->SetActive( EFalse ); + AknDialogShutter::ShutDialogsL( *iEikonEnv ); + iBlankControl->SetActive( ETrue ); + + MVtUiFeature* numberEntry = iFeatureManager->GetFeatureById( + EVtUiFeatureIdNumberEntry ); + // Number entry may be active if its deactivation timer is still + // pending. Stop performs some cleanup which is needed before AppUi + // cleanup. + if ( numberEntry ) + { + numberEntry->Stop(); + } + + synch = ETrue; + aNextState = EVtUiAppUiShutdownHideApplication; + } + break; + + case EVtUiAppUiShutdownHideApplication: + if ( iUiStates->IsThisApplicationForeground() ) + { + BringTelephoneToForeground(); + } + else + { + ChangeApplicationFocus( EFalse ); + } + iDownlinkWindow->SetStreamBitmap( NULL ); + iUplinkWindow->SetStreamBitmap( NULL ); + SetHiddenL( ETrue ); + iEventObserver->DeleteRemConSession(); + + synch = ETrue; + aNextState = EVtUiAppUiShutdownResetEngine; + break; + + case EVtUiAppUiShutdownResetEngine: + { + aRequest = KRequestPending; + + MVtEngCommandHandler& command = Model().CommandHandler(); + // There should not be any commands ongoing because + // we have canceled all dialogs (and this should + // be the only command without dialog). + command.CancelCommand( command.PendingCommand() ); // ignore error + command.ExecuteL( KVtEngResetEngine, NULL ); + iShutdownRequest = &aRequest; + + aNextState = EVtUiAppUiShutdownRemoveBlank; + } + break; + + case EVtUiAppUiShutdownRemoveBlank: + // Finally remove blank control. + iBlankControl->SetActive( EFalse ); + + synch = ETrue; + aNextState = EVtUiAppUiNone; + break; + + // Answered chain: + case EVtUiAppUiAnsweredStart: + { + CVtUiBlankDialog* dialog = + new ( ELeave ) CVtUiBlankDialog( &iExecBlankDialog ); + dialog->ExecuteDialogNoWaitLD(); + iExecBlankDialog = dialog; + + synch = ETrue; + if ( iUiStates->IsLayoutChangeNeeded() ) + { + (void) HandleLayoutChanged(); + } + aNextState = EVtUiAppUiAnsweredRefreshNavi; + } + break; + + case EVtUiAppUiAnsweredRefreshNavi: + RefreshNaviPaneL(); + iEventObserver->CreateRemConSessionL(); + + synch = ETrue; + aNextState = EVtUiAppUiAnsweredRefreshSoftkeys; + break; + + case EVtUiAppUiAnsweredRefreshSoftkeys: + RefreshSoftkeysL(); + + synch = ETrue; + aNextState = EVtUiAppUiAnsweredStartRemoteRender; + break; + + case EVtUiAppUiAnsweredStartRemoteRender: + { + // Set waiting text to main control and start remote rendering. + // Video Telephone application should get KVtEngRemoteVideoStarted + // event when the first frame is received. + iDownlinkWindow->SetWaiting( ETrue ); + iUiStates->SetWaitingForFirstFrame( ETrue ); + //Must check if orientation changed between prepare remote render and start remote render + //If changed, update render parameter firstly + if ( iIsLandScapeOrientation != VtUiLayout::IsLandscapeOrientation() ) + { + __VTPRINT( DEBUG_GEN, "layout has been changed before start RemoteRender" ) + UpdateRenderingParametersL(); + } + + ActiveExecInitExecuteCommandL( KVtEngStartRenderRemote, + aRequest ); + + aNextState = EVtUiAppUiAnsweredCheckCamera; + } + break; + + case EVtUiAppUiAnsweredCheckCamera: + { + MVtEngMedia& media = Model().Media(); + if ( VtUiUtility::HasCameras( media ) ) + { + aNextState = EVtUiAppUiAnsweredChoose; + synch = ETrue; + } + else + { + if ( VtUiUtility::HasStillImage( media ) ) + { + aNextState = EVtUiAppUiAnsweredSelectStill; + } + else + { + aNextState = EVtUiAppUiAnsweredSelectNone; + } + + synch = ETrue; + } + } + break; + + case EVtUiAppUiAnsweredChoose: + { + // If camera is in use, then show note, + // select still image, stop. + // + // If call is mobile terminated, then show query. + // If user answers 'yes' to the query, + // then activate camera. + // If user answers 'no' to the query, + // then choose still image. + // + // If call is mobile originated, then select camera. + // + // If selecting a camera fails, then select still image. + // If selecting still image fails, then select none. + // + CVtEngModel& model = Model(); + MVtEngSessionInfo& session = model.Session(); + MVtEngMedia& media = model.Media(); + + MVtEngMedia::TCameraId id; + TInt cameraErr = model.Media().GetCurrentCameraId( id ); + if ( cameraErr == KErrInUse ) + { + // Camera is in use. + iUiStates->SetExecShowCameraInUse( ETrue ); + + if ( VtUiUtility::HasStillImage( media ) ) + { + aNextState = EVtUiAppUiAnsweredSelectStill; + } + else + { + aNextState = EVtUiAppUiAnsweredSelectNone; + } + } + else + { + // Check the direction of the call. + iUiStates->SetExecShowCameraInUse( EFalse ); + MVtEngSessionInfo::TDirection direction; + if ( session.GetDirection( direction ) != KErrNone ) + { + direction = MVtEngSessionInfo::EDirectionMT; + } + + if ( direction == MVtEngSessionInfo::EDirectionMT ) + { + // Start steps towards the "Allow video" query. + if ( VtUiUtility::HasStillImage( media ) ) + { + aNextState = EVtUiAppUiAnsweredQuerySetupStill; + } + else + { + aNextState = EVtUiAppUiAnsweredQuerySetupNone; + } + } + else + { + aNextState = EVtUiAppUiAnsweredDoPrepareCamera; + } + } + synch = ETrue; + } + break; + + case EVtUiAppUiAnsweredQuerySetupStill: + ActiveExecInitSetSourceL( MVtEngMedia::EMediaStillImage, aRequest ); + aNextState = EVtUiAppUiAnsweredQuerySetupStart; + break; + + case EVtUiAppUiAnsweredQuerySetupNone: + ActiveExecInitSetSourceL( MVtEngMedia::EMediaNone, aRequest ); + aNextState = EVtUiAppUiAnsweredQuerySetupStart; + break; + + case EVtUiAppUiAnsweredQuerySetupStart: + ActiveExecInitExecuteCommandL( KVtEngStartViewFinder, aRequest ); + aNextState = EVtUiAppUiAnsweredQueryShow; + break; + + case EVtUiAppUiAnsweredQueryShow: + { + RefreshL(); + TInt state = EPSCTsyCallStateUninitialized; + TInt err = RProperty::Get( + KPSUidCtsyCallInformation, + KCTsyCallState, + state ); + __VTPRINT3( DEBUG_GEN, "VtUi.InitExec WaitingCall State=%d, err=%d", + state, err ) + if ( EPSCTsyCallStateRinging != state ) + { + ChangeApplicationFocus( ETrue ); + SetHiddenL( EFalse ); + } + else + { + iIsWaitingCallState = ETrue; + } + + // User selectable call answer mute. + // In GS one can set call ansewer status + // eighter to query user, allways show, allways mute. + // GS values are checked from CR key ( KSettingsVTVideoSending ) + // (default value is 0 = allways query). + TVtUiGsMuteVariation camute; + __VTPRINT2( DEBUG_GEN, "VtUi.InitExe GS CR key KSettingsVTVideoSending querystate=%d", camute.GsMuteState() ) + if ( camute.GsMuteState() == KAllwaysQuery && !iUiStates->IsDeviceLockOn() && EPSCTsyCallStateRinging != state) + { + CVtUiAllowVideoDialog* dialog = + new ( ELeave ) CVtUiAllowVideoDialog( + &iExecDialog, + CAknQueryDialog::ENoTone ); + dialog->ExecuteDialogLD( aRequest ); + iExecDialog = dialog; + aNextState = EVtUiAppUiAnsweredQueryDecide; + } + else if ( camute.GsMuteState() == KAllwaysAllow ) + { + aNextState = EVtUiAppUiAnsweredDoPrepareCamera; + synch = ETrue; + } + else + { + aNextState = EVtUiAppUiNone; + synch = ETrue; + } + + } + break; + + case EVtUiAppUiAnsweredQueryDecide: + { + delete iExecDialog; + iExecDialog = NULL; + + if ( iActiveExec->RequestStatus() == + CVtUiAllowVideoDialog::EUserAllowed ) + { + aNextState = EVtUiAppUiAnsweredDoPrepareCamera; + } + else + { + aNextState = EVtUiAppUiNone; + } + + synch = ETrue; + } + break; + + case EVtUiAppUiAnsweredDoPrepareCamera: + { + MVtEngMedia& media = Model().Media(); + MVtEngMedia::TMediaSource source = MVtEngMedia::EMediaCamera; + ActiveExecInitPrepareCameraL( source, aRequest ); + aNextState = EVtUiAppUiAnsweredSelectCamera; + } + break; + + case EVtUiAppUiAnsweredQuerySelectCamera: + case EVtUiAppUiAnsweredSelectCamera: + ActiveExecInitSetSourceL( MVtEngMedia::EMediaCamera, aRequest ); + if ( aState == EVtUiAppUiAnsweredSelectCamera ) + { + aNextState = EVtUiAppUiAnsweredStartViewfinder; + } + else + { + aNextState = EVtUiAppUiAnsweredQueryStartViewfinder; + } + break; + + case EVtUiAppUiAnsweredQuerySelectStill: + case EVtUiAppUiAnsweredSelectStill: + ActiveExecInitSetSourceL( MVtEngMedia::EMediaStillImage, aRequest ); + + if ( aState == EVtUiAppUiAnsweredSelectStill ) + { + aNextState = EVtUiAppUiAnsweredStartViewfinder; + } + else + { + aNextState = EVtUiAppUiAnsweredQueryStartViewfinder; + } + break; + + case EVtUiAppUiAnsweredQuerySelectNone: + case EVtUiAppUiAnsweredSelectNone: + ActiveExecInitSetSourceL( MVtEngMedia::EMediaNone, aRequest ); + + if ( aState == EVtUiAppUiAnsweredSelectNone ) + { + aNextState = EVtUiAppUiAnsweredStartViewfinder; + } + else + { + aNextState = EVtUiAppUiAnsweredQueryStartViewfinder; + } + break; + + case EVtUiAppUiAnsweredQueryStartViewfinder: + case EVtUiAppUiAnsweredStartViewfinder: + ActiveExecInitExecuteCommandL( KVtEngStartViewFinder, aRequest ); + + if ( aState == EVtUiAppUiAnsweredStartViewfinder ) + { + aNextState = EVtUiAppUiAnsweredFinish; + } + else + { + aNextState = EVtUiAppUiAnsweredQueryFinish; + } + break; + + case EVtUiAppUiAnsweredQueryFinish: + case EVtUiAppUiAnsweredFinish: + RefreshL(); + if ( iUiStates->IsExecShowCameraInUse() ) + { + ShowCameraInUseNoteL(); + } + + if ( aState != EVtUiAppUiAnsweredQueryFinish ) + { + ChangeApplicationFocus( ETrue ); + } + SetHiddenL( EFalse ); + + synch = ETrue; + aNextState = EVtUiAppUiNone; + break; + + default: + User::Leave( KErrNotSupported ); + break; + } + + __VTPRINT2( DEBUG_GEN, "VtUi.InitExec.sync=%d", synch ) + __VTPRINT2( DEBUG_GEN, "VtUi.InitExec.next=%d", aNextState ) + __VTPRINTEXITR( "VtUi.InitExec %d", synch ) + return synch; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitContinue +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::ActiveExecInitContinue( + TInt& aState, + const TInt aError ) + { + __VTPRINTENTER( "VtUi.InitExecCont" ) + __VTPRINT2( DEBUG_GEN, "VtUi.InitExecCont.st=%d", aState ) + //__VTPRINT2( DEBUG_GEN, "VtUi.InitExecCont.err=%d", aError ) + + const TInt state = aState; + switch ( state ) + { + case EVtUiAppUiStartupCloseDialogs: + case EVtUiAppUiStartupInitEngine: + case EVtUiAppUiStartupPrepareViewfinder: + case EVtUiAppUiStartupPrepareRemoteRender: + case EVtUiAppUiStartupRemoveBlank: + // Prepare failed. + break; + + case EVtUiAppUiShutdownCloseDialogs: + if( KErrNotReady == aError ) + { + aState = EVtUiAppUiShutdownHideApplication; + break; + } + case EVtUiAppUiShutdownResetEngine: + case EVtUiAppUiShutdownRemoveBlank: + // shutdown failed + break; + + case EVtUiAppUiShutdownHideApplication: + aState = EVtUiAppUiShutdownResetEngine; + break; + + + case EVtUiAppUiAnsweredStart: + aState = EVtUiAppUiAnsweredRefreshNavi; + break; + + case EVtUiAppUiAnsweredRefreshNavi: + aState = EVtUiAppUiAnsweredRefreshSoftkeys; + break; + + case EVtUiAppUiAnsweredRefreshSoftkeys: + aState = EVtUiAppUiAnsweredStartRemoteRender; + break; + + case EVtUiAppUiAnsweredStartRemoteRender: + case EVtUiAppUiAnsweredStartViewfinder: + case EVtUiAppUiAnsweredSelectNone: + case EVtUiAppUiAnsweredFinish: + case EVtUiAppUiAnsweredQueryStartViewfinder: + case EVtUiAppUiAnsweredQuerySelectNone: + case EVtUiAppUiAnsweredQueryFinish: + // Answered failed. + break; + + case EVtUiAppUiAnsweredCheckCamera: + aState = EVtUiAppUiAnsweredChoose; + break; + + case EVtUiAppUiAnsweredChoose: + aState = EVtUiAppUiAnsweredQuerySetupStill; + break; + + case EVtUiAppUiAnsweredQuerySetupStill: + aState = EVtUiAppUiAnsweredQuerySetupNone; + break; + + case EVtUiAppUiAnsweredQuerySetupStart: + case EVtUiAppUiAnsweredQuerySetupNone: + aState = EVtUiAppUiAnsweredQueryShow; + break; + + case EVtUiAppUiAnsweredQueryShow: + case EVtUiAppUiAnsweredQueryDecide: + case EVtUiAppUiAnsweredSelectCamera: + aState = EVtUiAppUiAnsweredSelectStill; + break; + + case EVtUiAppUiAnsweredQuerySelectCamera: + aState = EVtUiAppUiAnsweredQuerySelectStill; + break; + + case EVtUiAppUiAnsweredQuerySelectStill: + aState = EVtUiAppUiAnsweredQuerySelectNone; + break; + + case EVtUiAppUiAnsweredSelectStill: + aState = EVtUiAppUiAnsweredSelectNone; + break; + + default: + break; + } + + const TBool cont = ( aState != state ); + __VTPRINT2( DEBUG_GEN, "VtUi.InitExecCont.cont=%d", cont ) + + if ( !cont ) + { + delete iExecBlankDialog; + iExecBlankDialog = NULL; + // Operation failed. + if ( iState ) + { + TRAP_IGNORE( iState->AppUiStartupFailedL() ); + } + } + __VTPRINTEXITR( "VtUi.InitExecCont %d", cont ) + return cont; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitCancel +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitCancel( + const TInt /*aState*/ ) + { + __VTPRINTENTER( "VtUi.InitExecCancel" ) + + iBlankControl->SetActive( EFalse ); + delete iExecDialog; + delete iExecBlankDialog; + + if ( iShutdownRequest ) + { + User::RequestComplete( iShutdownRequest, KErrCancel ); + iShutdownRequest = NULL; + } + __VTPRINTEXIT( "VtUi.InitExecCancel" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitDone +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitDone( + const TInt aInitialState ) + { + __VTPRINTENTER( "VtUi.ExecInitDone" ) + __VTPRINT2( DEBUG_GEN, "VtUi.InitExecDone.ini=%d", aInitialState ) + delete iExecBlankDialog; + iExecBlankDialog = NULL; + // Operation succeeded + + // Now we have finished. + if ( iState ) + { + if ( aInitialState == EVtUiAppUiAnswered ) + { + TRAP_IGNORE( iState->AppUiStartupPhase2DoneL() ); + TRAP_IGNORE( AppUiInitDoneDoPostInitL() ); + } + else if ( aInitialState == EVtUiAppUiShutdown ) + { + TRAP_IGNORE( iState->ShutdownDoneL() ); + } + else // EVtUiAppUiStartup + { + TRAP_IGNORE( iState->AppUiStartupPhase1DoneL() ); + } + } + __VTPRINTEXIT( "VtUi.ExecInitDone" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitExecuteCommandL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitExecuteCommandL( + const TVtEngCommandId aCommand, + TRequestStatus& aRequest ) + { + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + aCommand, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitExecuteCommandL +// ----------------------------------------------------------------------------- +// +template < class T > +void CVtUiAppUi::ActiveExecInitExecuteCommandL( + const TVtEngCommandId aCommand, + T& aParam, + TRequestStatus& aRequest ) + { + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + aCommand, + aParam, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitPrepareCameraL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitPrepareCameraL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ) + { + MVtEngMedia::TPrepareCameraParams params; + params.iMediaSource = aSource; + params.iInitialize = ETrue; + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + KVtEngPrepareCamera, + params, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitSetSourceL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitSetSourceL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ) + { + MVtEngMedia::TMediaSource source = + aSource; + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + KVtEngSetSource, + source, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitPrepareViewFinderL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitPrepareViewFinderL( + TRequestStatus& aRequest ) + { + // Configure view finder to context pane. + if ( iEventObserver->CommandSupported( KVtEngPrepareViewFinder ) ) + { + TVtEngRenderingOptions configViewfinder( + DetermineContextControlOptions() ); + + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + KVtEngPrepareViewFinder, + configViewfinder, + aRequest ); + } + else + { + // Viewfinder does not support DSA - panic. + VtUiPanic::Panic( EVtUiPanicPrepareViewFinderNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecInitPrepareRemoteRenderL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecInitPrepareRemoteRenderL( + TRequestStatus& aRequest ) + { + if ( iEventObserver->CommandSupported( KVtEngPrepareRemoteRenderNGA ) ) + { + // Cropping is performed when we draw the picture. + TVtEngRenderingOptionsNGA configRemoteRenderNGA( + DetermineRemoteVideoControlOptionsNGA() ); + + iExecDialog = + ExecuteCmdAsyncL( + &iExecDialog, + KVtEngPrepareRemoteRenderNGA, + configRemoteRenderNGA, + aRequest ); + } + else + { + // Neither supported - panic. + VtUiPanic::Panic( EVtUiPanicPrepareRemoteRenderNotSupported ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecCmdExecuteCommandL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecCmdExecuteCommandL( + const TVtEngCommandId aCommand, + TRequestStatus& aRequest ) + { + iCmdExecDialog = + ExecuteCmdAsyncL( + &iCmdExecDialog, + aCommand, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecCmdSetSourceL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecCmdSetSourceL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ) + { + MVtEngMedia::TMediaSource source = aSource; + iCmdExecDialog = + ExecuteCmdAsyncL( + &iCmdExecDialog, + KVtEngSetSource, + source, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ActiveExecCmdPrepareCameraL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ActiveExecCmdPrepareCameraL( + const MVtEngMedia::TMediaSource aSource, + TRequestStatus& aRequest ) + { + MVtEngMedia::TPrepareCameraParams params; + params.iMediaSource = aSource; + params.iInitialize = ETrue; + iCmdExecDialog = + ExecuteCmdAsyncL( + &iCmdExecDialog, + KVtEngPrepareCamera, + params, + aRequest ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineMainControlOptions +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptions + CVtUiAppUi::DetermineMainControlOptions( TBool aRemoteVideo ) + { + // Determine main pane options. + TRect screen; + TAknWindowLineLayout stream; + TAknLayoutRect rect; + + screen = iInstance->iMainControl->Rect(); + VtUiLayout::GetSecondWindowStreamWholeLayout( + stream, aRemoteVideo && iUiStates->IsUseSQCif() ); + + rect.LayoutRect( screen, stream ); + screen = rect.Rect(); + + return TVtEngRenderingOptions( *iEventObserver, screen.Size() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineContextControlOptions +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptions CVtUiAppUi::DetermineContextControlOptions() + { + // Determine context pane options. + TRect screen; + TRect clip; + TAknWindowLineLayout stream; + TAknLayoutRect rect; + + VtUiLayout::GetApplicationParentRect( screen ); + VtUiLayout::GetFirstWindowBackgroundLayout( stream ); + rect.LayoutRect( screen, stream ); + TRect background = rect.Rect(); + + VtUiLayout::GetFirstWindowStreamLayout( stream ); + rect.LayoutRect( screen, stream ); + + // No cropping is performed, thus clip == screen. + clip = rect.Rect(); + clip.iTl -= background.iTl; + clip.iBr -= background.iTl; + + screen = clip; + + return + TVtEngRenderingOptions( + *iEventObserver, + screen.Size() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineDialerControlOptions +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptions CVtUiAppUi::DetermineDialerControlOptions() + { + MVtUiDialer* dialer = static_cast< CVtUiDialer* > ( + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ) ); + + __ASSERT_ALWAYS( dialer, VtUiPanic::Panic( EVtUiPanicRendererNotFound ) ); + + return + TVtEngRenderingOptions( + *iEventObserver, + dialer->VideoControl().Size() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineMainControlOptions +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDSA + CVtUiAppUi::DetermineMainControlOptionsDSA( TBool aRemoteVideo ) + { + // Determine main pane options. + TRect screen; + TRect clip; + TAknWindowLineLayout stream; + TAknLayoutRect rect; + const TBool usesSQCif( aRemoteVideo && iUiStates->IsUseSQCif() ); + screen = iInstance->iMainControl->Rect(); + VtUiLayout::GetSecondWindowStreamLayout( stream, + iUiStates->IsToolbarAvailable(), usesSQCif ); + rect.LayoutRect( screen, stream ); + clip = rect.Rect(); + + VtUiLayout::GetSecondWindowStreamWholeLayout( stream, + iUiStates->IsToolbarAvailable(), usesSQCif ); + rect.LayoutRect( screen, stream ); + screen = rect.Rect(); + + return + TVtEngRenderingOptionsDSA( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( iInstance->iMainControl->DrawableWindow() ), + clip, + screen ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineContextControlOptionsDSA +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDSA CVtUiAppUi::DetermineContextControlOptionsDSA() + { + // Determine context pane options. + TRect screen; + TRect clip; + TAknWindowLineLayout stream; + TAknLayoutRect rect; + + VtUiLayout::GetApplicationParentRect( screen ); + VtUiLayout::GetFirstWindowBackgroundLayout( stream ); + rect.LayoutRect( screen, stream ); + TRect background = rect.Rect(); + + VtUiLayout::GetFirstWindowStreamLayout( stream ); + rect.LayoutRect( screen, stream ); + + // No cropping is performed, thus clip == screen. + clip = rect.Rect(); + clip.iTl -= background.iTl; + clip.iBr -= background.iTl; + + screen = clip; + + return + TVtEngRenderingOptionsDSA( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( iInstance->iContextControl->DrawableWindow() ), + screen, + clip ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineDialerControlOptionsDSA +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDSA CVtUiAppUi::DetermineDialerControlOptionsDSA() + { + MVtUiDialer* dialer = static_cast< CVtUiDialer* > ( + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ) ); + + __ASSERT_ALWAYS( dialer, VtUiPanic::Panic( EVtUiPanicRendererNotFound ) ); + + CCoeControl& videoWindow( dialer->VideoControl() ); + + return + TVtEngRenderingOptionsDSA( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( videoWindow.DrawableWindow() ), + videoWindow.Rect(), + videoWindow.Rect() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineMainControlOptionsDP +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDP + CVtUiAppUi::DetermineMainControlOptionsDP( TBool aRemoteVideo ) + { + // Determine main pane options. + const TRect screen( iInstance->iMainControl->Rect() ); + TAknWindowLineLayout stream; + const TBool usesSQCif( aRemoteVideo && iUiStates->IsUseSQCif() ); + + // Even if the name is whole layout, this layout is (due to problem + // in layouts) video stream layout + TAknLayoutRect whole; + VtUiLayout::GetSecondWindowStreamWholeLayout( stream, + iUiStates->IsToolbarAvailable(), usesSQCif ); + whole.LayoutRect( screen, stream ); + + // Even if the name is actual layout, this layout is (due to problem + // in layouts) whole == clipping layout + TAknLayoutRect actual; + VtUiLayout::GetSecondWindowStreamLayout( stream, + iUiStates->IsToolbarAvailable(), usesSQCif ); + actual.LayoutRect( screen, stream ); + + return + TVtEngRenderingOptionsDP( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( iInstance->iMainControl->DrawableWindow() ), + actual.Rect(), + whole.Rect(), + iInstance->iMainControl->PositionRelativeToScreen() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineContextControlOptionsDP +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDP CVtUiAppUi::DetermineContextControlOptionsDP() + { + // Determine context pane options. + TAknWindowLineLayout stream; + TAknLayoutRect rect; + + TRect screen; + VtUiLayout::GetApplicationParentRect( screen ); + VtUiLayout::GetFirstWindowBackgroundLayout( stream ); + rect.LayoutRect( screen, stream ); + const TRect background( rect.Rect() ); + + VtUiLayout::GetFirstWindowStreamLayout( stream ); + rect.LayoutRect( screen, stream ); + + // No cropping is performed, thus clip == screen. + TRect clip( rect.Rect() ); + clip.iTl -= background.iTl; + clip.iBr -= background.iTl; + + return + TVtEngRenderingOptionsDP( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( iInstance->iContextControl->DrawableWindow() ), + clip, + clip, + iInstance->iContextControl->PositionRelativeToScreen() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineDialerControlOptionsDP +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsDP CVtUiAppUi::DetermineDialerControlOptionsDP() + { + MVtUiDialer* dialer = static_cast< CVtUiDialer* > ( + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ) ); + + __ASSERT_ALWAYS( dialer, VtUiPanic::Panic( EVtUiPanicRendererNotFound ) ); + + CCoeControl& videoWindow( dialer->VideoControl() ); + + TPoint offs( videoWindow.DrawableWindow()->AbsPosition() ); + TRect rect( videoWindow.Rect() ); + return + TVtEngRenderingOptionsDP( + *iEventObserver, + iEikonEnv->WsSession(), + *( iEikonEnv->ScreenDevice() ), + *( videoWindow.DrawableWindow() ), + rect, + rect, + offs ); + } +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DetermineRemoteVideoControlOptionsNGA +// ----------------------------------------------------------------------------- +// +TVtEngRenderingOptionsNGA + CVtUiAppUi::DetermineRemoteVideoControlOptionsNGA() + { + return TVtEngRenderingOptionsNGA( *iEventObserver, + iInstance->iRemoteVideoControl ->GetRWindow() , iEikonEnv->WsSession()); + } +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ExecuteCmdL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ExecuteCmdL( const TVtEngCommandId aCommand ) + { + DoExecuteCmdL( aCommand, NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ExecuteCmdL +// ----------------------------------------------------------------------------- +// +template< class T > +void CVtUiAppUi::ExecuteCmdL( + const TVtEngCommandId aCommand, + T& aParam ) + { + TPtrC8 params( reinterpret_cast< TUint8* >( &aParam ), sizeof( T ) ); + DoExecuteCmdL( aCommand, ¶ms ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoExecuteCmdL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DoExecuteCmdL( + const TVtEngCommandId aCommand, + TDesC8* aParams ) + { + __VTPRINT2( DEBUG_GEN, "VtUi.DoExec.cmd=%d", aCommand ) + MVtEngCommandHandler& command = Model().CommandHandler(); + const TInt caps = command.GetCommandCaps( aCommand ); + + if ( caps >= KErrNone ) + { + const TBool asynchronous = + ( caps & MVtEngCommandHandler::EAttribAsync ); + + if ( asynchronous ) + { + if ( aCommand == KVtEngHandleLayoutChange ) + { + CVtEngCmdExec* cmdExec = CVtEngCmdExec::NewL( + Model().CommandHandler(), *iEventObserver, *GetCba() ); + cmdExec->ExecuteCmdLD( aCommand ); + } + else + { + CVtUiExecuteCmdDialog* dlg = + new ( ELeave ) CVtUiExecuteCmdDialog( + NULL, + Model().CommandHandler(), + *iEventObserver ); + dlg->ExecuteCmdLD( aCommand, aParams, NULL ); + } + } + else + { + command.ExecuteL( aCommand, aParams ); + RefreshStatesL(); + } + } + else + { + // Failed. + User::Leave( caps ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleShutdownReady +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleShutdownReady() + { + __VTPRINTENTER( "VtUi.HandleShutdownReady" ) + + if(iAsyncCallback->IsActive()) + { + iAsyncCallback->Cancel(); + } + + iAsyncCallback->Set( + TCallBack( &DoExit, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "VtUi.HandleShutdownReady" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ContextControl +// ----------------------------------------------------------------------------- +// +CVtUiContextControl& CVtUiAppUi::ContextControl() + { + __VTPRINTENTER( "VtUi.ContextControl" ) + __VTPRINTEXIT( "VtUi.ContextControl" ) + return *iInstance->iContextControl; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::MainControl +// ----------------------------------------------------------------------------- +// +CVtUiMainControl& CVtUiAppUi::MainControl() + { + __VTPRINTENTER( "VtUi.MainControl" ) + __VTPRINTEXIT( "VtUi.MainControl" ) + return *iInstance->iMainControl; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RemoteVideoControl +// ----------------------------------------------------------------------------- +// +CVtUiRemoteVideoControl& CVtUiAppUi::RemoteVideoControl() + { + __VTPRINTENTER( "VtUi.RemoteVideoControl" ) + __VTPRINTEXIT( "VtUi.RemoteVideoControl" ) + return *iInstance->iRemoteVideoControl; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoExit +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::DoExit( TAny* aAppUi ) + { + __VTPRINTENTER( "VtUi.DoExit" ) + CVtUiAppUi* self = static_cast< CVtUiAppUi* >( aAppUi ); + self->iAsyncCallback->Cancel(); + // Before exiting ensure there are no pending actions. + self->ActiveExecInitCancel( 0 ); + self->Exit(); + __VTPRINTEXIT( "VtUi.DoExit" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ExecuteCmdAsyncL +// ----------------------------------------------------------------------------- +// +CEikDialog* CVtUiAppUi::ExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + TRequestStatus& aStatus ) + { + return DoExecuteCmdAsyncL( aDialogPtr, aCommand, NULL, aStatus ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ExecuteCmdAsyncL +// ----------------------------------------------------------------------------- +// +template< class T > +CEikDialog* CVtUiAppUi::ExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + T& aParam, + TRequestStatus& aStatus ) + { + TPtrC8 params( reinterpret_cast< TUint8* >( &aParam ), sizeof( T ) ); + return DoExecuteCmdAsyncL( aDialogPtr, aCommand, ¶ms, aStatus ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoExecuteCmdAsyncL +// ----------------------------------------------------------------------------- +// +CEikDialog* CVtUiAppUi::DoExecuteCmdAsyncL( + CEikDialog** aDialogPtr, + const TVtEngCommandId aCommand, + TDesC8* aParams, + TRequestStatus& aStatus ) + { + __VTPRINT2( DEBUG_GEN, "VtUi.DoExecAsync.cmd=%d", aCommand ) + MVtEngCommandHandler& command = Model().CommandHandler(); + const TInt caps = command.GetCommandCaps( aCommand ); + + if ( caps >= KErrNone ) + { + const TBool asynchronous = + ( caps & MVtEngCommandHandler::EAttribAsync ); + + if ( asynchronous ) + { + CVtUiExecuteCmdDialog* dlg = + new ( ELeave ) CVtUiExecuteCmdDialog( + aDialogPtr, + Model().CommandHandler(), + *iEventObserver ); + dlg->ExecuteCmdLD( aCommand, aParams, &aStatus ); + return dlg; + } + else + { + command.ExecuteL( aCommand, aParams ); + RefreshStatesL(); + TRequestStatus* status = &aStatus; + User::RequestComplete( status, KErrNone ); + } + } + else + { + // Failed. + User::Leave( caps ); + } + + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::Execute +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::Execute( const TVtEngCommandId aCommand, TDesC8* aParam ) + { + MVtEngCommandHandler& command = Model().CommandHandler(); + TRAPD( err, command.ExecuteL( aCommand, aParam ) ); +#ifdef VTDEBUG + if ( err != KErrNone ) + { + __VTPRINT3( DEBUG_GEN, "VtUi.Execute.Nok.cmd=%d,err=%d", aCommand, err ) + } +#endif // VTDEBUG + return err; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleForegroundChangedL( + TBool aIsForeground ) + { + __VTPRINTENTER( "VtUi.HandleForegroundChangedL" ) + __VTPRINT2( DEBUG_GEN, "VtUi.foreground=%d", (TInt) aIsForeground ) + + + // Let the Engine know that Application's foregorund + // has changed. Then Engine can do some initalize/uninitalize + // before rendering due to the foreground state. + iState->PreHandleForegroundChangedL(aIsForeground); + + // These operations must be done before + // sending KVtEngSetUIForeground command to engine i.e. calling + // iState->HandleForegroundChangedL( aIsForeground ) + if ( !aIsForeground ) + { + // if capture mode is on stop it + if ( iUiStates->IsCaptureModeOn() ) + { + CmdCancelCaptureL(); + } + // if brightness or contrast feature is active stop those + MVtUiFeature* br = iFeatureManager->GetFeatureById( EVtUiFeatureIdBrightness ); + if ( br ) + { + __VTPRINT( DEBUG_GEN, "VtUi.HandleForegroundChangedL br" ) + if ( br->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.HandleForegroundChangedL br->STOP" ) + br->Stop(); + } + } + + MVtUiFeature* cr = iFeatureManager->GetFeatureById( EVtUiFeatureIdContrast ); + if ( cr ) + { + __VTPRINT( DEBUG_GEN, "VtUi.HandleForegroundChangedL cr" ) + if ( cr->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.HandleForegroundChangedL cr->STOP" ) + cr->Stop(); + } + } + + } + + TBool foregroundAndReady = EFalse; + if ( iState ) + { + foregroundAndReady = iState->HandleForegroundChangedL( aIsForeground ); + iUiStates->SetThisApplicationForeground( aIsForeground ); + } + if ( foregroundAndReady ) + { + // Refresh navi pane. This will start call duration updating + // if necessary. + RefreshNaviPaneL(); + } + else if ( !aIsForeground ) + { + + + iEventObserver->StopBeat(); + } + SetIncallBubbleAllowedInUsualL( !foregroundAndReady ); + __VTPRINTEXIT( "VtUi.HandleForegroundChangedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshL( const TInt aRefreshFlags ) + { + if ( aRefreshFlags & EUiStates ) + { + RefreshNaviPaneL(); + } + if ( aRefreshFlags & EBlind ) + { + RefreshBlind(); + } + if ( aRefreshFlags & ENaviPane ) + { + RefreshNaviPaneL(); + } + if ( aRefreshFlags & ESoftkeys ) + { + RefreshSoftkeysL(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleEngineResetL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleEngineResetL() + { + __VTPRINTENTER( "VtUi.HandleEngineResetL" ) + if ( iShutdownRequest ) + { + __VTPRINT( DEBUG_GEN, " VtUi.HandleEngineResetL shutdown" ) + User::RequestComplete( iShutdownRequest, KErrNone ); + iShutdownRequest = NULL; + } + __VTPRINTEXIT( "VtUi.HandleEngineResetL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StopWaitingImage +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StopWaitingImage() + { + if ( iInstance ) + { + iDownlinkWindow->SetWaiting( EFalse ); + iUiStates->SetWaitingForFirstFrame( EFalse ); + RemoteVideoControl().MakeVisible(ETrue); + } + } + +void CVtUiAppUi::StopWhiteBalanceOrColortone() + { + if( iEventObserver ) + { + MVtEngMedia::TCameraId currentCamId; + //CVtEngMediaHandler& mediaHandler = iEventObserver->Model().Media(); + ///mediaHandler.GetCurrentCameraId( currentCamId ); + iEventObserver->Model().Media().GetCurrentCameraId( currentCamId ); + __VTPRINT2( DEBUG_GEN, " CVtUiAppUi::StopWhiteBalance currentCamId is %d", currentCamId); + + CVtUiWhiteBalance* wb = static_cast< CVtUiWhiteBalance* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdWhiteBalance ) ); + CVtUiColorTone* ct = static_cast< CVtUiColorTone* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdColourTone ) ); + + // only when the current camera switch to the Primary to stop the wb + if( currentCamId == MVtEngMedia::EPrimaryCamera ) + { + + if( wb && ( wb->State() == MVtUiFeature::EActive ) ) + { + + wb->Stop(); + } + + if( ct && ( ct->State() == MVtUiFeature::EActive ) ) + { + ct->Stop(); + } + + return; + } + if( currentCamId == MVtEngMedia::ESecondaryCamera ) + { + if( wb->IsPendingCmd() ) + wb->HandlePendingCmdL(); + if( ct->IsPendingCmd() ) + ct->HandlePendingCmdL(); + } + } + } +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleLayoutChanged +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::HandleLayoutChanged() + { + iLayoutChangeCallback->CallBack(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DelayedHandleLayoutChanged +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::DelayedHandleLayoutChanged( TAny* aPtr ) + { + CVtUiAppUi* self = reinterpret_cast< CVtUiAppUi* > ( aPtr ); + self->iUiStates->SetDisableBlindSetting( ETrue ); + TRAPD( err, self->HandleLayoutChangedL() ); + self->iUiStates->SetDisableBlindSetting( EFalse ); + self->RefreshBlind(); + return err; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleLayoutChangedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleLayoutChangedL() + { + __VTPRINTENTER( "VtUi.LayoutChg" ) + if ( iState ) + { + iState->HandleLayoutChangedL(); + } + __VTPRINTEXIT( "VtUi.LayoutChg" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoHandleLayoutChangedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DoHandleLayoutChangedL() + { + __VTPRINTENTER( "VtUi.DoLayoutChg" ) + // Fully update rendering parameters + UpdateRenderingParametersL(); + // Notify engine about layout change + iLayoutChg = ETrue; + TRAPD( error, ExecuteCmdL( KVtEngHandleLayoutChange ) ); + iLayoutChg = EFalse; + + // Not ready error is allowed to happen (e.g. when sharing) + if ( error && ( error != KErrNotReady ) ) + { + User::Leave( error ); + } + else + { + __VTPRINT( DEBUG_GEN, + "VtUi.DoLayoutChg KVtEngHandleLayoutChange == KErrNotReady (ok)" ) + TVtEngCommandId pendingCommand = Model().CommandHandler().PendingCommand(); + if ( pendingCommand == KVtEngMuteOutgoingAudio || + pendingCommand == KVtEngUnmuteOutgoingAudio || + pendingCommand == KVtEngSetAudioRouting || + pendingCommand == KVtEngSetAudioVolume || + pendingCommand == KVtEngSetSource || + pendingCommand == KVtEngPrepareCamera || + pendingCommand == KVtEngUnfreeze ) + { + iUiStates->SetLayoutChangeNeeded( ETrue ); + } + } + // Notify component manager + iComponentManager->HandleLayoutChangeL(); + MVtUiFeature* dialer = + iFeatureManager->GetFeatureById( EVtUiFeatureIdDialer ); + const TBool dialerActive( dialer && + ( dialer->State() == MVtUiFeature::EActive ) ); + SwitchLayoutToFlatStatusPaneL( dialerActive ); + + // Update the cam's whiteBalance and colorTone cause layoutchange will renew the camera,so + // restore the last user setting + UpdateVBSettingL(); + + + if ( iDelayedCmd != 0 ) + { + __VTPRINT2( DEBUG_GEN, "VtUi.DoLayoutChg reexecute the delayed cmd=%d", iDelayedCmd); + HandleCommandL( iDelayedCmd ); + iDelayedCmd = 0; + } + __VTPRINTEXIT( "VtUi.DoLayoutChg" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleVideoFrameL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleVideoFrameL( + const TBool aLocal, + CFbsBitmap* aBitmap ) + { + if ( aLocal ) + { + iUplinkWindow->SetStreamBitmap( aBitmap ); + + if ( aBitmap ) + { + // If white balance or color tone setting feauture is + // active update feature's setting page's background. + CVtUiWhiteBalance* wb = static_cast< CVtUiWhiteBalance* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdWhiteBalance ) ); + + CVtUiColorTone* ct = static_cast< CVtUiColorTone* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdColourTone ) ); + + if ( wb ) + { + __VTPRINT( DEBUG_GEN,"VtUi.HandleVideoFrameL WB" ) + if ( wb->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN,"VtUi.HandleVideoFrameL WB update" ) + wb->UpdateBackground( aBitmap ); + } + } + if ( ct ) + { + __VTPRINT( DEBUG_GEN,"VtUi.HandleVideoFrameL CT" ) + if (ct->State() == MVtUiFeature::EActive) + { + __VTPRINT( DEBUG_GEN,"VtUi.HandleVideoFrameL CT update" ) + ct->UpdateBackground( aBitmap ); + } + } + } + } + else + { + iDownlinkWindow->SetStreamBitmap( aBitmap ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetVideoFrame +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetVideoFrame( + const TBool aLocal, + CFbsBitmap* aBitmap ) + { + if ( aLocal ) + { + } + else + { + iDownlinkWindow->SetStreamBitmapReserve( aBitmap ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleVideoFrameRemoteProblemL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleVideoFrameRemoteProblemL() + { + __VTPRINTENTER( "VtUi.HandleRemote" ) + HandleVideoFrameL( EFalse, NULL ); + __VTPRINTEXIT( "VtUi.HandleRemote" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleVideoFrameLocalProblemL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleVideoFrameLocalProblemL() + { + __VTPRINTENTER( "VtUi.HandleLocal" ) + // Camera might have changed - better to stop zoom. + HandleVideoFrameL( ETrue, NULL ); + __VTPRINTEXIT( "VtUi.HandleLocal" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RemoteVideoIsSQCif +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RemoteVideoIsSQCif( TBool aIsSQCif ) + { + iUiStates->SetUseSQCif( aIsSQCif ); + if ( iDownlinkWindow == iInstance->iMainControl ) + { + ControlUsesSQCif( aIsSQCif ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ControlUsesSQCif +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ControlUsesSQCif( TBool aIsSQCif ) + { + iInstance->iMainControl->SupportSQCif( aIsSQCif ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ChangeRemoteVideoLayoutL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ChangeRemoteVideoLayoutL() + { + HandleLayoutChanged(); + if ( iDownlinkWindow == iInstance->iMainControl ) + { + iDownlinkWindow->SetBlind( EFalse ); + StopWaitingImage(); + iInstance->iMainControl->DrawNow(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowImageInitializeProgressL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowImageInitializeProgressL() + { + __VTPRINTENTER( "VtUi.ShowImageInitializeProgressL" ) + ShowProgressDialogL( R_PROGRESS_DECODING_IMAGE_WAIT_NOTE, this ); + __VTPRINTEXIT( "VtUi.ShowImageInitializeProgressL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HideImageInitializeProgressL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HideImageInitializeProgressL() + { + __VTPRINTENTER( "VtUi.HideImageInitializeProgressL" ) + // if volume slider is visible hide it + CVtUiVolume* volume = static_cast< CVtUiVolume* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdVolume ) ); + if ( volume ) + { + volume->Stop(); + } + HideProgressDialogL(); + __VTPRINTEXIT( "VtUi.HideImageInitializeProgressL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CheckBeatL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CheckBeatL( const TBool aCallDurationEnabled ) + { + // Update call duration periodically if necessary. + const MVtEngSessionInfo::TSessionState state = Model().Session().State( EFalse ); + const TBool timerEnable = + ( aCallDurationEnabled ) && + ( ( state == MVtEngSessionInfo::EConnected ) || + ( state == MVtEngSessionInfo::ENegotiating ) || + ( state == MVtEngSessionInfo::EOpen ) ); + + if ( timerEnable && iUiStates->IsThisApplicationForeground() ) + { + iEventObserver->StartBeatL(); + } + else + { + iEventObserver->StopBeat(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleBeat +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleBeat() + { + TRAP_IGNORE( RefreshNaviPaneL(); ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowCameraInUseNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowCameraInUseNoteL() const + { + // The note must not be blocking. + + CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog( NULL ); + + dlg->PrepareLC( R_VIDEOTELUI_INFORMATION_NOTE ); + dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_EMPTY ); + + HBufC* buf = StringLoader::LoadLC( R_VIDEOTELUI_QTN_INCAL_CLOSE_CAMCORDER ); + dlg->SetTextL( *buf ); + CleanupStack::PopAndDestroy( buf ); + + dlg->SetTone( CAknNoteDialog::EConfirmationTone ); + dlg->SetTimeout( CAknNoteDialog::EUndefinedTimeout ); + dlg->RunLD(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowNotAllowedNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowNotAllowedNoteL() const + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_TEXT_NOT_ALLOWED ); + + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowCallNotAllowedNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowCallNotAllowedNoteL() const + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_TEXT_CALL_NOT_ALLOWED ); + + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowOtherCameraNotUsableNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowOtherCameraNotUsableNoteL() const + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_QTN_ERR_CAM_SWAP ); + + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowUnableToOpenNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowUnableToOpenNoteL() const + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_QTN_ERR_UNABLE_TO_OPEN_IMAGE ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowImageDecodingErrorNoteL() + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_QTN_INCAL_NOTE_DECODING_FAILED ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowDRMNotAllowedNoteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowDRMNotAllowedNoteL() const + { + HBufC* prompt = + StringLoader::LoadLC( + R_VIDEOTELUI_QTN_ERR_DRM_NOT_ALLOWED ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *prompt ); + CleanupStack::PopAndDestroy( prompt ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetSoftkeysL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetSoftkeysL( const TInt aSoftkeyResourceId ) + { + if ( iCurrentSoftkeys != aSoftkeyResourceId ) + { + if ( iCba ) + { + iCba->SetCommandSetL( aSoftkeyResourceId ); + iCba->DrawNow(); + } + iCurrentSoftkeys = aSoftkeyResourceId; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetHiddenL +// Makes application visible / invisible in fast swap window. +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetHiddenL( + const TBool aHidden ) + { + CEikonEnv* eikonEnv = iEikonEnv; + CApaWindowGroupName* windowGroupName = + CApaWindowGroupName::NewLC( + eikonEnv->WsSession(), + iThisApplicationWgId ); + windowGroupName->SetHidden( aHidden ); + User::LeaveIfError( + windowGroupName->SetWindowGroupName( + eikonEnv->RootWin() ) ); + CleanupStack::PopAndDestroy( windowGroupName ); + + // Update application UID. + TUid applicationUid = KVtUiAppUid; + if ( aHidden ) + { + applicationUid.iUid = KVtUiTelephoneUid.iUid; + } + __VTPRINT2( DEBUG_GEN, "VtUi.SetHiddenL applicationUid.iUid=%x", + applicationUid.iUid ) + // Set application that is "default top application" + TInt originalTopAppUid = 0; + TInt err = RProperty::Get( + KPSUidUikon, + KUikVideoCallTopApp, + originalTopAppUid ); + __VTPRINT3( DEBUG_GEN, "VtUi.SetHiddenL orig. topApp=%x, err=%d", + originalTopAppUid, err ) + if ( originalTopAppUid != applicationUid.iUid && + iUiStates->IsDetailsReceived() ) + { + __VTPRINT( DEBUG_GEN, "VtUi.SetHiddenL Do write KUikVideoCallTopApp" ) + // Update key only if differs from original value and call + // has been answered + RProperty::Set( + KPSUidUikon, + KUikVideoCallTopApp, + applicationUid.iUid ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetCallIdL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetCallIdL( const TInt aCallId ) + { + HBufC* titlePane = + StringLoader::LoadLC( R_VIDEOTELUI_QTN_CALL_NUMBER_VIDEO, aCallId ); + TPtr ptr = titlePane->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); + TitlePaneL()->SetText( titlePane ); + CleanupStack::Pop( titlePane ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetCallNameL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::SetCallNameL( const TDesC& aName ) + { + HBufC* nameBuf = aName.Alloc(); + if ( nameBuf ) + { + TPtr ptr = nameBuf->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); + TitlePaneL()->SetText( nameBuf ); + } + + return ( nameBuf != NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::BringTelephoneForeground +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::BringTelephoneToForeground() + { + __VTPRINTENTER( "VtUi.BringTelephoneToForeground" ) + // If Telephone application is running, then + // bring it to the foreground. + const TInt windowGroupId = TelephoneApplicationWgId(); + if ( windowGroupId ) + { + CEikonEnv* eikonEnv = iEikonEnv; + TApaTask task( eikonEnv->WsSession() ); + task.SetWgId( windowGroupId ); + task.BringToForeground(); + } + + // In any case, send this application to the background. + ChangeApplicationFocus( EFalse ); + __VTPRINTEXIT( "VtUi.BringTelephoneToForeground" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ChangeApplicationFocus +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ChangeApplicationFocus( const TBool aForeground ) + { + __VTPRINTENTER( "VtUi.ChangeApplicationFocus" ) + CEikonEnv* eikonEnv = iEikonEnv; + TApaTask task( eikonEnv->WsSession() ); + task.SetWgId( iThisApplicationWgId ); + if ( !aForeground ) + { + task.SendToBackground(); + } + else if ( !iUiStates->IsDeviceLockOn() ) + { + task.BringToForeground(); + } + __VTPRINTEXIT( "VtUi.ChangeApplicationFocus" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TelephoneApplicationWgId +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::TelephoneApplicationWgId() + { + TInt resultWgId = 0; + + TApaTaskList taskList( iEikonEnv->WsSession() ); + TInt appUid = 0; + + // Try first Telephone application. + if ( RProperty::Get( + KPSUidTelInformation, + KTelPhoneUid, + appUid ) == KErrNone ) + { + TApaTask task = taskList.FindApp( TUid::Uid( appUid ) ); + if ( task.Exists() ) + { + resultWgId = task.WgId(); + } + } + + // Then Idle application. + if ( !resultWgId && + ( RProperty::Get( + KPSUidAiInformation, + KActiveIdleUid, + appUid ) == KErrNone ) ) + { + TApaTask task = taskList.FindApp( TUid::Uid( appUid ) ); + if ( task.Exists() ) + { + resultWgId = task.WgId(); + } + } + + return resultWgId; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowNumberEntry +// ----------------------------------------------------------------------------- +// +inline TBool CVtUiAppUi::ShowNumberEntry() const + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::IsActiveIdleEnabledL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::IsActiveIdleEnabledL() const + { + TVtUiActiveIdleVariation activeIdleVariation; + return activeIdleVariation.IsActiveIdleEnabled(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CheckEngineFunctionality +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CheckEngineFunctionality() + { + const TBool prepareViewFinder = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngPrepareViewFinder ); + const TBool prepareRemoteRender = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngPrepareRemoteRender ); + const TBool prepareRemoteRenderDSA = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngPrepareRemoteRenderDSA ); + const TBool prepareRemoteRenderDP = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngPrepareRemoteRenderDP ); + const TBool stopViewFinder = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngStopViewFinder ); + const TBool startViewFinder = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngStartViewFinder ); + const TBool stopRemoteRender = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngStopRenderRemote ); + const TBool startRemoteRender = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngStartRenderRemote ); + const TBool setUIForeground = + iEventObserver->CommandSupportedAndSynchronous( + KVtEngSetUIForeground ); + + TVtUiDPVariation dpvariation; + TBool dpSupported( dpvariation.IsDPSupported() ); + + if ( !prepareViewFinder || + ( !prepareRemoteRender && !prepareRemoteRenderDSA && !dpSupported ) || + ( !prepareRemoteRender && !prepareRemoteRenderDP && dpSupported ) || + !stopViewFinder || + !startViewFinder || + !stopRemoteRender || + !startRemoteRender || + !setUIForeground ) + { + // Not supported - should never occur. + __VTPRINT( DEBUG_GEN, "VtUi.EngineFunc.ASSERT" ) + VtUiPanic::Panic( EVtUiPanicEngineFunctionalityAssert ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::Model +// ----------------------------------------------------------------------------- +// +CVtEngModel& CVtUiAppUi::Model() + { + return iEventObserver->Model(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::VideoTelephonyVariation +// ----------------------------------------------------------------------------- +// +const TVtUiVideoTelephonyVariation& CVtUiAppUi::VideoTelephonyVariation() const + { + return iVTVariation; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::NumberSource +// ----------------------------------------------------------------------------- +// +MVtUiNumberSource* CVtUiAppUi::NumberSource() const + { + return iNumberSource; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::NaviPaneL +// ----------------------------------------------------------------------------- +// +inline CAknNavigationControlContainer* CVtUiAppUi::NaviPaneL() + { + return + static_cast< CAknNavigationControlContainer* > + ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::TitlePaneL +// ----------------------------------------------------------------------------- +// +inline CAknTitlePane* CVtUiAppUi::TitlePaneL() + { + return + static_cast< CAknTitlePane* > + ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CleanupPushRefreshL +// ----------------------------------------------------------------------------- +// +inline void CVtUiAppUi::CleanupPushRefreshL() + { + CleanupStack::PushL( + TCleanupItem( DoRefresh, this ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CleanupPushEnableBlindL +// ----------------------------------------------------------------------------- +// +inline void CVtUiAppUi::CleanupPushEnableBlindL() + { + CleanupStack::PushL( + TCleanupItem( DoEnableBlindSetting, this ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::EnableCommandActivatingAndCleanupPushL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::EnableCommandActivatingAndCleanupPushL() + { + __VTPRINTENTER( "VtUi.EnableCommandActivatingAndCleanupPushL" ) + // add anyway to cleanup stack to avoid caring about stack balance + CleanupStack::PushL( + TCleanupItem( DoDisableCommandActivating, this ) ); + // but in case of consecutive calls on this don't refresh (avoid flicker) + const TBool alreadyActivating( iUiStates->IsCommandActivating() ); + // increases ref.count if alread set as activating + iUiStates->SetIsCommandActivating( ETrue ); + if ( !alreadyActivating ) + { + // refresh only when ref.count incremented from zero. + iCommandManager->RefreshL(); + } + __VTPRINTEXIT( "VtUi.EnableCommandActivatingAndCleanupPushL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoDisableCommandActivating +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DoDisableCommandActivating( TAny* aAny ) + { + CVtUiAppUi* self = + reinterpret_cast< CVtUiAppUi* >( aAny ); + TRAP_IGNORE( self->HandleCommandDeactivationL() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HandleCommandDeactivationL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HandleCommandDeactivationL() + { + __VTPRINTENTER( "VtUi.HandleCommandDeactivationL" ) + iUiStates->SetIsCommandActivating( EFalse ); + if ( !iUiStates->IsCommandActivating() ) + { + RefreshStatesL(); + } + __VTPRINTEXIT( "VtUi.HandleCommandDeactivationL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoEnableBlindSetting +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DoEnableBlindSetting( TAny* aAny ) + { + CVtUiAppUi* self = + reinterpret_cast< CVtUiAppUi* >( aAny ); + self->iUiStates->SetDisableBlindSetting( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoRefresh +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DoRefresh( TAny* aAny ) + { + CVtUiAppUi* self = + reinterpret_cast< CVtUiAppUi* >( aAny ); + TRAP_IGNORE( self->RefreshL() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DoHandleExitTimeout +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::DoHandleExitTimeout( TAny* /*aAny*/ ) + { + __VTPRINT( DEBUG_GEN, "VtUi.Exit.Timer.EXPIRED!" ) + VtUiPanic::Panic( EVtUiPanicApplicationShutdownTimeout ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::IsViewFinderInMainPane +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::IsViewFinderInMainPane() const + { + return !( IsViewFinderInContextPane() ); + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::IsViewFinderInContextPane +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::IsViewFinderInContextPane() const + { + return ( iUplinkWindow == iInstance->iContextControl ); + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::SwitchViewFinderToMainPaneL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SwitchViewFinderToMainPaneL( TBool aUpdateState ) + { + __VTPRINTENTER( "VtUi.SwitchViewFinderToMainPaneL" ) + //change local video in to main pane + if( IsViewFinderInContextPane() ) + { + //flag indicates the initial position of uplink window before freeze + if ( aUpdateState ) + { + iUiStates->SetViewFindersInitialPlaceContextPane( ETrue ); + } + HandleCommandL( EVtUiCmdSwapImagesPlaces ); + } + else + { + if ( aUpdateState ) + { + iUiStates->SetViewFindersInitialPlaceContextPane( EFalse ); + } + } + __VTPRINTEXIT( "VtUi.SwitchViewFinderToMainPaneL" ) + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::SwitchViewFinderToContextPaneL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SwitchViewFinderToContextPaneL( TBool aUpdateState ) + { + __VTPRINTENTER( "VtUi.SwitchViewFinderToContextPaneL" ) + //change local video in to context pane + if( !IsViewFinderInContextPane() ) + { + //flag indicates the initial position of uplink window before freeze + if ( aUpdateState ) + { + iUiStates->SetViewFindersInitialPlaceContextPane( EFalse ); + } + HandleCommandL( EVtUiCmdSwapImagesPlaces ); + } + else + { + if ( aUpdateState ) + { + iUiStates->SetViewFindersInitialPlaceContextPane( ETrue ); + } + } + __VTPRINTEXIT( "VtUi.SwitchViewFinderToContextPaneL" ) + } + +// ----------------------------------------------------------------------------- +// VtUiAppUi::RestoreViewFinderL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RestoreViewFinderL() + { + __VTPRINTENTER( "VtUi.RestoreViewFinderL" ) + if( IsViewFinderInContextPane() ) + { + if( !iUiStates->IsViewFindersInitialPlaceContextPane() ) + { + SwitchViewFinderToMainPaneL( EFalse ); + } + } + else + { + if( iUiStates->IsViewFindersInitialPlaceContextPane() ) + { + SwitchViewFinderToContextPaneL( EFalse ); + } + } + __VTPRINTEXIT( "VtUi.RestoreViewFinderL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::DialogDismissedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::DialogDismissedL( TInt ) + { + __VTPRINTENTER( "VtUi.DialogDismissedL" ) + MVtUiFeature* tb = + iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ); + if ( tb ) + { + if ( !iTbPeriodic ) + { + iTbPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + } + iTbPeriodic->Cancel(); + // try to strat toolbar feature immediately + iTbPeriodic->Start( 0, KPeriodTime, TCallBack( DoTryToStartTbL, this ) ); + } + __VTPRINTEXIT( "VtUi.DialogDismissedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::UpdateContextPaneIconL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::UpdateContextPaneIconL() + { + CEikStatusPane* statusPane = StatusPane(); + + if ( statusPane ) + { + if ( statusPane->PaneCapabilities( + TUid::Uid( EEikStatusPaneUidContext ) ).IsPresent() ) + { + CAknContextPane* contextPane = NULL; + TRAPD ( err, contextPane = static_cast ( + statusPane->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) ) ); + if ( err != KErrNone || ! contextPane ) + { + return; + } + + // Set a new context pane icon + CFbsBitmap* newBitmap = new(ELeave) CFbsBitmap; + CleanupStack::PushL( newBitmap ); + User::LeaveIfError( newBitmap->Create( TSize( 1, 1 ), EGray2 ) ); + + CFbsBitmap* newMask = new(ELeave) CFbsBitmap; + CleanupStack::PushL( newMask ); + User::LeaveIfError( newMask->Create( TSize( 1, 1 ), EGray2 ) ); + + // create an off-screen device and context + CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( newMask ); + CleanupStack::PushL( bitmapDevice ); + CFbsBitGc* maskGc = NULL; + User::LeaveIfError( bitmapDevice->CreateContext( maskGc ) ); + User::LeaveIfNull( maskGc ); + CleanupStack::PushL( maskGc ); + maskGc->SetPenStyle( CGraphicsContext::ENullPen ); + maskGc->SetBrushColor( TRgb::Gray2( 1 ) ); // transparency + maskGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + maskGc->Clear(); + CleanupStack::PopAndDestroy( 2 ); // maskGc, bitmapDevice + + // newBitmap, new Mask ownership transfer + contextPane->SetPicture( newBitmap, newMask ); + CleanupStack::Pop( 2 ); // newBitmap, newMask + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetIncallBubbleAllowedInUsualL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetIncallBubbleAllowedInUsualL( TBool aAllowed ) + { + __VTPRINT2( DEBUG_GEN, "Ui.SetIncallBubbleAllowedInUsualL: %d", aAllowed ) + + // If call is being disconnected, we do not want to show in-call bubble + // anymore but dismiss it. + if( iUiStates->ExecState() == TVtUiStates::EExecStateResetting || + iUiStates->ExecState() == TVtUiStates:: EExecStateFinalized ) + { + __VTPRINT2( DEBUG_GEN, "Ui.SetIncallBubbleAllowedInUsualL forced to false: %d", aAllowed ) + aAllowed = EFalse; + } + + if ( iIncallBubble ) + { + iIncallBubble->SetIncallBubbleAllowedInUsualL( aAllowed ); + } + __VTPRINT( DEBUG_GEN, "Ui.SetIncallBubbleAllowedInUsualL>" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ShowProgressDialogL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::ShowProgressDialogL( TInt aResourceId, + MProgressDialogCallback* aCallback ) + { + __VTPRINTENTER( "VtUi.ShowProgressDialogL" ) + if( iProgressDlg ) + { + User::Leave( KErrNotReady ); + } + iProgressDlg = new ( ELeave ) CAknProgressDialog( + reinterpret_cast< CEikDialog** >( &iProgressDlg ), ETrue ); + iProgressDlg->SetCallback( aCallback ); + iProgressDlg->ExecuteLD( aResourceId ); + __VTPRINTEXIT( "VtUi.ShowProgressDialogL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::HideProgressDialogL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::HideProgressDialogL() + { + __VTPRINTENTER( "VtUi.HideProgressDialogL" ) + if( iProgressDlg ) + { + iProgressDlg->ProcessFinishedL(); + } + __VTPRINTEXIT( "VtUi.HideProgressDialogL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::AsyncViewFinderToMainPaneAndShare +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::AsyncViewFinderToMainPaneAndShare( TAny* aPtr ) + { + __VTPRINTENTER( "VtUi.AsyncViewFinderToMainPaneAndShare" ) + CVtUiAppUi* self = reinterpret_cast< CVtUiAppUi* >( aPtr ); + + TRAPD( result, { self->SwitchViewFinderToMainPaneL(); + self->CmdShareImageL();} ); + __VTPRINTEXITR( "VtUi.AsyncViewFinderToMainPaneAndShare %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::AsyncShare +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::AsyncShare( TAny* aPtr ) + { + __VTPRINTENTER( "VtUi.AsyncShare" ) + CVtUiAppUi* self = reinterpret_cast< CVtUiAppUi* >( aPtr ); + TRAPD( result, self->CmdShareImageL() ); + __VTPRINTEXITR( "VtUi.AsyncShare %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::AsyncShowErrorAndRestartShare +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::AsyncShowErrorAndRestartShare( TAny* aPtr ) + { + __VTPRINTENTER( "VtUi.AsyncShowErrorAndRestartShare" ) + CVtUiAppUi* self = reinterpret_cast< CVtUiAppUi* >( aPtr ); + TRAPD( result, { self->ShowUnableToOpenNoteL(); + self->HandleCommandL( EVtUiCmdShareObjectImage ); } ); + __VTPRINTEXITR( "VtUi.AsyncShowErrorAndRestartShare %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::GetCameraOrientations +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::GetCameraOrientations() + { + __VTPRINTENTER( "VtUi.GetCameraOrientations" ) + MVtEngMedia& media = Model().Media(); + media.GetCameraOrientations( iPrimaryCameraOrientation, + iSecondaryCameraOrientation ); + __VTPRINTEXIT( "VtUi.GetCameraOrientations" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetInitialCameraOrientationL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetInitialCameraOrientationL() + { + __VTPRINTENTER( "VtUi.SetInitialCameraOrientationL" ) + MVtEngMedia::TCameraId cameraId; + MVtEngMedia& media( Model().Media() ); + media.GetCurrentCameraId( cameraId ); + MVtEngMedia::TCameraOrientation targetOrientation( + cameraId == MVtEngMedia::EPrimaryCamera ? + iPrimaryCameraOrientation : + ( cameraId == MVtEngMedia::ESecondaryCamera ? + iSecondaryCameraOrientation : + iCurrentCameraOrientation ) ); + if ( iCurrentCameraOrientation != targetOrientation ) + { + __VTPRINT3( DEBUG_GEN, + "VtUi.SetInitialCameraOrientationL Old=%d New=%d", + iCurrentCameraOrientation, + targetOrientation ) + SetOrientationL( engToAppOrientation[ targetOrientation ] ); + iCurrentCameraOrientation = targetOrientation; + } + __VTPRINTEXIT( "VtUi.SetInitialCameraOrientationL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::SetCameraOrientationL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::SetCameraOrientationL() + { + __VTPRINTENTER( "VtUi.SetCameraOrientationL" ) + MVtEngMedia::TCameraOrientation newOrientation = iCurrentCameraOrientation; + MVtEngMedia::TCameraId cameraId; + MVtEngMedia& media = Model().Media(); + if ( media.GetCurrentCameraId( cameraId ) == KErrNone ) + { + switch ( cameraId ) + { + case MVtEngMedia::EPrimaryCamera: + __VTPRINT( DEBUG_GEN, "VtUi.SetCameraOrient.Primary") + if( iCurrentCameraOrientation != iPrimaryCameraOrientation ) + { + newOrientation = iPrimaryCameraOrientation; + } + break; + + case MVtEngMedia::ESecondaryCamera: + __VTPRINT( DEBUG_GEN, "VtUi.SetCameraOrient.Secondary") + if ( iCurrentCameraOrientation != iSecondaryCameraOrientation ) + { + newOrientation = iSecondaryCameraOrientation; + } + break; + + default: + break; + } + } + + __VTPRINT2( DEBUG_GEN, "VtUi.SetCameraOrient.Cur=%d", + iCurrentCameraOrientation ) + __VTPRINT2( DEBUG_GEN, "VtUi.SetCameraOrient.New=%d", + newOrientation ) + + if ( iCurrentCameraOrientation != newOrientation ) + { + // map camera orientation to appui layout orientation + TAppUiOrientation newAppUiOrientation; + if ( newOrientation == MVtEngMedia::EOrientationLandscape ) + { + __VTPRINT( DEBUG_GEN, "VtUi.SetCameraOrient=LS") + newAppUiOrientation = EAppUiOrientationLandscape; + } + else if ( newOrientation == MVtEngMedia::EOrientationPortrait ) + { + __VTPRINT( DEBUG_GEN, "VtUi.SetCameraOrient=PR") + newAppUiOrientation = EAppUiOrientationPortrait; + } + else + { + __VTPRINT( DEBUG_GEN, "VtUi.SetCameraOrient=OL") + newAppUiOrientation = EAppUiOrientationUnspecified; + } + SetOrientationL( newAppUiOrientation ); + } + __VTPRINTEXIT( "VtUi.SetCameraOrientationL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshStatesL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshStatesL() + { + __VTPRINTENTER( "VtUi.RefreshStatesL" ) + // If transaction (set of commands) is pending refresh in delayed until + // all of them are processed. + if ( !iUiStates->IsCommandActivating() ) + { + iUiStates->Update(); + if ( iUiStates->IsThisApplicationForeground() ) + { + iCommandManager->RefreshL(); + } + } + __VTPRINTEXIT( "VtUi.RefreshStatesL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CmdAdjustVideoL +// ----------------------------------------------------------------------------- +// + void CVtUiAppUi::CmdAdjustVideoL( TInt aCommand ) + { + __VTPRINTENTER( "VtUi.CmdAdjustVideoL" ) + TInt featureId( -1 ); + switch ( aCommand ) + { + case EVtUiCmdAdjustVideoVideoQuality: + featureId = EVtUiFeatureIdVideoQuality; + break; + case EVtUiCmdAdjustVideoWhiteBalance: + featureId = EVtUiFeatureIdWhiteBalance; + break; + case EVtUiCmdAdjustVideoBrightness: + featureId = EVtUiFeatureIdBrightness; + break; + case EVtUiCmdAdjustVideoContrast: + featureId = EVtUiFeatureIdContrast; + break; + case EVtUiCmdAdjustVideoColourTone: + featureId = EVtUiFeatureIdColourTone; + break; + default: + break; + } + MVtUiFeature* vb = iFeatureManager->GetFeatureById( featureId ); + if ( vb ) + { + __VTPRINT( DEBUG_GEN, "VtUi.CmdAdjustVideoL.StartL" ); + vb->StartL(); + } + __VTPRINTEXIT( "VtUi.CmdAdjustVideoL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::AppUiInitDoneDoPostInitL +// ----------------------------------------------------------------------------- +// + void CVtUiAppUi::AppUiInitDoneDoPostInitL() + { + MVtUiFeature* tb = iFeatureManager->GetFeatureById( EVtUiFeatureIdToolbar ); + if ( tb ) + { + if ( !iTbPeriodic ) + { + iTbPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + } + iTbPeriodic->Cancel(); + // try to strat toolbar feature immediately + iTbPeriodic->Start( 0, KPeriodTime, TCallBack( DoTryToStartTbL, this ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::ProcessWsEventIfZoomModeIsActiveL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::ProcessWsEventIfZoomModeIsActiveL( const TWsEvent& aEvent ) + { + __VTPRINTENTER( "VtUi.ProWsEvtIfZoomActivedL" ) + const TInt type = aEvent.Type(); + switch( type ) + { + case EEventKey: + case EEventKeyUp: + case EEventKeyDown: + { + const TKeyEvent* keyEvent = aEvent.Key(); + + + // Up and down arrow key events does the zooming, + // and should be forwarded to appui's key event handler. + // Also ETrue must be returned, so that other controls + // would not get these key events. + TEventCode eventCode = (TEventCode)aEvent.Type(); + if ( keyEvent->iScanCode == EStdKeyUpArrow || + keyEvent->iScanCode == EStdKeyDownArrow || + keyEvent->iCode == EKeyZoomIn || + keyEvent->iCode == EKeyZoomOut ) + { + HandleKeyEventL( *keyEvent, eventCode ); + __VTPRINTEXIT( "VtUi.ProWsEvtIfZoomActivedL" ) + return ETrue; + } + __VTPRINT( DEBUG_GEN, "VtUi.HandleWsEventL zoom mode set" ); + // If user selects zoom mode from options menu EEventKeyUp + // will be generated after that. Therefore this event must be + // ignored. Also EEventKeyDown are ignored. This means that + // only EEventKey events can dismiss the zoom mode. + if ( type != EEventKeyUp && type != EEventKeyDown ) + { + // If zoom mode is on only zoom mode button is available in + // toolbar. Pressing the zoom mode button in toolbar + // should not dismiss the zoom mode, that is why this events + // are ignored. If toolbar is not available and + // also EKeyDevice3 (selection key) event should dismiss + // the zoom mode. + if ( keyEvent->iCode != EKeyDevice3 || + ( keyEvent->iCode == EKeyDevice3 && + !iUiStates->IsToolbarAvailable() ) ) + { + __VTPRINT( DEBUG_GEN, "VtUi.ProWsEvtIfZoomActivedL.EKeyDevice3" ); + SetZoomModeL( EFalse ); + } + } + } + break; + + case EEventPointer: + __VTPRINT( DEBUG_GEN, "VtUi.ProWsEvtIfZoomActivedL.EEventPointer" ); + break; + + case KAknHardwareLayoutSwitch: + // Window server event used when layout changes + __VTPRINT( DEBUG_GEN, "VtUi.ProcessWsEventIfZoomModeIsActiveL.LayoutSwitch" ); + break; + + case EEventScreenDeviceChanged: + // The screen size mode has changed, for instance when the cover on a phone + // that supports screen flipping is opened or closed. + __VTPRINT( DEBUG_GEN, "VtUi.ProcessWsEventIfZoomModeIsActiveL.ScreenChanged" ); + break; + + case EVtUiWsEventNumberSourceDeactivate: + // Number source deactivated + __VTPRINT( DEBUG_GEN, "VtUi.ProWsEvtIfZoomActivedL.NumberDeactivate" ); + break; + + default: + __VTPRINT( DEBUG_GEN, "VtUi.ProWsEvtIfZoomActivedL.default" ); + // EVtUiWsEventNumberSourceActivate could be generated through number buttons + // and execution runs to default statement + SetZoomModeL( EFalse ); + break; + } + __VTPRINTEXIT( "VtUi.ProWsEvtIfZoomActivedL2" ) + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::StopSliders() +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::StopSliders() + { + __VTPRINTENTER( "VtUi.StopSliders" ) + if( iUiStates->IsBrightnessModeOn() ) + { + // if brightness feature is active, stop that + MVtUiFeature* br = iFeatureManager->GetFeatureById( EVtUiFeatureIdBrightness ); + if ( br ) + { + if ( br->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopSliders br->STOP" ) + br->Stop(); + } + } + } + // if contrast feature is active, stop that + if( iUiStates->IsContrastModeOn() ) + { + // if contrast feature is active, stop that + MVtUiFeature* cr = iFeatureManager->GetFeatureById( EVtUiFeatureIdContrast ); + if ( cr ) + { + if ( cr->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopSliders cr->STOP" ) + cr->Stop(); + } + } + } + // if volume feature is active, stop that + if( iUiStates->IsVolumeModeOn() ) + { + // if volume feature is active, stop that + MVtUiFeature* vl = iFeatureManager->GetFeatureById( EVtUiFeatureIdVolume ); + if ( vl ) + { + if ( vl->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopSliders vl->STOP" ) + vl->Stop(); + } + } + } + // if zoom feature is active, stop that + if( iUiStates->IsZoomModeOn() ) + { + // if zoom feature is active, stop that + MVtUiFeature* zm = iFeatureManager->GetFeatureById( EVtUiFeatureIdZoom ); + if ( zm ) + { + if ( zm->State() == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "VtUi.StopSliders zm->STOP" ) + zm->Stop(); + } + } + } + __VTPRINTEXIT( "VtUi.StopSliders" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CanSwapImagePlaces() +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::CanSwapImagePlaces() + { + __VTPRINTENTER( "VtUi.CanSwapImagePlaces" ) + TTime now; + now.HomeTime(); + // User can swap image places if the frequency is lower than maximum frequency. + if ( now.MicroSecondsFrom( iLastSwapTime ).Int64() >= KVtUiMaxSwapImagesFreq ) + { + __VTPRINT( DEBUG_GEN, "VtUi.Swap can swap image" ) + iLastSwapTime = now; + return ETrue; + } + else + { + __VTPRINT( DEBUG_GEN, "VtUi.Swap can not swap image" ) + return EFalse; + } + __VTPRINTEXIT( "VtUi.CanSwapImagePlaces" ) + } + +// Implementation of CVtUiAppUi::CInstance + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::CInstance +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CInstance::CInstance( CVtUiAppUi& aAppUi ) + : iAppUi( aAppUi ) + { + } + +void CVtUiAppUi::CInstance::CreateRemoteVideoControl() + { + iRemoteVideoControl = CVtUiRemoteVideoControl::NewL( iAppUi ); + iRemoteVideoControl->MakeVisible(EFalse); + iMainControl->SetRemoteVideoControl( iRemoteVideoControl ); + iMainControl->LayoutRemoteVideo(); + + iAppUi.AddToStackL( iRemoteVideoControl ); + + iRemoteVideoControlInStack = ETrue; + + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CInstance::ConstructL() + { + iBitmapManager = new ( ELeave ) CVtUiBitmapManager; + + TRect parent; + TAknWindowLineLayout control; + + VtUiLayout::GetApplicationParentRect( parent ); + iMainControl = CVtUiMainControl::NewL( *iBitmapManager, + *iAppUi.iUiStates ); + + VtUiLayout::GetMainPaneLayout( control ); + AknLayoutUtils::LayoutControl( iMainControl, parent, control ); + + iAppUi.AddToStackL( iMainControl ); + iMainControlInStack = ETrue; + + TAknLayoutRect layout; + layout.LayoutRect( parent, control ); + iNumberEntryActivation = + new ( ELeave ) CVtUiNumberEntryActivationControl( iAppUi ); + iNumberEntryActivation->ConstructL( layout.Rect() ); + + iContextControl = CVtUiContextControl::NewL( + *iBitmapManager, + iAppUi, + *iAppUi.iUiStates ); + + VtUiLayout::GetFirstWindowBackgroundLayout( + control ); + AknLayoutUtils::LayoutControl( iContextControl, parent, control ); + iAppUi.AddToStackL( iContextControl ); + iContextControlInStack = ETrue; + + iNaviPane = + CVtUiNaviPane::NewL( + *( iAppUi.NaviPaneL() ), + iAppUi ); + + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::LayoutChanged +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CInstance::LayoutChanged() + { + // Layout controls. + TRect parent; + TAknWindowLineLayout control; + VtUiLayout::GetApplicationParentRect( parent ); + VtUiLayout::GetMainPaneLayout( control ); + AknLayoutUtils::LayoutControl( iMainControl, parent, control ); + if(iMainControl) + iMainControl->LayoutRemoteVideo(); + AknLayoutUtils::LayoutControl( iNumberEntryActivation, parent, control ); + VtUiLayout::GetFirstWindowBackgroundLayout( control ); + AknLayoutUtils::LayoutControl( iContextControl, parent, control ); + if(iContextControl) + iContextControl->LayoutRemoteVideo(); + + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::VolumeKeyPressedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CInstance::VolumeKeyPressedL() + { + __VTPRINTENTER( "CVtUiAppUi.VolumeKeyPressedL" ) + // if the application is in foreground show volume sliders + if ( iAppUi.IsForeground() ) + { + // If application is shutting down, no need to show volume popup + if ( iAppUi.iState == NULL || + iAppUi.iState == + TVtUiStateResetting::InstanceL( iAppUi, *iAppUi.iUiStates ) ) + { + return; + } + + CVtUiVolume* volume = static_cast< CVtUiVolume* >( + iAppUi.iFeatureManager->GetFeatureById( EVtUiFeatureIdVolume ) ); + if ( volume ) + { + // If the capture mode is on we should + // end the capture mode + if( iAppUi.iUiStates->IsCaptureModeOn() ) + { + iAppUi.CmdCancelCaptureL(); + } + volume->StartL(); + } + } + __VTPRINTEXIT( "CVtUiAppUi.VolumeKeyPressedL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::NewL +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CInstance* CVtUiAppUi::CInstance::NewL( CVtUiAppUi& aAppUi ) + { + CInstance* self = new ( ELeave ) CInstance( aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CInstance::~CInstance +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CInstance::~CInstance() + { + if ( iMainControl && iMainControlInStack ) + { + iAppUi.RemoveFromStack( iMainControl ); + } + if ( iContextControl && iContextControlInStack ) + { + iAppUi.RemoveFromStack( iContextControl ); + } + if(iRemoteVideoControl &&iRemoteVideoControlInStack) + { + iAppUi.RemoveFromStack( iRemoteVideoControl ); + } + delete iMainControl; + delete iContextControl; + delete iRemoteVideoControl; + delete iNumberEntryActivation; + delete iNaviPane; + delete iBitmapManager; + } + +// Implementation of CVtUiAppUi::CEventObserver + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::CEventObserver +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CEventObserver::CEventObserver( CVtUiAppUi& aAppUi ) + : iAppUi( aAppUi ), + iCommandObservers( KVtUiCommandObserverArrayGranularity ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::ConstructL() + { + iModel = CVtEngModel::NewL( *this, *this ); + + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::NewL +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CEventObserver* CVtUiAppUi::CEventObserver::NewL( + CVtUiAppUi& aAppUi ) + { + CEventObserver* self = new ( ELeave ) CEventObserver( aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::~CEventObserver +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CEventObserver::~CEventObserver() + { + iCommandObservers.Close(); + + delete iModel; + delete iBeat; + + delete iRemConInterfaceSelector; + iRemConCoreApiTarget = NULL; // not owned. + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::Model +// ----------------------------------------------------------------------------- +// +inline CVtEngModel& CVtUiAppUi::CEventObserver::Model() + { + return *iModel; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::CreateRemConSessionL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::CreateRemConSessionL() + { + __VTPRINTENTER( "VtUiComms.CreateRemCon" ) + // If one of the iRemCon* pointers equals to NULL, then all of them are + // NULL. + if ( !iRemConInterfaceSelector ) + { + CRemConInterfaceSelector* interfaceSelector = + CRemConInterfaceSelector::NewL(); + CleanupStack::PushL( interfaceSelector ); + + CRemConCoreApiTarget* coreApiTarget = + CRemConCoreApiTarget::NewL( *interfaceSelector, *this ); + // The coreApiTarget instance is owned by interfaceSelector instance. + // This instance must implement MRemConCoreApiTargetObserver interface. + CleanupStack::PushL( coreApiTarget ); + interfaceSelector->OpenTargetL(); + + iRemConVolumeRepeatTimer = CPeriodic::NewL( CActive::EPriorityHigh ); + + CleanupStack::Pop( coreApiTarget ); + CleanupStack::Pop( interfaceSelector ); + + iRemConInterfaceSelector = interfaceSelector; + iRemConCoreApiTarget = coreApiTarget; + } + __VTPRINTEXIT( "VtUiComms.CreateRemCon" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::DeleteRemConSession +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::DeleteRemConSession() + { + delete iRemConVolumeRepeatTimer; + iRemConVolumeRepeatTimer = NULL; + + delete iRemConInterfaceSelector; + iRemConInterfaceSelector = NULL; + + iRemConCoreApiTarget = NULL; // not owned. + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::CommandSupported +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::CEventObserver::CommandSupported( + const TInt aCommandId ) const + { + const TInt caps = iModel->CommandHandler().GetCommandCaps( aCommandId ); + return + ( caps >= KErrNone ) && + ( caps & MVtEngCommandHandler::EAttribSupported ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::CommandSupportedAndSynchronous +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::CEventObserver::CommandSupportedAndSynchronous( + const TInt aCommandId ) const + { + const TInt caps = iModel->CommandHandler().GetCommandCaps( aCommandId ); + return + ( caps >= KErrNone ) && + ( caps & MVtEngCommandHandler::EAttribSupported ) && + ( ~caps & MVtEngCommandHandler::EAttribAsync ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::AddObserverL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::AddObserverL( + MVtEngCommandObserver& aObserver ) + { + User::LeaveIfError( + iCommandObservers.Append( &aObserver ) ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::RemoveObserver +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::RemoveObserver( + MVtEngCommandObserver& aObserver ) + { + const TInt pos = iCommandObservers.Find( &aObserver ); + if ( pos != KErrNotFound ) + { + if ( !iInCommandPerformed ) + { + iCommandObservers.Remove( pos ); + } + else + { + iCommandObservers[ pos ] = NULL; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::StartBeatL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::StartBeatL() + { + if ( !iBeat ) + { + iBeat = CHeartbeat::NewL( CActive::EPriorityStandard ); + } + + if ( !iBeat->IsActive() ) + { + iBeat->Start( ETwelveOClock, this ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::StopBeat +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::StopBeat() + { + delete iBeat; + iBeat = NULL; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::StopVolumeRepeatTimer +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::StopVolumeRepeatTimer() + { + iRemConVolumeRepeatTimer->Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::HandleVtEventL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::HandleVtEventL( + TInt aEvent ) + { + __VTPRINTENTER( "VtUiComms.HandleVtEventL" ) + __VTPRINT2( DEBUG_GEN, "VtUi.HandleEvt=%d", aEvent ) + + /** Allow application state to handle event first. It may also deny further + * handling by indicating the event was handled */ + if ( iAppUi.iState && + iAppUi.iState->HandleVtEventL( aEvent ) + == TVtUiAppStateBase::EEventHandled ) + { + __VTPRINTEXITR( "VtUiComms.HandleVtEventL %d", 0 ) + return; + } + + TInt callBits = EVtUiRefreshStates; + + // New camera orientation + switch( aEvent ) + { + case KVtEngSourceChanged: + callBits |= EVtUiSetOrientation; + break; + default: + break; + } + + switch( aEvent ) + { + case KVtEngSourceChanged: + callBits |= EVtUiStopWBOrColortone; + break; + default: + break; + } + + switch( aEvent ) + { + case KVtEngSessionWaitingCallActive: + case KVtEngSessionWaitingCallInactive: + iAppUi.HandleWaitingStateChange( + aEvent == KVtEngSessionWaitingCallActive ); + break; + default: + break; + } + switch( aEvent ) + { + case KVtEngShareImageInitializeBegin: + callBits |= EVtUiShowImageInitializingProgress; + break; + + case KVtEngShareImageInitializeEnd: + callBits |= EVtUiHideImageInitializingProgress; + break; + + case KVtEngShareImageDecodingError: + callBits |= EVtUiShowDecodingError; + break; + + default: + break; + } + + // Handle rendering problems. + switch ( aEvent ) + { + case KVtEngRemoteRenderingProblem: + callBits |= EVtUiHandleVideoFrameRemoteProblem; + break; + + case KVtEngViewFinderStopped: + case KVtEngLocalRenderingProblem: + callBits |= EVtUiHandleVideoFrameLocalProblem; + break; + + default: + break; + } + + // Refresh navipane. + switch ( aEvent ) + { + case KVtEngSourceChanged: + case KVtEngCameraChanged: + case KVtEngSessionStateChanged: + case KVtEngDurationSettingChanged: + case KVtEngAudioOutputVolumeChanged: + case KVtEngAudioRoutingChanged: + case KVtEngAudioMuted: + case KVtEngAudioUnmuted: + callBits |= EVtUiRefreshNaviPane; + break; + + default: + break; + } + + // Refresh softkeys. + switch ( aEvent ) + { + case KVtEngSourceChanged: + case KVtEngSourceCapsChanged: + case KVtEngSessionAnswerPossible: + case KVtEngSessionStateChanged: + case KVtEngAudioRoutingChanged: + case KVtEngAudioRoutingAvailabilityChanged: + case KVtEngAudioMuted: + case KVtEngAudioUnmuted: + case KVtEngLCHProviderSwitchDone: + callBits |= EVtUiRefreshSoftkeys; + break; + + default: + break; + } + + // Refresh blind status + switch ( aEvent ) + { + case KVtEngSourceChanged: + case KVtEngRemoteVideoPaused: + case KVtEngRemoteVideoResumed: + case KVtEngRemoteVideoStarted: + case KVtEngRemoteVideoStopped: + case KVtEngLCHProviderSwitchDone: + callBits |= EVtUiRefreshBlind; + break; + + default: + break; + } + + // Check if it's required to stop "waiting image" display. + switch ( aEvent ) + { + case KVtEngRemoteVideoResumed: + case KVtEngRemoteVideoStarted: + callBits |= EVtUiStopWaitingImage; + break; + + default: + break; + } + + // Check if it is needed to set a new layout for remote renderer. + switch ( aEvent ) + { + case KVtEngResolutionToQCIF: + callBits |= EVtUiChangeRemoteVideoLayout; + iAppUi.RemoteVideoIsSQCif( EFalse ); + break; + case KVtEngResolutionToSQCIF: + callBits |= EVtUiChangeRemoteVideoLayout; + iAppUi.RemoteVideoIsSQCif( ETrue ); + break; + default: + break; + } + + switch ( aEvent ) + { + case KVtEngAudioRoutingChanged: + case KVtEngAudioRoutingAvailabilityChanged: + case KVtEngMediaOutgoingVideoChannelStatusChanged: + case KVtEngMediaOutgoingAudioChannelStatusChanged: + callBits |= EVtUiMediaStateChanged; + break; + + case KVtEngAudioVolumeMin: + iAppUi.KeySounds()->PlaySound( EAvkonSIDVolumeMinTone ); + break; + + case KVtEngAudioVolumeMax: + iAppUi.KeySounds()->PlaySound( EAvkonSIDVolumeMaxTone ); + break; + + default: + break; + } + + // Refresh Menu. + switch ( aEvent ) + { + case KVtEngSourceChanged: + callBits |= EVtUiRefreshMenu; + callBits |= EVtUiStopBrightnessOrContrast; + callBits |= EVtUiRefreshZoomPopup; + break; + default: + break; + } + + TRAP_IGNORE ( DoExecuteL( callBits ) ); + __VTPRINTEXITR( "VtUiComms.HandleVtEventL %d", 1 ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ) + { + __VTPRINTENTER( "VtUiComms.HandleVTCommandPerformedL" ) + + if ( iAppUi.iState && + iAppUi.iState->HandleVTCommandPerformedL( aCommand, aError ) == + TVtUiAppStateBase::EEventHandled ) + { + // state didn't allow further processing of command completion + __VTPRINTEXITR( "VtUiComms.HandleVTCommandPerformedL %d", 0 ) + return; + } + iAppUi.RefreshStatesL(); + + if ( aCommand == KVtEngMuteOutgoingAudio || + aCommand == KVtEngUnmuteOutgoingAudio ) + { + iAppUi.RefreshL(); + } + + const TInt count = iCommandObservers.Count(); + TInt nullPosition = KErrNotFound; + + iInCommandPerformed = ETrue; + + // iInCommandPerformed equals ETrue while inside the following loop; + // Exceptions must not be raised. + for ( TInt index = 0; index < count; index++ ) + { + MVtEngCommandObserver* obs = iCommandObservers[ index ]; + if ( obs ) + { + TRAP_IGNORE( obs->HandleVTCommandPerformedL( aCommand, aError ) ); + } + else + { + // We store only one position; eventually all NULL elements of the + // array will be removed. + nullPosition = index; + } + } + iInCommandPerformed = EFalse; + + if ( nullPosition != KErrNotFound ) + { + iCommandObservers.Remove( nullPosition ); + } + + // Specific handling of some commands: + if ( aCommand == KVtEngResetEngine ) // Engine has been reset + { + __ASSERT_ALWAYS( !aError, VtUiPanic::Panic( EVtUiPanicResetFailed ) ); + iAppUi.HandleEngineResetL(); + } + else if ( ( aCommand == KVtEngInitializeShareImage ) || + ( aCommand == KVtEngStartShareImage ) ) + { + __VTPRINT3( DEBUG_GEN, + "VtUi.HandleVTCommandPerformedL cmd=%d err=%d", aCommand, aError ); + if( aError != KErrNone ) + { + // stop toolbar feature to prevent drawing over error dialog + MVtUiFeature* tb = iAppUi.iFeatureManager-> + GetFeatureById( EVtUiFeatureIdToolbar ); + if ( tb ) + { + tb->Stop(); + } + iAppUi.iAsyncCallback->Set( + TCallBack( &AsyncShowErrorAndRestartShare, &iAppUi ) ); + iAppUi.iAsyncCallback->CallBack(); + } + else if( aCommand == KVtEngInitializeShareImage ) + { + if ( iAppUi.iUiStates->IsViewFinderToMainPane() ) + { + iAppUi.iAsyncCallback->Set( + TCallBack( &AsyncViewFinderToMainPaneAndShare, &iAppUi ) ); + } + else + { + iAppUi.iAsyncCallback->Set( + TCallBack( &AsyncShare, &iAppUi ) ); + } + iAppUi.iAsyncCallback->CallBack(); + } + } + else if ( iAppUi.iUiStates->IsLayoutChangeNeeded() && + ( aCommand == KVtEngMuteOutgoingAudio || + aCommand == KVtEngUnmuteOutgoingAudio || + aCommand == KVtEngSetAudioRouting || + aCommand == KVtEngSetAudioVolume || + aCommand == KVtEngSetSource || + aCommand == KVtEngPrepareCamera || + aCommand == KVtEngUnfreeze ) ) + { + iAppUi.iUiStates->SetLayoutChangeNeeded( EFalse ); + iAppUi.DoHandleLayoutChangedL(); + } + __VTPRINTEXITR( "VtUiComms.HandleVTCommandPerformedL %d", 1 ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::vtHandleFrameL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::vtHandleFrameL( + TFrameType aType, + CFbsBitmap* aBitmap ) + { + static TUint32 lastTick = 0; + static TBool flag = EFalse; + + + CEikMenuBar* menuBar = (STATIC_CAST(CEikonEnv*, this->iAppUi.iCoeEnv))->AppUiFactory()->MenuBar(); + if ( menuBar && menuBar->IsDisplayed() ) + { + if ( !flag ) + { + flag = ETrue; + lastTick = User::NTickCount(); + } + else + { + TUint32 newTick = User::NTickCount(); + + //don't consider time wrap + //one frame per 200ms + if ( newTick - lastTick < 400 ) + { + __VTPRINTEXITR( "CVtUiAppUi::CEventObserver::vtSetFrame %d", 0 ) + return; + } + else + { + lastTick = newTick; + } + } + } + else + { + flag = EFalse; + } + + TBool local = EFalse; + switch ( aType ) + { + case ELocalVideoFrame: + local = ETrue; + break; + + case ERemoteVideoFrame: + default: + break; + } + + iAppUi.HandleVideoFrameL( local, aBitmap ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::vtSetFrame +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::vtSetFrame( + TFrameType aType, + CFbsBitmap* aBitmap ) + { + TBool local = EFalse; + switch ( aType ) + { + case ELocalVideoFrame: + local = ETrue; + break; + + case ERemoteVideoFrame: + default: + break; + } + + iAppUi.SetVideoFrame( local, aBitmap ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::Beat +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::Beat() + { + iAppUi.HandleBeat(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::Synchronize +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::Synchronize() + { + iAppUi.HandleBeat(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::DoExecuteL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::DoExecuteL( TInt aBits ) + { + __VTPRINT2( DEBUG_GEN, "VtUi.DoExec.bits=%d", aBits ) + + // Array of methods - leaving methods are allowed. + const TMethodL methodArray[] = + { + &CVtUiAppUi::RefreshStatesL, + &CVtUiAppUi::HandleVideoFrameRemoteProblemL, + &CVtUiAppUi::HandleVideoFrameLocalProblemL, + &CVtUiAppUi::RefreshNaviPaneL, + &CVtUiAppUi::RefreshSoftkeysL, + &CVtUiAppUi::RefreshBlind, + &CVtUiAppUi::StopWaitingImage, + &CVtUiAppUi::ChangeRemoteVideoLayoutL, + &CVtUiAppUi::ShowImageInitializeProgressL, + &CVtUiAppUi::HideImageInitializeProgressL, + &CVtUiAppUi::SetCameraOrientationL, + &CVtUiAppUi::MediaStateChangedL, + &CVtUiAppUi::ShowImageDecodingErrorNoteL, + &CVtUiAppUi::StopWhiteBalanceOrColortone, + &CVtUiAppUi::RefreshMenuL, + &CVtUiAppUi::StopBrightnessOrContrast, + &CVtUiAppUi::RefreshZoomPopupL + }; + const TInt count = ( sizeof( methodArray ) / sizeof ( TMethodL ) ); + + // Execute selected methods. + while ( aBits ) + { + for ( TInt index = 0; ( index < count ) && aBits; index++ ) + { + const TInt mask = ( 1 << index ); + if ( aBits & mask ) + { + // Bit is set if corresponding method + // is wanted to be executed. + + aBits &= ~mask; + TMethodL method = methodArray[ index ]; + ( iAppUi.*method )(); // may leave + } + } + aBits = 0; // for loop executed successfully. + } + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::HandleVolumeChange +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::HandleVolumeChange( + TRemConCoreApiButtonAction aButtonAct ) + { + __VTPRINTENTER( "VtUi.HandleVolumeChange" ) + // Order of the events is as follows: + // Click - Immediately when key is pressed down + // Press - After 0.6 seconds + // Release - When key is released after 0.6 seconds + // + // Thus, the following sequences are possible from single keypress: + // + // <0.6 sec pause> + + switch ( aButtonAct ) + { + case ERemConCoreApiButtonPress: + __VTPRINT( DEBUG_GEN, "VtUi.HandleVolumeChange.ButtonPress" ) + TRAP_IGNORE( iAppUi.AdjustVolumeL( iRCCAOperationId ) ); + TRAP_IGNORE( iAppUi.RefreshVolumeL() ); + TRAP_IGNORE( iAppUi.iInstance->VolumeKeyPressedL() ); + + iRemConVolumeRepeatTimer->Start( + KVtUiVolumeRepeatLongDelay, + KVtUiVolumeRepeatDelay, + TCallBack( DoHandleVolumeRepeat, this ) ); + + break; + + case ERemConCoreApiButtonRelease: + __VTPRINT( DEBUG_GEN, "VtUi.HandleVolumeChange.ButtonRelease" ) + iRCCAOperationId = ENop; + TRAP_IGNORE( iAppUi.iInstance->VolumeKeyPressedL() ); + break; + + case ERemConCoreApiButtonClick: + __VTPRINT( DEBUG_GEN, "VtUi.HandleVolumeChange.ButtonClick" ) + TRAP_IGNORE( iAppUi.AdjustVolumeL( iRCCAOperationId ) ); + TRAP_IGNORE( iAppUi.RefreshVolumeL() ); + TRAP_IGNORE( iAppUi.iInstance->VolumeKeyPressedL() ); + break; + + default: + break; + } + __VTPRINTEXIT( "VtUi.HandleVolumeChange" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::HandleRemMuteChange +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::HandleRemMuteChange( + TRemConCoreApiButtonAction aButtonAct ) + { + __VTPRINTENTER( "VtUi.EventObserver.HandleRemMuteChange" ) + TBool AudioEn (EFalse ); + AudioEn = iAppUi.iUiStates->AudioState().IsAudio(); + if( AudioEn ) + iAppUi.HandleCommandL( EVtUiCmdDisableAudio ); + else + iAppUi.HandleCommandL( EVtUiCmdEnableAudio ); + __VTPRINTEXIT( "VtUi.EventObserver.HandleRemMuteChange" ) + } +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::DoHandleVolumeRepeat +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppUi::CEventObserver::DoHandleVolumeRepeat( TAny* aAny ) + { + __VTPRINTENTER( "VtUi.SvkRpt" ) + CEventObserver* self = reinterpret_cast< CEventObserver* >( aAny ); + TRAP_IGNORE( self->iAppUi.AdjustVolumeL( self->iRCCAOperationId ) ); + TRAP_IGNORE( self->iAppUi.RefreshVolumeL() ); + __VTPRINTEXIT( "VtUi.SvkRpt" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::RefreshVolumeL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::RefreshVolumeL() + { + __VTPRINTENTER( "VtUi.RefreshVolumeL" ) + // Refresh volume + CVtUiVolume* volume = static_cast< CVtUiVolume* >( + iFeatureManager->GetFeatureById( EVtUiFeatureIdVolume ) ); + if ( volume ) + { + volume->RefreshL(); + } + __VTPRINTEXIT( "VtUi.RefreshVolumeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::AdjustVolumeL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::AdjustVolumeL( TRemConCoreApiOperationId aOperationId ) + { + __VTPRINTENTER( "VtUi.AdjustVolumeL" ) + __VTPRINT2( DEBUG_GEN, + "VtUi.AdjustVolumeL aOperationId = %d", aOperationId ) + TInt command( KVtEngCommandNone ); + switch ( aOperationId ) + { + case ERemConCoreApiVolumeDown: + command = KVtEngDecreaseAudioVolume; + break; + + case ERemConCoreApiVolumeUp: + command = KVtEngIncreaseAudioVolume; + break; + + default: + break; + } + + if ( command != KVtEngCommandNone ) + { + ExecuteCmdL( command ); + } + __VTPRINTEXIT( "VtUi.AdjustVolumeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CEventObserver::MrccatoCommand +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CEventObserver::MrccatoCommand( + TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) + { + __VTPRINTENTER( "VtUi.MrccatoCommand" ) + // Side volume keys will also dismiss zoom mode if zoom mode is active + if ( iAppUi.iUiStates->IsZoomModeOn() ) + { + __VTPRINT( DEBUG_GEN, "VtUi.MrccatoCommand1" ) + TRAP_IGNORE( iAppUi.SetZoomModeL( EFalse )); + } + + iRemConVolumeRepeatTimer->Cancel(); + iRCCAOperationId = aOperationId; + switch ( aOperationId ) + { + case ERemConCoreApiVolumeUp: + // if volume in maximum value and volume up is pressed + // volume indicator must still be shown for a while if + // muted or call duration is shown in navipane + __VTPRINT( DEBUG_GEN, "VtUi.MrccatoCommand ERemConCoreApiVolumeUp" ) + HandleVolumeChange( aButtonAct ); + break; + + case ERemConCoreApiVolumeDown: + // if volume in minimun value and volume down is pressed + // volume indicator must still be shown for a while if + // muted or call duration is shown in navipane + __VTPRINT( DEBUG_GEN, "VtUi.MrccatoCommand ERemConCoreApiVolumeDown" ) + HandleVolumeChange( aButtonAct ); + break; + case ERemConCoreApiMute: + __VTPRINT( DEBUG_GEN, "VtUi.MrccatoCommand ERemConCoreApiMute" ) + HandleRemMuteChange( aButtonAct ); + default: + // Other commands ignored. + break; + } + __VTPRINTEXIT( "VtUi.MrccatoCommand" ) + } + +// Implementation of CVtUiAppUi::CVtUiAppUiMGVerifier + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUiMGVerifier::NewLC +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CVtUiAppUiMGVerifier* CVtUiAppUi::CVtUiAppUiMGVerifier::NewLC( + CVtUiAppUi& aAppUi, CCoeEnv& aCoeEnv ) + { + CVtUiAppUiMGVerifier* self = new ( ELeave ) + CVtUiAppUiMGVerifier( aAppUi, aCoeEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUiMGVerifier::~CVtUiAppUiMGVerifier +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CVtUiAppUiMGVerifier::~CVtUiAppUiMGVerifier() + { + delete iManager; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUiMGVerifier::VerifySelectionL +// ----------------------------------------------------------------------------- +// +TBool CVtUiAppUi::CVtUiAppUiMGVerifier::VerifySelectionL( + const MDesCArray* aSelectedFiles ) + { + TBool isOk( EFalse ); + if ( aSelectedFiles->MdcaCount() > 0 ) + { + TVirtualPathPtr virtualPath( + aSelectedFiles->MdcaPoint( 0 ), KDefaultContentObject ); + + // not ptotected by default + TInt isProtected = 0; + + TInt err = iManager->GetAttribute( EIsProtected, + isProtected, virtualPath ); + if ( isProtected ) + { + iAppUi.ShowDRMNotAllowedNoteL(); + } + if ( err == KErrNone ) + { + isOk = !isProtected; + } + } + return isOk; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUiMGVerifier::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiAppUi::CVtUiAppUiMGVerifier::ConstructL() + { + iManager = CManager::NewL(); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppUi::CVtUiAppUiMGVerifier::CVtUiAppUiMGVerifier +// ----------------------------------------------------------------------------- +// +CVtUiAppUi::CVtUiAppUiMGVerifier::CVtUiAppUiMGVerifier( + CVtUiAppUi& aAppUi, CCoeEnv& aCoeEnv ) + : iAppUi( aAppUi ), iCoeEnv( &aCoeEnv ) + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiBitmapManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiBitmapManager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,662 @@ +/* +* Copyright (c) 2004 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 the CVtUiBitmapManager class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiBitmapManager.h" +#include "VtUiLayout.h" +#include "VtUiPanic.h" + +#include +#include +#include + +// CONSTANTS + +// Granularity of bitmap manager array. +const TInt KVtUiBitmapManagerGranularity = 16; + +// MODULE DATA STRUCTURES + +/** +* CBitmapInfo instances hold information of a bitmap and its mask. +* @since Series 60 2.8 +*/ +class CVtUiBitmapManager::CBitmapInfo + : public CBase + { + public: // Constructors and destructor + + /** + * Constructor. + */ + inline CBitmapInfo( + TVtUiBitmapPoolId aId ); + + /** + * Destructor. + */ + ~CBitmapInfo(); + + /** + * Sets bitmap identifiers. + * @param aBitmapId bitmap identifier. + * @param aBitmapMaskId bitmap mask identifier. + */ + inline void SetBitmaps( + TVtUiBitmapId aBitmapId, + TVtUiBitmapId aBitmapMaskId ); + + /** + * Sets bitmap identifier. + * @param aBitmapId bitmap identifier. + */ + inline void SetBitmap( + TVtUiBitmapId aBitmapId ); + + /** + * Sets size. + * @param aSize size of the bitmaps. + */ + inline void SetSize( const TSize& aSize ); + + /** + * Sets aspect ratio preservation. + * @param aPreserve ETrue if aspect ratio preserved. + */ + inline void SetAspectRatio( TBool aPreserve ); + + /** + * Sets default color required / not required for this bitmap. + * By default, default color is not required. + * @param aRequireDefaultColor ETrue if default color is required, + * EFalse otherwise. + */ + inline void SetDefaultColorRequired( + TBool aRequireDefaultColor ); + + /** + * Sets default color. + * @param aDefaultColor default color. + */ + inline void SetDefaultColor( const TRgb& aDefaultColor ); + + /** + * Returns bitmap pool identifier. + * @return bitmap pool identifier. + */ + inline TVtUiBitmapPoolId BitmapPoolId() const; + + /** + * Gets a bitmap and its mask. + * @param aBitmap bitmap. + * @param aBitmapMask bitmap mask. + */ + inline void GetBitmap( + CFbsBitmap*& aBitmap, + CFbsBitmap*& aBitmapMask ); + + /** + * Resets bitmap information. + */ + void Reset(); + + /** + * Constructs bitmap as far as possible. + * @param aTmpFileName temporary file name, + */ + void Require( TFileName& aTmpFileName ); + + private: + + /** + * Creates bitmaps using AVKON methods. + * @param aTmpFileName temporary file name, + */ + void DoCreateBitmapsL( TFileName& aTmpFileName ); + + /** + * Sets size to the bitmap using AVKON method. + */ + void DoSetSize(); + + private: + + // Bitmap pool identifier. + TVtUiBitmapPoolId iBitmapPoolId; + + // Size has been defined. + TBool iHasSize; + + // Size of the bitmap has been changed. + TBool iSizeChanged; + + // Size of the bitmaps. + TSize iSize; + + // ETrue if default color required. + TBool iRequireDefaultColor; + + // Default color has been defined. + TBool iHasDefaultColor; + + // Default color. + TRgb iDefaultColor; + + // Bitmap identifier. + TVtUiBitmapId iBitmapId; + + // Owned bitmap instance. + CFbsBitmap* iBitmap; + + // Bitmap mask identifier. + TVtUiBitmapId iBitmapMaskId; + + // Owned bitmap mask instance. + CFbsBitmap* iBitmapMask; + + // ETrue if bitmaps have been created. + TBool iDoCreateBitmaps; + + // ETrue if size has been set. + TBool iDoSetSize; + + // ETrue if aspect ratio preservation has been updated. + TBool iHasAspectRatioPreserve; + + // ETrue if aspect ratio should be preserved. + TBool iAspectRatioPreserve; + + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CVtUiBitmapManager +// ----------------------------------------------------------------------------- +// +CVtUiBitmapManager::CVtUiBitmapManager() + : iBitmapArray( KVtUiBitmapManagerGranularity ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::~CVtUiBitmapManager +// ----------------------------------------------------------------------------- +// +CVtUiBitmapManager::~CVtUiBitmapManager() + { + iBitmapArray.ResetAndDestroy(); + iBitmapArray.Close(); + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::AddBitmapsL +// ----------------------------------------------------------------------------- +// +TVtUiBitmapPoolId CVtUiBitmapManager::AddBitmapsL( + TVtUiBitmapId aBitmapId, + TVtUiBitmapId aBitmapMaskId, + TBool aExpectDefaultColor ) + { + iBitmapId++; + CBitmapInfo* bitmapInfo = new ( ELeave ) CBitmapInfo( iBitmapId ); + CleanupStack::PushL( bitmapInfo ); + bitmapInfo->SetBitmaps( aBitmapId, aBitmapMaskId ); + bitmapInfo->SetDefaultColorRequired( aExpectDefaultColor ); + bitmapInfo->Require( iTmpFileName ); + + User::LeaveIfError( iBitmapArray.Append( bitmapInfo ) ); + CleanupStack::Pop( bitmapInfo ); + return iBitmapId; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::AddBitmapL +// ----------------------------------------------------------------------------- +// +TVtUiBitmapPoolId CVtUiBitmapManager::AddBitmapL( + TVtUiBitmapId aBitmapId, + TBool aExpectDefaultColor ) + { + iBitmapId++; + CBitmapInfo* bitmapInfo = new ( ELeave ) CBitmapInfo( iBitmapId ); + CleanupStack::PushL( bitmapInfo ); + bitmapInfo->SetBitmap( aBitmapId ); + bitmapInfo->SetDefaultColorRequired( aExpectDefaultColor ); + bitmapInfo->Require( iTmpFileName ); + + User::LeaveIfError( iBitmapArray.Append( bitmapInfo ) ); + CleanupStack::Pop( bitmapInfo ); + return iBitmapId; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::RemoveBitmap +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::RemoveBitmap( + TVtUiBitmapPoolId aId ) + { + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + iBitmapArray.Remove( pos ); + delete bitmapInfo; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::SetSize +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::SetSize( + TVtUiBitmapPoolId aId, + const TSize& aSize ) + { + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + bitmapInfo->SetSize( aSize ); + bitmapInfo->Require( iTmpFileName ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::SetAspectRatio +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::SetAspectRatio( + TVtUiBitmapPoolId aId, + TBool aPreserve ) + { + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + bitmapInfo->SetAspectRatio( aPreserve ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::SetSizeAndColor +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::SetSizeAndColor( + TVtUiBitmapPoolId aId, + const TSize& aSize, + const TRgb& aDefaultColor ) + { + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + bitmapInfo->SetSize( aSize ); + bitmapInfo->SetDefaultColor( aDefaultColor ); + bitmapInfo->Require( iTmpFileName ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::RequireBitmap +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::RequireBitmap( TVtUiBitmapPoolId aId ) + { + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + bitmapInfo->Require( iTmpFileName ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::GetBitmaps +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::GetBitmaps( + TVtUiBitmapPoolId aId, + CFbsBitmap*& aBitmap, + CFbsBitmap*& aBitmapMask ) + { + aBitmap = NULL; + aBitmapMask = NULL; + + const TInt pos = Find( aId ); + if ( pos != KErrNotFound ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ pos ]; + bitmapInfo->GetBitmap( aBitmap, aBitmapMask ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::GetBitmap +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::GetBitmap( + TVtUiBitmapPoolId aId, + CFbsBitmap*& aBitmap ) + { + CFbsBitmap* dummy = NULL; + GetBitmaps( aId, aBitmap, dummy ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::InvalidateBitmaps +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::InvalidateBitmaps() + { + const TInt count = iBitmapArray.Count(); + for ( TInt index = 0; index < count; index++ ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ index ]; + bitmapInfo->Reset(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::Find +// ----------------------------------------------------------------------------- +// +TInt CVtUiBitmapManager::Find( TVtUiBitmapPoolId aId ) const + { + TInt result = KErrNotFound; + const TInt count = iBitmapArray.Count(); + for ( TInt index = 0; index < count; index++ ) + { + CBitmapInfo* bitmapInfo = iBitmapArray[ index ]; + if ( bitmapInfo->BitmapPoolId() == aId ) + { + result = index; + index = count; // out of the loop + } + } + + return result; + } + +// Implementation of CBitmapInfo: + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::CBitmapInfo +// ----------------------------------------------------------------------------- +// +inline CVtUiBitmapManager::CBitmapInfo::CBitmapInfo( + TVtUiBitmapPoolId aId ) + : iBitmapPoolId( aId ), + iBitmapId( EVtUiBitmapNone ), + iBitmapMaskId( EVtUiBitmapNone ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::~CBitmapInfo +// ----------------------------------------------------------------------------- +// +CVtUiBitmapManager::CBitmapInfo::~CBitmapInfo() + { + delete iBitmap; + delete iBitmapMask; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetBitmaps +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetBitmaps( + TVtUiBitmapId aBitmapId, + TVtUiBitmapId aBitmapMaskId ) + { + iBitmapId = aBitmapId; + iBitmapMaskId = aBitmapMaskId; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetBitmap +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetBitmap( + TVtUiBitmapId aBitmapId ) + { + iBitmapId = aBitmapId; + iBitmapMaskId = EVtUiBitmapNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetSize +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetSize( + const TSize& aSize ) + { + if ( iHasSize ) + { + iSizeChanged = ( iSize != aSize ); + } + + iHasSize = ETrue; + iSize = aSize; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetAspectRatio +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetAspectRatio( TBool aPreserve ) + { + iHasAspectRatioPreserve = ETrue; + iAspectRatioPreserve = aPreserve; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetDefaultColorRequired +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetDefaultColorRequired( + TBool aRequireDefaultColor ) + { + iRequireDefaultColor = aRequireDefaultColor; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::SetDefaultColor +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::SetDefaultColor( + const TRgb& aDefaultColor ) + { + __ASSERT_DEBUG( iRequireDefaultColor, + VtUiPanic::Panic( EVtUiPanicDefaultColorRequireMismatch ) ); + iHasDefaultColor = ETrue; + iDefaultColor = aDefaultColor; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::BitmapPoolId +// ----------------------------------------------------------------------------- +// +inline TVtUiBitmapPoolId CVtUiBitmapManager::CBitmapInfo::BitmapPoolId() const + { + return iBitmapPoolId; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::GetBitmap +// ----------------------------------------------------------------------------- +// +inline void CVtUiBitmapManager::CBitmapInfo::GetBitmap( + CFbsBitmap*& aBitmap, + CFbsBitmap*& aBitmapMask ) + { + if ( iDoCreateBitmaps && iDoSetSize ) + { + aBitmap = iBitmap; + aBitmapMask = iBitmapMask; + } + else + { + aBitmap = NULL; + aBitmapMask = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::Reset +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::CBitmapInfo::Reset() + { + delete iBitmap; + iBitmap = NULL; + + delete iBitmapMask; + iBitmapMask = NULL; + + iSize = TSize(); + iHasSize = EFalse; + iSizeChanged = EFalse; + iHasDefaultColor = EFalse; + iDefaultColor = TRgb(); + iDoCreateBitmaps = EFalse; + iDoSetSize = EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::Require +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::CBitmapInfo::Require( TFileName& aTmpFileName ) + { + // Bitmap can be created when the following has been satisfied + // a) It has not been created yet and default color is not required, + // b) It has not been created yet and default color is required and + // default color is available. + if ( !iDoCreateBitmaps && !( iRequireDefaultColor && !iHasDefaultColor ) ) + { + TRAP_IGNORE( DoCreateBitmapsL( aTmpFileName ) ); + } + + DoSetSize(); + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::DoCreateBitmapsL +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::CBitmapInfo::DoCreateBitmapsL( + TFileName& aTmpFileName ) + { + if ( !iDoCreateBitmaps ) + { + TInt bitmapIndex = KErrNotFound; + + VtUiLayout::Resolve( iBitmapId, aTmpFileName, bitmapIndex ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TAknsItemID skinId = VtUiLayout::MapBitmapToSkinId( iBitmapId ); + + TAknsItemID colorId = KAknsIIDNone; + TInt colorIndex = KErrNotFound; + TBool colorAvailable = EFalse; + if ( iHasDefaultColor ) + { + colorAvailable = + VtUiLayout::MapBitmapToColorId( + iBitmapId, colorId, colorIndex ); + } + + if ( iBitmapMaskId != EVtUiBitmapNone ) + { + TInt bitmapMaskIndex = KErrNotFound; +#ifdef _DEBUG + TFileName fileName; + VtUiLayout::Resolve( iBitmapMaskId, fileName, bitmapMaskIndex ); + __ASSERT_ALWAYS( aTmpFileName == fileName, + VtUiPanic::Panic( EVtUiPanicMismatchInBitmapFileNames ) ); +#else + VtUiLayout::Resolve( iBitmapMaskId, aTmpFileName, bitmapMaskIndex ); +#endif + if ( colorAvailable ) + { + AknsUtils::CreateColorIconL( + skin, skinId, + colorId, colorIndex, + iBitmap, iBitmapMask, + aTmpFileName, + bitmapIndex, + bitmapMaskIndex, + iDefaultColor ); + } + else + { + AknsUtils::CreateIconL( + skin, skinId, + iBitmap, iBitmapMask, + aTmpFileName, + bitmapIndex, + bitmapMaskIndex ); + } + } + else + { + // Only normal skinning for these. + AknsUtils::CreateIconL( + skin, + skinId, + iBitmap, + aTmpFileName, + bitmapIndex ); + } + + iDoCreateBitmaps = ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBitmapManager::CBitmapInfo::DoSetSize +// ----------------------------------------------------------------------------- +// +void CVtUiBitmapManager::CBitmapInfo::DoSetSize() + { + if ( iDoCreateBitmaps && iHasSize && ( !iDoSetSize || iSizeChanged ) ) + { + iSizeChanged = EFalse; + TInt retBitmap = KErrNone; + if ( !iHasAspectRatioPreserve ) + { + retBitmap = AknIconUtils::SetSize( iBitmap, iSize ); + } + else + { + TScaleMode scaleMode = + iAspectRatioPreserve ? + EAspectRatioPreserved : + EAspectRatioNotPreserved; + retBitmap = AknIconUtils::SetSize( iBitmap, iSize, scaleMode ); + } + + iDoSetSize = ( retBitmap == KErrNone ); + } + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiBlankControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiBlankControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2004 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 the CVtUiBlankControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiBlankControl.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::CVtUiBlankControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiBlankControl::CVtUiBlankControl() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiBlankControl::ConstructL( const TRect& aRect ) + { + CreateWindowL(); + MakeVisible( EFalse ); + SetRect( aRect ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::~CVtUiBlankControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiBlankControl::~CVtUiBlankControl() + { + AknsUtils::DeregisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::SetActive +// ----------------------------------------------------------------------------- +// +void CVtUiBlankControl::SetActive( TBool aStatus ) + { + iBlankerActive = aStatus; + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiBlankControl::OfferKeyEventL( + const TKeyEvent& /*aKeyEvent*/, + TEventCode /*aType*/ ) + { + return iBlankerActive ? EKeyWasConsumed : EKeyWasNotConsumed; + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiBlankControl::Draw( const TRect& /*aRect*/ ) const + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiBlankControl::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiBlankControl::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiBlankDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiBlankDialog.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2004 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 the CVtUiBlankDialog class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiBlankDialog.h" +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::CVtUiBlankDialog +// ----------------------------------------------------------------------------- +// +CVtUiBlankDialog::CVtUiBlankDialog( + CEikDialog** aSelfPtr ) + : iSelfPtr( aSelfPtr ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::~CVtUiBlankDialog +// ----------------------------------------------------------------------------- +// +CVtUiBlankDialog::~CVtUiBlankDialog() + { + if ( iSelfPtr ) + { + *iSelfPtr = NULL; + iSelfPtr = NULL; + } + + if ( iRequest ) + { + User::RequestComplete( iRequest, KErrCancel ); + iRequest = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::ExecuteDialogNoWaitLD +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::ExecuteDialogNoWaitLD() + { + ExecuteLD( R_VIDEOTELUI_BLANK_NOWAIT_DLG ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::ExecuteDialogLD +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::ExecuteDialogLD( + TRequestStatus* aRequest ) + { + if ( !aRequest ) + { + TInt error = KErrNone; + iError = &error; + + ExecuteLD( R_VIDEOTELUI_BLANK_DLG ); + User::LeaveIfError( error ); + } + else + { + // It's assumed that either ExecuteLD leaves or + // then dialog is started (& dialog is not immediately deleted). + *aRequest = KRequestPending; + ExecuteLD( R_VIDEOTELUI_BLANK_NOWAIT_DLG ); + iRequest = aRequest; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::Complete +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::Complete( const TInt aError ) + { + if ( iError ) + { + *iError = aError; + } + + if ( iRequest ) + { + User::RequestComplete( iRequest, aError ); + iRequest = NULL; + } + + delete this; + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::PreLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::PreLayoutDynInitL() + { + MakeVisible( EFalse ); + ButtonGroupContainer().MakeVisible( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::PostLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::PostLayoutDynInitL() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CVtUiBlankDialog::OkToExitL( TInt aButtonId ) + { + if ( aButtonId != EEikBidCancel ) + { + return EFalse; + } + else + { + return CEikDialog::OkToExitL( aButtonId ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiBlankDialog::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiBlankDialog::Draw( const TRect& /*aRect*/ ) const + { + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiContextControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiContextControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 2004, 2005 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 the CVtUiContextControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiContextControl.h" +#include "VtUiLayout.h" +#include +#include +#include +#include +#include "CVtUiAppUi.h" +#include "tvtuistates.h" +#include +#include "tVtuifeaturevariation.h" + + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::NewL +// Constructor that may leave. +// ----------------------------------------------------------------------------- +// +CVtUiContextControl* CVtUiContextControl::NewL( + CVtUiBitmapManager& aBitmapManager, CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates) + { + __VTPRINTENTER( "CtxCtrl.NewL" ) + CVtUiContextControl* self = new ( ELeave ) CVtUiContextControl( + aBitmapManager, aAppUi, aUiStates ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CtxCtrl.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::~CVtUiContextControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiContextControl::~CVtUiContextControl() + { + __VTPRINTENTER( "CtxCtrl.~" ) + BitmapManager().RemoveBitmap( iBackgroundId ); + BitmapManager().RemoveBitmap( iBlindId ); + BitmapManager().RemoveBitmap( iBlindMaskId ); + if ( iAppUi.EventMonitor() ) + { + iAppUi.EventMonitor()->RemoveObserver( this ); + } + __VTPRINTEXIT( "CtxCtrl.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::HandlePointerEventL( + const TPointerEvent& aPointerEvent) + { + __VTPRINTENTER( "CtxCtrl.HandlePointerEventL" ) + __VTPRINT2( DEBUG_GEN, "CtxCtrl.HandlePtr ok= %d", iOkToSwapOnButtonUp ) + if ( AknLayoutUtils::PenEnabled() ) + { + if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + TRect window( Size() ); + if ( !window.Contains( aPointerEvent.iPosition ) ) + { + iOkToSwapOnButtonUp = ETrue; + SetGloballyCapturing( EFalse ); + SetPointerCapture( EFalse); + } + else if( iOkToSwapOnButtonUp ) + { + if ( !iUiStates.IsWhiteBalanceModeOn() && + !iUiStates.IsColorToneModeOn() ) + { + if ( !( iAppUi.CanSwapImagePlaces() ) ) + { + return; + } + iAppUi.HandleCommandL( EVtUiCmdSwapImagesPlaces ); + } + } + else + { + SetGloballyCapturing( EFalse ); + SetPointerCapture( EFalse); + iOkToSwapOnButtonUp = ETrue; + } + } + } + __VTPRINTEXIT( "CtxCtrl.HandlePointerEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::HandleSizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::HandleSizeChanged() + { + __VTPRINTENTER( "CtxCtrl.HandleSizeChanged" ) + TRect screen; + VtUiLayout::GetApplicationParentRect( screen ); + + TAknWindowLineLayout control; + VtUiLayout::GetFirstWindowBackgroundLayout( control ); + TAknLayoutRect backLayout; + backLayout.LayoutRect( screen, control ); + BitmapManager().SetSize( iBackgroundId, backLayout.Rect().Size() ); + + const TPoint positionRelativeToScreen( -PositionRelativeToScreen() ); + + VtUiLayout::GetFirstWindowStreamDisabledIconLayout( control ); + TAknLayoutRect blindLayout; + blindLayout.LayoutRect( screen, control ); + iBlindRect = blindLayout.Rect(); + iBlindRect.Move( positionRelativeToScreen ); + BitmapManager().SetSize( iBlindId, iBlindRect.Size() ); + BitmapManager().SetSize( iBlindMaskId, iBlindRect.Size() ); + + VtUiLayout::GetFirstWindowStreamLayout( control ); + TAknLayoutRect streamLayout; + streamLayout.LayoutRect( screen, control ); + iStreamRect = streamLayout.Rect(); + iStreamRect.Move( positionRelativeToScreen ) ; + __VTPRINTEXIT( "CtxCtrl.HandleSizeChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::StreamBlitPosition +// ----------------------------------------------------------------------------- +// +TPoint CVtUiContextControl::StreamBlitPosition() const + { + __VTPRINTENTER( "CtxCtrl.StreamBlitPosition" ) + __VTPRINTEXIT( "CtxCtrl.StreamBlitPosition" ) + return iStreamRect.iTl; + } + +// --------------------------------------------------------------------------- +// CVtUiContextControl::StreamClippingRect +// --------------------------------------------------------------------------- +// +TRect CVtUiContextControl::StreamClippingRect() const + { + __VTPRINTENTER( "CtxCtrl.StreamClippingRect" ) + __VTPRINTEXIT( "CtxCtrl.StreamClippingRect" ) + return iStreamRect; + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::DrawColoredBackground +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::DrawColoredBackground( CWindowGc& aGc ) const + { + __VTPRINTENTER( "CtxCtrl.DrawColoredBackground" ) + CVtUiVideoControlBase::DrawColoredBackground( aGc ); + // Draw background image + CFbsBitmap* bg = NULL; + CFbsBitmap* bgMask = NULL; + BitmapManager().GetBitmaps( iBackgroundId, bg, bgMask ); + if ( bg ) + { + const TPoint origin; + const TRect rect( origin, bg->SizeInPixels() ); + if ( bgMask ) + { + aGc.BitBltMasked( origin, bg, rect, bgMask, ETrue ); + } + else + { + aGc.BitBlt( origin, bg ); + } + } + __VTPRINTEXIT( "CtxCtrl.DrawColoredBackground" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContextControl::BlindImage +// --------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiContextControl::BlindImage() const + { + __VTPRINTENTER( "CtxCtrl.BlindImage" ) + __VTPRINTEXIT( "CtxCtrl.BlindImage" ) + return Bitmap( iBlindId ); + } + +// --------------------------------------------------------------------------- +// CVtUiContextControl::BlindMask +// --------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiContextControl::BlindMask() const + { + __VTPRINTENTER( "CtxCtrl.BlindImage" ) + __VTPRINTEXIT( "CtxCtrl.BlindImage" ) + return Bitmap( iBlindMaskId ); + } + +// --------------------------------------------------------------------------- +// CVtUiContextControl::BlindBlitPosition +// --------------------------------------------------------------------------- +// +TPoint CVtUiContextControl::BlindBlitPosition() const + { + __VTPRINTENTER( "CtxCtrl.BlindBlitPosition" ) + __VTPRINTEXIT( "CtxCtrl.BlindBlitPosition" ) + return iBlindRect.iTl; + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::CVtUiContextControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiContextControl::CVtUiContextControl( + CVtUiBitmapManager& aBitmapManager, + CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates ) + : CVtUiVideoControlBase( aBitmapManager ), + iAppUi( aAppUi ), + iUiStates( aUiStates ) + { + __VTPRINTENTER( "CtxCtrl.ctor" ) + SetRenderingHint( ENoWaitingText ); + SetRenderingHint( EColoredBackground ); + __VTPRINTEXIT( "CtxCtrl.ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::ConstructL() + { + __VTPRINTENTER( "CtxCtrl.ConstructL" ) + BaseConstructL(); + iBackgroundId = + BitmapManager().AddBitmapsL( + EVtUiBitmap_qgn_graf_call_video_out_bg, + EVtUiBitmap_qgn_graf_call_video_out_bg_mask, + EFalse ); + BitmapManager().SetAspectRatio( iBackgroundId, EFalse ); + iBlindId = + BitmapManager().AddBitmapL( + EVtUiBitmap_qgn_indi_call_video_blind_out, + EFalse ); + BitmapManager().SetAspectRatio( iBlindId, EFalse ); + iBlindMaskId = + BitmapManager().AddBitmapL( + EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon, + EFalse ); + BitmapManager().SetAspectRatio( iBlindMaskId, EFalse ); + SetNonFocusing(); + if ( iAppUi.EventMonitor() ) + { + iAppUi.EventMonitor()->AddObserverL( this ); + } + + iOkToSwapOnButtonUp = ETrue; + __VTPRINTEXIT( "CtxCtrl.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::HandleWsEventL +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ) + { + __VTPRINTENTER( "CVtUiContextControl.HandleWsEventL" ) + if( aEvent.Type() == EEventPointer ) + { + // Touch outside of volume popup, close volume popup + if ( aEvent.Pointer()->iType == TPointerEvent::EButton1Down ) + { + if ( aDestination == this ) + { + iOkToSwapOnButtonUp = !iUiStates.IsZoomModeOn() && + !iUiStates.IsCaptureModeOn() && + !iUiStates.IsContrastModeOn() && + !iUiStates.IsBrightnessModeOn() && + !iUiStates.IsVolumeModeOn(); + SetGloballyCapturing( ETrue ); + SetPointerCapture( ETrue ); + } + } + } + __VTPRINTEXIT( "CVtUiContextControl.HandleWsEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiContextControl::LayoutRemoteVideo +// ----------------------------------------------------------------------------- +// +void CVtUiContextControl::LayoutRemoteVideo() + { + __VTPRINTENTER( "CVtUiContextControl.LayoutRemoteVideo" ) + if ( NULL != iRemoteVideoControl ) + { + TRect rectRemoteVideo(StreamClippingRect()); + rectRemoteVideo.Move(PositionRelativeToScreen()); + iRemoteVideoControl->SetExtent(rectRemoteVideo.iTl,rectRemoteVideo.Size()); + } + __VTPRINTEXIT( "CVtUiContextControl.LayoutRemoteVideo" ) + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiDoc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiDoc.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2004 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 the CVtUiDoc document class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiDoc.h" +#include "CVtUiAppUi.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiDoc::CVtUiDoc +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiDoc::CVtUiDoc( CEikApplication& aApp ) + : CAknDocument( aApp ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiDoc::CreateAppUiL +// Creates application UI instance. +// ----------------------------------------------------------------------------- +// +CEikAppUi* CVtUiDoc::CreateAppUiL() + { + return new ( ELeave ) CVtUiAppUi; + } + +// ----------------------------------------------------------------------------- +// CVtUiDoc::UpdateTaskNameL +// Creates application UI instance. +// ----------------------------------------------------------------------------- +// +void CVtUiDoc::UpdateTaskNameL( CApaWindowGroupName* aWgName ) + { + CAknDocument::UpdateTaskNameL( aWgName ); + aWgName->SetHidden( ETrue ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiExecuteCmdDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiExecuteCmdDialog.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,312 @@ +/* +* Copyright (c) 2004-2006 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 the CVtUiExecuteCmdDialog class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiExecuteCmdDialog.h" +#include "MVtUiEngineCommandManager.h" +#include +#include + +// MODULE DATA STRUCTURES + +/** +* Active object to perform asynchronous commands. +* @since Series 60 2.6 +*/ +class CVtUiExecuteCmdDialog::CActiveCmd + : public CActive + { + public: // Constructors and destructor + + /** + * Constructor. + */ + CActiveCmd( + CVtUiExecuteCmdDialog& aDialog, + MVtEngCommandHandler& aCommandHandler, + TVtEngCommandId aCommand, + TDesC8* aParams ); + + /** + * Destructor. + */ + ~CActiveCmd(); + + public: // New functions + + /** + * Starts active object. Command will be performed in RunL. + */ + void Start(); + + /** + * Checks if command has been performed. + * @return ETrue if command has been performed. + */ + TBool CommandPerformed() const; + + private: + + /** + * @see CActive::RunL + */ + void RunL(); + + /** + * @see CActive::DoCancel. + */ + void DoCancel(); + + /** + * @see CActive::RunError. + */ + TInt RunError( TInt aResult ); + + private: + + // Ref to dialog. + CVtUiExecuteCmdDialog& iDialog; + + // Ref to command handler. + MVtEngCommandHandler& iCommandHandler; + + // Command to be executed. + TVtEngCommandId iCommand; + + // Owned parameters. + TDesC8* iCommandParams; + + // ETrue if command has been performed. + TBool iCommandPerformed; + + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CVtUiExecuteCmdDialog +// ----------------------------------------------------------------------------- +// +CVtUiExecuteCmdDialog::CVtUiExecuteCmdDialog( + CEikDialog** aSelfPtr, + MVtEngCommandHandler& aCommandHandler, + MVtUiEngineCommandManager& aCommandManager ) + : CVtUiBlankDialog( aSelfPtr ), + iCommandHandler( aCommandHandler ), + iCommandManager( aCommandManager ) + { + __VTPRINT2( DEBUG_GEN, "Ui.Dlg.Ctor this=%d", (TInt)this ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::~CVtUiExecuteCmdDialog +// ----------------------------------------------------------------------------- +// +CVtUiExecuteCmdDialog::~CVtUiExecuteCmdDialog() + { + __VTPRINTENTER( "VtUiExCmdDlg.~" ) + __VTPRINT2( DEBUG_GEN, "VtUiExCmdDlg.~ this=%d", (TInt)this ) + if ( iActiveCmd ) + { + if ( !iCommandCompleted && iActiveCmd->CommandPerformed() ) + { + iCommandHandler.CancelCommand( iCommand ); // ignore error + } + } + delete iCommandParams; + delete iActiveCmd; + + iCommandManager.RemoveObserver( *this ); + __VTPRINTEXIT( "VtUiExCmdDlg.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::ExecuteCmdLD +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::ExecuteCmdLD( + const TVtEngCommandId aCommandId, + TDesC8* aParams, + TRequestStatus* aRequest ) + { + __VTPRINTENTER( "VtUiExCmdDlg.ExecuteCmd" ) + __VTPRINT2( DEBUG_GEN, "Ui.Dlg.Exec this=%d", (TInt)this ) + iCommand = aCommandId; + CleanupStack::PushL( this ); + if ( aParams ) + { + iCommandParams = aParams->AllocL(); + } + + iCommandManager.AddObserverL( *this ); + CleanupStack::Pop( this ); + + CVtUiBlankDialog::ExecuteDialogLD( aRequest ); + __VTPRINTEXIT( "VtUiExCmdDlg.ExecuteCmd" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::PostLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::PostLayoutDynInitL() + { + __VTPRINTENTER( "VtUiExCmdDlg.PostL" ) + iActiveCmd = + new ( ELeave ) CActiveCmd( + *this, iCommandHandler, iCommand, iCommandParams ); + iActiveCmd->Start(); + __VTPRINTEXITR( "VtUiExCmdDlg.PostL this=%d", (TInt)this ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ) + { + __VTPRINTENTER( "VtUiExCmdDlg.HandleVTCommandPerformed" ) + __VTPRINT2( DEBUG_GEN, "VtUiExCmdDlg.cmd.%d", aCommand ) + __VTPRINT2( DEBUG_GEN, "VtUiExCmdDlg.err.%d", aError ) + if ( iActiveCmd && ( aCommand == iCommand ) ) + { + if ( iActiveCmd->CommandPerformed() && !iCommandCompleted ) + { + __VTPRINT( DEBUG_GEN, "VtUiExCmdDlg.match" ) + iCommandCompleted = ETrue; + // Corrupted images may leave during initialization, thus we have + // to mask out errors when they happen during share initialize. + // Error code is handled correctly in CVtUiAppUi::CEventObserver:: + // HandleVTCommandPerformedL() method, thus it will not be ignored. + if ( aCommand == KVtEngInitializeShareImage ) + { + Complete( KErrNone ); + } + else + { + Complete( aError ); + } + } + } + __VTPRINTEXIT( "VtUiExCmdDlg.HandleVTCommandPerformed" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::HandleExecuteFailed +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::HandleExecuteFailed( TInt aResult ) + { + __VTPRINT3( DEBUG_GEN, "VtUiExCmdDlg.Fail this=%d res=%d", + (TInt)this, aResult ) + Complete( aResult ); + } + +// Implementation of CVtUiExecuteCmdDialog::CActiveCmd: + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::CActiveCmd +// ----------------------------------------------------------------------------- +// +CVtUiExecuteCmdDialog::CActiveCmd::CActiveCmd( + CVtUiExecuteCmdDialog& aDialog, + MVtEngCommandHandler& aCommandHandler, + TVtEngCommandId aCommand, + TDesC8* aParams) + : CActive( CActive::EPriorityHigh ), + iDialog( aDialog ), + iCommandHandler( aCommandHandler ), + iCommand( aCommand ), + iCommandParams( aParams ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::~CActiveCmd +// ----------------------------------------------------------------------------- +// +CVtUiExecuteCmdDialog::CActiveCmd::~CActiveCmd() + { + __VTPRINT2( DEBUG_GEN, "VtUiExCmdDlgCmd.Dtor this=%d", (TInt)this ) + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::Start +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::CActiveCmd::Start() + { + __VTPRINTENTER( "VtUiExCmdDlgCmd.Start" ) + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive(); + __VTPRINTEXITR( "VtUiExCmdDlgCmd.Start this=%d", (TInt)this ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::CommandPerformed +// ----------------------------------------------------------------------------- +// +TBool CVtUiExecuteCmdDialog::CActiveCmd::CommandPerformed() const + { + __VTPRINT3( DEBUG_GEN, "VtUiExCmdDlgCmd.Perf this=%d,cmd=%d", + (TInt)this, iCommandPerformed ) + return iCommandPerformed; + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::RunL +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::CActiveCmd::RunL() + { + __VTPRINTENTER( "VtUiExCmdDlgCmd.RunL" ) + iCommandHandler.ExecuteL( iCommand, iCommandParams ); + iCommandPerformed = ETrue; + __VTPRINTEXITR( "VtUiExCmdDlgCmd.RunL this=%d", (TInt)this ) + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtUiExecuteCmdDialog::CActiveCmd::DoCancel() + { + __VTPRINT2( DEBUG_GEN, "VtUiExCmdDlgCmd.DoCnl this=%d", (TInt)this ) + // Request is completed immediately. + } + +// ----------------------------------------------------------------------------- +// CVtUiExecuteCmdDialog::CActiveCmd::RunError +// ----------------------------------------------------------------------------- +// +TInt CVtUiExecuteCmdDialog::CActiveCmd::RunError( TInt aResult ) + { + __VTPRINTENTER( "VtUiExCmdDlgCmd.RunError" ) + // Exception was raised in RunL. Inform the dialog to close itself. + iDialog.HandleExecuteFailed( aResult ); + __VTPRINTEXITR( "VtUiExCmdDlgCmd.RunError this=%d", (TInt)this ) + return KErrNone; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiMainControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiMainControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,245 @@ +/* +* Copyright (c) 2004 - 2006 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 the CVtUiMainControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiMainControl.h" +#include "VtUiLayout.h" +#include +#include +#include +#include +#include "CVtUiAppUi.h" +#include "tvtuistates.h" +#include +#include "tVtuifeaturevariation.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::NewL +// ----------------------------------------------------------------------------- +CVtUiMainControl* CVtUiMainControl::NewL( CVtUiBitmapManager& aBitmapManager, + TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "MainCtrl.NewL" ) + CVtUiMainControl* self = + new ( ELeave ) CVtUiMainControl( aBitmapManager, aUiStates ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "MainCtrl.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::CVtUiMainControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiMainControl::CVtUiMainControl( CVtUiBitmapManager& aBitmapManager, + TVtUiStates& aUiStates ) : CVtUiVideoControlBase( aBitmapManager ), + iUiStates ( aUiStates ) + { + __VTPRINTENTER( "MainCtrl.Ctor" ) + SetRenderingHint( ESkinnedBackground ); + __VTPRINTEXIT( "MainCtrl.Ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiMainControl::ConstructL() + { + __VTPRINTENTER( "MainCtrl.ConstructL" ) + BaseConstructL(); + iBlindId = + BitmapManager().AddBitmapL( + EVtUiBitmap_qgn_indi_call_video_blind_in, + EFalse ); + BitmapManager().SetAspectRatio( iBlindId, EFalse ); + iBlindMaskId = + BitmapManager().AddBitmapL( + EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon, + EFalse ); + BitmapManager().SetAspectRatio( iBlindMaskId, EFalse ); + __VTPRINTEXIT( "MainCtrl.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::~CVtUiMainControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiMainControl::~CVtUiMainControl() + { + __VTPRINTENTER( "MainCtrl.~" ) + BitmapManager().RemoveBitmap( iBlindId ); + BitmapManager().RemoveBitmap( iBlindMaskId ); + __VTPRINTEXIT( "MainCtrl.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::HandleSizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiMainControl::HandleSizeChanged() + { + __VTPRINTENTER( "MainCtrl.HandleSizeChanged" ) + const TRect mainPaneRect( Rect() ); + + // blind icon and mask + TAknWindowLineLayout blind; + VtUiLayout::GetSecondWindowDisabledIconLayout( blind ); + iBlindLayout.LayoutRect( mainPaneRect, blind ); + const TSize blindSize( iBlindLayout.Rect().Size() ); + BitmapManager().SetSize( iBlindId, blindSize ); + BitmapManager().SetSize( iBlindMaskId, blindSize ); + + // stream + TAknWindowLineLayout stream; + VtUiLayout::GetSecondWindowStreamWholeLayout( stream, + iUiStates.IsToolbarAvailable(), iSQCifRemote ); + + iStreamLayoutRect.LayoutRect( mainPaneRect, stream ); + + __VTPRINTEXIT( "MainCtrl.HandleSizeChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::DrawWaitingText +// ----------------------------------------------------------------------------- +// +TBool CVtUiMainControl::DrawWaitingText( CWindowGc& aGc ) const + { + __VTPRINTENTER( "MainCtrl.DrawWaitingText" ) + TBool wasDrawn( EFalse ); + if ( !iSQCifRemote) + { + wasDrawn = CVtUiVideoControlBase::DrawWaitingText( aGc ); + } + __VTPRINTEXITR( "MainCtrl.DrawWaitingText %d", wasDrawn ) + return wasDrawn; + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::StreamBlitPosition +// ----------------------------------------------------------------------------- +// +TPoint CVtUiMainControl::StreamBlitPosition() const + { + __VTPRINTENTER( "MainCtrl.StreamBlitPosition" ) + const TSize videoSize( iStreamBitmap->SizeInPixels() ); + const TSize streamSize( iStreamLayoutRect.Rect().Size() ); + __VTPRINTEXIT( "MainCtrl.StreamBlitPosition" ) + return AdjustPointForDP( iStreamLayoutRect.Rect().iTl ); + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::StreamClippingRect +// ----------------------------------------------------------------------------- +// +TRect CVtUiMainControl::StreamClippingRect() const + { + __VTPRINTENTER( "MainCtrl.StreamClippingRect" ) + __VTPRINTEXIT( "MainCtrl.StreamClippingRect" ) + return AdjustRectForDP( iStreamLayoutRect.Rect() ); + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::BlindImage +// ----------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiMainControl::BlindImage() const + { + __VTPRINTENTER( "MainCtrl.BlindImage" ) + __VTPRINTEXIT( "MainCtrl.BlindImage" ) + return Bitmap( iBlindId ); + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::BlindMask +// ----------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiMainControl::BlindMask() const + { + __VTPRINTENTER( "MainCtrl.BlindMask" ) + __VTPRINTEXIT( "MainCtrl.BlindMask" ) + return Bitmap( iBlindMaskId ); + } + +// --------------------------------------------------------------------------- +// CVtUiMainControl::BlindBlitPosition +// --------------------------------------------------------------------------- +// +TPoint CVtUiMainControl::BlindBlitPosition() const + { + __VTPRINTENTER( "CVtUiMainControl.BlindBlitPosition" ) + __VTPRINTEXIT( "CVtUiMainControl.BlindBlitPosition" ) + return iBlindLayout.Rect().iTl; + } + +// --------------------------------------------------------------------------- +// CVtUiMainControl::WaitingTextLayout +// --------------------------------------------------------------------------- +// +TAknTextLineLayout CVtUiMainControl::WaitingTextLayout( TInt aLine ) + { + __VTPRINTENTER( "MainCtrl.WaitingTextLayout" ) + TAknTextLineLayout textLayout; + VtUiLayout::GetSecondWindowWaitingTextLayout( textLayout, + aLine ? EFalse : ETrue ); + __VTPRINTEXIT( "MainCtrl.WaitingTextLayout" ) + return textLayout; + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::SupportSQCif +// ----------------------------------------------------------------------------- +// +void CVtUiMainControl::SupportSQCif( TBool aIsSupported ) + { + __VTPRINTENTER( "MainCtrl.SupportSQCif" ) + const TBool layoutUpdateRequired( aIsSupported != iSQCifRemote ); + iSQCifRemote = aIsSupported; + if ( layoutUpdateRequired ) + { + HandleSizeChanged(); + } + __VTPRINTEXITR( "MainCtrl.SupportSQCif %d", iSQCifRemote ) + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::LayoutRemoteVideo +// ----------------------------------------------------------------------------- +// +void CVtUiMainControl::LayoutRemoteVideo( ) + { + __VTPRINTENTER( "MainCtrl.LayoutRemoteVideo" ) + if ( NULL != iRemoteVideoControl ) + { + TRect rectRemoteVideo(StreamClippingRect()); + rectRemoteVideo.Move(PositionRelativeToScreen()); + iRemoteVideoControl->SetExtent(rectRemoteVideo.iTl,rectRemoteVideo.Size()); + } + __VTPRINTEXIT( "MainCtrl.LayoutRemoteVideo" ) + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiMutedControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiMutedControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2004 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 the CVtUiMutedControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiMutedControl.h" +#include "VtUiLayout.h" +#include +#include +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::CVtUiMutedControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiMutedControl::CVtUiMutedControl() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiMutedControl::ConstructL() + { + HBufC* mutedText = + StringLoader::LoadLC( R_VIDEOTELUI_QTN_INCAL_MUTED_PANE ); + + iMutedLabel = new ( ELeave ) CEikLabel; + iMutedLabel->SetContainerWindowL( *this ); + iMutedLabel->SetTextL( *mutedText ); + + CleanupStack::PopAndDestroy( mutedText ); + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::~CVtUiMutedControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiMutedControl::~CVtUiMutedControl() + { + AknsUtils::DeregisterControlPosition( this ); + + delete iMutedLabel; + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CVtUiMutedControl::HandleResourceChange( + TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + + if ( aType == KAknsMessageSkinChange ) + { + SizeChanged(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiMutedControl::Draw( const TRect& /*aRect*/ ) const + { + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiMutedControl::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + + TRect naviPane( Rect() ); + if ( naviPane.IsEmpty() ) + { + return; + } + + TAknTextLineLayout label; + VtUiLayout::GetMutedTextLayout( label ); + + AknLayoutUtils::LayoutLabel( iMutedLabel, naviPane, label ); + + // Update label color + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb skinColor; + + TInt error = + AknsUtils::GetCachedColor( + skin, + skinColor, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG2 ); + + if ( ( error == KErrNone ) && iMutedLabel ) + { + // Ignore error + TRAP_IGNORE( + iMutedLabel->OverrideColorL( EColorLabelText, skinColor ) ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiMutedControl::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::CountComponentControls +// ----------------------------------------------------------------------------- +// +TInt CVtUiMutedControl::CountComponentControls() const + { + return 1; // one label + } + +// ----------------------------------------------------------------------------- +// CVtUiMutedControl::ComponentControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CVtUiMutedControl::ComponentControl( + TInt /*aIndex*/ ) const + { + return iMutedLabel; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiNaviPane.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiNaviPane.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,362 @@ +/* +* Copyright (c) 2004-2006 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 the CVtUiNaviPane class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiNaviPane.h" +#include "CVtUiNaviPaneControl.h" +#include "CVtUiMutedControl.h" +#include "CVtUiAppUi.h" + +#include +#include +#include +#include +#include +#include "tVtuifeaturevariation.h" +#include +#include + +// CONSTANTS + +// Timeout after which voice volume bar is switched back to indicators. +const TInt KVtUiVoiceVolumeTimeout = 2000000; + +// LOCAL FUNCTION PROTOTYPES + +/** +* Creates navigation decorator. +* @param aNaviPane reference to navi pane. +* @param aControl control to be decorated, ownership passed. +* @return new navigation decorator instance. +*/ +CAknNavigationDecorator* CreateDecoratorL( + CAknNavigationControlContainer& aNaviPane, + CCoeControl* aControl ); + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CreateDecoratorL Creates navigation decorator. +// Returns: new navigation decorator instance. +// ----------------------------------------------------------------------------- +// +CAknNavigationDecorator* CreateDecoratorL( + CAknNavigationControlContainer& aNaviPane, + CCoeControl* aControl ) + { + CAknNavigationDecorator* decoratedFolder = + CAknNavigationDecorator::NewL( + &aNaviPane, + aControl, + CAknNavigationDecorator::ENotSpecified ); + + CleanupStack::PushL( decoratedFolder ); + decoratedFolder->SetContainerWindowL( aNaviPane ); + aControl->SetContainerWindowL( *decoratedFolder ); + CleanupStack::Pop( decoratedFolder ); + + decoratedFolder->MakeScrollButtonVisible( EFalse ); + + return decoratedFolder; + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::CVtUiNaviPane +// ----------------------------------------------------------------------------- +// +CVtUiNaviPane::CVtUiNaviPane( + CAknNavigationControlContainer& aNaviPane, + CVtUiAppUi& aAppUi ) + : CActive( CActive::EPriorityStandard ), + iNaviPane( aNaviPane ), + iAppUi ( aAppUi ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::ConstructL( ) + { + // Create the navi pane indicator (call duration). + { + CVtUiNaviPaneControl* naviControl = + new ( ELeave ) CVtUiNaviPaneControl( *this ); + CleanupStack::PushL( naviControl ); + naviControl->ConstructL(); + CleanupStack::Pop( naviControl ); + + iMainIndicators = + CreateDecoratorL( iNaviPane, naviControl ); + + iNaviPaneControl = naviControl; + } + + // Create muted indicator. + { + HBufC* mutedText = + StringLoader::LoadLC( R_VIDEOTELUI_QTN_INCAL_MUTED_PANE ); + + iMutedIndicator = iNaviPane.CreateNavigationLabelL( *mutedText ); + + CleanupStack::PopAndDestroy( mutedText ); + } + + User::LeaveIfError( iTimer.CreateLocal() ); + + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::NewL +// ----------------------------------------------------------------------------- +// +CVtUiNaviPane* CVtUiNaviPane::NewL( + CAknNavigationControlContainer& aNaviPane, + CVtUiAppUi& aAppUi ) + { + CVtUiNaviPane* self = + new ( ELeave ) CVtUiNaviPane( + aNaviPane, aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::~CVtUiNaviPane +// ----------------------------------------------------------------------------- +// +CVtUiNaviPane::~CVtUiNaviPane() + { + Cancel(); + + delete iMainIndicators; + delete iMutedIndicator; + + iTimer.Close(); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::SetCurrentSpeaker +// Parameter aLoudspeaker defines which speaker is used. +// ETrue for loudspeaker, EFalse for handset. +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::SetCurrentSpeaker( const TBool aLoudspeaker ) + { + if( iLoudspeaker != aLoudspeaker ) + { + Cancel(); + if( iCallDurationEnabled || iMicrophoneMuted ) + { + iSliderType = ENone; + } + } + iLoudspeaker = aLoudspeaker; + } + + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::SetMuted +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::SetMuted( + const TBool aStatus ) + { + __VTPRINT2( DEBUG_GEN, "NaviPane.SetMuted.aStatus=%d", aStatus ) + if( iMicrophoneMuted != aStatus ) + { + Cancel(); + // if volume indicator is shown when audio is umuted + // volume indicator won't be dismissed and call duration + // will not be shown + if( iCallDurationEnabled || aStatus ) + { + iSliderType = ENone; + } + } + iMicrophoneMuted = aStatus; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::SetCallDuration +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::SetCallDuration( + const TTimeIntervalSeconds& aDuration, + const TBool aEnabled ) + { + iCallDurationEnabled = aEnabled; + iNaviPaneControl->SetCallDuration( aDuration, aEnabled ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::CommitL +// +// Priority order of different navi pane elements is the following: +// 1. Muted indicator +// 2. Main indicators (call duration) +// +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::CommitL() + { + CAknNavigationDecorator* selected = DefaultIndicator(); + + PushL( selected ); + + // If current is main indicators, then update now. + if ( iCurrent == iMainIndicators ) + { + iNaviPaneControl->CommitL(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::GetSpeakerVolume +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::GetSpeakerVolume( + const TBool , + TInt& aValue ) const + { + aValue = 0; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::HandleResourceChange( + TInt aType ) + { + // iCurrent will get event through navi pane. + if ( iMainIndicators != iCurrent ) + { + iMainIndicators->HandleResourceChange( aType ); + iNaviPaneControl->HandleResourceChange( aType ); + } + if ( iMutedIndicator != iCurrent ) + { + iMutedIndicator->HandleResourceChange( aType ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::DoCancel +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::DoCancel() + { + iTimer.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::RunL +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::RunL() + { + iSliderType = ENone; + CAknNavigationDecorator* selected = DefaultIndicator(); + if ( selected ) + { + PushL( selected ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::PushAfterTimeout +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::PushAfterTimeout() + { + Cancel(); + iTimer.After( iStatus, KVtUiVoiceVolumeTimeout ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::PushL +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPane::PushL( CAknNavigationDecorator* aNew ) + { + if ( !aNew ) + { + if ( iCurrent ) + { + iNaviPane.Pop(); + iCurrent = NULL; + } + else + { + iNaviPane.PushDefaultL(); + } + } + else if ( iCurrent != aNew ) + { + // If current not defined, then push to navi pane. This should be called + // during construction. + if ( !iCurrent ) + { + iNaviPane.PushL( *aNew ); + iCurrent = aNew; + } + // Otherwise replace the old one. + else + { + iNaviPane.ReplaceL( *iCurrent, *aNew ); + iCurrent = aNew; + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::DefaultIndicator +// Returns default indicator. Note that this does not include temporary +// zoom indicator. +// ----------------------------------------------------------------------------- +// +CAknNavigationDecorator* CVtUiNaviPane::DefaultIndicator() const + { + CAknNavigationDecorator* selected = NULL; + + if ( IsActive() ) + { + selected = iMainIndicators; + } + else if ( iMicrophoneMuted && iSliderType != EVolume && iSliderType != EZoom ) + { + selected = iMutedIndicator; + } + else if ( iCallDurationEnabled && iSliderType != EVolume && iSliderType != EZoom ) + { + selected = iMainIndicators; + } + + return selected; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiNaviPaneControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiNaviPaneControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,256 @@ +/* +* Copyright (c) 2004, 2005 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 the CVtUiNaviPaneControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiNaviPaneControl.h" +#include "CVtUiNaviPane.h" +#include "VtUiLayout.h" +#include +#include + +// CONSTANTS + +// There are sixty seconds in one minute. +const TInt KVtUiOneMinuteInSeconds = 60; + +// There are sixty minutes in one hour. +const TInt KVtUiOneHourInSeconds = 3600; + +// Maximum duration is 99:59:59. +const TInt KVtUiMaxDurationInSeconds = + 99*KVtUiOneHourInSeconds + + 59*KVtUiOneMinuteInSeconds + + 59; + +// Amount of digits. +const TInt KVtUiDigits = 10; + +// Index of time separator. +const TInt KVtUiSeparatorTime = 0; + +// Index of hour separator. +const TInt KVtUiSeparatorHour = 1; + +// Index of minute separator. +const TInt KVtUiSeparatorMinute = 2; + +// Index of second separator. +const TInt KVtUiSeparatorSecond = 3; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::CVtUiNaviPaneControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiNaviPaneControl::CVtUiNaviPaneControl( CVtUiNaviPane& aNaviPane ) + : iNaviPane ( aNaviPane ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::~CVtUiNaviPaneControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiNaviPaneControl::~CVtUiNaviPaneControl() + { + AknsUtils::DeregisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::SetCallDuration +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::SetCallDuration( + const TTimeIntervalSeconds& aDuration, + const TBool aEnabled ) + { + iCallDurationEnabled = aEnabled; + iCallDuration = aDuration; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::CommitL +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::CommitL() + { + ReportEventL( MCoeControlObserver::EEventStateChanged ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::Draw( const TRect& /*aRect*/ ) const + { + CWindowGc& gc = SystemGc(); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + const TDesC& callDurationText = GetCallDurationText(); + if ( callDurationText.Length() ) + { + TRgb color = iCallDurationLayout.Color(); + // Color is not updated if it not found from the skin + AknsUtils::GetCachedColor( + skin, + color, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG2 ); + iCallDurationLayout.DrawText( gc, callDurationText, EFalse, color ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + TAknWindowLineLayout rect; + TRect parent( Rect() ); + if ( parent.IsEmpty() ) + { + return; + } + + TAknTextLineLayout text; + VtUiLayout::GetCallDurationTextLayout( text ); + iCallDurationLayout.LayoutText( parent, text ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::GetCallDurationText +// ----------------------------------------------------------------------------- +// +const TDesC& CVtUiNaviPaneControl::GetCallDurationText() const + { + iCallDurationBuffer.Zero(); + + if ( iCallDurationEnabled ) + { + TLocale locale; + + TInt durationInseconds = iCallDuration.Int(); + if ( durationInseconds > KVtUiMaxDurationInSeconds ) + { + durationInseconds = KVtUiMaxDurationInSeconds; + } + + const TInt hours = durationInseconds / KVtUiOneHourInSeconds; + const TInt secondsLeft = + durationInseconds - ( hours * KVtUiOneHourInSeconds ); + + const TInt minutes = secondsLeft / KVtUiOneMinuteInSeconds; + const TInt seconds = + secondsLeft - ( minutes * KVtUiOneMinuteInSeconds ); + + AppendChar( + iCallDurationBuffer, + locale.TimeSeparator( KVtUiSeparatorTime ) ); + + AppendNum( + iCallDurationBuffer, + hours ); + + AppendChar( + iCallDurationBuffer, + locale.TimeSeparator( KVtUiSeparatorHour ) ); + + AppendNum( + iCallDurationBuffer, + minutes ); + + AppendChar( + iCallDurationBuffer, + locale.TimeSeparator( KVtUiSeparatorMinute ) ); + + AppendNum( + iCallDurationBuffer, + seconds ); + + AppendChar( + iCallDurationBuffer, + locale.TimeSeparator( KVtUiSeparatorSecond ) ); + + // Convert numbers to display language. + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + iCallDurationBuffer ); + } + + return iCallDurationBuffer; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::AppendChar +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::AppendChar( + TDes& aBuffer, + const TChar& aChar ) + { + if ( aChar ) + { + aBuffer.Append( aChar ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPaneControl::AppendNum +// ----------------------------------------------------------------------------- +// +void CVtUiNaviPaneControl::AppendNum( + TDes& aBuffer, + TInt aNumber ) + { + if ( aNumber < 0 ) + { + aNumber = 0; + } + + const TInt firstDigit = ( aNumber / KVtUiDigits ) % KVtUiDigits; + const TInt secondDigit = ( aNumber % KVtUiDigits ); + + aBuffer.AppendNum( firstDigit ); + aBuffer.AppendNum( secondDigit ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiNumberEntryActivationControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiNumberEntryActivationControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,176 @@ +/* +* Copyright (c) 2004 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 the CVtUiNumberEntryActivationControl +* control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiNumberEntryActivationControl.h" +#include "CVtUiAppUi.h" +#include "VtUiUtility.h" + +#include +#include +#include +#include + +// CONSTANTS + +// Control priority for the forwarder control. Above all other controls. +extern const TInt KVtUiNumberEntryActivationPriority = + ECoeStackPriorityEnvironmentFilter + 100; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::CVtUiNumberEntryActivationControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiNumberEntryActivationControl::CVtUiNumberEntryActivationControl( + CVtUiAppUi& aAppUi ) + : iAppUi( aAppUi ), iIsActive ( ETrue ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryActivationControl::ConstructL( const TRect& aRect ) + { + // Create invisible control. + CreateWindowL(); + MakeVisible( EFalse ); + SetRect( aRect ); + + iAppUi.AddToStackL( + this, + KVtUiNumberEntryActivationPriority, + ECoeStackFlagRefusesFocus ); + iAddedToStack = ETrue; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::~CVtUiNumberEntryActivationControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiNumberEntryActivationControl::~CVtUiNumberEntryActivationControl() + { + AknsUtils::DeregisterControlPosition( this ); + + if ( iAddedToStack ) + { + iAppUi.RemoveFromStack( this ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryActivationControl::Draw( const TRect& /*aRect*/ ) const + { + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryActivationControl::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryActivationControl::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiNumberEntryActivationControl::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + __VTPRINTENTER( "VtUiNumberEntryAC.OfferKeyEvent" ) + TBool numberEntryOpen = EFalse; + TChar dtmfTone; + TBool playDtmfTone = EFalse; + TKeyResponse keyResponse = EKeyWasNotConsumed; + if ( aKeyEvent.iScanCode == EStdKeyYes ) + { + // send key is always consumed to prevent event forwarding to telephony + // EStdKeyYes is scan code for send key, iCode cannot be used because + // it is valid only when event type is EEventKey (not in up/down events) + keyResponse = EKeyWasConsumed; + } + if ( !iIsActive ) + { + return keyResponse; + } + + if ( !aKeyEvent.iRepeats ) + { + if ( VtUiUtility::IsDTMFEvent( aKeyEvent, dtmfTone ) ) + { + numberEntryOpen = iAppUi.OpenNumberEntryL(); + playDtmfTone = ( aType == EEventKey ); + } + else if ( aKeyEvent.iCode == EKeyPhoneSend ) + { + keyResponse = iAppUi.HandlePhoneSendKeyL( aKeyEvent, aType ); + } + } + + if ( numberEntryOpen ) + { + iEikonEnv->SyncNotifyFocusObserversOfChangeInFocus(); + } + + // Tone actions are delegated to current state for validation. + if ( playDtmfTone ) + { + iAppUi.State().StartDtmfTone( dtmfTone ); + } + else if ( aType == EEventKeyUp ) + { + iAppUi.State().StopDtmfTone(); + } + __VTPRINTEXITR( "VtUiNumberEntryAC.OfferKeyEvent %d", keyResponse ) + return keyResponse; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryActivationControl::SetActive +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryActivationControl::SetActive( TBool aIsActive ) + { + iIsActive = aIsActive; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiRemoteVideoControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiRemoteVideoControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2004 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 the CVtUiRemoteVideoControl +* control class. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CVtUiRemoteVideoControl.h" +#include "CVtUiAppUi.h" +#include "CVtUiContextControl.h" + + +// Implementation of CVtUiRemoteVideoControl + +// ----------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::NewL +// ----------------------------------------------------------------------------- + +CVtUiRemoteVideoControl* CVtUiRemoteVideoControl::NewL( CVtUiAppUi& aAppUi) + { + __VTPRINTENTER( "RemoteVideoControl.NewL" ) + CVtUiRemoteVideoControl* self = new ( ELeave ) CVtUiRemoteVideoControl(aAppUi); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "RemoteVideoControl.NewL" ) + return self; + + } +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::~CVtUiRemoteVideoControl +// --------------------------------------------------------------------------- +// +CVtUiRemoteVideoControl::~CVtUiRemoteVideoControl() + { + __VTPRINTENTER( "RemoteVideoControl.~" ) + __VTPRINTEXIT( "RemoteVideoControl.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::CVtUiVideoControlBase +// --------------------------------------------------------------------------- +// +CVtUiRemoteVideoControl::CVtUiRemoteVideoControl( CVtUiAppUi& aAppUi): + iAppUi(aAppUi) + { + __VTPRINTENTER( "RemoteVideoControl.ctor" ) + __VTPRINTEXIT( "RemoteVideoControl.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::BaseConstructL +// --------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::ConstructL() + { + __VTPRINTENTER( "RemoteVideoControl.ConstructL" ) + CreateWindowL(); + SetExtent( TPoint(), TSize() ); + ActivateL(); + //Window().SetNonFading( ETrue ); + __VTPRINTEXIT( "RemoteVideoControl.ConstructL" ) + } + +RWindow& CVtUiRemoteVideoControl::GetRWindow() + { + __VTPRINTENTER( "RemoteVideoControl.GetRWindow" ) + __VTPRINTEXIT( "RemoteVideoControl.GetRWindow" ) + return Window(); + } + +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::HandleSizeChanged +// --------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::HandleSizeChanged() + { + __VTPRINTENTER( "RemoteVideoControl.HandleSizeChanged" ) + __VTPRINTEXIT( "RemoteVideoControl.HandleSizeChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::SizeChanged() + { + __VTPRINTENTER( "RemoteVideoControl.SizeChanged" ) + TPoint position = Position(); + TRect rect = Rect(); + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl position x:%d", position.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl position y:%d", position.iY ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iTl.x:%d", rect.iTl.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iTl.y:%d", rect.iTl.iY ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iBr.x:%d", rect.iBr.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iBr.y:%d", rect.iBr.iY ) + + __VTPRINTEXIT( "RemoteVideoControl.SizeChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::PositionChanged() + { + __VTPRINTENTER( "RemoteVideoControl.PositionChanged" ) + __VTPRINTEXIT( "RemoteVideoControl.PositionChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::Draw +// --------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::Draw( const TRect& ) const + { + __VTPRINTENTER( "RemoteVideoControl.Draw" ) + //DoDraw( SystemGc() ); + __VTPRINTEXIT( "RemoteVideoControl.Draw" ) + } + +// --------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::DoDraw +// --------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::DoDraw( CWindowGc& aGc ) const + { + __VTPRINTENTER( "RemoteVideoControl.DoDraw(gc)" ) + + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + aGc.SetPenStyle( CGraphicsContext::ENullPen ); + aGc.SetBrushColor( KRgbRed ); + aGc.DrawRect( Rect() ); + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + TPoint position = Position(); + TRect rect = Rect(); + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl position x:%d", position.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl position y:%d", position.iY ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iTl.x:%d", rect.iTl.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iTl.y:%d", rect.iTl.iY ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iBr.x:%d", rect.iBr.iX ) + __VTPRINT2( DEBUG_GEN, "CVtUiRemoteVideoControl rect iBr.y:%d", rect.iBr.iY ) + + __VTPRINTEXIT( "RemoteVideoControl.DoDraw(gc)" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::HandlePointerEventL( + const TPointerEvent& aPointerEvent) + { + __VTPRINTENTER( "RemoteVideoControl.HandlePointerEventL" ) + + if(iAppUi.ContextControl().RemoteVideoControl()) + { + iAppUi.ContextControl().HandlePointerEventL(aPointerEvent); + } + + __VTPRINTEXIT( "RemoteVideoControl.HandlePointerEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiRemoteVideoControl::HandleWsEventL +// ----------------------------------------------------------------------------- +// +void CVtUiRemoteVideoControl::HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ) + { + __VTPRINTENTER( "RemoteVideoControl.HandleWsEventL" ) + + if(iAppUi.ContextControl().RemoteVideoControl()) + { + iAppUi.ContextControl().HandleWsEventL( aEvent, aDestination ); + } + + __VTPRINTEXIT( "RemoteVideoControl.HandleWsEventL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/CVtUiZoomControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/CVtUiZoomControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,856 @@ +/* +* Copyright (c) 2004, 2005 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 the CVtUiZoomControl control class. +* +*/ + + + +// INCLUDE FILES +#include "CVtUiZoomControl.h" +#include "VtUiLayout.h" +#include +#include +#include "videotelui.hrh" + +#include +// CONSTANTS + +// Maximum amount of steps. +const TInt KVtUiZoomControlMaxSteps = 11; + +// Minimum amount of steps. +const TInt KVtUiZoomControlMinSteps = 1; + +// Fixed point position. +const TInt KVtUiZoomControlFixed = 16; + +// Fixed point number, corresponds to one. +const TInt KVtUiZoomControlOne = ( 1 << KVtUiZoomControlFixed ); + +// Amount of partial bits. It is expected that +// KVtUiZoomControlFixed >= KVtUiZoomControlPartial. +const TInt KVtUiZoomControlPartial = 8; + +// Maximum duration of zooming from minimum to maximum, in microseconds. +const TInt KVtUiZoomDurationMax = 2000000; + +// Maximum duration to increase zoom step by one, in microseconds. +const TInt KVtUiZoomStepDurationMax = 200000; + +// Index of transparent color. +const TInt KVtUiZoomTransparent = 0; + +// MODULE DATA STRUCTURES + +/** +* Inner class to hold everything related to one bitmap. +* @since Series 60 2.6 +*/ +class CVtUiZoomControl::CBitmap + : public CBase + { + public: // Constructors and destructors. + + /** + * Constructor. + */ + CBitmap(); + + /** + * Symbian OS constructor. + * @param aSize size of the bitmap. + * @param aMode display mode of the bitmap. + */ + void ConstructL( + const TSize& aSize, + const TDisplayMode aMode ); + + /** + * Destructor. + */ + ~CBitmap(); + + public: + + /** + * Returns bitmap. + * @return bitmap, ownership not passed. + */ + inline CFbsBitmap* Bitmap() const; + + /** + * Returns bitmap context. + * @return bitmap context, ownership not passed. + */ + inline CFbsBitGc* Context() const; + + private: + + // Owned bitmap. + CFbsBitmap* iBitmap; + + // Owned device. + CFbsBitmapDevice* iDevice; + + // Owned context. + CFbsBitGc* iContext; + + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CVtUiZoomControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiZoomControl::CVtUiZoomControl( CVtUiBitmapManager& aBitmapManager ) + : iBitmapManager( aBitmapManager ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::ConstructL() + { + iZoomDirId = + iBitmapManager.AddBitmapsL( + EVtUiBitmap_qgn_indi_zoom_dir, + EVtUiBitmap_qgn_indi_zoom_dir_mask, + ETrue ); + iZoomAreaId = + iBitmapManager.AddBitmapL( EVtUiBitmap_qgn_graf_zoom_area, EFalse ); + iBitmapManager.SetAspectRatio( iZoomAreaId, EFalse ); + + iZoomMinId = + iBitmapManager.AddBitmapL( EVtUiBitmap_qgn_indi_zoom_min, EFalse ); + iBitmapManager.SetAspectRatio( iZoomMinId, EFalse ); + + iZoomMaxId = + iBitmapManager.AddBitmapL( EVtUiBitmap_qgn_indi_zoom_max, EFalse ); + iBitmapManager.SetAspectRatio( iZoomMaxId, EFalse ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::~CVtUiZoomControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiZoomControl::~CVtUiZoomControl() + { + AknsUtils::DeregisterControlPosition( this ); + + iBitmapManager.RemoveBitmap( iZoomDirId ); + iBitmapManager.RemoveBitmap( iZoomAreaId ); + iBitmapManager.RemoveBitmap( iZoomMinId ); + iBitmapManager.RemoveBitmap( iZoomMaxId ); + + delete iZoomPartialMask; + delete iZoomPartialShade; + delete iZoomPartialShadeMask; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::SetZoomParams +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::SetZoomParams( + const TInt aStepCount, + const TInt aCurrentStep ) + { + iCurrentZoomStep = aCurrentStep; + iMaxZoomStep = aStepCount; + if ( iMaxZoomStep < 0 ) + { + iMaxZoomStep = 0; + } + iCurrentZoomStep = Max( Min( iCurrentZoomStep, iMaxZoomStep ), 0 ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CommitL +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::CommitL() + { + ReportEventL( MCoeControlObserver::EEventStateChanged ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::IsZoomEnabled +// ----------------------------------------------------------------------------- +// +TBool CVtUiZoomControl::IsZoomEnabled() const + { + return ( iMaxZoomStep > 0 ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::GetZoomParams +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::GetZoomParams( + TInt& aStepCount, + TInt& aCurrentStep ) const + { + aStepCount = iMaxZoomStep; + aCurrentStep = iCurrentZoomStep; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::UpdateZoomL +// ----------------------------------------------------------------------------- +// +TBool CVtUiZoomControl::UpdateZoomL() + { + const TInt oldZoomStep = iCurrentZoomStep; + if ( iZoomDirection ) + { + __VTPRINT( DEBUG_GEN, "VtUiZmCtl.UpdZoom" ) + TTime timeNow; + timeNow.UniversalTime(); + + const TTimeIntervalMicroSeconds duration = + timeNow.MicroSecondsFrom( iZoomStartTime ); + + if ( duration >= TInt64( KVtUiZoomDurationMax ) ) + { + // Duration is over maximum, so we can stop zooming. + if ( iZoomDirection > 0 ) + { + iCurrentZoomStep = iMaxZoomStep; + } + else + { + iCurrentZoomStep = 0; + } + + iZoomDirection = 0; + } + else if ( duration < TInt64( 0 ) ) + { + // Clock has been changed. Stop zooming. + iZoomDirection = 0; + } + else + { + // Zoom is increased at least by one step per 0.2 seconds. + TInt64 minimum( duration.Int64() ); + minimum /= KVtUiZoomStepDurationMax; + + // Zoom is increased from minimum to maximum in 2 seconds. + TInt64 maximum( duration.Int64() ); + maximum *= iMaxZoomStep; + maximum /= KVtUiZoomDurationMax; + + // Select maximum. + TInt zoomStepDelta = + iZoomDirection * Max( I64INT( minimum ), I64INT( maximum ) ); + TInt zoomStep = iZoomStepStart + zoomStepDelta; + + // If minimum has been reached, zooming can be stopped. + if ( zoomStep < 0 ) + { + zoomStep = 0; + iZoomDirection = 0; + } + // If maximum has been reached, zooming can be stopped. + if ( zoomStep > iMaxZoomStep ) + { + zoomStep = iMaxZoomStep; + iZoomDirection = 0; + } + + iCurrentZoomStep = zoomStep; + } + __VTPRINT( DEBUG_GEN, "VtUiZmCtl.chk" ) + } + + const TBool updateNeeded = ( oldZoomStep != iCurrentZoomStep ); + if ( updateNeeded ) + { + __VTPRINT( DEBUG_GEN, "VtUiZmCtl.upd" ) + ReportEventL( MCoeControlObserver::EEventStateChanged ); + } + + return updateNeeded; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::StopZoom +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::StopZoom() + { + iZoomDirection = 0; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiZoomControl::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + TKeyResponse response = EKeyWasNotConsumed; + + if ( aKeyEvent.iScanCode == EStdKeyUpArrow || + aKeyEvent.iScanCode == EStdKeyDownArrow || + aKeyEvent.iCode == EKeyZoomIn || + aKeyEvent.iCode == EKeyZoomOut ) + { + switch ( aType ) + { + case EEventKey: + { + TInt direction = +1; + if ( aKeyEvent.iScanCode == EStdKeyDownArrow || + aKeyEvent.iCode == EKeyZoomOut ) + { + direction = -1; + } + + if ( !aKeyEvent.iRepeats ) + { + // Update start parameters. + iZoomDirection = direction; + iZoomStepStart = iCurrentZoomStep + direction; + iZoomStepStart = Min( iZoomStepStart, iMaxZoomStep ); + iZoomStepStart = Max( iZoomStepStart, 0 ); + iZoomStartTime.UniversalTime(); + } + + (void)UpdateZoomL(); + } + break; + + case EEventKeyUp: + // Stop zooming. + iZoomDirection = 0; + break; + + default: + // Do nothing. + break; + } + + response = EKeyWasConsumed; + } + + return response; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::HandleResourceChange( + TInt aType ) + { + if ( aType == KAknsMessageSkinChange ) + { + // We must refresh partial bitmap upon next redraw. + iZoomMaskPartial = KErrNotFound; + iZoomMaskRow = KErrNotFound; + } + + CCoeControl::HandleResourceChange( aType ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::Draw +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::Draw( const TRect& /*aRect*/ ) const + { + __VTPRINT( DEBUG_GEN, "VtUiZmCtl.Draw" ) + iBitmapManager.SetSizeAndColor( + iZoomDirId, + iZoomDirLayout.Rect().Size(), + iZoomDirLayout.Color() ); + iBitmapManager.SetSize( + iZoomAreaId, + iZoomAreaLayout.Rect().Size() ); + iBitmapManager.SetSize( + iZoomMinId, + iZoomAreaLayout.Rect().Size() ); + iBitmapManager.SetSize( + iZoomMaxId, + iZoomAreaLayout.Rect().Size() ); + + CFbsBitmap* maxBitmap = NULL; + CFbsBitmap* minBitmap = NULL; + CFbsBitmap* areaBitmap = NULL; + iBitmapManager.GetBitmap( iZoomMaxId, maxBitmap ); + iBitmapManager.GetBitmap( iZoomMinId, minBitmap ); + iBitmapManager.GetBitmap( iZoomAreaId, areaBitmap ); + + TInt full; + TInt partial; + TRect drawRect; + TPoint drawPos; + + DetermineSteps( full, partial ); + if ( areaBitmap && partial && ( full < KVtUiZoomControlMaxSteps ) ) + { + // First generate bitmaps, so that drawing can be done + // quickly in sequence. + GetPositionAndRect( + drawPos, + drawRect, + full + 1 ); + + if ( !GenerateZoomMaskBitmap( + areaBitmap, + partial, + drawRect.iTl.iY, + drawRect.Size() ) ) + { + // If zoom mask generation fails, then we have no choice + // than not to draw. + partial = 0; + } + } + + CWindowGc& gc = SystemGc(); + gc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + // Draw zoom direction indicator: + + CFbsBitmap* zoomDirBitmap = NULL; + CFbsBitmap* zoomDirMask = NULL; + iBitmapManager.GetBitmaps( iZoomDirId, zoomDirBitmap, zoomDirMask ); + if ( zoomDirBitmap && zoomDirMask ) + { + iZoomDirLayout.DrawImage( gc, zoomDirBitmap, zoomDirMask ); + } + + // Draw zoom indicator: + if ( !areaBitmap ) + { + // If area bitmap is invalid, then we have to return. + return; + } + + if ( maxBitmap ) + { + // First, draw maximum area. + for ( TInt index = KVtUiZoomControlMinSteps; + index <= full; + index++ ) + { + GetPositionAndRect( + drawPos, + drawRect, + index ); + gc.BitBltMasked( + drawPos, + maxBitmap, + drawRect, + areaBitmap, + ETrue ); + } + } + + if ( minBitmap && ( full < KVtUiZoomControlMaxSteps ) ) + { + // Then draw minimum area. + for ( TInt index = full + 1; + index <= KVtUiZoomControlMaxSteps; + index++ ) + { + GetPositionAndRect( + drawPos, + drawRect, + index ); + gc.BitBltMasked( + drawPos, + minBitmap, + drawRect, + areaBitmap, + ETrue ); + } + + if ( maxBitmap && partial && iZoomPartialMask ) + { + // Finally draw partial area. + GetPositionAndRect( + drawPos, + drawRect, + full + 1 ); + gc.BitBltMasked( + drawPos, + maxBitmap, + drawRect, + iZoomPartialMask->Bitmap(), + ETrue ); + } + } + + __VTPRINT( DEBUG_GEN, "VtUiZmCtl.Draw.ok" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::SizeChanged() + { + AknsUtils::RegisterControlPosition( this ); + + TRect parent( Rect() ); + TAknWindowLineLayout rect; + if ( parent.IsEmpty() ) + { + return; + } + + { + TAknLayoutRect& tmpRect = iZoomDirLayout; + VtUiLayout::GetZoomPaneLayout( rect ); + tmpRect.LayoutRect( parent, rect ); + parent = tmpRect.Rect(); + iZoomPaneRect = parent; + } + + VtUiLayout::GetZoomDirLayout( rect ); + iZoomDirLayout.LayoutRect( parent, rect ); + iBitmapManager.SetSizeAndColor( + iZoomDirId, + iZoomDirLayout.Rect().Size(), + iZoomDirLayout.Color() ); + + VtUiLayout::GetZoomAreaLayout( rect ); + iZoomAreaLayout.LayoutRect( parent, rect ); + iBitmapManager.SetSize( + iZoomAreaId, + iZoomAreaLayout.Rect().Size() ); + iBitmapManager.SetSize( + iZoomMinId, + iZoomAreaLayout.Rect().Size() ); + iBitmapManager.SetSize( + iZoomMaxId, + iZoomAreaLayout.Rect().Size() ); + (void) CreateBitmaps(); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::PositionChanged() + { + AknsUtils::RegisterControlPosition( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::DetermineSteps +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::DetermineSteps( + TInt& aFullSteps, + TInt& aPartialStep ) const + { + aFullSteps = 1; + aPartialStep = 0; + + TInt currentZoomStep = Max( Min( iCurrentZoomStep, iMaxZoomStep ), 0 ); + + if ( iMaxZoomStep > 0 ) + { + TInt zoomDeltaSteps = 0; + TInt zoomDeltaMaxSteps = 0; + + // Formula equals: x = ( N * ( y - 1 ) ) / 10. + + aFullSteps = KVtUiZoomControlMinSteps; + const TInt divider = + KVtUiZoomControlMaxSteps - KVtUiZoomControlMinSteps; + for ( TInt row = KVtUiZoomControlMaxSteps - 1; + row >= KVtUiZoomControlMinSteps - 1; + row-- ) + { + const TInt zoomStartSteps = + ( iMaxZoomStep * row ) / divider; + const TInt previousZoomStartSteps = + ( iMaxZoomStep * ( row - 1 ) ) / divider; + + if ( ( currentZoomStep >= zoomStartSteps ) && + ( previousZoomStartSteps != zoomStartSteps ) ) + { + aFullSteps = ( row + 1 ); + zoomDeltaSteps = currentZoomStep - zoomStartSteps; + zoomDeltaMaxSteps = ( iMaxZoomStep * ( row + 1 ) ) / divider; + zoomDeltaMaxSteps -= zoomStartSteps; + break; + } + } + + aPartialStep = 0; + if ( zoomDeltaSteps && zoomDeltaMaxSteps ) + { + TInt64 partial( zoomDeltaSteps ); + partial *= KVtUiZoomControlOne; + partial /= zoomDeltaMaxSteps; + + partial >>= ( KVtUiZoomControlFixed - KVtUiZoomControlPartial ); + aPartialStep = I64INT( partial ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::GenerateZoomMaskBitmap +// ----------------------------------------------------------------------------- +// +TBool CVtUiZoomControl::GenerateZoomMaskBitmap( + CFbsBitmap* aMaskBitmap, + const TInt aPartial, + const TInt aRow, + const TSize& aRowSize ) const + { + if ( iZoomPartialMask && + ( ( iZoomMaskPartial != aPartial ) || + ( iZoomMaskRow != aRow ) ) ) + { + DoGenerateZoomMaskBitmap( + aMaskBitmap, + aPartial, + aRow, + aRowSize ); + } + return ( iZoomPartialMask != NULL ); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::DoGenerateZoomMaskBitmap +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::DoGenerateZoomMaskBitmap( + CFbsBitmap* aMaskBitmap, + const TInt aPartial, + const TInt aRow, + const TSize& aRowSize ) const + { + CFbsBitGc* bitmapMaskGc = iZoomPartialMask->Context(); + + CFbsBitmap* shade = iZoomPartialShade->Bitmap(); + CFbsBitGc* shadeGc = iZoomPartialShade->Context(); + + // Fill shade with aPartial. + shadeGc->SetPenStyle( CGraphicsContext::ENullPen ); + shadeGc->SetBrushColor( TRgb::Gray256( aPartial ) ); + shadeGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + shadeGc->Clear(); + + // Now grab one row from iZoomAreaBitmap. + CFbsBitmap* mask = iZoomPartialShadeMask->Bitmap(); + CFbsBitGc* maskGc = iZoomPartialShadeMask->Context(); + + // Clear with transparency. + maskGc->SetPenStyle( CGraphicsContext::ENullPen ); + maskGc->SetBrushColor( TRgb::Gray2( 1 ) ); // transparency + maskGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + maskGc->Clear(); + + maskGc->SetPenStyle( CGraphicsContext::ENullPen ); + // Blit appropriate region from aMaskBitmap to maskGc. + maskGc->BitBlt( + TPoint( 0, aRow ), + aMaskBitmap, + TRect( TPoint( 0, aRow ), aRowSize ) ); + + // Now fill bitmapMask with black (= transparency). + bitmapMaskGc->SetPenStyle( CGraphicsContext::ENullPen ); + bitmapMaskGc->SetBrushColor( TRgb::Gray256( KVtUiZoomTransparent ) ); + bitmapMaskGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); + bitmapMaskGc->Clear(); + + // Then blit shade masked + TPoint origin; + TRect rect( origin, shade->SizeInPixels() ); + + bitmapMaskGc->BitBltMasked( origin, shade, rect, mask, ETrue ); + + iZoomMaskPartial = aPartial; + iZoomMaskRow = aRow; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CreateBitmaps +// ----------------------------------------------------------------------------- +// +TInt CVtUiZoomControl::CreateBitmaps() + { + TRAPD( err, CreateBitmapsL() ); + return err; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CreateBitmapsL +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::CreateBitmapsL() + { + TBool requiredToCreate = ETrue; + TSize requiredSize = SizeOfBitmap(); + if ( iZoomPartialMask ) + { + requiredToCreate = + ( requiredSize != iZoomPartialMask->Bitmap()->SizeInPixels() ); + } + + if ( requiredToCreate ) + { + iZoomMaskPartial = KErrNotFound; + iZoomMaskRow = KErrNotFound; + + // Delete old ones away. + delete iZoomPartialMask; + iZoomPartialMask = NULL; + + delete iZoomPartialShade; + iZoomPartialShade = NULL; + + delete iZoomPartialShadeMask; + iZoomPartialShadeMask = NULL; + + CBitmap* zoomPartialMask = new ( ELeave ) CBitmap; + CleanupStack::PushL( zoomPartialMask ); + zoomPartialMask->ConstructL( requiredSize, EGray256 ); + + CBitmap* zoomPartialShade = new ( ELeave ) CBitmap; + CleanupStack::PushL( zoomPartialShade ); + zoomPartialShade->ConstructL( requiredSize, EGray256 ); + + CBitmap* zoomPartialShadeMask = new ( ELeave ) CBitmap; + CleanupStack::PushL( zoomPartialShadeMask ); + zoomPartialShadeMask->ConstructL( requiredSize, EGray2 ); + + // Pop zoomPartialShadeMask, zoomPartialShade & zoomPartialMask. + CleanupStack::Pop( 3, zoomPartialMask ); + iZoomPartialMask = zoomPartialMask; + iZoomPartialShade = zoomPartialShade; + iZoomPartialShadeMask = zoomPartialShadeMask; + } + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::SizeOfBitmap +// ----------------------------------------------------------------------------- +// +TSize CVtUiZoomControl::SizeOfBitmap() const + { + // Bitmaps fill the whole zoom area. + return iZoomAreaLayout.Rect().Size(); + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::GetPositionAndRect +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::GetPositionAndRect( + TPoint& aPosition, + TRect& aSourceRect, + const TInt aZoomStep ) const + { + TAknWindowLineLayout rect; + TAknLayoutRect layout; + const TRect zoomAreaRect = iZoomAreaLayout.Rect(); + const TRect& zoomParentRect = iZoomPaneRect; + + VtUiLayout::GetZoomStepLayout( + rect, + aZoomStep ); + layout.LayoutRect( zoomParentRect, rect ); + aSourceRect = layout.Rect(); + aPosition = aSourceRect.iTl; + + aSourceRect.iTl -= zoomAreaRect.iTl; + aSourceRect.iBr -= zoomAreaRect.iTl; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CBitmap::CBitmap +// ----------------------------------------------------------------------------- +// +CVtUiZoomControl::CBitmap::CBitmap() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CBitmap::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiZoomControl::CBitmap::ConstructL( + const TSize& aSize, + const TDisplayMode aMode ) + { + CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap; + CleanupStack::PushL( bitmap ); + + User::LeaveIfError( + bitmap->Create( aSize, aMode ) ); + + CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( bitmap ); + CleanupStack::PushL( device ); + + CFbsBitGc* context = NULL; + User::LeaveIfError( device->CreateContext( context ) ); + User::LeaveIfNull( context ); + + CleanupStack::Pop( device ); + CleanupStack::Pop( bitmap ); + + iContext = context; + iDevice = device; + iBitmap = bitmap; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CBitmap::~CBitmap +// ----------------------------------------------------------------------------- +// +CVtUiZoomControl::CBitmap::~CBitmap() + { + delete iContext; + delete iDevice; + delete iBitmap; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CBitmap::Bitmap +// ----------------------------------------------------------------------------- +// +inline CFbsBitmap* CVtUiZoomControl::CBitmap::Bitmap() const + { + return iBitmap; + } + +// ----------------------------------------------------------------------------- +// CVtUiZoomControl::CBitmap::Context +// ----------------------------------------------------------------------------- +// +inline CFbsBitGc* CVtUiZoomControl::CBitmap::Context() const + { + return iContext; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/TVtUiCallParameters.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/TVtUiCallParameters.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2004 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 the TVtUiCallParameters class. +* +*/ + + + +// INCLUDE FILES +#include "TVtUiCallParameters.h" + +// CONSTANTS + +// Enumerates call parameter flags. +enum TVtUiCallParameterFlags + { + // Audio status has been updated. + EVtUiCallParameterFlagHasAudio = 1, + // Audio status equals to ETrue. + EVtUiCallParameterFlagAudioEnabled = 2, + // Video status has been updated. + EVtUiCallParameterFlagHasVideo = 4, + // Video status equals to ETrue. + EVtUiCallParameterFlagVideoEnabled = 8, + // Selected camera has been updated. + EVtUiCallParameterFlagHasSelectedCamera = 16, + // Primary camera has been selected. Otherwise secondary has been selected. + EVtUiCallParameterFlagHasSelectedPrimary = 32, + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::TVtUiCallParameters +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +TVtUiCallParameters::TVtUiCallParameters() + : iFlags( 0 ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::Reset +// ----------------------------------------------------------------------------- +// +void TVtUiCallParameters::Reset() + { + iFlags = 0; + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::SetAudioStatus +// ----------------------------------------------------------------------------- +// +void TVtUiCallParameters::SetAudioStatus( const TBool aEnabled ) + { + iFlags |= ( EVtUiCallParameterFlagAudioEnabled + + EVtUiCallParameterFlagHasAudio ); + if ( !aEnabled ) + { + iFlags &= ~EVtUiCallParameterFlagAudioEnabled; + } + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::GetAudioStatus +// ----------------------------------------------------------------------------- +// +TInt TVtUiCallParameters::GetAudioStatus( TBool& aEnabled ) const + { + TInt err = KErrNotFound; + if ( iFlags & EVtUiCallParameterFlagHasAudio ) + { + err = KErrNone; + aEnabled = ( iFlags & EVtUiCallParameterFlagAudioEnabled ); + } + + return err; + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::SetVideoStatus +// ----------------------------------------------------------------------------- +// +void TVtUiCallParameters::SetVideoStatus( const TBool aEnabled ) + { + iFlags |= ( EVtUiCallParameterFlagVideoEnabled + + EVtUiCallParameterFlagHasVideo ); + if ( !aEnabled ) + { + iFlags &= ~EVtUiCallParameterFlagVideoEnabled; + } + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::GetVideoStatus +// ----------------------------------------------------------------------------- +// +TInt TVtUiCallParameters::GetVideoStatus( TBool& aEnabled ) + { + TInt err = KErrNotFound; + if ( iFlags & EVtUiCallParameterFlagHasVideo ) + { + err = KErrNone; + aEnabled = ( iFlags & EVtUiCallParameterFlagVideoEnabled ); + } + + return err; + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::SetSelectedCamera +// ----------------------------------------------------------------------------- +// +void TVtUiCallParameters::SetSelectedCamera( const TBool aPrimary ) + { + iFlags |= EVtUiCallParameterFlagHasSelectedCamera; + + if ( aPrimary ) + { + iFlags |= EVtUiCallParameterFlagHasSelectedPrimary; + } + else + { + iFlags &= ~EVtUiCallParameterFlagHasSelectedPrimary; + } + } + +// ----------------------------------------------------------------------------- +// TVtUiCallParameters::GetSelectedCamera +// ----------------------------------------------------------------------------- +// +TInt TVtUiCallParameters::GetSelectedCamera( TBool& aPrimary ) + { + TInt err = KErrNotFound; + if ( iFlags & EVtUiCallParameterFlagHasSelectedCamera ) + { + err = KErrNone; + aPrimary = ( iFlags & EVtUiCallParameterFlagHasSelectedPrimary ); + } + + return err; + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/VtUiLayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/VtUiLayout.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,700 @@ +/* +* Copyright (c) 2004, 2005 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 the VtUiLayout class. +* +*/ + + + +// INCLUDE FILES +#include "VtUiLayout.h" +#include "VtUiPanic.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +// DATA TYPES + +// Enumerates files in which there can be bitmaps. +enum TVtUiBitmapFiles + { + // Video Telephone bitmap file. + EVtUiVideoBitmapFile, + // AVKON bitmap file. + EVtUiAvkonBitmapFile + }; + +// Video Telephone application bitmaps +_LIT( KVtUiVideoBitmapFileName, + "z:\\resource\\apps\\videotelui.mbm" ); +// Minimum step for zoom. +const TInt KVtUiZoomMinStep = 1; + +// Maximum step for zoom. +const TInt KVtUiZoomMaxStep = 11; + +// ============================ LOCAL FUNCTIONS =============================== + +inline TAknWindowComponentLayout DoCompose( TAknWindowComponentLayout aLine1, + TAknWindowComponentLayout aLine2 ) + { + return TAknWindowComponentLayout::Compose( aLine1, aLine2 ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetApplicationParentRect +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetApplicationParentRect( + TRect& aRect ) + { + // Calculate screen rectangle. + TSize screenSize = CCoeEnv::Static()->ScreenDevice()->SizeInPixels(); + TRect screenRect( screenSize ); + + // Calculate application window. + TAknLayoutRect appRect; + appRect.LayoutRect( + screenRect, + AknLayout::application_window( screenRect ) ); + aRect = appRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetMainPaneLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetMainPaneLayout( + TAknWindowLineLayout& aLayout ) + { + TRect parent; + GetApplicationParentRect( parent ); + // Calculate main pane layout. + // First 1 = normal status pane, second 1 = control pane. + aLayout = AknLayout::main_pane( parent, 0, 1, 1 ); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetFirstWindowBackgroundLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetFirstWindowBackgroundLayout( + TAknWindowLineLayout& aLayout ) + { + //aLayout = AppLayout::Uplink_video_image__large__Line_1(); + TInt main_pane_variety( 0 ); + TInt vid_upl_variety( 14 ); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + main_pane_variety = 4; + vid_upl_variety = 0; + } + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_pane( main_pane_variety ); + TAknWindowComponentLayout layout2 = + AknLayoutScalable_Apps::main_video_tele_pane(); + TAknWindowComponentLayout layout3 = + AknLayoutScalable_Apps:: + call_video_uplink_pane_cp1( vid_upl_variety ); + TAknWindowComponentLayout layout4 = + AknLayoutScalable_Apps::call_video_uplink_pane_g1(); + aLayout = + DoCompose( + DoCompose( layout1, layout2 ), + DoCompose( layout3, layout4 ) ).LayoutLine(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetFirstWindowStreamLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetFirstWindowStreamLayout( + TAknWindowLineLayout& aLayout ) + { + TInt main_pane_variety( 0 ); + TInt vid_upl_variety( 14 ); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + main_pane_variety = 4; + vid_upl_variety = 0; + } + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_pane( main_pane_variety ); + TAknWindowComponentLayout layout2 = + AknLayoutScalable_Apps::main_video_tele_pane(); + TAknWindowComponentLayout layout3 = + AknLayoutScalable_Apps:: + call_video_uplink_pane_cp1( vid_upl_variety ); + TAknWindowComponentLayout layout4 = + AknLayoutScalable_Apps::video_uplink_pane(); + aLayout = + DoCompose( + DoCompose( layout1, layout2 ), + DoCompose( layout3, layout4 ) ).LayoutLine(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetFirstWindowStreamDisabledIconLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetFirstWindowStreamDisabledIconLayout( + TAknWindowLineLayout& aLayout ) + { + //aLayout = AppLayout::Uplink_video_image__large__Line_3(); + TInt main_pane_variety( 0 ); + TInt vid_upl_variety( 14 ); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + main_pane_variety = 4; + vid_upl_variety = 0; + } + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_pane( main_pane_variety ); + TAknWindowComponentLayout layout2 = + AknLayoutScalable_Apps::main_video_tele_pane(); + TAknWindowComponentLayout layout3 = + AknLayoutScalable_Apps:: + call_video_uplink_pane_cp1( vid_upl_variety ); + TAknWindowComponentLayout layout4 = + AknLayoutScalable_Apps::call_video_uplink_pane_g2(); + aLayout = + DoCompose( + DoCompose( layout1, layout2 ), + DoCompose( layout3, layout4 ) ).LayoutLine(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetSecondWindowBackgroundLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetSecondWindowBackgroundLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::Downlink_video_image_Line_1(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetSecondWindowStreamLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetSecondWindowStreamLayout( + TAknWindowLineLayout& aLayout, TBool aIsToolbar, TBool aIsSubQCIF ) + { + if( aIsSubQCIF ) + { + aLayout = AppLayout::video_down_subqcif_pane(); + } + else + { + if ( aIsToolbar ) + { + // non touch + TInt varietyPr = 8; // portrait + TInt varietyLs = 10; // landscape + if ( AknLayoutUtils::PenEnabled() ) + { + varietyPr = 11; // portrait + varietyLs = 12; // landscape + } + + TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation() + ? varietyLs : varietyPr ; + TAknWindowComponentLayout layout1 = AknLayoutScalable_Apps:: + main_video_tele_pane(); + TAknWindowComponentLayout layout2 = AknLayoutScalable_Apps:: + video_down_crop_pane( varietyIndex ); + aLayout = TAknWindowComponentLayout::Compose( layout1, layout2 ). + LayoutLine(); + + } + else + { + aLayout = AppLayout::downlink_stream(); + } + } + } + + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetSecondWindowStreamWholeLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetSecondWindowStreamWholeLayout( + TAknWindowLineLayout& aLayout, TBool aIsToolbar, TBool aIsSubQCIF ) + { + if( aIsSubQCIF ) + { + aLayout = AppLayout::video_down_subqcif_pane(); + } + else + { + if ( aIsToolbar ) + { + // non touch + TInt varietyPr = 5; // portrait + TInt varietyLs = 7; // landscape + if ( AknLayoutUtils::PenEnabled() ) + { + varietyPr = 8; // portrait + varietyLs = 1; // landscape + } + + TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation() + ? varietyLs : varietyPr; + TAknWindowComponentLayout layout1 = AknLayoutScalable_Apps:: + main_video_tele_pane(); + TAknWindowComponentLayout layout2 = AknLayoutScalable_Apps:: + video_down_pane( varietyIndex ); + aLayout = TAknWindowComponentLayout::Compose( layout1, layout2 ) + .LayoutLine(); + } + else + { + aLayout = AppLayout::downlink_stream_area(); + } + } + } +// ----------------------------------------------------------------------------- +// VtUiLayout::GetSecondWindowDisabledIconLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetSecondWindowDisabledIconLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::Downlink_video_image_Line_3(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetSecondWindowWaitingTextLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetSecondWindowWaitingTextLayout( + TAknTextLineLayout& aLayout, + const TBool aFirstLine ) + { + TBool layoutFound = EFalse; + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + layoutFound = ETrue; + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_video_tele_pane(); + + TAknTextComponentLayout layout2 = + aFirstLine ? + AknLayoutScalable_Apps::call_video_pane_t1() : + AknLayoutScalable_Apps::call_video_pane_t2(); + + aLayout = + TAknWindowComponentLayout::ComposeText( + layout1, layout2 ).LayoutLine(); + } + + if ( !layoutFound ) + { + const TInt line( ( aFirstLine ) ? 0 : 1 ); + TAknWindowComponentLayout l1 = AknLayoutScalable_Apps:: + main_video_tele_pane(); + TAknTextComponentLayout l2; + if ( !line ) + { + l2 = AknLayoutScalable_Apps::call_video_pane_t1( 1 ); + } + else + { + l2 = AknLayoutScalable_Apps::call_video_pane_t2( 1 ); + } + aLayout = TAknWindowComponentLayout::ComposeText( l1, l2 ); + } + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetNumberEntryAreaLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetNumberEntryAreaLayout( + TAknWindowLineLayout& aLayout ) + { + TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 2 : 0; + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_call_pane(); + TAknWindowComponentLayout layout2 = + AknLayoutScalable_Apps::popup_number_entry_window( variety ); + + aLayout = + TAknWindowComponentLayout::Compose( layout1, layout2 ).LayoutLine(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetAudioRoutingIconLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetAudioRoutingIconLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::Navipane_elements_and_descendant_panes_Line_1(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetCallDurationTextLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetCallDurationTextLayout( + TAknTextLineLayout& aLayout ) + { + aLayout = AppLayout::Navipanetexts_Line_1(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetMutedTextLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetMutedTextLayout( + TAknTextLineLayout& aLayout ) + { + aLayout = AppLayout::Navipanetexts_Line_2(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetZoomPaneLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetZoomPaneLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::zooming_pane(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetZoomDirLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetZoomDirLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::Zooming_pane_elements_Line_1(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetZoomAreaLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetZoomAreaLayout( + TAknWindowLineLayout& aLayout ) + { + aLayout = AppLayout::Zooming_pane_elements_Line_2(); + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::GetZoomStepLayout +// ----------------------------------------------------------------------------- +// +void VtUiLayout::GetZoomStepLayout( + TAknWindowLineLayout& aLayout, + TInt aZoomStep ) + { + aZoomStep = Max( Min( aZoomStep, KVtUiZoomMaxStep ), KVtUiZoomMinStep ); + aZoomStep--; // 1 .. 11 is mapped to 0 .. 10. + + // Function pointer table would be more efficient, but AppLayout methods + // are inline. + + switch ( aZoomStep ) + { + case 0: + aLayout = AppLayout::Zooming_steps_sizes_Line_1(); + break; + + case 1: + aLayout = AppLayout::Zooming_steps_sizes_Line_2(); + break; + + case 2: + aLayout = AppLayout::Zooming_steps_sizes_Line_3(); + break; + + case 3: + aLayout = AppLayout::Zooming_steps_sizes_Line_4(); + break; + + case 4: + aLayout = AppLayout::Zooming_steps_sizes_Line_5(); + break; + + case 5: + aLayout = AppLayout::Zooming_steps_sizes_Line_6(); + break; + + case 6: + aLayout = AppLayout::Zooming_steps_sizes_Line_7(); + break; + + case 7: + aLayout = AppLayout::Zooming_steps_sizes_Line_8(); + break; + + case 8: + aLayout = AppLayout::Zooming_steps_sizes_Line_9(); + break; + + case 9: + aLayout = AppLayout::Zooming_steps_sizes_Line_10(); + break; + + case 10: + default: + aLayout = AppLayout::Zooming_steps_sizes_Line_11(); + break; + } + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::MapBitmapToSkinId +// ----------------------------------------------------------------------------- +// +TAknsItemID VtUiLayout::MapBitmapToSkinId( TVtUiBitmapId aId ) + { + TAknsItemID skinId = KAknsIIDNone; + + switch ( aId ) + { + case EVtUiBitmap_qgn_graf_call_video_out_bg: + skinId = KAknsIIDQgnGrafCallVideoOutBg; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_in: + skinId = KAknsIIDQgnIndiCallVideoBlindIn; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_out: + skinId = KAknsIIDQgnIndiCallVideoBlindOut; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon: + skinId = KAknsIIDQgnIndiCallVideoBlindInMaskIcon; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon: + skinId = KAknsIIDQgnIndiCallVideoBlindOutMaskIcon; + break; + + case EVtUiBitmap_qgn_indi_earpiece: + skinId = KAknsIIDQgnIndiEarpiece; + break; + + case EVtUiBitmap_qgn_indi_speaker: + skinId = KAknsIIDQgnIndiSpeaker; + break; + + case EVtUiBitmap_qgn_indi_zoom_dir: + skinId = KAknsIIDQgnIndiZoomDir; + break; + + case EVtUiBitmap_qgn_graf_zoom_area: + skinId = KAknsIIDQgnGrafZoomArea; + break; + + case EVtUiBitmap_qgn_indi_zoom_min: + skinId = KAknsIIDQgnIndiZoomMin; + break; + + case EVtUiBitmap_qgn_indi_zoom_max: + skinId = KAknsIIDQgnIndiZoomMax; + break; + + case EVtUiBitmap_qgn_prop_sub_current: + case EVtUiBitmap_qgn_prop_sub_current_mask: + skinId = KAknsIIDQgnPropSubCurrent; + break; + + default: + // Default value is OK. + break; + } + + return skinId; + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::MapBitmapToColorId +// ----------------------------------------------------------------------------- +// +TBool VtUiLayout::MapBitmapToColorId( + TVtUiBitmapId aId, + TAknsItemID& aColorId, + TInt& aColorIndex ) + { + TBool result = EFalse; + + aColorId = KAknsIIDNone; + aColorIndex = KErrNotFound; + + switch ( aId ) + { + case EVtUiBitmap_qgn_indi_earpiece: + case EVtUiBitmap_qgn_indi_earpiece_mask: + case EVtUiBitmap_qgn_indi_speaker: + case EVtUiBitmap_qgn_indi_speaker_mask: + case EVtUiBitmap_qgn_indi_zoom_dir: + case EVtUiBitmap_qgn_indi_zoom_dir_mask: + result = ETrue; + aColorId = KAknsIIDQsnIconColors; + aColorIndex = EAknsCIQsnIconColorsCG7; + break; + + default: + // Default value is OK. + break; + } + + return result; + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::Resolve +// ----------------------------------------------------------------------------- +// +void VtUiLayout::Resolve( + TVtUiBitmapId aId, + TFileName& aFileName, + TInt& aIndex ) + { + TInt index = KErrNotFound; + TVtUiBitmapFiles file = EVtUiVideoBitmapFile; + + switch ( aId ) + { + case EVtUiBitmap_qgn_graf_call_video_out_bg: + index = EMbmVideoteluiQgn_graf_call_video_out_bg; + break; + + case EVtUiBitmap_qgn_graf_call_video_out_bg_mask: + index = EMbmVideoteluiQgn_graf_call_video_out_bg_mask; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_in: + index = EMbmVideoteluiQgn_indi_call_video_blind_in; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_out: + index = EMbmVideoteluiQgn_indi_call_video_blind_out; + break; + + case EVtUiBitmap_qgn_indi_earpiece: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_indi_earpiece; + break; + + case EVtUiBitmap_qgn_indi_earpiece_mask: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_indi_earpiece_mask; + break; + + case EVtUiBitmap_qgn_indi_speaker: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_indi_speaker; + break; + + case EVtUiBitmap_qgn_indi_speaker_mask: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_indi_speaker_mask; + break; + + case EVtUiBitmap_qgn_graf_zoom_area: + index = EMbmVideoteluiQgn_graf_zoom_area; + break; + + case EVtUiBitmap_qgn_indi_zoom_dir: + index = EMbmVideoteluiQgn_indi_zoom_dir; + break; + + case EVtUiBitmap_qgn_indi_zoom_dir_mask: + index = EMbmVideoteluiQgn_indi_zoom_dir_mask; + break; + + case EVtUiBitmap_qgn_indi_zoom_min: + index = EMbmVideoteluiQgn_indi_zoom_min; + break; + + case EVtUiBitmap_qgn_indi_zoom_max: + index = EMbmVideoteluiQgn_indi_zoom_max; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_in_mask_icon: + index = EMbmVideoteluiQgn_indi_call_video_blind_in_mask_icon; + break; + + case EVtUiBitmap_qgn_indi_call_video_blind_out_mask_icon: + index = EMbmVideoteluiQgn_indi_call_video_blind_out_mask_icon; + break; + + case EVtUiBitmap_qgn_prop_sub_current: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_prop_sub_current; + break; + + case EVtUiBitmap_qgn_prop_sub_current_mask: + file = EVtUiAvkonBitmapFile; + index = EMbmAvkonQgn_prop_sub_current_mask; + break; + + default: + VtUiPanic::Panic( EVtUiPanicInvalidBitmapId ); + break; + } + + aIndex = index; + switch ( file ) + { + case EVtUiVideoBitmapFile: + aFileName = KVtUiVideoBitmapFileName; + break; + + case EVtUiAvkonBitmapFile: + aFileName = AknIconUtils::AvkonIconFileName(); + break; + + default: + VtUiPanic::Panic( EVtUiPanicInvalidBitmapFile ); + break; + } + } + +// ----------------------------------------------------------------------------- +// VtUiLayout::IsLandscapeOrientation +// ----------------------------------------------------------------------------- +// +TBool VtUiLayout::IsLandscapeOrientation() + { + return Layout_Meta_Data::IsLandscapeOrientation(); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/VtUiPanic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/VtUiPanic.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2004 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 the VtUiPanic class. +* +*/ + + + +// INCLUDE FILES +#include "VtUiPanic.h" + +// CONSTANTS + +// Panic category for Video Telephone application. +_LIT( KVtUiPanicCategory, "Videotelui" ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// VtUiPanic::Panic +// ----------------------------------------------------------------------------- +// +void VtUiPanic::Panic( TVtUiPanicReason aReason ) + { + User::Panic( KVtUiPanicCategory, aReason ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/VtUiUtility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/VtUiUtility.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,336 @@ +/* +* Copyright (c) 2004 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 the VtUiUtility class. +* +*/ + + + +// INCLUDE FILES +#include "VtUiUtility.h" +#include "VtUiPanic.h" +#include +#include +#include +#include +#include "tVtuifeaturevariation.h" + +// Characters to open number entry. +_LIT( KVtUiDTMFCharacters, "0123456789*#" ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetAudioRoutingAvailability +// ----------------------------------------------------------------------------- +// +void VtUiUtility::GetAudioRoutingAvailability( + MVtEngAudio& aAudio, + TInt& aAvailable ) + { + aAvailable = 0; + TVtUiBTVariation btvariation; + const TBool bluetoothAudioSupported = + btvariation.IsBTSupported(); + + MVtEngAudio::TAudioRoutingState routingState; + if ( aAudio.GetRoutingState( routingState ) == KErrNone ) + { + // Deactivate BT handsfree. + if ( bluetoothAudioSupported && + IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioBT, + MVtEngAudio::EAudioHandset ) ) + { + aAvailable |= EDeactivateBtHandsfree; + } + + // Activate BT handsfree. + if ( bluetoothAudioSupported && + ( IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioHandset, + MVtEngAudio::EAudioBT ) || + IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioLoudspeaker, + MVtEngAudio::EAudioBT ) ) ) + { + aAvailable |= EActivateBtHandsfree; + } + + // Deactivate loudspeaker + if ( IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioLoudspeaker, + MVtEngAudio::EAudioHandset ) ) + { + aAvailable |= EDeactivateLoudspeaker; + } + + // Activate loudspeaker + if ( IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioHandset, + MVtEngAudio::EAudioLoudspeaker ) || + ( bluetoothAudioSupported && + IsAudioRoutingAvailable( + aAudio, + routingState, + MVtEngAudio::EAudioBT, + MVtEngAudio::EAudioLoudspeaker ) ) ) + { + aAvailable |= EActivateLoudspeaker; + } + } + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetOutgoingMediaState +// ----------------------------------------------------------------------------- +// +void VtUiUtility::GetOutgoingMediaState( + MVtEngMedia& aMedia, + TInt& aAvailable ) + { + TInt outgoingMediaState; + const TInt err = + aMedia.GetMediaState( + MVtEngMedia::EMediaOutgoing, + outgoingMediaState ); + if ( err == KErrNone ) + { + // If source is still image, then video sending is off. + MVtEngMedia::TMediaSource source; + if ( aMedia.GetSource( source ) == KErrNone ) + { + if ( source == MVtEngMedia::EMediaStillImage ) + { + outgoingMediaState &= ~MVtEngMedia::EMediaVideo; + } + } + TBool freezeSupported; + if( aMedia.GetFreezeSupported( freezeSupported ) == KErrNone ) + { + TBool isFrozen; + if( freezeSupported && aMedia.GetFreezeState( isFrozen ) == KErrNone ) + { + if( isFrozen ) + { + outgoingMediaState &= ~MVtEngMedia::EMediaVideo; + } + } + } + } + else + { + outgoingMediaState = + ( MVtEngMedia::EMediaAudio | MVtEngMedia::EMediaVideo ); + } + aAvailable = outgoingMediaState; + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetIncomingMediaState +// ----------------------------------------------------------------------------- +// +void VtUiUtility::GetIncomingMediaState( + MVtEngMedia& aMedia, + TInt& aAvailable ) + { + TInt mediaState; + const TInt err = + aMedia.GetMediaState( + MVtEngMedia::EMediaIncoming, + mediaState ); + if ( err != KErrNone ) + { + mediaState = + ( MVtEngMedia::EMediaAudio | MVtEngMedia::EMediaVideo ); + } + + aAvailable = mediaState; + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::HasStillImage +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::HasStillImage( + MVtEngMedia& aMedia ) + { + TInt caps; + const TInt capsErr = aMedia.GetSourcesCaps( caps ); + return ( capsErr == KErrNone ) && + ( caps & MVtEngMedia::ESourceCapsStillImage ); + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetFreezeState +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::GetFreezeState( + MVtEngMedia& aMedia ) + { + TBool isFrozen; + const TInt err = aMedia.GetFreezeState( isFrozen ); + if ( err == KErrNone ) + { + return isFrozen; + } + else //provider was not ready + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::IsFreezeSupported +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::IsFreezeSupported( + MVtEngMedia& aMedia ) + { + TBool isFreezeSupported; + const TInt err = aMedia.GetFreezeSupported( isFreezeSupported ); + if ( err == KErrNone ) + { + return isFreezeSupported; + } + else //provider was not ready + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetVideoQuality +// ----------------------------------------------------------------------------- +// +void VtUiUtility::GetVideoQuality( + MVtEngMedia& aMedia, + MVtEngMedia::TVideoQuality& aVideoQuality ) + { + aMedia.GetVideoQuality( aVideoQuality ); + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::GetObjectSharingState +// ----------------------------------------------------------------------------- +// +void VtUiUtility::GetObjectSharingState( + MVtEngMedia& aMedia, + MVtEngMedia::TShareObjectState& aShareObjectState ) + { + aMedia.GetObjectSharingState( aShareObjectState ); + } + + +// ----------------------------------------------------------------------------- +// VtUiUtility::IsZoomAllowed +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::IsZoomAllowed( + MVtEngMedia& aMedia ) + { + TBool result = EFalse; + + TInt currentStep; + if ( aMedia.GetCurrentZoomStep( currentStep ) == KErrNone ) + { + TInt max; + if ( aMedia.GetMaxZoomStep( max ) == KErrNone ) + { + // Zooming is allowed if maximum zoom step is greater than + // zero and camera is in use (and not still image / none). + TInt avail; + GetOutgoingMediaState( aMedia, avail ); + + result = ( max > 0 ) && ( avail & MVtEngMedia::EMediaVideo ); + } + } + + __VTPRINT2( DEBUG_GEN, "Ui.AllowZoom.%d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::HasCameras +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::HasCameras( MVtEngMedia& aMedia ) + { + TInt sourceCaps; + if ( aMedia.GetSourcesCaps( sourceCaps ) != KErrNone ) + { + sourceCaps = 0; + } + return ( sourceCaps & MVtEngMedia::ESourceCapsPrimaryCamera ) || + ( sourceCaps & MVtEngMedia::ESourceCapsSecondaryCamera ); + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::IsAudioRoutingAvailable +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::IsAudioRoutingAvailable( + MVtEngAudio& aAudio, + const MVtEngAudio::TAudioRoutingState aCurrent, + const MVtEngAudio::TAudioRoutingState aSource, + const MVtEngAudio::TAudioRoutingState aTarget ) + { + TBool result = EFalse; + if ( aCurrent == aSource ) + { + TBool available = EFalse; + TInt err = aAudio.GetRoutingAvailability( aTarget, available ); + + result = ( ( err == KErrNone ) && ( available ) ); + } + + return result; + } + + +// ----------------------------------------------------------------------------- +// VtUiUtility::IsDTMFEvent +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::IsDTMFEvent( const TKeyEvent& aKeyEvent, TChar& aDtmfTone ) + { + TBuf<1> buffer; // one character + buffer.Append( aKeyEvent.iCode ); + AknTextUtils::ConvertDigitsTo( buffer, EDigitTypeWestern ); + aDtmfTone = buffer[ 0 ]; + return + ( KVtUiDTMFCharacters().Locate( buffer[ 0 ] ) != KErrNotFound ); + } + +// ----------------------------------------------------------------------------- +// VtUiUtility::IsDTMFCharacter +// ----------------------------------------------------------------------------- +// +TBool VtUiUtility::IsDTMFCharacter( const TChar aChar ) + { + return + ( KVtUiDTMFCharacters().Locate( aChar ) != KErrNotFound ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 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: UI command bases class implementation. +* +*/ + + +#include "cvtuicmdbase.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// FindCVtUiCmdBaseById +// --------------------------------------------------------------------------- +// +TInt FindCVtUiCmdBaseById( const CVtUiCmdBase& aC1, const CVtUiCmdBase& aC2 ) + { + return ( aC1.CommandId() - aC2.CommandId() ); + } + +// --------------------------------------------------------------------------- +// FindCVtUiCmdBaseByKey +// --------------------------------------------------------------------------- +// +TInt FindCVtUiCmdBaseByKey( const TInt* aKey, const CVtUiCmdBase& aC ) + { + return ( *aKey - aC.CommandId() ); + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdBase::CommandId +// --------------------------------------------------------------------------- +// +TInt CVtUiCmdBase::CommandId() const + { + return iCommandId; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdBase::LinearOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< CVtUiCmdBase > CVtUiCmdBase::LinearOrder() + { + return TLinearOrder< CVtUiCmdBase >( ::FindCVtUiCmdBaseById ); + } + +// --------------------------------------------------------------------------- +// CVtUiCmdBase::LinearOrder +// --------------------------------------------------------------------------- +// +CVtUiCmdBase::TKeyOrder CVtUiCmdBase::KeyOrder() + { + return ::FindCVtUiCmdBaseByKey; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdBase::CVtUiCmdBase +// --------------------------------------------------------------------------- +// +CVtUiCmdBase::CVtUiCmdBase( TInt aCommandId ) : iCommandId( aCommandId ) + { + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdcontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdcontext.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2006 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: Command context base class. +* +*/ + + +#include + +#include "cvtuicmdcontext.h" +#include "cvtuicmdvalidatorbase.h" +#include "cvtuicmdvalidationactionbase.h" +#include "mvtuicommandmanager.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Compare routine used by InsertInOrder() and FindInOrder() to sort validator +// instances by priority. +// --------------------------------------------------------------------------- +// +TInt ValidatorPriCmpFunc( const CVtUiCmdValidatorBase& aV1, + const CVtUiCmdValidatorBase& aV2 ) + { + return aV1.Priority() - aV2.Priority(); + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::~CVtUiCmdContext +// --------------------------------------------------------------------------- +// +CVtUiCmdContext::~CVtUiCmdContext() + { + __VTPRINTENTER( "CmdCtx.~" ) + iValidators.Reset(); + __VTPRINTEXIT( "CmdCtx.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::ReferencePriority +// --------------------------------------------------------------------------- +// +TInt CVtUiCmdContext::ReferencePriority() const + { + __VTPRINTENTER( "CmdCtx.ReferencePriority" ) + __VTPRINTEXITR( "CmdCtx.ReferencePriority %d", iReferencePriority ) + return iReferencePriority; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::ContextType +// --------------------------------------------------------------------------- +// +TVtUiCmdContextType CVtUiCmdContext::ContextType() const + { + __VTPRINTENTER( "CmdCtx.ContextType" ) + __VTPRINTEXITR( "CmdCtx.ContextType %d", iContextType ) + return iContextType; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::AddValidator +// --------------------------------------------------------------------------- +// +TInt CVtUiCmdContext::AddValidator( CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdCtx.AddValidator" ) + TInt result( KErrNone ); + if ( !aValidator.ValidatesContext( iContextType ) ) + { + result = KErrNotSupported; + } + else + { + result = iValidators.InsertInOrderAllowRepeats( &aValidator, + TLinearOrder< CVtUiCmdValidatorBase >( ::ValidatorPriCmpFunc ) ); + } + __VTPRINTEXITR( "CmdCtx.AddValidator %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::RemoveValidator +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::RemoveValidator( const CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdCtx.RemoveValidator" ) + TInt idx( iValidators.FindInOrder( &aValidator, + TLinearOrder< CVtUiCmdValidatorBase >( ::ValidatorPriCmpFunc ) ) ); + + if ( idx != KErrNotFound ) + { + iValidators.Remove( idx ); + } + __VTPRINTEXIT( "CmdCtx.RemoveValidator" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::CVtUiCmdContext +// --------------------------------------------------------------------------- +// +CVtUiCmdContext::CVtUiCmdContext( MVtUiCommandManager& aCommandManager, + TVtUiCmdContextType aCtxType, TInt aReferencePriority ) + : iCommandManager( aCommandManager ), + iReferencePriority( aReferencePriority ), iContextType( aCtxType ) + { + __VTPRINTENTER( "CmdCtx.ctor" ) + __VTPRINTEXIT( "CmdCtx.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::ValidateMenuItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdCtx.ValidateMenuItemsL" ) + __VTPRINT2( DEBUG_GEN, " count = %d", iValidators.Count() ) + for ( TInt i = iValidators.Count() - 1; i >= 0; i-- ) + { + iValidators[ i ]->ValidateMenuItemsL( aAction, iReferencePriority ); + } + __VTPRINTEXIT( "CmdCtx.ValidateMenuItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::ValidateSoftkeyItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdCtx.ValidateSoftkeyItemsL" ) + __VTPRINT2( DEBUG_GEN, " count = %d", iValidators.Count() ) + for ( TInt i = iValidators.Count() - 1; i >= 0; i-- ) + { + iValidators[ i ]->ValidateSoftkeyItemsL( aAction, iReferencePriority ); + } + __VTPRINTEXIT( "CmdCtx.ValidateSoftkeyItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::ValidateToolbarItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdCtx.ValidateToolbarItemsL" ) + __VTPRINT2( DEBUG_GEN, " count = %d", iValidators.Count() ) + for ( TInt i = iValidators.Count() - 1; i >= 0; i-- ) + { + iValidators[ i ]->ValidateToolbarItemsL( aAction, iReferencePriority ); + } + __VTPRINTEXIT( "CmdCtx.ValidateToolbarItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::CustomValidationL +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::CustomValidationL( + CVtUiCmdCustomValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdCtx.CustomValidationL" ) + __VTPRINT2( DEBUG_GEN, " count = %d", iValidators.Count() ) + for ( TInt i = iValidators.Count() - 1; i >= 0; i-- ) + { + iValidators[ i ]->CustomValidationL( aAction, iReferencePriority ); + } + __VTPRINTEXIT( "CmdCtx.CustomValidationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::RegisterCommandContextL +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::RegisterCommandContextL() + { + __VTPRINTENTER( "CmdCtx.RegisterCommandContextL" ) + User::LeaveIfError( iCommandManager.RegisterCommandContext( *this ) ); + __VTPRINTEXIT( "CmdCtx.RegisterCommandContextL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdContext::UnregisterCommandContext +// --------------------------------------------------------------------------- +// +void CVtUiCmdContext::UnregisterCommandContext() + { + __VTPRINTENTER( "CmdCtx.UnregisterCommandContext" ) + iCommandManager.UnregisterCommandContext( *this ); + __VTPRINTEXIT( "CmdCtx.UnregisterCommandContext" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdcustomvalidationactionbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdcustomvalidationactionbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2006 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: Custom command validation action base class. +* +*/ + + +#include + +#include "cvtuicmdcustomvalidationactionbase.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdCustomValidationActionBase::CustomTypeId +// --------------------------------------------------------------------------- +// +CVtUiCmdCustomValidationActionBase::TCustomTypeId +CVtUiCmdCustomValidationActionBase::CustomTypeId() const + { + return iCustomTypeId; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCustomValidationActionBase::BeginProcess +// --------------------------------------------------------------------------- +// +CVtUiCmdCustomValidationActionBase::CVtUiCmdCustomValidationActionBase( + TCustomTypeId aCustomTypeId ) + : iCustomTypeId( aCustomTypeId ) + { + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdstatecheckaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdstatecheckaction.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2006 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: Menu item dimmer action class. +* +*/ + + +#include + +#include "cvtuicmdstatecheckaction.h" +#include "tvtuicmdvalidatorcallback.h" +#include "tvtuicmdcontexttype.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdStateCheckAction::NewL +// --------------------------------------------------------------------------- +// +CVtUiCmdStateCheckAction* CVtUiCmdStateCheckAction::NewL() + { + __VTPRINTENTER( "CmdStChkAct.NewL" ) + CVtUiCmdStateCheckAction* self = + new ( ELeave ) CVtUiCmdStateCheckAction(); + __VTPRINTEXIT( "CmdStChkAct.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdStateCheckAction::SetCommand +// --------------------------------------------------------------------------- +// +void CVtUiCmdStateCheckAction::SetCommand( TInt aCommandId ) + { + __VTPRINTENTER( "CmdStChkAct.SetCommand" ) + iCommandId = aCommandId; + iIsCommandAllowed = EFalse; + __VTPRINTEXIT( "CmdStChkAct.SetCommand" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdStateCheckAction::IsCommandAllowed +// --------------------------------------------------------------------------- +// +TBool CVtUiCmdStateCheckAction::IsCommandAllowed() const + { + return iIsCommandAllowed; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdStateCheckAction::ProcessL +// --------------------------------------------------------------------------- +// +void CVtUiCmdStateCheckAction::ProcessL( + const MVtUiCmdValidatorCallBack& aCallBack ) + { + __VTPRINTENTER( "CmdStChkAct.ProcessL" ) + if ( !IsCommandHandled( iCommandId ) ) + { + if ( aCallBack.Call( iCommandId ) ) + { + CommandHandledL( iCommandId ); + iIsCommandAllowed = ETrue; + } + } + __VTPRINTEXIT( "CmdStChkAct.ProcessL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdStateCheckAction::CVtUiCmdStateCheckAction +// --------------------------------------------------------------------------- +// +CVtUiCmdStateCheckAction::CVtUiCmdStateCheckAction() + : CVtUiCmdCustomValidationActionBase( EVtUiCmdContextTypeExecution ) + { + __VTPRINTENTER( "CmdStChkAct.ctor" ) + __VTPRINTEXIT( "CmdStChkAct.ctor" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdvalidationactionbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdvalidationactionbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2006 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: Command validation action base class. +* +*/ + + +#include + +#include "cvtuicmdvalidationactionbase.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdValidationActionBase::~CVtUiCmdValidationActionBase +// --------------------------------------------------------------------------- +// +CVtUiCmdValidationActionBase::~CVtUiCmdValidationActionBase() + { + __VTPRINTENTER( "ValActBase.~" ) + iHandledCommands.Reset(); + __VTPRINTEXIT( "ValActBase.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdValidationActionBase::BeginProcess +// --------------------------------------------------------------------------- +// +void CVtUiCmdValidationActionBase::BeginProcess() + { + __VTPRINTENTER( "ValActBase.BeginProcess" ) + iHandledCommands.Reset(); + __VTPRINTEXIT( "ValActBase.BeginProcess" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdValidationActionBase::EndProcess +// --------------------------------------------------------------------------- +// +void CVtUiCmdValidationActionBase::EndProcess() + { + __VTPRINTENTER( "ValActBase.EndProcess" ) + __VTPRINTEXIT( "ValActBase.EndProcess" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdValidationActionBase::CommandHandledL +// --------------------------------------------------------------------------- +// +void CVtUiCmdValidationActionBase::CommandHandledL( TInt aCommandId ) + { + __VTPRINTENTER( "ValActBase.CommandHandledL" ) + __VTPRINT2( DEBUG_GEN, " cmdId = %d", aCommandId ); + User::LeaveIfError( iHandledCommands.InsertInOrder( aCommandId ) ); + __VTPRINTEXIT( "ValActBase.CommandHandledL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdValidationActionBase::IsCommandHandled +// --------------------------------------------------------------------------- +// +TBool CVtUiCmdValidationActionBase::IsCommandHandled( TInt aCommandId ) const + { + __VTPRINTENTER( "ValActBase.IsCommandHandled" ) + TBool result( iHandledCommands.FindInOrder( aCommandId ) != KErrNotFound ); + __VTPRINTEXITR( "ValActBase.IsCommandHandled %d", result ) + return result; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicmdvalidatorbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicmdvalidatorbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006 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: Command validator base class. +* +*/ + + +#include + +#include "cvtuicmdvalidatorbase.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCmdValidatorBase::Priority +// --------------------------------------------------------------------------- +// +TInt CVtUiCmdValidatorBase::Priority() const + { + __VTPRINTENTER( "ValidatorBase.Priority" ) + __VTPRINTEXITR( "ValidatorBase.Priority %d", iPriority ) + return iPriority; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdValidatorBase::CVtUiCmdValidatorBase +// --------------------------------------------------------------------------- +// +CVtUiCmdValidatorBase::CVtUiCmdValidatorBase( TInt aPriority ) + : iPriority( aPriority ) + { + __VTPRINTENTER( "ValidatorBase.ctor" ) + __VTPRINTEXIT( "ValidatorBase.ctor" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicommandmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicommandmanager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,421 @@ +/* +* Copyright (c) 2006 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: Command manager class. +* +*/ + + +#include + +#include "cvtuicmdbase.h" +#include "cvtuicommandmanager.h" +#include "cvtuicommandpolicymanager.h" +#include "cvtuiprimarycmdpolicy.h" +#include "cvtuiexecutioncontext.h" +#include "cvtuimenuitemdimmeraction.h" +#include "tvtuistates.h" +#include "mvtuicommandui.h" +#include "cvtuicommandmodifybase.h" +#include "cvtuicmdstatecheckaction.h" + +// Default array granularity. +static const TInt KVtUiArrayGranularity = 1; + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::NewL +// ----------------------------------------------------------------------------- +// +CVtUiCommandManager* CVtUiCommandManager::NewL( const TVtUiStates& aUiStates, + CVtUiAppUi& aAppUi ) + { + __VTPRINTENTER( "CmdMgr.NewL" ) + CVtUiCommandManager* self = new ( ELeave ) CVtUiCommandManager( aUiStates, + aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CmdMgr.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::~CVtUiCommandManager +// ----------------------------------------------------------------------------- +// +CVtUiCommandManager::~CVtUiCommandManager() + { + __VTPRINTENTER( "CmdMgr.~" ) + iCommands.Reset(); + iCommandUis.Reset(); + iCommandModifiers.Reset(); + delete iExecutionContext; + delete iCmdStateCheckAction; + delete iCmdPolicyMgr; + __VTPRINTEXIT( "CmdMgr.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::UiStates +// ----------------------------------------------------------------------------- +// +const TVtUiStates& CVtUiCommandManager::UiStates() const + { + return iUiStates; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::AppUi +// ----------------------------------------------------------------------------- +// +const CVtUiAppUi& CVtUiCommandManager::AppUi() const + { + return iAppUi; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::VideoTelephonyVariation +// ----------------------------------------------------------------------------- +// +const TVtUiVideoTelephonyVariation& +CVtUiCommandManager::VideoTelephonyVariation() const + { + return iVtVariation; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::HandleCommandL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::HandleCommandL( TInt aCommandId ) + { + TInt index( iCommands.FindInOrder( aCommandId, CVtUiCmdBase::KeyOrder() ) ); + if ( index != KErrNotFound ) + { + iCommands[ index ]->HandleL(); + } + /* + + This was commented out, because current CVtUiAppUi silently ignores + commands that are not handled, changed this to emulate same kind of + behaviour. + + else + { + User::Leave( KErrNotFound ); + } + */ + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::AddCommandUi +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::AddCommandUi( MVtUiCommandUi& aCommandUi ) + { + __VTPRINTENTER( "CmdMgr.AddCommandUi" ) + TInt result( KErrAlreadyExists ); + TInt idx( iCommandUis.Find( &aCommandUi ) ); + if ( idx == KErrNotFound ) + { + result = iCommandUis.Append( &aCommandUi ); + if ( result == KErrNone ) + { + result = CommandUiAdded( aCommandUi ); + } + } + __VTPRINTEXITR( "CmdMgr.AddCommandUi %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RemoveCommandUi +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::RemoveCommandUi( MVtUiCommandUi& aCommandUi ) + { + __VTPRINTENTER( "CmdMgr.RemoveCommandUi" ) + TInt idx( iCommandUis.Find( &aCommandUi ) ); + if ( idx != KErrNotFound ) + { + iCommandUis.Remove( idx ); + CommandUiRemoved( aCommandUi ); + } + __VTPRINTEXIT( "CmdMgr.RemoveCommandUi" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::ValidateMenuItemsL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdMgr.ValidateMenuItemsL" ) + iCmdPolicyMgr->ValidateMenuItemsL( aAction ); + __VTPRINTEXIT( "CmdMgr.ValidateMenuItemsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::ValidateSoftkeyItemsL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdMgr.ValidateSoftkeyItemsL" ) + iCmdPolicyMgr->ValidateSoftkeyItemsL( aAction ); + __VTPRINTEXIT( "CmdMgr.ValidateSoftkeyItemsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::ValidateToolbarItemsL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdMgr.ValidateToolbarItemsL" ) + iCmdPolicyMgr->ValidateToolbarItemsL( aAction ); + __VTPRINTEXIT( "CmdMgr.ValidateToolbarItemsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::IsCommandAllowedL +// ----------------------------------------------------------------------------- +// +TBool CVtUiCommandManager::IsCommandAllowedL( TInt aCommandId ) + { + __VTPRINTENTER( "CmdMgr.IsCommandAllowedL" ) + TInt index( iCommands.FindInOrder( aCommandId, CVtUiCmdBase::KeyOrder() ) ); + if ( index == KErrNotFound ) + { + iCmdStateCheckAction->SetCommand( aCommandId ); + iCmdPolicyMgr->CustomValidateL( *iCmdStateCheckAction ); + } + else + { + return iCommands[ index ]->IsEnabled(); + } + __VTPRINTEXIT( "CmdMgr.IsCommandAllowedL" ) + return iCmdStateCheckAction->IsCommandAllowed(); + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RegisterCommandContext +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::RegisterCommandContext( CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdMgr.RegisterCommandContext" ) + TInt result( iCmdPolicyMgr->RegisterCommandContext( aContext ) ); + __VTPRINTEXITR( "CmdMgr.RegisterCommandContext %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::UnregisterCommandContext +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::UnregisterCommandContext( CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdMgr.UnregisterCommandContext" ) + iCmdPolicyMgr->UnregisterCommandContext( aContext ); + __VTPRINTEXIT( "CmdMgr.UnregisterCommandContext" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::AddValidator +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::AddValidator( CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdMgr.AddValidator" ) + TInt result( iCmdPolicyMgr->AddValidator( aValidator ) ); + __VTPRINTEXITR( "CmdMgr.AddValidator %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RemoveValidator +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::RemoveValidator( + CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdMgr.RemoveValidator" ) + iCmdPolicyMgr->RemoveValidator( aValidator ); + __VTPRINTEXIT( "CmdMgr.RemoveValidator" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RefreshL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::RefreshL() + { + __VTPRINTENTER( "CmdMgr.RefreshL" ) + for ( TInt i = iCommandUis.Count() - 1; i >= 0; i-- ) + { + iCommandUis[ i ]->RefreshL(); + } + __VTPRINTEXIT( "CmdMgr.RefreshL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::AddCommandModifier +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::AddCommandModifier( + CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "CmdMgr.AddCommandModifier" ) + TInt result( + iCommandModifiers.InsertInOrder( &aModifier, + CVtUiCommandModifyBase::PriorityOrder() ) ); + if ( result == KErrNone ) + { + result = CommandModifierAdded( aModifier ); + } + __VTPRINTEXITR( "CmdMgr.AddCommandModifier %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RemoveCommandModifier +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::RemoveCommandModifier( + CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "CmdMgr.RemoveCommandModifier" ) + TInt idx( iCommandModifiers.FindInOrder( &aModifier, + CVtUiCommandModifyBase::PriorityOrder() ) ); + if ( idx != KErrNotFound ) + { + iCommandModifiers.Remove( idx ); + CommandModifierRemoved( aModifier ); + } + __VTPRINTEXIT( "CmdMgr.RemoveCommandModifier" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::RegisterCommandL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::RegisterCommandL( CVtUiCmdBase& aCommand ) + { + __VTPRINTENTER( "CmdMgr.RegisterCommandL" ) + iCommands.InsertInOrderL( &aCommand, CVtUiCmdBase::LinearOrder() ); + __VTPRINTEXIT( "CmdMgr.RegisterCommandL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::UnregisterCommand +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::UnregisterCommand( const CVtUiCmdBase& aCommand ) + { + __VTPRINTENTER( "CmdMgr.UnregisterCommand" ) + TInt index( iCommands.FindInOrder( &aCommand, + CVtUiCmdBase::LinearOrder() ) ); + if ( index != KErrNotFound ) + { + iCommands.Remove( index ); + } + __VTPRINTEXIT( "CmdMgr.UnregisterCommand" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::CVtUiCommandManager +// ----------------------------------------------------------------------------- +// +CVtUiCommandManager::CVtUiCommandManager( const TVtUiStates& aUiStates, + CVtUiAppUi& aAppUi ) +: iCommandUis( KVtUiArrayGranularity ), + iCommandModifiers( KVtUiArrayGranularity ), + iCommands( KVtUiArrayGranularity ), + iUiStates( aUiStates ), + iAppUi( aAppUi ) + { + __VTPRINTENTER( "CmdMgr.ctor" ) + __VTPRINTEXIT( "CmdMgr.ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::ConstructL() + { + __VTPRINTENTER( "CmdMgr.ConstructL" ) + iVtVariation.ReadL(); + iCmdPolicyMgr = CVtUiCommandPolicyManager::NewL( *this ); + iCmdStateCheckAction = CVtUiCmdStateCheckAction::NewL(); + iExecutionContext = CVtUiExecutionContext::NewL( *this ); + __VTPRINTEXIT( "CmdMgr.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::CommandModifierAdded +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::CommandModifierAdded( + CVtUiCommandModifyBase& aModifier ) + { + TInt error( KErrNone ); + for ( TInt i = iCommandUis.Count() - 1; !error && i >= 0; i-- ) + { + error = iCommandUis[ i ]->AddCommandModifier( aModifier ); + } + return error; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::CommandModifierRemoved +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::CommandModifierRemoved( + CVtUiCommandModifyBase& aModifier ) + { + for ( TInt i = iCommandUis.Count() - 1; i >= 0; i-- ) + { + iCommandUis[ i ]->RemoveCommandModifier( aModifier ); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::CommandUiAdded +// ----------------------------------------------------------------------------- +// +TInt CVtUiCommandManager::CommandUiAdded( MVtUiCommandUi& aCommandUi ) + { + TInt error( KErrNone ); + for ( TInt i = iCommandModifiers.Count() - 1; !error && i >= 0; i-- ) + { + error = aCommandUi.AddCommandModifier( *iCommandModifiers[ i ] ); + } + return error; + } + +// ----------------------------------------------------------------------------- +// CVtUiCommandManager::CommandUiRemoved +// ----------------------------------------------------------------------------- +// +void CVtUiCommandManager::CommandUiRemoved( MVtUiCommandUi& aCommandUi ) + { + for ( TInt i = iCommandModifiers.Count() - 1; i >= 0; i-- ) + { + aCommandUi.RemoveCommandModifier( *iCommandModifiers[ i ] ); + } + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicommandmodifybase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicommandmodifybase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2006 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: Command context base class. +* +*/ + + +#include + +#include "cvtuicommandmodifybase.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCommandModifyBase::CVtUiCommandModifyBase +// --------------------------------------------------------------------------- +// +CVtUiCommandModifyBase::CVtUiCommandModifyBase( TInt aPriority ) + : iPriority( aPriority ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiCommandModifyBase::PriorityOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< CVtUiCommandModifyBase > CVtUiCommandModifyBase::PriorityOrder() + { + return TLinearOrder< CVtUiCommandModifyBase >( PriorityOrderFunc ); + } + +// --------------------------------------------------------------------------- +// CVtUiCommandModifyBase::PriorityOrderFunc +// --------------------------------------------------------------------------- +// +TInt CVtUiCommandModifyBase::PriorityOrderFunc( + const CVtUiCommandModifyBase& aM1, const CVtUiCommandModifyBase& aM2 ) + { + return aM1.iPriority - aM2.iPriority; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuicommandpolicymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuicommandpolicymanager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,334 @@ +/* +* Copyright (c) 2006 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: Command policy manager class. +* +*/ + + +#include + +#include "cvtuicommandpolicymanager.h" +#include "cvtuicmdcontext.h" +#include "cvtuicmdvalidatorbase.h" +#include "cvtuicmdvalidationactionbase.h" +#include "cvtuicmdcustomvalidationactionbase.h" +#include "cvtuiprimarycmdpolicy.h" +#include "cvtuicommandmanager.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Used in InsertInOrder() method to compare two instances of CVtUiCmdContext. +// --------------------------------------------------------------------------- +// +TInt ContextTypeCmpFunc( const CVtUiCmdContext& aV1, + const CVtUiCmdContext& aV2 ) + { + return static_cast< TInt >( aV1.ContextType() ) - + static_cast< TInt >( aV2.ContextType() ); + } + +// --------------------------------------------------------------------------- +// Used in FindInOrder() method to compare instances of CVtUiCmdContext versus +// given key value. +// --------------------------------------------------------------------------- +// +TInt ContextTypeCmpFuncVsKey( const TVtUiCmdContextType* aKey, + const CVtUiCmdContext& aValue ) + { + return static_cast< TInt > ( *aKey ) - + static_cast< TInt >( aValue.ContextType() ); + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::NewL +// --------------------------------------------------------------------------- +// +CVtUiCommandPolicyManager* +CVtUiCommandPolicyManager::NewL( const CVtUiCommandManager& aCmdManager ) + { + CVtUiCommandPolicyManager* self = + new ( ELeave ) CVtUiCommandPolicyManager( aCmdManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::~CVtUiCommandPolicyManager +// --------------------------------------------------------------------------- +// +CVtUiCommandPolicyManager::~CVtUiCommandPolicyManager() + { + __VTPRINTENTER( "CmdPolicyMgr.~" ) + iContexts.Reset(); + iValidators.Reset(); + delete iPrimaryCommandPolicy; + __VTPRINTEXIT( "CmdPolicyMgr.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::RegisterCommandContext +// --------------------------------------------------------------------------- +// +TInt CVtUiCommandPolicyManager::RegisterCommandContext( + CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdPolicyMgr.RegisterCommandContext" ) + TLinearOrder< CVtUiCmdContext > cmpFunc( ::ContextTypeCmpFunc ); + TInt result( KErrNone ); + TInt index( iContexts.FindInOrder( &aContext, cmpFunc ) ); + if ( index == KErrNotFound ) + { + TInt error( iContexts.InsertInOrder( &aContext, cmpFunc ) ); + if ( !error ) + { + CommandContextRegistered( aContext ); + } + result = error; + } + else + { + result = KErrAlreadyExists; + } + __VTPRINTEXITR( "CmdPolicyMgr.RegisterCommandContext %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::UnregisterCommandContext +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::UnregisterCommandContext( + CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdPolicyMgr.UnregisterCommandContext" ) + TLinearOrder< CVtUiCmdContext > cmpFunc( ::ContextTypeCmpFunc ); + TInt index( iContexts.FindInOrder( &aContext, cmpFunc ) ); + if ( index != KErrNotFound ) + { + iContexts.Remove( index ); + CommandContextUnregistered( aContext ); + } + __VTPRINTEXIT( "CmdPolicyMgr.UnregisterCommandContext" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::AddValidator +// --------------------------------------------------------------------------- +// +TInt CVtUiCommandPolicyManager::AddValidator( + CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdPolicyMgr.AddValidator" ) + TInt error( iValidators.Append( &aValidator ) ); + if ( !error ) + { + ValidatorAdded( aValidator ); + } + __VTPRINTEXITR( "CmdPolicyMgr.AddValidator %d", error ) + return error; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::RemoveValidator +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::RemoveValidator( + CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdPolicyMgr.RemoveValidator" ) + TInt index( iValidators.Find( &aValidator ) ); + if ( index != KErrNotFound ) + { + iValidators.Remove( index ); + ValidatorRemoved( aValidator ); + } + __VTPRINTEXIT( "CmdPolicyMgr.RemoveValidator" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidateMenuItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidateMenuItemsL" ) + ValidateL( EVtUiCmdContextTypeMenu, aAction ); + __VTPRINTEXIT( "CmdPolicyMgr.ValidateMenuItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidateSoftkeyItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidateSoftkeyItemsL" ) + ValidateL( EVtUiCmdContextTypeSoftkey, aAction ); + __VTPRINTEXIT( "CmdPolicyMgr.ValidateSoftkeyItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidateToolbarItemsL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidateToolbarItemsL" ) + ValidateL( EVtUiCmdContextTypeToolbar, aAction ); + __VTPRINTEXIT( "CmdPolicyMgr.ValidateToolbarItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::CustomValidateL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::CustomValidateL( + CVtUiCmdCustomValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdPolicyMgr.CustomValidateL" ) + ValidateL( EVtUiCmdContextTypeExecution, aAction ); + __VTPRINTEXIT( "CmdPolicyMgr.CustomValidateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::CVtUiCommandPolicyManager +// --------------------------------------------------------------------------- +// +CVtUiCommandPolicyManager::CVtUiCommandPolicyManager( + const CVtUiCommandManager& aCmdManager ) : iCommandManager( aCmdManager ) + { + __VTPRINTENTER( "CmdPolicyMgr.ctor" ) + __VTPRINTEXIT( "CmdPolicyMgr.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ConstructL() + { + __VTPRINTENTER( "CmdPolicyMgr.ConstructL" ) + iPrimaryCommandPolicy = + CVtUiPrimaryCmdPolicy::NewL( iCommandManager.UiStates(), + iCommandManager.AppUi() ); + User::LeaveIfError( AddValidator( *iPrimaryCommandPolicy ) ); + __VTPRINTEXIT( "CmdPolicyMgr.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::CommandContextRegistered +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::CommandContextRegistered( + CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdPolicyMgr.CommandContextRegistered" ) + for ( TInt i = iValidators.Count() - 1 ; i >= 0; i-- ) + { + aContext.AddValidator( *iValidators[ i ] ); + } + __VTPRINTEXIT( "CmdPolicyMgr.CommandContextRegistered" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::CommandContextUnregistered +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::CommandContextUnregistered( + CVtUiCmdContext& aContext ) + { + __VTPRINTENTER( "CmdPolicyMgr.CommandContextUnregistered" ) + for ( TInt i = iValidators.Count() - 1 ; i >= 0; i-- ) + { + aContext.RemoveValidator( *iValidators[ i ] ); + } + __VTPRINTEXIT( "CmdPolicyMgr.CommandContextUnregistered" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidatorAdded +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidatorAdded( + CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidatorAdded" ) + for ( TInt i = iContexts.Count() - 1 ; i >= 0; i-- ) + { + iContexts[ i ]->AddValidator( aValidator ); + } + __VTPRINTEXIT( "CmdPolicyMgr.ValidatorAdded" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidatorRemoved +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidatorRemoved( + CVtUiCmdValidatorBase& aValidator ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidatorRemoved" ) + for ( TInt i = iContexts.Count() - 1 ; i >= 0; i-- ) + { + iContexts[ i ]->RemoveValidator( aValidator ); + } + __VTPRINTEXIT( "CmdPolicyMgr.ValidatorRemoved" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::FindCommandContextByType +// --------------------------------------------------------------------------- +// +CVtUiCmdContext* CVtUiCommandPolicyManager::FindCommandContextByType( + TVtUiCmdContextType aContextType ) + { + __VTPRINTENTER( "CmdPolicyMgr.FindCommandContextByType" ) + CVtUiCmdContext* result = NULL; + TInt index( iContexts.FindInOrder( aContextType, + ::ContextTypeCmpFuncVsKey ) ); + if ( index != KErrNotFound ) + { + result = iContexts[ index ]; + } + __VTPRINTEXIT( "CmdPolicyMgr.FindCommandContextByType" ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiCommandPolicyManager::ValidateL +// --------------------------------------------------------------------------- +// +void CVtUiCommandPolicyManager::ValidateL( TVtUiCmdContextType aContextType, + CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "CmdPolicyMgr.ValidateL" ) + CVtUiCmdContext* context = + FindCommandContextByType( aContextType ); + if ( context ) + { + aAction.BeginProcess(); + context->ValidateL( aAction ); + aAction.EndProcess(); + } + __VTPRINTEXIT( "CmdPolicyMgr.ValidateL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuiexecutioncontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuiexecutioncontext.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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: Execution context class. +* +*/ + + +#include + +#include "cvtuiexecutioncontext.h" +#include "cvtuicmdcustomvalidationactionbase.h" + +/** Execution context reference priority */ +static const TInt KVtUiExecutionContextPriority = 1000; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiExecutionContext::~CVtUiExecutionContext +// --------------------------------------------------------------------------- +// +CVtUiExecutionContext::~CVtUiExecutionContext() + { + __VTPRINTENTER( "ExecCtx.~" ) + UnregisterCommandContext(); + __VTPRINTEXIT( "ExecCtx.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiExecutionContext::NewL +// --------------------------------------------------------------------------- +// +CVtUiExecutionContext* CVtUiExecutionContext::NewL( + MVtUiCommandManager& aCommandManager ) + { + __VTPRINTENTER( "ExecCtx.NewL" ) + CVtUiExecutionContext* self = + new ( ELeave ) CVtUiExecutionContext( aCommandManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "ExecCtx.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiExecutionContext::ValidateL +// --------------------------------------------------------------------------- +// +void CVtUiExecutionContext::ValidateL( CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "ExecCtx.ValidateL" ) + CustomValidationL( + static_cast< CVtUiCmdCustomValidationActionBase& >( aAction ) ); + __VTPRINTEXIT( "ExecCtx.ValidateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiExecutionContext::CVtUiExecutionContext +// --------------------------------------------------------------------------- +// +CVtUiExecutionContext::CVtUiExecutionContext( + MVtUiCommandManager& aCommandManager ) + : CVtUiCmdContext( aCommandManager, EVtUiCmdContextTypeExecution, + KVtUiExecutionContextPriority ) + { + __VTPRINTENTER( "ExecCtx.ctor" ) + __VTPRINTEXIT( "ExecCtx.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiExecutionContext::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiExecutionContext::ConstructL() + { + __VTPRINTENTER( "ExecCtx.ConstructL" ) + RegisterCommandContextL(); + __VTPRINTEXIT( "ExecCtx.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuifeaturecmdbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuifeaturecmdbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 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: Feature based UI command base class implementation. +* +*/ + + +#include "cvtuifeaturecmdbase.h" +#include "mvtuifeature.h" + +// --------------------------------------------------------------------------- +// CVtUiFeatureCmdBase::HandleL +// --------------------------------------------------------------------------- +// +void CVtUiFeatureCmdBase::HandleL() + { + iFeature.StartL(); + } + +// --------------------------------------------------------------------------- +// CVtUiFeatureCmdBase::IsEnabled +// --------------------------------------------------------------------------- +// +TBool CVtUiFeatureCmdBase::IsEnabled() const + { + return ( iFeature.State() == MVtUiFeature::EReady ) || + ( iFeature.State() == MVtUiFeature::EUnprepared ); + } + +// --------------------------------------------------------------------------- +// CVtUiFeatureCmdBase::CVtUiFeatureCmdBase +// --------------------------------------------------------------------------- +// +CVtUiFeatureCmdBase::CVtUiFeatureCmdBase( MVtUiFeature& aFeature, + TInt aCommandId ) : CVtUiCmdBase( aCommandId ), iFeature( aFeature ) + { + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/cvtuiprimarycmdpolicy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/cvtuiprimarycmdpolicy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,532 @@ +/* +* Copyright (c) 2006 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: Primary policy class. +* +*/ + + +#include +#include +#include +#include +#include + +#include "cvtuiprimarycmdpolicy.h" +#include "cvtuicmdvalidationactionbase.h" +#include "cvtuicmdcustomvalidationactionbase.h" +#include "tvtuicmdvalidatorcallback.h" +#include "tvtuistates.h" +#include "videotelui.hrh" +#include "tVtuifeaturevariation.h" +#include "CVtUiAppUi.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::NewL +// --------------------------------------------------------------------------- +// +CVtUiPrimaryCmdPolicy* CVtUiPrimaryCmdPolicy::NewL( + const TVtUiStates& aUiStates, const CVtUiAppUi& aAppUi ) + { + __VTPRINTENTER( "PrimaryCmdPolicy.NewL" ) + CVtUiPrimaryCmdPolicy* self = + new ( ELeave ) CVtUiPrimaryCmdPolicy( aUiStates, aAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "PrimaryCmdPolicy.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::~CVtUiPrimaryCmdPolicy +// --------------------------------------------------------------------------- +// +CVtUiPrimaryCmdPolicy::~CVtUiPrimaryCmdPolicy() + { + __VTPRINTENTER( "PrimaryCmdPolicy.~" ) + __VTPRINTEXIT( "PrimaryCmdPolicy.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateMenuItemsL +// --------------------------------------------------------------------------- +// +void CVtUiPrimaryCmdPolicy::ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction, TInt ) + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateMenuItemsL" ) + aAction.ProcessL( + TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this, + ValidateMenuCommand ) ); + __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateMenuItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL +// --------------------------------------------------------------------------- +// +void CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& aAction, TInt ) + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateSoftkeyItemsL" ) + aAction.ProcessL( + TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this, + ValidateSoftkey ) ); + __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateSoftkeyItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL +// --------------------------------------------------------------------------- +// +void CVtUiPrimaryCmdPolicy::ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& aAction, TInt ) + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateToolbarItemsL" ) + aAction.ProcessL( + TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this, + ValidateToolbarCommand ) ); + __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateToolbarItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::CustomValidationL +// --------------------------------------------------------------------------- +// +void CVtUiPrimaryCmdPolicy::CustomValidationL( + CVtUiCmdCustomValidationActionBase& aAction, TInt ) + { + __VTPRINTENTER( "PrimaryCmdPolicy.CustomValidationL" ) + switch ( aAction.CustomTypeId() ) + { + // Command state validation + case EVtUiCmdContextTypeExecution: + aAction.ProcessL( TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( + *this, ValidateCommandState ) ); + break; + + default: + __VTPRINT2( DEBUG_GEN, + "PrimaryCmdPolicy.CustomValidationL unknown typeId = %d", + aAction.CustomTypeId() ); + break; + } + __VTPRINTEXIT( "PrimaryCmdPolicy.CustomValidationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidatesContext +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidatesContext( + const TVtUiCmdContextType& aCtxType ) const + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidatesContext" ) + + TBool result( EFalse ); + + switch ( aCtxType ) + { + case EVtUiCmdContextTypeMenu: + case EVtUiCmdContextTypeSoftkey: + case EVtUiCmdContextTypeToolbar: + case EVtUiCmdContextTypeExecution: + result = ETrue; + break; + + default: + break; + } + + __VTPRINTEXITR( "PrimaryCmdPolicy.ValidatesContext %d", result ) + + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::CVtUiPrimaryCmdPolicy +// --------------------------------------------------------------------------- +// +CVtUiPrimaryCmdPolicy::CVtUiPrimaryCmdPolicy( const TVtUiStates& aUiStates, + const CVtUiAppUi& aAppUi ) + : CVtUiCmdValidatorBase( EVtUiCmdPolicyPriorityPrimary ), + iUiStates( aUiStates ), iAppUi( aAppUi ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiPrimaryCmdPolicy::ConstructL() + { + TVtUiActiveIdleVariation activeIdleVariation; + iAIEnabled = activeIdleVariation.IsActiveIdleEnabled(); + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateMenuCommand +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidateMenuCommand( TInt aCommandId ) const + { + TBool handled; + return ValidateCommand( aCommandId, handled ); + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateSoftkey +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidateSoftkey( TInt aResourceId ) const + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateSoftkey" ) + TBool result( EFalse ); + switch ( aResourceId ) + { + case R_VIDEOTELUI_SOFTKEYS_EMPTY_ACTIVE_COMMAND: + result = iUiStates.IsCommandActivating(); + break; + + case R_VIDEOTELUI_SOFTKEYS_EMPTY_DIALEREXIT: + result = iUiStates.IsDialerActivating(); + break; + + case R_VIDEOTELUI_SOFTKEYS_SHARE_OBJECT_IMAGE: + result = iUiStates.MediaState().IsSharing(); + break; + + case R_VIDEOTELUI_SOFTKEYS_CAPTURE_VIDEO: + result = iUiStates.IsCaptureModeOn(); + break; + + case R_VIDEOTELUI_SOFTKEYS_ENABLE_AUDIO: + result = !iUiStates.AudioState().IsAudio(); + break; + + case R_VIDEOTELUI_SOFTKEYS_ENABLE_VIDEO: + result = !iUiStates.MediaState().IsVideo() && + iUiStates.MediaState().HasCamera() && + ( iUiStates.ExecState() == TVtUiStates::EExecStateRunning ); + break; + + case R_VIDEOTELUI_SOFTKEYS_DIALER: + case R_VIDEOTELUI_SOFTKEYS_BT_HANDSFREE: + case R_VIDEOTELUI_SOFTKEYS_LOUDSPEAKER: + case R_VIDEOTELUI_SOFTKEYS_HANDSET_B: + { + if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) && + ( iUiStates.ExecState() == TVtUiStates::EExecStateRunning ) ) + { + switch ( aResourceId ) + { + case R_VIDEOTELUI_SOFTKEYS_DIALER: + result = ETrue; + break; + } + } + else + { + switch ( aResourceId ) + { + case R_VIDEOTELUI_SOFTKEYS_BT_HANDSFREE: + result = iUiStates.AudioState().CanActivateBtHf(); + break; + + case R_VIDEOTELUI_SOFTKEYS_LOUDSPEAKER: + result = iUiStates.AudioState().CanActivateLoudspeaker(); + break; + + case R_VIDEOTELUI_SOFTKEYS_HANDSET_B: + result = iUiStates.AudioState().CanDeactivateLoudspeaker(); + break; + } + } + } + break; + + case R_VIDEOTELUI_SOFTKEYS_END_CALL: + result = ETrue; + break; + } + __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateSoftkey %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateToolbarCommand +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidateToolbarCommand( TInt aCommandId ) const + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateToolbarCommand" ) + __VTPRINT2( DEBUG_GEN, "cmdId = %d", aCommandId ) + TBool result( ETrue ); + switch( aCommandId ) + { + case EVtUiCmdZoom: + case EVtUiCmdShareObjectImage: + case EVtUiCmdSwapImagesPlaces: + //case EVtUiCmdSnapshot: + + result = EFalse; + break; + + default: + result = ValidateMenuCommand( aCommandId ); + break; + } + __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateToolbarCommand %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateCommandState +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidateCommandState( TInt aCommandId ) const + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateCommandState" ) + TBool handled; + TBool allowed( !ValidateCommand( aCommandId, handled ) ); + if ( !handled ) + { + switch ( aCommandId ) + { + case EVtUiCmdCapture: + case EVtUiCmdCancelCapture: + allowed = iUiStates.IsCaptureModeOn(); + break; + + case EVtUiCmdStopSharingObjectImage: + allowed = iUiStates.MediaState().IsSharing() && + !iUiStates.MediaState().IsVideoPermanentlyStopped(); + break; + + default: + allowed = ETrue; + break; + } + } + __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateCommandState %d", allowed ) + return allowed; + } + +// --------------------------------------------------------------------------- +// CVtUiPrimaryCmdPolicy::ValidateCommand +// --------------------------------------------------------------------------- +// +TBool CVtUiPrimaryCmdPolicy::ValidateCommand( TInt aCommandId, + TBool& aHandled ) const + { + __VTPRINTENTER( "PrimaryCmdPolicy.ValidateCommand" ) + + __VTPRINT2( DEBUG_GEN, " cmdId = %d", aCommandId ) + + TBool result( ETrue ); + + aHandled = ETrue; + + const TVtUiMediaState& mediaState( iUiStates.MediaState() ); + const TVtUiAudioState& audioState( iUiStates.AudioState() ); + const TBool disabledVideo( !mediaState.IsVideo() || + mediaState.IsSharing() ); + const TBool disabledAudio( !audioState.IsAudio() ); + const TBool disableVideoOptions( !mediaState.HasCamera() ); + const TBool freezeSupported( mediaState.IsFreezeSupported() ); + const TBool frozen( mediaState.IsFrozen() ); + + const TBool videoPermStopped( mediaState.IsVideoPermanentlyStopped() ); + const TBool audioPermStopped( audioState.IsAudioPermanentlyStopped() ); + + switch( aCommandId ) + { + case EVtUiCmdSnapshot: + result = ( disabledVideo && !frozen ) || + disableVideoOptions || + !freezeSupported; + break; + + case EVtUiCmdUsePrimaryCamera: + result = mediaState.IsPrimaryCameraInUse() || frozen || + !mediaState.HasPrimaryCamera() || mediaState.IsSharing() || + videoPermStopped; + break; + + case EVtUiCmdUseSecondaryCamera: + result = mediaState.IsSecondaryCameraInUse() || frozen || + !mediaState.HasSecondaryCamera() || mediaState.IsSharing() || + videoPermStopped; + break; + + case EVtUiCmdDeactivateBT: + result = !audioState.CanDeactivateBtHf(); + break; + + case EVtUiCmdSwitchFromBTToIHF: + result = !audioState.CanDeactivateBtHf() || + !audioState.CanActivateLoudspeaker(); + break; + + case EVtUiCmdActivateBT: + result = !audioState.CanActivateBtHf(); + break; + + case EVtUiCmdDeactivateLoudspeaker: + result = !audioState.CanDeactivateLoudspeaker(); + break; + + case EVtUiCmdActivateLoudspeaker: + result = !audioState.CanActivateLoudspeaker(); + break; + + case EVtUiCmdSwapImagesPlaces: + // Swap image places is always shown in menu. + result = EFalse; + break; + + case EVtUiCmdAdjustVideo: + // Adjust video is always shown in menu. + result = EFalse; + break; + + case EVtUiCmdAdjustVideoVideoQuality: + result = EFalse; + break; + + case EVtUiCmdAdjustVideoWhiteBalance: + result = !iUiStates.IsWhiteBalanceSettingAvailable() || frozen; + break; + + case EVtUiCmdAdjustVideoBrightness: + result =!iUiStates.IsBrightnessSettingAvailable() || frozen; + break; + + case EVtUiCmdAdjustVideoContrast: + result =!iUiStates.IsContrastSettingAvailable() || frozen; + break; + + case EVtUiCmdAdjustVideoColourTone: + result = !iUiStates.IsColorToneSettingAvailable() || frozen; + + break; + case EVtUiCmdZoom: + result = frozen || disableVideoOptions || disabledVideo; + break; + + case EVtUiCmdCreateVoice: + // Downgrading to voice call is not possible if remote end MSISDN + // is unavailable or there is waiting call. + result = !iUiStates.IsCLIReceived() || iUiStates.IsWaitingCall(); + break; + + case EVtUiCmdGoToIdle: +#ifndef RD_BOOT_CUSTOMIZABLE_AI + result = !iAIEnabled; +#else + // When RD_BOOT_CUSTOMIZABLE_AI is defined, active idle is always + // shown in menu + result = EFalse; +#endif //RD_BOOT_CUSTOMIZABLE_AI + break; + + case EAknCmdHelp: + { + TVtUiHelpVariation hlpvariation; + result = !hlpvariation.IsHelpSupported(); + } + break; + + case EAknCmdExit: + // Exit option is disabled by default. Change ETrue to EFalse + // and it is in the menu. + break; + + case EVtUiCmdEndActiveCall: + // End active call always shown in menu. + result = EFalse; + break; + + case EVtUiCmdShareObjectImage: + result = frozen || mediaState.IsNotAbleToShare() || + mediaState.IsInitializingShare() || videoPermStopped || + iAppUi.IsActiveCommand( EVtUiCmdShareObjectImage ); + break; + + case EVtUiCmdEnableMain: + result = ( iAppUi.IsActiveCommand( EVtUiCmdEnableVideo ) || + iAppUi.IsActiveCommand( EVtUiCmdDisableVideo ) || + !disabledVideo || disableVideoOptions || videoPermStopped ) + && ( iAppUi.IsActiveCommand ( EVtUiCmdEnableAudio ) || + !disabledAudio || audioPermStopped ); + break; + + case EVtUiCmdEnableVideo: + result = !disabledVideo || disableVideoOptions || + videoPermStopped; + break; + + case EVtUiCmdEnableAudio: + result = !disabledAudio || audioPermStopped; + break; + + case EVtUiCmdEnableBoth: + result = !disabledVideo || !disabledAudio || disableVideoOptions || + videoPermStopped || audioPermStopped; + break; + + case EVtUiCmdDisableMain: + result = ( iAppUi.IsActiveCommand( EVtUiCmdDisableVideo ) || + iAppUi.IsActiveCommand( EVtUiCmdEnableVideo ) || + disabledVideo || disableVideoOptions || videoPermStopped ) && + ( iAppUi.IsActiveCommand( EVtUiCmdDisableAudio ) || + disabledAudio || audioPermStopped ); + break; + + case EVtUiCmdDisableVideo: + result = disabledVideo || disableVideoOptions || videoPermStopped; + break; + + case EVtUiCmdDisableAudio: + result = disabledAudio || audioPermStopped; + break; + + case EVtUiCmdDisableBoth: + result = disableVideoOptions || disabledVideo || disabledAudio || + videoPermStopped || audioPermStopped; + break; + + case EVtUiCmdSendDTMF: + if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) ) + { + result = EFalse; + } + else + { + result = ETrue; + } + break; + + default: + aHandled = EFalse; + break; + } + + __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateCommand %d", result ) + + return result; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/tVtuifeaturevariation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/tVtuifeaturevariation.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 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: Video Telephone feature variation class definition. +* +*/ + + +#include "tVtuifeaturevariation.h" + +// TVtUiFeatureVariationBase + +// ----------------------------------------------------------------------------- +// TVtUiFeatureVariationBase::IsFeatureSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiFeatureVariationBase::IsFeatureSupported( const TUint32 aId ) const + { + return FeatureManager::FeatureSupported( aId ); + } + +//TVtUiHelpVariation +// ----------------------------------------------------------------------------- +// TVtUiHelpVariation::FeatureId +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiHelpVariation::FeatureId() const + { + return KFeatureIdHelp; + } +// ----------------------------------------------------------------------------- +// TVtUiHelpVariation::IsHelpSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiHelpVariation::IsHelpSupported() const + { + return IsFeatureSupported( FeatureId() ); + } +//TVtUiDPVariation +// ----------------------------------------------------------------------------- +// TVtUiDPVariation::FeatureId +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiDPVariation::FeatureId() const + { + return KFeatureIdDisplayPost; + } +// ----------------------------------------------------------------------------- +// TVtUiDPVariation::IsDPSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiDPVariation::IsDPSupported() const + { + return IsFeatureSupported( FeatureId() ); + } +//TVtUiBTVariation +// ----------------------------------------------------------------------------- +// TVtUiBTVariation::FeatureId +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiBTVariation::FeatureId() const + { + return KFeatureIdBt; + } +// ----------------------------------------------------------------------------- +// TVtUiBTVariation::IsBTSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiBTVariation::IsBTSupported() const + { + return IsFeatureSupported( FeatureId() ); + } +//TVtUiSideVolumeKeysVariation +// ----------------------------------------------------------------------------- +// TVtUiSideVolumeKeysVariation::FeatureId +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiSideVolumeKeysVariation::FeatureId() const + { + return KFeatureIdSideVolumeKeys; + } +// ----------------------------------------------------------------------------- +// TVtUiSideVolumeKeysVariation::IsSideVolumeKeysSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiSideVolumeKeysVariation::IsSideVolumeKeysSupported() const + { + return IsFeatureSupported( FeatureId() ); + } +//TVtUiActiveIdleFetManVariation +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleFetManVariation::FeatureId +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiActiveIdleFetManVariation::FeatureId() const + { + return KFeatureIdActiveIdle; + } +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleFetManVariation::IsActiveIdleFetManSupported +// ----------------------------------------------------------------------------- +// +TBool TVtUiActiveIdleFetManVariation::IsActiveIdleFetManSupported() const + { + return IsFeatureSupported( FeatureId() ); + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/tvtuiaudiostate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/tvtuiaudiostate.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2006 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: Audio state class. +* +*/ + +#include +#include + +#include "tvtuiaudiostate.h" +#include "VtUiUtility.h" + +// ----------------------------------------------------------------------------- +// TVtUiAudioState::UpdateFlags +// ----------------------------------------------------------------------------- +// +void TVtUiAudioState::UpdateFlags() + { + __VTPRINTENTER( "AudioState.UpdateFlags" ) + TInt avail( 0 ); + + VtUiUtility::GetAudioRoutingAvailability( iModel.Audio(), avail ); + + const TBool videoCallConnected ( iModel.Media().VideoCallConnected()); + //Before update AudioRouting, video call state must to be checked. + //AudioRouting can not be changed if call is not in EConnected state. + if ( videoCallConnected ) + { + __VTPRINT( DEBUG_GEN, " videoCallConnected " ) + if ( avail & VtUiUtility::EDeactivateBtHandsfree ) + { + SetFlag( ECanDeactivateBtHf ); + } + if ( avail & VtUiUtility::EActivateBtHandsfree ) + { + SetFlag( ECanActivateBtHf ); + } + if ( avail & VtUiUtility::EDeactivateLoudspeaker ) + { + SetFlag( ECanDeactivateLoudspeaker ); + } + if ( avail & VtUiUtility::EActivateLoudspeaker ) + { + SetFlag( ECanActivateLoudspeaker ); + } + } + + VtUiUtility::GetOutgoingMediaState( iModel.Media(), avail ); + + if ( avail & MVtEngMedia::EMediaAudio ) + { + SetFlag( EIsAudio ); + } + + TInt status ( 0 ); + iModel.Media().GetMediaState( MVtEngMedia::EMediaOutgoing, status ); + if ( !(status & MVtEngMedia::EMediaAudioChannelOpen ) ) + { + SetFlag( EIsAudioPermanentlyStopped ); + } + + __VTPRINTEXITR( "AudioState.UpdateFlags bits = %b", Value() ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/tvtuilocalvariation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/tvtuilocalvariation.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2006 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: Video Telephone local variation class. +* +*/ + + +#include +#include +#include + +#include "VideoTelephonyInternalCRKeys.h" +#include "tvtuilocalvariation.h" +#include "tVtuifeaturevariation.h" + +// TVtUiVariationBase + +// ----------------------------------------------------------------------------- +// TVtUiVariationBase::ReadL +// ----------------------------------------------------------------------------- +// +void TVtUiVariationBase::ReadL( const TInt adefault ) + { + __VTPRINTENTER( "VtUi.LocalVariation.ReadL" ) + CRepository* repository = CRepository::NewL( Uid() ); + TInt value( 0 ); + if ( !repository->Get( Key(), value ) ) + { + SetValue( value ); + } + // incase of error + else + { + // If default is set + if ( adefault != -1 ) + { + __VTPRINT2( DEBUG_GEN, "VtUi.LocalVariation.ReadL def=%d", adefault ) + SetValue( adefault ); + } + } + delete repository; + __VTPRINTEXIT( "VtUi.LocalVariation.ReadL" ) + } +// ----------------------------------------------------------------------------- +// TVtUiVariationBase::Value +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiVariationBase::ReceiveValue() const + { + __VTPRINTENTER( "VtUi.LocalVariation.ReceiveValue" ) + __VTPRINTEXIT( "VtUi.LocalVariation.ReceiveValue" ) + return Value(); + } + +// TVtUiVideoTelephonyVariation +// ----------------------------------------------------------------------------- +// TVtUiVideoTelephonyVariation::Uid +// ----------------------------------------------------------------------------- +// +const TUid& TVtUiVideoTelephonyVariation::Uid() const + { + return KCRUidVTVariation; + } + +// ----------------------------------------------------------------------------- +// TVtUiVideoTelephonyVariation::Key +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiVideoTelephonyVariation::Key() const + { + return KVTLocalVariationFlags; + } + +// TVtUiActiveIdleVariation +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleVariation::IsActiveIdleEnabled +// ----------------------------------------------------------------------------- +// +TBool TVtUiActiveIdleVariation::IsActiveIdleEnabled() + { + __VTPRINTENTER( "VtUi.LocalVariation.AI.IsActiveIdleEnabled" ) + #ifndef RD_BOOT_CUSTOMIZABLE_AI + TVtUiActiveIdleFetManVariation featman; + TRAP_IGNORE( ReadL() ); + __VTPRINTEXIT( "VtUi.LocalVariation.AI.IsActiveIdleEnabled" ) + return featman.IsActiveIdleFetManSupported() && Value(); + // AI 2 implementation always true + #else + __VTPRINTEXIT( "VtUi.LocalVariation.AI.IsActiveIdleEnabled" ) + return ETrue; + #endif // RD_BOOT_CUSTOMIZABLE_AI + } + +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleVariation::Uid +// ----------------------------------------------------------------------------- +// +const TUid& TVtUiActiveIdleVariation::Uid() const + { + return KCRUidPersonalizationSettings; + } + +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleVariation::Key +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiActiveIdleVariation::Key() const + { + return KSettingsActiveIdleState; + } + +// TVtUiGsMuteVariation +// ----------------------------------------------------------------------------- +// TVtUiGsMuteVariation::GsMuteState +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiGsMuteVariation::GsMuteState() + { + __VTPRINTENTER( "VtUi.LocalVariation.Gs.GsMuteState" ) + TRAP_IGNORE( ReadL( KAllwaysQuery ) ); + __VTPRINTEXIT( "VtUi.LocalVariation.Gs.GsMuteState" ) + return ReceiveValue(); + } +// ----------------------------------------------------------------------------- +// TVtUiGsMuteVariation::Uid +// ----------------------------------------------------------------------------- +// +const TUid& TVtUiGsMuteVariation::Uid() const + { + return KCRUidTelephonySettings; + } + +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleVariation::Key +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiGsMuteVariation::Key() const + { + return KSettingsVTVideoSending; + } +// TVtUiToolbarVariation +// ----------------------------------------------------------------------------- +// TVtUiToolbarVariation::NumberOfButtons +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiToolbarVariation::NumberOfButtons() + { + __VTPRINTENTER( "VtUi.LocalVariation.Tb.NumberOfButtons" ) + TRAP_IGNORE( ReadL( KNumberOfTbButtons ) ); + __VTPRINTEXIT( "VtUi.LocalVariation.Tb.NumberOfButtons" ) + return ReceiveValue(); + } +// ----------------------------------------------------------------------------- +// TVtUiToolbarVariation::Uid +// ----------------------------------------------------------------------------- +// +const TUid& TVtUiToolbarVariation::Uid() const + { + return KCRUidVTConfiguration; + } + +// ----------------------------------------------------------------------------- +// TVtUiActiveIdleVariation::Key +// ----------------------------------------------------------------------------- +// +TUint32 TVtUiToolbarVariation::Key() const + { + return KVTToolbarCommands; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/tvtuimediastate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/tvtuimediastate.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 2006 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: Media state class. +* +*/ + + +#include +#include +#include + +#include "tvtuimediastate.h" +#include "VtUiUtility.h" + +// ----------------------------------------------------------------------------- +// TVtUiMediaState::UpdateFlags +// ----------------------------------------------------------------------------- +// +void TVtUiMediaState::UpdateFlags() + { + __VTPRINTENTER( "MediaState.UpdateFlags" ) + TInt avail( 0 ); + + VtUiUtility::GetOutgoingMediaState( iMedia, avail ); + + if ( avail & MVtEngMedia::EMediaVideo ) + { + SetFlag( EIsVideo ); + } + + if ( VtUiUtility::HasCameras( iMedia ) ) + { + SetFlag( EHasCamera ); + } + + if ( VtUiUtility::IsFreezeSupported( iMedia ) ) + { + SetFlag( EIsFreezeSupported ); + } + + if ( VtUiUtility::GetFreezeState( iMedia ) ) + { + SetFlag( EIsFrozen ); + } + + MVtEngMedia::TShareObjectState shareObjectState; + VtUiUtility::GetObjectSharingState( iMedia, shareObjectState ); + + if ( shareObjectState == MVtEngMedia::ESharingImage ) + { + SetFlag( EIsSharing ); + } + else if ( ( shareObjectState == MVtEngMedia::EInitializingShareImage ) || + ( shareObjectState == MVtEngMedia::EInitializingShareVideoClip ) ) + { + SetFlag( EIsInitializingShare ); + } + else if ( shareObjectState == MVtEngMedia::ENotAbleToShare ) + { + SetFlag( EIsNotAbleToShare ); + } + // Camera configuration + + MVtEngMedia::TCameraId cameraId; + TInt err = iMedia.GetCurrentCameraId( cameraId ); + + // Don't care if camera is not ready, just what is selected camera + if ( err == KErrNone || err == KErrNotReady ) + { + SetFlag( ( cameraId == MVtEngMedia::EPrimaryCamera ) ? + EIsPrimaryCameraInUse : EIsSecondaryCameraInUse ); + } + + TInt sourcesCaps( 0 ); + iMedia.GetSourcesCaps( sourcesCaps ); + if ( sourcesCaps & MVtEngMedia::ESourceCapsPrimaryCamera ) + { + SetFlag( EHasPrimaryCamera ); + } + if ( sourcesCaps & MVtEngMedia::ESourceCapsSecondaryCamera ) + { + SetFlag( EHasSecondaryCamera ); + } + + TInt status ( 0 ); + iMedia.GetMediaState( MVtEngMedia::EMediaOutgoing, status ); + if ( !( status & MVtEngMedia::EMediaVideoChannelOpen ) ) + { + SetFlag( EIsVideoPermanentlyStopped ); + } + + __VTPRINTEXITR( "MediaState.UpdateFlags bits = %b", Value() ) + + // Video preferences +/* + TInt caps( iCommandHandler.GetCommandCaps( KVtEngSetContrast ) ); + if ( caps & MVtEngCommandHandler::EAttribEnabled ) + { + SetFlag( EIsContrastSupported ); + } + + caps = iCommandHandler.GetCommandCaps( KVtEngSetBrightness ); + if ( caps & MVtEngCommandHandler::EAttribEnabled ) + { + SetFlag( EIsBrightnessSupported ); + } + + caps = iCommandHandler.GetCommandCaps( KVtEngSetWhiteBalance ); + if ( caps & MVtEngCommandHandler::EAttribEnabled ) + { + SetFlag( EIsWhiteBalanceSupported ); + } + + caps = iCommandHandler.GetCommandCaps( KVtEngSetColorTone ); + if ( caps & MVtEngCommandHandler::EAttribEnabled ) + { + SetFlag( EIsColorToneSupported ); + } + +*/ + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/commands/tvtuistates.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/commands/tvtuistates.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2006 - 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" +* 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: Video UI states class. +* +*/ + + +#include +#include +#include + +#include "tvtuistates.h" + +// ----------------------------------------------------------------------------- +// TVtUiStates::TVtUiStates +// ----------------------------------------------------------------------------- +// +TVtUiStates::TVtUiStates( CVtEngModel& aModel ) + : iMediaState( aModel.Media(), aModel.CommandHandler() ), iAudioState( aModel ), + iModel( aModel ), iExecState( EExecStateStarting), + iCommandActivatingRefCount( 0 ) + { + // get camera preferences + iCameraPref = static_cast + ( iModel.Extension( KVtEngExtensionCameraPreferences ) ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::Update +// ----------------------------------------------------------------------------- +// +void TVtUiStates::Update() + { + iMediaState.Update(); + iAudioState.Update(); + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsColorToneSettingAvailable +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsColorToneSettingAvailable() const + { + __VTPRINTENTER( "TVtUiStates.IsColorToneSettingAvailable" ) + TUint32 supportedModes; + // Get supported whitebalance modes + if ( iCameraPref ) + { + if ( iCameraPref->GetSupportedColorTones( supportedModes ) ) + { + // error occured + __VTPRINTEXIT( "TVtUiStates.IsColorToneSettingAvailableErr" ) + return EFalse; + } + } + + // Clean the flag, flags that are possible are + // A bitfield of suported colortones + // ENormal = 0x00, + // ESepia = 0x01, + // EGrayscale = 0x02, + // ENegative = 0x04 + supportedModes &= 0x07; + + // If supported modes is 0 automatic,then return EFalse + return supportedModes; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsWhiteBalanceSettingAvailable +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsWhiteBalanceSettingAvailable() const + { + __VTPRINTENTER( "TVtUiStates.IsWhiteBalanceSettingAvailable" ) + TUint32 supportedModes; + // Get supported whitebalance modes + if ( iCameraPref ) + { + if ( iCameraPref->GetSupportedWhiteBalanceModes( supportedModes ) ) + { + // error occured + __VTPRINTEXIT( "TVtUiStates.IsWhiteBalanceSettingAvailableErr" ) + return EFalse; + } + } + __VTPRINT2( DEBUG_GEN, "IsWhiteBalanceSettingAvailable=%d", supportedModes ) + // If supported modes is 0 ,then return EFalse + __VTPRINTEXIT( "TVtUiStates.IsWhiteBalanceSettingAvailable2" ) + return supportedModes; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsContrastSettingAvailable +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsContrastSettingAvailable() const + { + __VTPRINTENTER( "TVtUiStates.IsContrastSettingAvailable" ) + TBool ret( ETrue ); + if ( iCameraPref ) + { + TInt temp; + ret = !iCameraPref->GetBrightness( temp ); + } + return ret; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::IsBrightnessSettingAvailable +// ----------------------------------------------------------------------------- +// +TBool TVtUiStates::IsBrightnessSettingAvailable() const + { + __VTPRINTENTER( "TVtUiStates.IsBrightnessSettingAvailable" ) + TBool ret( ETrue ); + if ( iCameraPref ) + { + TInt temp; + ret = !iCameraPref->GetBrightness( temp ); + } + return ret; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetExecState +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetExecState( const TVtUiExecState aState ) + { + iExecState = aState; + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::SetIsCommandActivating +// ----------------------------------------------------------------------------- +// +void TVtUiStates::SetIsCommandActivating( TBool aSet ) + { + if ( aSet ) + { + iCommandActivatingRefCount++; + } + else if ( iCommandActivatingRefCount > 0 ) + { + iCommandActivatingRefCount--; + } + } + +// ----------------------------------------------------------------------------- +// TVtUiStates::ExecState +// ----------------------------------------------------------------------------- +// +TVtUiStates::TVtUiExecState TVtUiStates::ExecState() const + { + return iExecState; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/compman/cvtuicomponentmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/compman/cvtuicomponentmanager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,777 @@ +/* +* 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: Component manager implementation. +* +*/ + + +#include + +#include "cvtuicomponentmanager.h" +#include "mvtuiwindowservereventobserver.h" +#include "mvtuiresourcechangeobserver.h" +#include "mvtuikeyeventobserver.h" +#include "mvtuilayoutchangeobserver.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CmpByPtr +// --------------------------------------------------------------------------- +// +template < class T > +TInt CmpByPtr( const T& aObj1, const T& aObj2 ) + { + return reinterpret_cast< TInt >( &aObj1 ) - + reinterpret_cast< TInt >( &aObj2 ); + } + +// --------------------------------------------------------------------------- +// FindByPtr +// --------------------------------------------------------------------------- +// +template < class T > +TInt FindByPtr( const TInt* aPtr, const T& aObj ) + { + return *aPtr - reinterpret_cast< TInt >( &aObj ); + } + +// --------------------------------------------------------------------------- +// CmpMVtUiComponent +// --------------------------------------------------------------------------- +// +TInt CmpMVtUiComponent( const MVtUiComponent& aC1, const MVtUiComponent& aC2 ) + { + return ( aC1.ComponentId() - aC2.ComponentId() ); + } + +// --------------------------------------------------------------------------- +// CmpTVtUiComponentState +// --------------------------------------------------------------------------- +// +TInt CmpTVtUiComponentState( const TVtUiComponentState& aC1, + const TVtUiComponentState& aC2 ) + { + return ( aC1.Component().ComponentId() - aC2.Component().ComponentId() ); + } + +// --------------------------------------------------------------------------- +// CmpTVtUiComponentStateByKey +// --------------------------------------------------------------------------- +// +TInt CmpTVtUiComponentStateByKey( const MVtUiComponent::TComponentId* aKey, + const TVtUiComponentState& aC ) + { + return ( *aKey - aC.Component().ComponentId() ); + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::NewL +// --------------------------------------------------------------------------- +// +CVtUiComponentManager* CVtUiComponentManager::NewL() + { + __VTPRINTENTER( "CompMgr.NewL" ) + CVtUiComponentManager* self = new ( ELeave ) CVtUiComponentManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CompMgr.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::~CVtUiComponentManager +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::~CVtUiComponentManager() + { + __VTPRINTENTER( "CompMgr.~" ) + iWsEventObservers.Close(); + iResourceChangeObservers.Close(); + iKeyEventObservers.Close(); + iLayoutChangeObservers.Close(); + iComponents.Close(); + __VTPRINTEXIT( "CompMgr.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::HandleWsEventL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::HandleWsEventL( const TWsEvent& aEvent, + CCoeControl* aDestination ) + { + for ( TInt i = iWsEventObservers.Count() - 1; i >= 0; i-- ) + { + iWsEventObservers[ i ]->HandleWsEventL( aEvent, aDestination ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::HandleResourceChangeL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::HandleResourceChangeL( TInt aType ) + { + for ( TInt i = iResourceChangeObservers.Count() - 1; i >= 0; i-- ) + { + iResourceChangeObservers[ i ]->HandleResourceChangeL( aType ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager:OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiComponentManager::OfferKeyEventL( + const TKeyEvent& aEvent, TEventCode aCode ) + { + TKeyResponse response( EKeyWasNotConsumed ); + for ( TInt i = iKeyEventObservers.Count() - 1; i >= 0; i-- ) + { + response = iKeyEventObservers[ i ]->OfferKeyEventL( aEvent, aCode ); + if ( response == EKeyWasConsumed ) + { + break; + } + } + return response; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::HandleLayoutChangeL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::HandleLayoutChangeL() + { + for ( TInt i = iLayoutChangeObservers.Count() - 1; i >= 0; i-- ) + { + iLayoutChangeObservers[ i ]->HandleLayoutChangeL(); + } + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ChangeWsEventRegistration +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::ChangeWsEventRegistration( + MVtUiWindowServerEventObserver& aObserver, TAction aAction ) + { + return AddOrRemoveComponent( iWsEventObservers, &aObserver, aAction ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ChangeResourceChangeRegistration +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::ChangeResourceChangeRegistration( + MVtUiResourceChangeObserver& aObserver, TAction aAction ) + { + return AddOrRemoveComponent( iResourceChangeObservers, &aObserver, + aAction ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ChangeKeyEventRegistration +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::ChangeKeyEventRegistration( + MVtUiKeyEventObserver& aObserver, TAction aAction ) + { + return AddOrRemoveComponent( iKeyEventObservers, &aObserver, aAction ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ChangeLayoutChangeRegistration +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::ChangeLayoutChangeRegistration( + MVtUiLayoutChangeObserver& aObserver, TAction aAction ) + { + return AddOrRemoveComponent( iLayoutChangeObservers, &aObserver, aAction ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ChangeComponentRegistration +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::ChangeComponentRegistration( + TVtUiComponentState& aComponentState, TAction aAction ) + { + __VTPRINTENTER( "CompMgr.ChangeComponentRegistrationL" ) + TInt result( KErrNone ); + if ( aAction == ERegister ) + { + result = + iComponents.InsertInOrder( &aComponentState, + ComponentStateOrder() ); + } + else + { + TInt index( iComponents.FindInOrder( + &aComponentState, ComponentStateOrder() ) ); + if ( index != KErrNotFound ) + { + iComponents.Remove( index ); + } + } + __VTPRINTEXITR( "CompMgr.ChangeComponentRegistrationL %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::RequestActivationL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::RequestActivationL( + MVtUiComponent::TComponentId aId ) + { + __VTPRINTENTER( "CompMgr.RequestActivationL" ) + TInt index( iComponents.FindInOrder( aId, ::CmpTVtUiComponentStateByKey ) ); + if ( index == KErrNotFound ) + { + User::Leave( index ); + } + else + { + TVtUiComponentState& state( *iComponents[ index ] ); + if ( state.State() == TVtUiComponentState::EActive ) + { + User::Leave( KErrNotReady ); + } + else + { + DoActivationL( state, TVtUiComponentState::EActive ); + } + } + __VTPRINTEXIT( "CompMgr.RequestActivationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::DeActivateComponentL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::DeActivateComponentL( + MVtUiComponent::TComponentId aId ) + { + __VTPRINTENTER( "CompMgr.DeActivateComponentL" ) + TInt index( iComponents.FindInOrder( aId, ::CmpTVtUiComponentStateByKey ) ); + if ( index == KErrNotFound ) + { + User::Leave( index ); + } + else + { + TVtUiComponentState& state( *iComponents[ index ] ); + if ( state.State() == TVtUiComponentState::EInactive ) + { + User::Leave( KErrNotReady ); + } + else + { + DoDeactivationL( state, TVtUiComponentState::EInactive ); + } + } + __VTPRINTEXIT( "CompMgr.DeActivateComponentL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::DoActivationL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::DoActivationL( + TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ) + { + __VTPRINTENTER( "CompMgr.DoActivationL" ) + TStateList stateList; + ConstructStateListL( stateList ); + TInt index( stateList.FindItem( + aComponentState.Component().ComponentId() ) ); + if ( index != KErrNotFound ) + { + TStateListItem& sli( stateList.At( index ) ); + TVtUiBlockListBitField exclList; + for ( TInt i = stateList.ItemCount() - 1; i >= 0; i-- ) + { + TStateListItem& sli2( stateList.At( i ) ); + if ( sli2.ComponentId() != sli.ComponentId() ) + { + if ( sli2.State() == TVtUiComponentState::EActive && + !sli.BlockList().Contains( sli2.ComponentId() ) ) + { + exclList.Union( sli2.BlockList() ); + } + } + } + sli.SetRoot(); + sli.SetState( aNewState ); + CalculateActivationL( sli.BlockList(), exclList, stateList, EHide ); + } + CommitStateListL( stateList ); + __VTPRINTEXIT( "CompMgr.DoActivationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::DoDeactivationL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::DoDeactivationL( + TVtUiComponentState& aComponentState, + TVtUiComponentState::TState aNewState ) + { + __VTPRINTENTER( "CompMgr.DoDeactivationL" ) + TStateList stateList; + ConstructStateListL( stateList ); + TInt index( stateList.FindItem( + aComponentState.Component().ComponentId() ) ); + if ( index != KErrNotFound ) + { + TStateListItem& sli( stateList.At( index ) ); + TVtUiBlockListBitField exclList; + if ( sli.State() == TVtUiComponentState::EActive ) + { + for ( TInt i = stateList.ItemCount() - 1; i >= 0; i-- ) + { + TStateListItem& sli2( stateList.At( i ) ); + if ( sli2.ComponentId() != sli.ComponentId() ) + { + if ( sli2.State() == TVtUiComponentState::EActive ) + { + exclList.Union( sli2.BlockList() ); + } + } + } + } + sli.SetRoot(); + sli.SetState( aNewState ); + CalculateActivationL( sli.BlockList(), exclList, stateList, EShow ); + } + CommitStateListL( stateList ); + __VTPRINTEXIT( "CompMgr.DoDeactivationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::CommitStateListL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::CommitStateListL( TStateList& aList ) + { + __VTPRINTENTER( "CompMgr.CommitStateListL" ) + // Sort list by component state. Components will first deactivated, then + // blocked and finally activated. + aList.Sort( TStateListItem::StateOrder() ); + for ( TInt i = 0; i < aList.ItemCount(); i++ ) + { + const TStateListItem& sli( aList.At( i ) ); + TInt index( iComponents.FindInOrder( sli.ComponentId(), + ::CmpTVtUiComponentStateByKey ) ); + if ( index != KErrNotFound ) + { + TVtUiComponentState& cs( *iComponents[ index ] ); + if ( cs.State() != sli.State() ) + { + switch ( sli.State() ) + { + case TVtUiComponentState::EInactive: + cs.DeActivateComponentL(); + break; + + case TVtUiComponentState::EActive: + cs.ActivateComponentL(); + break; + + case TVtUiComponentState::EWaiting: + cs.BlockComponentL(); + break; + + default: + User::Leave( KErrArgument ); + break; + } + } + } + } + __VTPRINTEXIT( "CompMgr.CommitStateListL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::CalculateActivationL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::CalculateActivationL( + const TVtUiBlockList& aBlockList, + const TVtUiBlockList& aExclList, + TStateList& aStateList, TActivationAction aAction ) + { + __VTPRINTENTER( "CompMgr.CalculateActivationL" ) + __VTPRINT2( DEBUG_GEN, "aAction = %d", (TInt)aAction ) + TVtUiBlockListBitField blockList; + CVtUiBlockListIterator* iterator = aBlockList.IteratorLC(); + while ( iterator->HasNext() ) + { + MVtUiComponent::TComponentId cid( iterator->Next() ); + if ( aExclList.Contains( cid ) ) + { + continue; + } + TInt index( aStateList.FindItem( cid ) ); + if ( index != KErrNotFound ) + { + TStateListItem& sli( aStateList.At( index ) ); + __VTPRINT3( DEBUG_GEN, "@1, Id = %d, state = %d", (TInt)sli.ComponentId(), (TInt)sli.State() ) + if ( !sli.IsRoot() ) + { + if ( aAction == EShow ) + { + // if action == EShow and component is being blocked, + // then activate component + if ( sli.State() == TVtUiComponentState::EWaiting ) + { + sli.SetState( TVtUiComponentState::EActive ); + if ( !sli.IsVisited() ) + { + blockList.Union( sli.BlockList() ); + } + sli.SetVisited(); + } + } + else // aAction == EHide + { + // if action == EHide and component is active, then + // block component + if ( sli.State() == TVtUiComponentState::EActive ) + { + sli.SetState( TVtUiComponentState::EWaiting ); + if ( !sli.IsVisited() ) + { + blockList.Union( sli.BlockList() ); + } + sli.SetVisited(); + } + } + } + __VTPRINT3( DEBUG_GEN, "@2, Id = %d, state = %d", (TInt)sli.ComponentId(), (TInt)sli.State() ) + } + } + CleanupStack::PopAndDestroy(); // iterator + if ( !blockList.IsEmpty() ) + { + CalculateActivationL( blockList, aExclList, aStateList, + ( aAction == EShow ) ? EHide : EShow ); + } + __VTPRINTEXIT( "CompMgr.CalculateActivationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ConstructStateListL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::ConstructStateListL( TStateList& aList ) + { + for ( TInt i = iComponents.Count() - 1; i >= 0; i-- ) + { + TStateListItem sli( *iComponents[ i ] ); + aList.AddItemL( sli ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::CVtUiComponentManager +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::CVtUiComponentManager() + : iWsEventObservers( 1 ), iResourceChangeObservers( 1 ), + iKeyEventObservers( 1 ),iLayoutChangeObservers( 1 ), iComponents( 1 ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::AddOrRemoveComponent +// --------------------------------------------------------------------------- +// +template < class T > +TInt CVtUiComponentManager::AddOrRemoveComponent( RPointerArray< T >& aArray, + T* aComponent, TAction aAction ) + { + __VTPRINTENTER( "CompMgr.AddOrRemoveComponent" ) + TInt result( KErrNone ); + if ( aAction == ERegister ) + { + result = aArray.InsertInOrder( aComponent, ::CmpByPtr ); + } + else + { + TInt index( aArray.FindInOrder( aComponent, ::CmpByPtr ) ); + if ( index != KErrNotFound ) + { + aArray.Remove( index ); + } + } + __VTPRINTEXITR( "CompMgr.AddOrRemoveComponent %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ComponentOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< MVtUiComponent > CVtUiComponentManager::ComponentOrder() + { + return TLinearOrder< MVtUiComponent >( ::CmpMVtUiComponent ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::ComponentStateOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< TVtUiComponentState > CVtUiComponentManager::ComponentStateOrder() + { + return TLinearOrder< TVtUiComponentState >( ::CmpTVtUiComponentState ); + } + +// Implementation of CVtUiComponentManager::TStateListItem + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::TStateListItem +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::TStateListItem::TStateListItem( + const TVtUiComponentState& aState ) + : iComponentId( aState.Component().ComponentId() ), + iState( aState.State() ), iIsRoot( EFalse ), iIsVisited( EFalse ) + { + iBlockList.Union( aState.BlockList() ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::ComponentId +// --------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId +CVtUiComponentManager::TStateListItem::ComponentId() const + { + return iComponentId; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::State +// --------------------------------------------------------------------------- +// +TVtUiComponentState::TState CVtUiComponentManager::TStateListItem::State() const + { + return iState; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::SetState +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::TStateListItem::SetState( + TVtUiComponentState::TState aState ) + { + iState = aState; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::BlockList +// --------------------------------------------------------------------------- +// +const TVtUiBlockList& CVtUiComponentManager::TStateListItem::BlockList() const + { + return iBlockList; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::SetRoot +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::TStateListItem::SetRoot() + { + iIsRoot = ETrue; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::IsRoot +// --------------------------------------------------------------------------- +// +TBool CVtUiComponentManager::TStateListItem::IsRoot() const + { + return iIsRoot; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::SetVisited +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::TStateListItem::SetVisited() + { + iIsVisited = ETrue; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::IsVisited +// --------------------------------------------------------------------------- +// +TBool CVtUiComponentManager::TStateListItem::IsVisited() const + { + return iIsVisited; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::KeyOrder +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::TStateListItem::TKeyCmpFunc +CVtUiComponentManager::TStateListItem::KeyOrder() + { + return KeyCmpFunc; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::LinearOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< CVtUiComponentManager::TStateListItem > +CVtUiComponentManager::TStateListItem::LinearOrder() + { + return TLinearOrder< TStateListItem >( ItemCmpFunc ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::StateOrder +// --------------------------------------------------------------------------- +// +TLinearOrder< CVtUiComponentManager::TStateListItem > +CVtUiComponentManager::TStateListItem::StateOrder() + { + return TLinearOrder< TStateListItem >( StateCmpFunc ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::ItemCmpFunc +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::TStateListItem::ItemCmpFunc( + const TStateListItem& aItem1, const TStateListItem& aItem2 ) + { + return ( aItem1.ComponentId() - aItem2.ComponentId() ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::KeyCmpFunc +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::TStateListItem::KeyCmpFunc( + const MVtUiComponent::TComponentId* aKey, const TStateListItem& aItem ) + { + return ( *aKey - aItem.ComponentId() ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateListItem::StateCmpFunc +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::TStateListItem::StateCmpFunc( + const TStateListItem& aItem1, const TStateListItem& aItem2 ) + { + return ( aItem1.State() - aItem2.State() ); + } +// Implementation of CVtUiComponentManager::TStateList + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::TStateList +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::TStateList::TStateList() : iItems( 1 ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::~TStateList +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::TStateList::~TStateList() + { + iItems.Close(); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::AddItemL +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::TStateList::AddItemL( TStateListItem& aItem ) + { + iItems.InsertInOrderL( aItem, TStateListItem::LinearOrder() ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::ItemCount +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::TStateList::ItemCount() const + { + return iItems.Count(); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::FindItem +// --------------------------------------------------------------------------- +// +TInt CVtUiComponentManager::TStateList::FindItem( + MVtUiComponent::TComponentId aComponentId ) const + { + return iItems.FindInOrder( aComponentId, TStateListItem::KeyOrder() ); + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::At +// --------------------------------------------------------------------------- +// +CVtUiComponentManager::TStateListItem& +CVtUiComponentManager::TStateList::At( TInt aIndex ) + { + return iItems[ aIndex ]; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::At +// --------------------------------------------------------------------------- +// +const CVtUiComponentManager::TStateListItem& +CVtUiComponentManager::TStateList::At( TInt aIndex ) const + { + return iItems[ aIndex ]; + } + +// --------------------------------------------------------------------------- +// CVtUiComponentManager::TStateList::Sort +// --------------------------------------------------------------------------- +// +void CVtUiComponentManager::TStateList::Sort( + TLinearOrder< CVtUiComponentManager::TStateListItem > aOrder ) + { + iItems.Sort( aOrder ); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/compman/tvtuiblocklists.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/compman/tvtuiblocklists.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2006 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: Component ID block lists implementation. +* +*/ + + +#include "tvtuiblocklists.h" + +const static TUint KNullBlockMask = 0; + +// Implementation for TVtUiBlockList + +// ----------------------------------------------------------------------------- +// TVtUiBlockList::~TVtUiBlockList +// ----------------------------------------------------------------------------- +// +TVtUiBlockList::~TVtUiBlockList() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockList::TVtUiBlockList +// ----------------------------------------------------------------------------- +// +TVtUiBlockList::TVtUiBlockList() + { + } + +// Implementation for TVtUiBlockListBitField + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::TVtUiBlockListBitField +// ----------------------------------------------------------------------------- +// +TVtUiBlockListBitField::TVtUiBlockListBitField() : iBlockMask( KNullBlockMask ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::TVtUiBlockListBitField +// ----------------------------------------------------------------------------- +// +TVtUiBlockListBitField::TVtUiBlockListBitField( TUint aBlockMask ) + : iBlockMask( aBlockMask ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::IsEmpty +// ----------------------------------------------------------------------------- +// +TBool TVtUiBlockListBitField::IsEmpty() const + { + return !iBlockMask; + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::Contains +// ----------------------------------------------------------------------------- +// +TBool TVtUiBlockListBitField::Contains( MVtUiComponent::TComponentId aId ) const + { + return ( iBlockMask & aId ) && ( aId != MVtUiComponent::EComponentIdNull ); + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::Union +// ----------------------------------------------------------------------------- +// +void TVtUiBlockListBitField::Union( const TVtUiBlockList& aBlockList ) + { + iBlockMask |= + static_cast< const TVtUiBlockListBitField& >( aBlockList ).iBlockMask; + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::IteratorLC +// ----------------------------------------------------------------------------- +// +CVtUiBlockListIterator* TVtUiBlockListBitField::IteratorLC() const + { + return TVtUiBlockListBitField::CVtUiBListIteratorBF::NewLC( iBlockMask ); + } + +// Implementation for TVtUiBlockListBitField::CVtUiBListIteratorBF + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::CVtUiBListIteratorBF::NewLC +// ----------------------------------------------------------------------------- +// +TVtUiBlockListBitField::CVtUiBListIteratorBF* +TVtUiBlockListBitField::CVtUiBListIteratorBF::NewLC( + const TUint& aBlockMask ) + { + CVtUiBListIteratorBF* self = new ( ELeave ) + CVtUiBListIteratorBF( aBlockMask ); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::CVtUiBListIteratorBF::CVtUiBListIteratorBF +// ----------------------------------------------------------------------------- +// +TVtUiBlockListBitField::CVtUiBListIteratorBF::CVtUiBListIteratorBF( + const TUint& aBlockMask ) : iBlockMask( aBlockMask ), iCurrent( 1 ) + { + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::CVtUiBListIteratorBF::HasNext +// ----------------------------------------------------------------------------- +// +TBool TVtUiBlockListBitField::CVtUiBListIteratorBF::HasNext() const + { + return ( iCurrent && ( iCurrent <= iBlockMask ) ); + } + +// ----------------------------------------------------------------------------- +// TVtUiBlockListBitField::CVtUiBListIteratorBF::Next +// ----------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId +TVtUiBlockListBitField::CVtUiBListIteratorBF::Next() + { + MVtUiComponent::TComponentId id( MVtUiComponent::EComponentIdNull ); + + while ( HasNext() && !( iCurrent & iBlockMask ) ) + { + iCurrent <<= 1; + } + + if ( iCurrent ) + { + id = static_cast< MVtUiComponent::TComponentId >( iCurrent ); + } + + iCurrent <<= 1; + + return id; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/compman/tvtuicomponentstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/compman/tvtuicomponentstate.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2006 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: Component state base class. +* +*/ + + +#include + +#include "tvtuicomponentstate.h" + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::ActivateComponentL +// ----------------------------------------------------------------------------- +// +void TVtUiComponentState::ActivateComponentL() + { + __VTPRINTENTER( "CompState.ActivateComponentL" ) + iComponent.DoActivateL(); + iState = EActive; + __VTPRINTEXITR( "CompState.ActivateComponentL %d", iState ) + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::BlockComponentL +// ----------------------------------------------------------------------------- +// +void TVtUiComponentState::BlockComponentL() + { + __VTPRINTENTER( "CompState.BlockComponentL" ) + iComponent.DoDeactivateL(); + iState = EWaiting; + __VTPRINTEXITR( "CompState.BlockComponentL %d", iState ) + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::DeActivateComponentL +// ----------------------------------------------------------------------------- +// +void TVtUiComponentState::DeActivateComponentL() + { + __VTPRINTENTER( "CompState.DeActivateComponentL" ) + iComponent.DoDeactivateL(); + iState = EInactive; + __VTPRINTEXITR( "CompState.DeActivateComponentL %d", iState ) + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::State +// ----------------------------------------------------------------------------- +// +TVtUiComponentState::TState TVtUiComponentState::State() const + { + return iState; + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::Component +// ----------------------------------------------------------------------------- +// +const MVtUiComponent& TVtUiComponentState::Component() const + { + return iComponent; + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::BlockMask +// ----------------------------------------------------------------------------- +// +const TVtUiBlockList& TVtUiComponentState::BlockList() const + { + return iBlockList; + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::BlockMask +// ----------------------------------------------------------------------------- +// +TVtUiBlockList& TVtUiComponentState::BlockList() + { + return iBlockList; + } + +// ----------------------------------------------------------------------------- +// TVtUiComponentState::InformDeactivation +// ----------------------------------------------------------------------------- +// +TVtUiComponentState::TVtUiComponentState( MVtUiComponent& aComponent, + const TVtUiBlockList& aBlockList ) + : iComponent( aComponent ), iState( EInactive ) + { + __VTPRINTENTER( "CompState.ctor" ) + + if( MVtUiComponent::EComponentIdToolbar == iComponent.ComponentId() ) + return; + + iBlockList.Union( aBlockList ); + __VTPRINTEXIT( "CompState.ctor" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/cvtuiappshutter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/cvtuiappshutter.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 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: Class responsible for application exit. +* +*/ + + +#include "cvtuiappshutter.h" +#include "mvtuishutterobserver.h" +#include "mvtuistatecontext.h" +#include "mvtuinumbersource.h" +#include "tvtuilocalvariation.h" +#include +#include +#include +#include +#include + +// singleton instance +static CVtUiAppShutter* iAppShutter = NULL; + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::InstanceL +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter* CVtUiAppShutter::InstanceL( + MVtUiShutterObserver& aObserver ) + { + __VTPRINTENTER( "CVtUiAppShutter.InstanceL" ) + if ( iAppShutter == NULL ) + { + iAppShutter = new ( ELeave ) + CVtUiAppShutter( aObserver ); + } + __VTPRINTEXIT( "CVtUiAppShutter.InstanceL" ) + return iAppShutter; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CVtUiAppShutter +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter::CVtUiAppShutter( + MVtUiShutterObserver& aObserver ) : + iPendingStateFlags( 0 ), + iObserver( aObserver ) + { + iPendingStateFlags.Set( EShutterWaitingStart ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::~CVtUiAppShutter +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter::~CVtUiAppShutter() + { + __VTPRINTENTER( "CVtUiAppShutter.~" ) + // mark singleton null + iAppShutter = NULL; + delete iCallback; + __VTPRINTEXIT( "CVtUiAppShutter.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::StartShutdown +// Called when application may exit, i.e TVtUiStateResetting state receives +// ShutdownDoneL message. +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::StartShutdown() + { + __VTPRINTENTER( "CVtUiAppShutter.StartShutdown" ) + iPendingStateFlags.Clear( EShutterWaitingStart ); + ShutdownIfReadyAndDestroy(); + __VTPRINTEXITR( "CVtUiAppShutter.StartShutdown flags %d", + iPendingStateFlags.Value() ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::ShutdownWithEmergencyCallL +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::ShutdownWithEmergencyCallL( + MVtUiStateContext& aStateContext ) + { + // Leaves if other than emergency number is supplied... + CEmergencyCaller* emergency = CEmergencyCaller::DialEmergencyL( *this, + aStateContext ); + // therefore the flag and member variable must not be set before above call. + iPendingStateFlags.Set( EShutterWaitingEmergencyCallback ); + iEmergencyCaller = emergency; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::EmergencyCallDoneL +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::EmergencyCallDoneL() + { + // Destruction of emergency handler is done asynchrounously to avoid + // problems that might + iPendingStateFlags.Clear( EShutterWaitingEmergencyCallback ); + TCallBack cb( EmergencyResponseCallback, this ); + EnqueCallbackL( cb ); + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::EmergencyResponseCallback +// ----------------------------------------------------------------------------- +// +TInt CVtUiAppShutter::EmergencyResponseCallback( TAny* aAny ) + { + CVtUiAppShutter* shutter = + reinterpret_cast( aAny ); + // delete callback + delete shutter->iCallback; + shutter->iCallback = NULL; + // delete emergency caller + delete shutter->iEmergencyCaller; + shutter->iEmergencyCaller = NULL; + + shutter->ShutdownIfReadyAndDestroy(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::EnqueCallbackL +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::EnqueCallbackL( TCallBack& aCallback ) + { + __VTPRINTENTER( "CVtUiAppShutter.EnqueAsyncCommsCommandL" ) + if ( !iCallback ) + { + iCallback = new ( ELeave ) CAsyncCallBack( aCallback, EPriorityHigh ); + } + iCallback->Call(); + __VTPRINTEXIT( "CVtUiAppShutter.EnqueAsyncCommsCommandL" ) + __VTPRINTEXIT( "CVtUiAppShutter.EnqueCallbackL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::ShutdownIfReadyAndDestroy +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::ShutdownIfReadyAndDestroy() + { + __VTPRINTENTER( "CVtUiAppShutter.ShutdownIfReadyAndDestroy" ) + __VTPRINT2( DEBUG_GEN, " shutter flags %d", + iPendingStateFlags.Value() ); + if ( !iPendingStateFlags.Value() ) + { + iObserver.HandleShutdownReady(); + delete this; + } + __VTPRINTEXIT( "CVtUiAppShutter.ShutdownIfReadyAndDestroy" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CEmergencyCaller::DialEmergencyL +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter::CEmergencyCaller* CVtUiAppShutter::CEmergencyCaller:: + DialEmergencyL( + CVtUiAppShutter& aObserver, + MVtUiStateContext& aStateContext ) + { + __VTPRINTENTER( "CEmergencyCaller.DialEmergencyL" ) + CVtUiAppShutter::CEmergencyCaller* self = new ( ELeave ) + CVtUiAppShutter::CEmergencyCaller( aObserver, aStateContext ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __VTPRINTEXIT( "CEmergencyCaller.DialEmergencyL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CEmergencyCaller::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::CEmergencyCaller::ConstructL() + { + __VTPRINTENTER( "CEmergencyCaller.ConstructL" ) + const MVtUiNumberSource* source = iStateContext.NumberSource(); + if ( source ) + { + source->GetContents( iNumber ); + AknTextUtils::ConvertDigitsTo( iNumber, EDigitTypeWestern ); + User::LeaveIfError( iServer.Connect() ); + iEmergency = CPhCltEmergencyCall::NewL( this ); + TBool isEmergenyNumber = EFalse; + const TInt err = + iEmergency->FindEmergencyPhoneNumber( iNumber, isEmergenyNumber ); + + if ( err == KErrNone && isEmergenyNumber ) + { + __VTPRINT( DEBUG_GEN, "iEmergency->DialEmergencyCallL") + iEmergency->DialEmergencyCallL( iNumber ); + } + if ( !isEmergenyNumber || err ) + { + __VTPRINT( DEBUG_GEN, " not EC number => leave" ) + // Not an emergency call number. Abort emergency call process. + User::Leave( KErrArgument ); + } + } + __VTPRINTEXIT( "CEmergencyCaller.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CEmergencyCaller::CEmergencyCaller +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter::CEmergencyCaller::CEmergencyCaller( + CVtUiAppShutter& aObserver, + MVtUiStateContext& aStateContext ) : + iObserver( aObserver ), + iStateContext( aStateContext ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CEmergencyCaller::~CEmergencyCaller +// ----------------------------------------------------------------------------- +// +CVtUiAppShutter::CEmergencyCaller::~CEmergencyCaller() + { + __VTPRINTENTER( "CEmergencyCaller.~" ) + delete iEmergency; + iServer.Close(); + __VTPRINTEXIT( "CEmergencyCaller.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiAppShutter::CEmergencyCaller::HandleEmergencyDialL +// ----------------------------------------------------------------------------- +// +void CVtUiAppShutter::CEmergencyCaller::HandleEmergencyDialL( + const TInt ) + { + __VTPRINTENTER( "CEmergencyCaller.HandleEmergencyDialL" ) + iObserver.EmergencyCallDoneL(); + __VTPRINTEXIT( "CEmergencyCaller.HandleEmergencyDialL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/cvtuidtmfbuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/cvtuidtmfbuffer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,218 @@ +/* +* Copyright (c) 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 DTMF buffer class +* +*/ + + +#include +#include +#include "cvtuidtmfbuffer.h" +#include "tvtuiwsevent.h" +#include "VtUiUtility.h" + +// Time after which buffer will be automatically reset (4 seconds). +const TInt KBufferResetInterval = 4 * 1000000; + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::NewL +// --------------------------------------------------------------------------- +// +CVtUiDTMFBuffer* CVtUiDTMFBuffer::NewL( const CCoeEnv& aCoeEnv ) + { + __VTPRINTENTER( "CVtUiDTMFBuffer.NewL" ) + CVtUiDTMFBuffer* self = new ( ELeave ) CVtUiDTMFBuffer( aCoeEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CVtUiDTMFBuffer.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::~CVtUiDTMFBuffer +// --------------------------------------------------------------------------- +// +CVtUiDTMFBuffer::~CVtUiDTMFBuffer() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.~" ) + Cancel(); + iTimer.Close(); + __VTPRINTEXIT( "CVtUiDTMFBuffer.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::Append +// --------------------------------------------------------------------------- +// +TBool CVtUiDTMFBuffer::Append( TChar aChar ) + { + __VTPRINTENTER( "CVtUiDTMFBuffer.Append" ) + TBool result( EFalse ); + if ( VtUiUtility::IsDTMFCharacter( aChar ) ) + { + if ( iBuffer.Length() == iBuffer.MaxLength() ) + { + iBuffer = iBuffer.Right( 1 ); + } + iBuffer.Append( aChar ); + StartTimer(); + result = ETrue; + } + __VTPRINTEXITR( "CVtUiDTMFBuffer.Append %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::Reset +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::Reset() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.Reset" ) + Cancel(); + ResetBuffer(); + __VTPRINTEXIT( "CVtUiDTMFBuffer.Reset" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::Activate +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::Activate() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.Activate" ) + TVtUiWsEvent< MVtUiNumberSource > event( + EVtUiWsEventNumberSourceActivate, this ); + iCoeEnv.WsSession().SendEventToWindowGroup( + iCoeEnv.RootWin().WindowGroupId(), event ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.Activate" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::Deactivate +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::Deactivate() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.Deactivate" ) + TVtUiWsEvent< MVtUiNumberSource > event( + EVtUiWsEventNumberSourceDeactivate, this ); + iCoeEnv.WsSession().SendEventToWindowGroup( + iCoeEnv.RootWin().WindowGroupId(), event ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.Deactivate" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::GetContents +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::GetContents( TDes& aContents ) const + { + __VTPRINTENTER( "CVtUiDTMFBuffer.GetContents" ) + const TInt length( aContents.MaxLength() < iBuffer.Length() ? + aContents.MaxLength() : iBuffer.Length() ); + if ( length ) + { + aContents = iBuffer.Mid( 0, length ); + } + else + { + aContents.Zero(); + } + __VTPRINTEXIT( "CVtUiDTMFBuffer.GetContents" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::DoCancel +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::DoCancel() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.DoCancel" ) + iTimer.Cancel(); + __VTPRINTEXIT( "CVtUiDTMFBuffer.DoCancel" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::RunL +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::RunL() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.RunL" ) + TimerExpired( iStatus.Int() ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.RunL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::CVtUiDTMFBuffer +// --------------------------------------------------------------------------- +// +CVtUiDTMFBuffer::CVtUiDTMFBuffer( const CCoeEnv& aCoeEnv ) : + CActive( EPriorityStandard ), iCoeEnv( aCoeEnv ) + { + __VTPRINTENTER( "CVtUiDTMFBuffer.ctor" ) + CActiveScheduler::Add( this ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::ConstructL() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.ConstructL" ) + User::LeaveIfError( iTimer.CreateLocal() ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::StartTimer +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::StartTimer() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.StartTimer" ) + Cancel(); + SetActive(); + iTimer.After( iStatus, KBufferResetInterval ); + __VTPRINTEXIT( "CVtUiDTMFBuffer.StartTimer" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::TimerExpired +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::TimerExpired( TInt aError ) + { + __VTPRINTENTER( "CVtUiDTMFBuffer.TimerExpired" ) + if ( aError != KErrCancel ) + { + ResetBuffer(); + } + __VTPRINTEXIT( "CVtUiDTMFBuffer.TimerExpired" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDTMFBuffer::ResetBuffer +// --------------------------------------------------------------------------- +// +void CVtUiDTMFBuffer::ResetBuffer() + { + __VTPRINTENTER( "CVtUiDTMFBuffer.ResetBuffer" ) + iBuffer.Zero(); + __VTPRINTEXIT( "CVtUiDTMFBuffer.ResetBuffer" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/cvtuivideocontrolbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/cvtuivideocontrolbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,781 @@ +/* +* Copyright (c) 2006 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: Video control base class implementation. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "cvtuivideocontrolbase.h" +#include "mvtuicomponentmanager.h" +#include "VtUiLayout.h" + +// CONSTANTS + +// Index of white color. +const TInt KVtUiColorWhite = 0; + +// Amount of characters reserved per line. +const TInt KVtUiWaitingExtraSpacePerLine = KAknBidiExtraSpacePerLine + 1; + +// Amount of lines used for 'waiting text' +const TInt KVtUiWaitingLineCount = 2; + +// Implementation of CVtUiVideoControlBase + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::~CVtUiVideoControlBase +// --------------------------------------------------------------------------- +// +CVtUiVideoControlBase::~CVtUiVideoControlBase() + { + __VTPRINTENTER( "VidCtrlBase.~" ) + AknsUtils::DeregisterControlPosition( this ); + iStreamBitmap = NULL; // not owned. + delete iWaitingTextWrappedArray; + delete iWaitingTextWrapped; + delete iBgContext; + __VTPRINTEXIT( "VidCtrlBase.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::CVtUiVideoControlBase +// --------------------------------------------------------------------------- +// +CVtUiVideoControlBase::CVtUiVideoControlBase( + CVtUiBitmapManager& aBitmapManager ) : + iBitmapManager( &aBitmapManager ) + { + __VTPRINTENTER( "VidCtrlBase.ctor" ) + __VTPRINTEXIT( "VidCtrlBase.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::BaseConstructL +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::BaseConstructL() + { + __VTPRINTENTER( "VidCtrlBase.BaseConstructL" ) + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, Rect(), ETrue ); + CreateWindowL(); + SetExtent( TPoint(), TSize() ); + ActivateL(); + // Disable fading when using DP (eliminates nasty color error) + if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) ) + { + Window().SetNonFading( ETrue ); + } + WrapOnDemand(); + __VTPRINTEXIT( "VidCtrlBase.BaseConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetRenderingHint +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetRenderingHint( TRenderingHint aHint ) + { + __VTPRINTENTER( "VidCtrlBase.SetRenderingHint" ) + __VTPRINT2( DEBUG_GEN, "VidCtrlBase.SetRenderingHint aHint = %d", aHint ) + iHints.Set( aHint ); + __VTPRINTEXIT( "VidCtrlBase.SetRenderingHint" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::ClearRenderingHint +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::ClearRenderingHint( TRenderingHint aHint ) + { + __VTPRINTENTER( "VidCtrlBase.ClearRenderingHint" ) + __VTPRINT2( DEBUG_GEN, "VidCtrlBase.ClearRenderingHint aHint = %d", aHint ) + iHints.Clear( aHint ); + __VTPRINTEXIT( "VidCtrlBase.ClearRenderingHint" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::BitmapManager +// --------------------------------------------------------------------------- +// +CVtUiBitmapManager& CVtUiVideoControlBase::BitmapManager() const + { + return *iBitmapManager; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::Bitmap +// --------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiVideoControlBase::Bitmap( TVtUiBitmapPoolId aId ) const + { + __VTPRINTENTER( "VidCtrlBase.Bitmap" ) + CFbsBitmap* bitmap = NULL; + iBitmapManager->GetBitmap( aId, bitmap ); + __VTPRINTEXITR( "VidCtrlBase.Bitmap %d", TInt( bitmap ) ) + return bitmap; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::AdjustPointForDP +// --------------------------------------------------------------------------- +// +TPoint CVtUiVideoControlBase::AdjustPointForDP( const TPoint aPoint ) const + { + __VTPRINTENTER( "VidCtrlBase.AdjustPointForDP" ) + TPoint result( aPoint ); + if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) ) + { + if ( result.iX & 1 ) + { + result.iX++; + } + } + __VTPRINTEXIT( "VidCtrlBase.AdjustPointForDP" ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::AdjustRectForDP +// --------------------------------------------------------------------------- +// +TRect CVtUiVideoControlBase::AdjustRectForDP( const TRect aRect ) const + { + __VTPRINTENTER( "VidCtrlBase.AdjustRectForDP" ) + TRect result( aRect ); + if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) ) + { + if ( result.iTl.iX & 1 ) + { + result.Move( 1, 0 ); + result.SetWidth( Max( 0, result.Width() - 1 ) ); + } + if ( result.Width() & 1 ) + { + result.SetWidth( result.Width() - 1 ); + } + } + __VTPRINTEXIT( "VidCtrlBase.AdjustRectForDP" ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::WaitingTextLayout +// --------------------------------------------------------------------------- +// +TAknTextLineLayout CVtUiVideoControlBase::WaitingTextLayout( TInt ) + { + return TAknTextLineLayout(); + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::HandleSizeChanged +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::HandleSizeChanged() + { + __VTPRINTENTER( "VidCtrlBase.HandleSizeChanged" ) + __VTPRINTEXIT( "VidCtrlBase.HandleSizeChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DrawSkinnedBackground +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DrawSkinnedBackground( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DrawSkinnedBackground" ) + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); + AknsDrawUtils::Background( skin, cc, this, aGc, Rect() ); + __VTPRINTEXIT( "VidCtrlBase.DrawSkinnedBackground" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::MopSupplyObject +// ----------------------------------------------------------------------------- +// + +TTypeUid::Ptr CVtUiVideoControlBase::MopSupplyObject( TTypeUid aId ) + { + __VTPRINTENTER( "VidCtrlBase.MopSupplyObject" ) + // Required during rendering of the background skin in Draw() + if (aId.iUid == MAknsControlContext::ETypeId) + { + __VTPRINTEXIT( "VidCtrlBase.MopSupplyObject.1" ) + return MAknsControlContext::SupplyMopObject( aId, iBgContext ); + } + __VTPRINTEXIT( "VidCtrlBase.MopSupplyObject.2" ) + return CCoeControl::MopSupplyObject( aId ); + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DrawColoredBackground +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DrawColoredBackground( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DrawColoredBackground" ) + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + aGc.SetPenStyle( CGraphicsContext::ENullPen ); + aGc.SetBrushColor( AKN_LAF_COLOR( KVtUiColorWhite ) ); + aGc.DrawRect( Rect() ); + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + __VTPRINTEXIT( "VidCtrlBase.DrawColoredBackground" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DrawWaitingText +// --------------------------------------------------------------------------- +// +TBool CVtUiVideoControlBase::DrawWaitingText( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DrawWaitingText" ) + const TInt count( iWaitingTextWrappedArray->Count() ); + if ( count > 0 ) + { + aGc.SetClippingRect( StreamClippingRect() ); + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb color( iWaitingTextLine1Layout.Color() ); + AknsUtils::GetCachedColor( + skin, + color, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + iWaitingTextLine1Layout.DrawText( + aGc, + iWaitingTextWrappedArray->At( 0 ), // first line + EFalse, + color ); + if ( count > 1 ) // two lines + { + iWaitingTextLine2Layout.DrawText( + aGc, + iWaitingTextWrappedArray->At( 1 ), // second line + EFalse, + color ); + } + } + __VTPRINTEXITR( "VidCtrlBase.DrawWaitingText %d", ETrue ) + return ETrue; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DrawBlind +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DrawBlind( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DrawBlind" ) + CFbsBitmap* icon = BlindImage(); + if ( icon ) + { + CFbsBitmap* mask = BlindMask(); + if ( mask ) + { + aGc.BitBltMasked( + BlindBlitPosition(), + icon, + TRect( icon->SizeInPixels() ), + mask, + ETrue ); + } + else + { + aGc.BitBlt( + BlindBlitPosition(), + icon ); + } + } + __VTPRINTEXIT( "VidCtrlBase.DrawBlind" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DrawStream +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DrawStream( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DrawStream" ) + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + aGc.SetClippingRect( StreamClippingRect() ); + aGc.BitBlt( StreamBlitPosition(), iStreamBitmap ); + aGc.CancelClippingRect(); + __VTPRINTEXIT( "VidCtrlBase.DrawStream" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::StreamBlitPosition +// --------------------------------------------------------------------------- +// +TPoint CVtUiVideoControlBase::StreamBlitPosition() const + { + __VTPRINTENTER( "VidCtrlBase.StreamBlitPosition" ) + __VTPRINTEXIT( "VidCtrlBase.StreamBlitPosition" ) + return Rect().iTl; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::StreamClippingRect +// --------------------------------------------------------------------------- +// +TRect CVtUiVideoControlBase::StreamClippingRect() const + { + __VTPRINTENTER( "VidCtrlBase.StreamClippingRect" ) + __VTPRINTEXIT( "VidCtrlBase.StreamClippingRect" ) + return Rect(); + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::BlindImage +// --------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiVideoControlBase::BlindImage() const + { + __VTPRINTENTER( "VidCtrlBase.BlindImage" ) + __VTPRINTEXIT( "VidCtrlBase.BlindImage" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::BlindMask +// --------------------------------------------------------------------------- +// +CFbsBitmap* CVtUiVideoControlBase::BlindMask() const + { + __VTPRINTENTER( "VidCtrlBase.BlindMask" ) + __VTPRINTEXIT( "VidCtrlBase.BlindMask" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::BlindBlitPosition +// --------------------------------------------------------------------------- +// +TPoint CVtUiVideoControlBase::BlindBlitPosition() const + { + __VTPRINTENTER( "VidCtrlBase.BlindBlitPosition" ) + __VTPRINTEXIT( "VidCtrlBase.BlindBlitPosition" ) + return TPoint(); + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::Reset +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::Reset() + { + __VTPRINTENTER( "VidCtrlBase.Reset" ) + iBlindStatus = EFalse; + iStreamBitmap = NULL; + iWaitingTextShow = EFalse; + __VTPRINTEXIT( "VidCtrlBase.Reset" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetBlind +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetBlind( TBool aBlindStatus ) + { + __VTPRINTENTER( "VidCtrlBase.SetBlind" ) + if ( iBlindStatus != aBlindStatus ) + { + iBlindStatus = aBlindStatus; + DrawNow(); + } + __VTPRINTEXITR( "VidCtrlBase.SetBlind %d", iBlindStatus ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::IsAlphaZero +// Checks if the alpha has been set to zero. +// ----------------------------------------------------------------------------- +// +TBool CVtUiVideoControlBase::IsAlphaZero() const + { + __VTPRINTENTER( "VidCtrlBase.IsAlphaZero" ) + TBool isZero( EFalse ); + const CWsScreenDevice& sdev( + *static_cast< CWsScreenDevice*>( SystemGc().Device() ) ); + if ( sdev.DisplayMode() == EColor16MA ) + { + TRgb color; + TPoint point( Rect().Center() ); + sdev.GetPixel( color, point ); + isZero = ( color.Alpha() == 0 ); + } + __VTPRINTEXITR( "VidCtrlBase.IsAlphaZero %d", isZero ) + return isZero; + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetAlpha +// Sets alpha. +// ----------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetAlpha( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.SetAlpha" ) + aGc.SetDrawMode( CGraphicsContext::EDrawModeOR ); + aGc.SetBrushColor( TRgb( 0, 0, 0, 255 ) ); + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + aGc.Clear(); + aGc.Reset(); + __VTPRINTEXIT( "VidCtrlBase.SetAlpha" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetStreamBitmap +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetStreamBitmap( CFbsBitmap* aStreamBitmap ) + { + __VTPRINTENTER( "VidCtrlBase.SetStreamBitmap" ) + __VTPRINT2( DEBUG_GEN, "VidCtrlBase.SetStreamBitmap %d", + (TInt) aStreamBitmap ) + const CFbsBitmap* oldBitmap( iStreamBitmap ); + iStreamBitmap = aStreamBitmap; + iSetAlpha = IsAlphaZero(); + if ( iStreamBitmap ) + { + RedrawStream(); + } + else if ( oldBitmap ) + { + DrawNow(); + } + __VTPRINTEXIT( "VidCtrlBase.SetStreamBitmap" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetStreamBitmapReserve +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetStreamBitmapReserve( + CFbsBitmap* aStreamBitmap ) + { + __VTPRINTENTER( "VidCtrlBase.SetStreamBitmapReserve" ) + __VTPRINT2( DEBUG_GEN, "VidCtrlBase.SetStreamBitmapReserve %d", + (TInt) aStreamBitmap ) + const CFbsBitmap* oldBitmap( iStreamBitmap ); + iStreamBitmap = aStreamBitmap; + if ( iStreamBitmap ) + { + RedrawStream(); + } + else if ( oldBitmap ) + { + DrawNow(); + } + __VTPRINTEXIT( "VidCtrlBase.SetStreamBitmapReserve" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetWaiting +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetWaiting( TBool aShowWaitingText ) + { + __VTPRINTENTER( "VidCtrlBase.SetWaiting" ) + if ( iWaitingTextShow != aShowWaitingText ) + { + iWaitingTextShow = aShowWaitingText; + WrapOnDemand(); + DrawNow(); + } + __VTPRINTEXITR( "VidCtrlBase.SetWaiting %d", iWaitingTextShow ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::Redraw +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::Redraw() + { + __VTPRINTENTER( "VidCtrlBase.Redraw" ) + if ( iStreamBitmap ) + { + __VTPRINT( DEBUG_GEN, "VidCtrlBase.Redraw drawing" ); + DrawNow(); + } + __VTPRINTEXIT( "VidCtrlBase.Redraw" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::Draw +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::Draw( const TRect& ) const + { + __VTPRINTENTER( "VidCtrlBase.Draw" ) + DoDraw( SystemGc() ); + __VTPRINTEXIT( "VidCtrlBase.Draw" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::SizeChanged +// ----------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SizeChanged() + { + __VTPRINTENTER( "VidCtrlBase.SizeChanged" ) + AknsUtils::RegisterControlPosition( this ); + + TRect bgRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, bgRect ); + iBgContext->SetRect( bgRect ); + + HandleSizeChanged(); + TRect parent( Rect() ); + if ( !parent.IsEmpty() ) + { + TAknTextLineLayout text( WaitingTextLayout( 0 ) ); + iWaitingTextLine1Layout.LayoutText( parent, text ); + text = WaitingTextLayout( 1 ); + iWaitingTextLine2Layout.LayoutText( parent, text ); + delete iWaitingTextWrapped; + iWaitingTextWrapped = NULL; + delete iWaitingTextWrappedArray; + iWaitingTextWrappedArray = NULL; + WrapOnDemand(); + } + __VTPRINTEXIT( "VidCtrlBase.SizeChanged" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::PositionChanged +// ----------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::PositionChanged() + { + __VTPRINTENTER( "VidCtrlBase.SizeChanged" ) + AknsUtils::RegisterControlPosition( this ); + __VTPRINTEXIT( "VidCtrlBase.SizeChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::RedrawStream +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::RedrawStream() + { + __VTPRINTENTER( "VidCtrlBase.RedrawStream" ) + const TRect clippingRect( StreamClippingRect() ); + Window().Invalidate( clippingRect ); + Window().BeginRedraw( clippingRect ); + ActivateGc(); + CWindowGc& gc = SystemGc(); + if ( iSetAlpha ) + { + SetAlpha( gc ); + iSetAlpha = EFalse; + } + DoDrawStream( gc ); + DoDrawBlind( gc ); + DeactivateGc(); + Window().EndRedraw(); + __VTPRINTEXIT( "VidCtrlBase.RedrawStream" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::WrapOnDemand +// ----------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::WrapOnDemand() + { + __VTPRINTENTER( "VidCtrlBase.WrapOnDemand" ) + if ( iWaitingTextShow && !iWaitingTextWrapped ) + { + TRAP_IGNORE( WrapWaitingTextL() ); + } + __VTPRINTEXIT( "VidCtrlBase.WrapOnDemand" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoControlBase::WrapWaitingTextL +// ----------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::WrapWaitingTextL() + { + __VTPRINTENTER( "VidCtrlBase.WrapWaitingTextL" ) + HBufC* waitingText = + StringLoader::LoadLC( R_VIDEOTELUI_QTN_INCAL_WAITING_IMAGE ); + + CArrayFix< TInt >* lines = + new ( ELeave ) CArrayFixFlat< TInt >( KVtUiWaitingLineCount ); + CleanupStack::PushL( lines ); + lines->AppendL( iWaitingTextLine1Layout.TextRect().Width() ); + lines->AppendL( iWaitingTextLine2Layout.TextRect().Width() ); + + CArrayFix* wrap = + new ( ELeave ) CArrayFixFlat< TPtrC >( KVtUiWaitingLineCount ); + CleanupStack::PushL( wrap ); + wrap->AppendL( TPtrC() ); + wrap->AppendL( TPtrC() ); + + HBufC* waitingTextWrapped = + HBufC::NewLC( + waitingText->Length() + + lines->Count() * KVtUiWaitingExtraSpacePerLine ); + + TPtr textBuf = waitingTextWrapped->Des(); + textBuf.Zero(); + textBuf.Append( *waitingText ); + + AknBidiTextUtils::ConvertToVisualAndWrapToArrayL( + textBuf, + *lines, + *iWaitingTextLine1Layout.Font(), + *wrap, + ETrue ); + + CleanupStack::Pop( waitingTextWrapped ); + iWaitingTextWrapped = waitingTextWrapped; + + CleanupStack::Pop( wrap ); + iWaitingTextWrappedArray = wrap; + + CleanupStack::PopAndDestroy( lines ); + CleanupStack::PopAndDestroy( waitingText ); + __VTPRINTEXIT( "VidCtrlBase.WrapWaitingTextL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DoDraw +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DoDraw( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.Draw(gc)" ) + if ( iSetAlpha ) + { + SetAlpha( aGc ); + iSetAlpha = EFalse; + } + DoDrawBackground( aGc ); + if ( !DoDrawWaitingText( aGc ) ) + { + DoDrawStream( aGc ); + DoDrawBlind( aGc ); + } + __VTPRINTEXIT( "VidCtrlBase.Draw(gc)" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DoDrawBackground +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DoDrawBackground( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DoDrawBackground" ) + if ( iHints.IsSet( ESkinnedBackground ) ) + { + DrawSkinnedBackground( aGc ); + } + else if ( iHints.IsSet( EColoredBackground ) ) + { + DrawColoredBackground( aGc ); + } + __VTPRINTEXIT( "VidCtrlBase.DoDrawBackground" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DoDrawWaitingText +// --------------------------------------------------------------------------- +// +TBool CVtUiVideoControlBase::DoDrawWaitingText( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DoDrawWaitingText" ) + TBool wasDrawn( EFalse ); + if ( iHints.IsClear( ENoWaitingText ) && iWaitingTextShow && + iWaitingTextWrapped && iWaitingTextWrappedArray ) + { + wasDrawn = DrawWaitingText( aGc ); + } + __VTPRINTEXITR( "VidCtrlBase.DoDrawWaitingText %d", wasDrawn ) + return wasDrawn; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DoDrawBlind +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DoDrawBlind( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DoDrawBlind" ) + if ( iBlindStatus && iHints.IsClear( ENoBlindIcon ) ) + { + DrawBlind( aGc ); + } + __VTPRINTEXIT( "VidCtrlBase.DoDrawBlind" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::DoDrawStream +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::DoDrawStream( CWindowGc& aGc ) const + { + __VTPRINTENTER( "VidCtrlBase.DoDrawStream" ) + if ( iStreamBitmap ) + { + DrawStream( aGc ); + } + __VTPRINTEXIT( "VidCtrlBase.DoDrawStream" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::SetRemoteVideoControl +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase::SetRemoteVideoControl( CCoeControl* aRemoteControl ) + { + __VTPRINTENTER( "VidCtrlBase.SetRemoteVideoControl" ) + iRemoteVideoControl = aRemoteControl; + __VTPRINTEXIT( "VidCtrlBase.SetRemoteVideoControl" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::LayoutRemoteVideo +// --------------------------------------------------------------------------- +// +void CVtUiVideoControlBase:: LayoutRemoteVideo() + { + __VTPRINTENTER( "VidCtrlBase.LayoutRemoteVideo" ) + __VTPRINTEXIT( "VidCtrlBase.LayoutRemoteVideo" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoControlBase::RemoteVideoControl +// --------------------------------------------------------------------------- +// +CCoeControl * CVtUiVideoControlBase::RemoteVideoControl() + { + __VTPRINTENTER( "VidCtrlBase.RemoteVideoControl" ) + __VTPRINTEXIT( "VidCtrlBase.RemoteVideoControl" ) + return iRemoteVideoControl; + + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/cvtuifeaturebase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/cvtuifeaturebase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2006 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: CVtUiFeatureBase implementation. +* +*/ + + +// INCLUDE FILES + +#include "cvtuifeaturebase.h" +#include "mvtuifeature.h" +#include "cvtuicommandpolicymanager.h" +#include +#include "cvtuifeaturemanager.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::CVtUiFeatureBase +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiFeatureBase::CVtUiFeatureBase( TVtUiFeatureId aId, + CVtUiFeatureManager& aFeatureManager ) : iId( aId ), + iFeatureManager ( aFeatureManager ), + iFeatureState ( EUnprepared ) + { + __VTPRINTENTER( "CVtUiFeatureBase.CVtUiFeatureBase" ) + __VTPRINTEXIT( "CVtUiFeatureBase.CVtUiFeatureBase" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiFeatureBase::StartL() + { + if ( iFeatureState == EUnprepared ) + { + iAsyncCallback->Cancel(); + InitFeatureL(); + } + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::BaseConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiFeatureBase::BaseConstructL() + { + __VTPRINTENTER( "CVtUiFeatureBase.BaseConstructL" ) + iAsyncCallback = + new ( ELeave ) CAsyncCallBack ( CActive::EPriorityLow ); + iAsyncCallback->Set( TCallBack( &DoInitFeaturesL, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "CVtUiFeatureBase.BaseConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::~CVtUiFeatureBase +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiFeatureBase::~CVtUiFeatureBase() + { + __VTPRINTENTER( "CVtUiFeatureBase.~" ) + delete iAsyncCallback; + __VTPRINTEXIT( "CVtUiFeatureBase.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::State +// ----------------------------------------------------------------------------- +// +MVtUiFeature::TVtUiFeatureState CVtUiFeatureBase::State() const + { + __VTPRINTENTER( "CVtUiFeatureBase.State" ) + __VTPRINTEXITR( "CVtUiFeatureBase.State. %d", (TInt)iFeatureState ) + return iFeatureState; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::Id +// ----------------------------------------------------------------------------- +// +TVtUiFeatureId CVtUiFeatureBase::Id() const + { + __VTPRINTENTER( "CVtUiFeatureBase.Id" ) + __VTPRINTEXITR( "CVtUiFeatureBase.Id %d", iId ) + return iId; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureBase::DoInitFeaturesL +// ----------------------------------------------------------------------------- +// +TInt CVtUiFeatureBase::DoInitFeaturesL( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiFeatureBase.DoInitFeaturesL" ) + CVtUiFeatureBase* self = static_cast< CVtUiFeatureBase* >( aAny ); + self->InitFeatureL(); + __VTPRINTEXIT( "CVtUiFeatureBase.DoInitFeaturesL" ) + return KErrNone; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/cvtuifeaturemanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/cvtuifeaturemanager.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,280 @@ +/* +* Copyright (c) 2006 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: Feature manager for Video Telephone application. +* +*/ + + + +// INCLUDE FILES +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" +#include "cvtuifixedtoolbar.h" +#include "cvtuifloatingtoolbar.h" +#include "cvtuimenus.h" +#include "cvtuifeaturebase.h" +#include "tvtuistates.h" +#include +#include "cvtuicommandpolicymanager.h" +#include "cvtuisoftkeys.h" +#include "cvtuinumberentry.h" +#include "cvtuivideoquality.h" +#include "cvtuiwhitebalance.h" +#include "cvtuicolortone.h" +#include "cvtuidialer.h" +#include "cvtuibrightness.h" +#include "cvtuicontrast.h" +#include "cvtuivolume.h" +#include "cvtuizoom.h" + +#include + +// CONSTANTS +const TInt KFeatureCount = 9; + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Used in Attach() method to compare two instances of MVtUiFeature. +// --------------------------------------------------------------------------- +// +TInt FeatureCmpFunc( const CVtUiFeatureBase& aV1, const CVtUiFeatureBase& aV2 ) + { + return ( aV1.Id() - aV2.Id() ); + } + +// --------------------------------------------------------------------------- +// Used in GetFeature() method to search feature by id. +// --------------------------------------------------------------------------- +// +TInt FeatureIdCmpFunc( const TInt* aId, const CVtUiFeatureBase& aFeature ) + { + return ( *aId - aFeature.Id() ); + } + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CVtUiFeatureManager* CVtUiFeatureManager::NewL( CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates, MVtUiCommandManager& aCommandManager, + MVtUiComponentManager& aComponentManager ) + { + CVtUiFeatureManager* self = new( ELeave ) CVtUiFeatureManager( aAppUi, + aUiStates, aCommandManager, aComponentManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::CVtUiFeatureManager +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiFeatureManager::CVtUiFeatureManager( CVtUiAppUi& aAppUi, + TVtUiStates& aUiStates, MVtUiCommandManager& aCommandManager, + MVtUiComponentManager& aComponentManager ) + : iAppUi( aAppUi ), iUiStates( aUiStates ), + iCommandManager( aCommandManager ), iComponentManager( aComponentManager ) + { + __VTPRINTENTER( "CVtUiFeatureManager.CVtUiFeatureManager" ) + __VTPRINTEXIT( "CVtUiFeatureManager.CVtUiFeatureManager" ) + } + + +// ----------------------------------------------------------------------------- +//CVtUiFeatureManager::~CVtUiFeatureManager() +// ----------------------------------------------------------------------------- +// +CVtUiFeatureManager::~CVtUiFeatureManager() + { + __VTPRINTENTER( "CVtUiFeatureManager.~" ) + iFeatures.ResetAndDestroy(); + __VTPRINTEXIT( "CVtUiFeatureManager.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CVtUiFeatureManager::ConstructL() + { + __VTPRINTENTER( "CVtUiFeatureManager.ConstructL" ) + iFeatures.ReserveL( KFeatureCount ); + CreateFeaturesL(); + __VTPRINTEXIT( "CVtUiFeatureManager.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::CreateFeaturesL +// ----------------------------------------------------------------------------- +// +void CVtUiFeatureManager::CreateFeaturesL() + { + __VTPRINTENTER( "CVtUiFeatureManager.CreateFeaturesL" ) + CVtUiFeatureBase* feature = NULL; + TLinearOrder< CVtUiFeatureBase > + linOrder( ::FeatureCmpFunc ); + + if ( AknLayoutUtils::PenEnabled() ) + { + feature = CVtUiFixedToolbar::NewL( *this ); + } + else + { + feature = CVtUiFloatingToolbar::NewL( *this ); + } + + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiMenus::NewL( *this ); + iFeatures.InsertInOrderL( feature, linOrder ); + + feature = CVtUiSoftkeys::NewL( *this, *iAppUi.GetCba() ); + iFeatures.InsertInOrderL( feature, linOrder ); + + feature = CVtUiNumberEntry::NewL( *this ); + iFeatures.InsertInOrderL( feature, linOrder ); + + if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) ) + { + feature = CVtUiDialer::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + } + + feature = CVtUiVideoQuality::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiWhiteBalance::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiColorTone::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiBrightness::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiContrast::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiVolume::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + feature = CVtUiZoom::NewL( *this ); + if ( feature ) + { + iFeatures.InsertInOrderL( feature, linOrder ); + } + + __VTPRINTEXIT( "CVtUiFeatureManager.CreateFeaturesL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::AppUi +// ----------------------------------------------------------------------------- +// +CVtUiAppUi& CVtUiFeatureManager::AppUi() + { + __VTPRINTENTER( "CVtUiFeatureManager.AppUi" ) + __VTPRINTEXIT( "CVtUiFeatureManager.AppUi" ) + return iAppUi; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::GetFeatureById +// ----------------------------------------------------------------------------- +// +MVtUiFeature* CVtUiFeatureManager::GetFeatureById( TInt aId ) + { + __VTPRINTENTER( "CVtUiFeatureManager.GetFeatureById" ) + CVtUiFeatureBase* result = NULL; + + TInt index( iFeatures.FindInOrder( aId, ::FeatureIdCmpFunc ) ); + if ( index != KErrNotFound ) + { + result = iFeatures[ index ]; + } + __VTPRINTEXITR( "CVtUiFeatureManager.GetFeatureById %d", (TInt)result ) + return result; + + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::UiStates +// ----------------------------------------------------------------------------- +// + +TVtUiStates& CVtUiFeatureManager::UiStates() + { + return iUiStates; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::CommandManager +// ----------------------------------------------------------------------------- +// +MVtUiCommandManager& CVtUiFeatureManager::CommandManager() + { + return iCommandManager; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::ComponentManager +// ----------------------------------------------------------------------------- +// +MVtUiComponentManager& CVtUiFeatureManager::ComponentManager() + { + return iComponentManager; + } + +// ----------------------------------------------------------------------------- +// CVtUiFeatureManager::Model +// ----------------------------------------------------------------------------- +// +CVtEngModel& CVtUiFeatureManager::Model() + { + return iAppUi.Model(); + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuicmdclosedialer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuicmdclosedialer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2006 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: Mini dialer open command implementation. +* +*/ + + +#include + +#include "cvtuicmdclosedialer.h" +#include "mvtuicommandmanager.h" +#include "mvtuifeature.h" +#include "videotelui.hrh" + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::NewL +// --------------------------------------------------------------------------- +// +CVtUiCmdCloseDialer* CVtUiCmdCloseDialer::NewL( + MVtUiCommandManager& aCommandManager, MVtUiFeature& aFeature ) + { + __VTPRINTENTER( "CmdCloseDial.NewL" ) + CVtUiCmdCloseDialer* self = + new ( ELeave ) CVtUiCmdCloseDialer( aCommandManager, aFeature ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CmdCloseDial.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::~CVtUiCmdCloseDialer +// --------------------------------------------------------------------------- +// +CVtUiCmdCloseDialer::~CVtUiCmdCloseDialer() + { + __VTPRINTENTER( "CmdCloseDial.~" ) + iCommandManager.UnregisterCommand( *this ); + __VTPRINTEXIT( "CmdCloseDial.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::HandleL +// --------------------------------------------------------------------------- +// +void CVtUiCmdCloseDialer::HandleL() + { + __VTPRINTENTER( "CmdCloseDial.HandleL" ) + iFeature.Stop(); + __VTPRINTEXIT( "CmdCloseDial.HandleL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::IsEnabled +// --------------------------------------------------------------------------- +// +TBool CVtUiCmdCloseDialer::IsEnabled() const + { + __VTPRINTENTER( "CmdCloseDial.IsEnabled" ) + const TBool enabled( iFeature.State() == MVtUiFeature::EActive ); + __VTPRINTEXITR( "CmdCloseDial.IsEnabled %d", enabled ) + return enabled; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::CVtUiCmdCloseDialer +// --------------------------------------------------------------------------- +// +CVtUiCmdCloseDialer::CVtUiCmdCloseDialer( + MVtUiCommandManager& aCommandManager, MVtUiFeature& aFeature ) + : CVtUiFeatureCmdBase( aFeature, EVtUiDialerExit ), + iCommandManager( aCommandManager ) + { + __VTPRINTENTER( "CmdCloseDial.ctor" ) + __VTPRINTEXIT( "CmdCloseDial.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdCloseDialer::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiCmdCloseDialer::ConstructL() + { + __VTPRINTENTER( "CmdCloseDial.ConstructL" ) + iCommandManager.RegisterCommandL( *this ); + __VTPRINTEXIT( "CmdCloseDial.ConstructL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuicmdopendialer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuicmdopendialer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2006 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: Mini dialer open command implementation. +* +*/ + + +#include + +#include "cvtuicmdopendialer.h" +#include "mvtuicommandmanager.h" +#include "videotelui.hrh" + +// --------------------------------------------------------------------------- +// CVtUiCmdOpenDialer::NewL +// --------------------------------------------------------------------------- +// +CVtUiCmdOpenDialer* CVtUiCmdOpenDialer::NewL( + MVtUiCommandManager& aCommandManager, MVtUiFeature& aFeature ) + { + __VTPRINTENTER( "CmdOpenDial.NewL" ) + CVtUiCmdOpenDialer* self = + new ( ELeave ) CVtUiCmdOpenDialer( aCommandManager, aFeature ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CmdOpenDial.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiCmdOpenDialer::~CVtUiCmdOpenDialer +// --------------------------------------------------------------------------- +// +CVtUiCmdOpenDialer::~CVtUiCmdOpenDialer() + { + __VTPRINTENTER( "CmdOpenDial.~" ) + iCommandManager.UnregisterCommand( *this ); + __VTPRINTEXIT( "CmdOpenDial.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdOpenDialer::CVtUiCmdOpenDialer +// --------------------------------------------------------------------------- +// +CVtUiCmdOpenDialer::CVtUiCmdOpenDialer( + MVtUiCommandManager& aCommandManager, MVtUiFeature& aFeature ) + : CVtUiFeatureCmdBase( aFeature, EVtUiCmdSendDTMF ), + iCommandManager( aCommandManager ) + { + __VTPRINTENTER( "CmdOpenDial.ctor" ) + __VTPRINTEXIT( "CmdOpenDial.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiCmdOpenDialer::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiCmdOpenDialer::ConstructL() + { + __VTPRINTENTER( "CmdOpenDial.ConstructL" ) + iCommandManager.RegisterCommandL( *this ); + __VTPRINTEXIT( "CmdOpenDial.ConstructL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuidialer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuidialer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,196 @@ +/* +* Copyright (c) 2006 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: Mini dialer feature +* +*/ + + +#include +#include +#include + +#include "cvtuidialer.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicommandmanager.h" +#include "mvtuicomponentmanager.h" +#include "cvtuicmdopendialer.h" +#include "cvtuicmdclosedialer.h" +#include "cvtuidialercontainer.h" +#include "cvtuidialervideocontrol.h" +#include "CVtUiAppUi.h" +#include "tvtuistates.h" +#include "CVtUiContextControl.h" + +// ======== LOCAL FUNCTIONS ======== + +// Implementation of CVtUiDialer + +// --------------------------------------------------------------------------- +// CVtUiDialer::NewL +// --------------------------------------------------------------------------- +// +CVtUiDialer* CVtUiDialer::NewL( CVtUiFeatureManager& aFeatureManager ) + { + __VTPRINTENTER( "Dial.NewL" ) + CVtUiDialer* self = NULL; + self = new ( ELeave ) CVtUiDialer( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "Dial.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::~CVtUiDialer +// --------------------------------------------------------------------------- +// +CVtUiDialer::~CVtUiDialer() + { + __VTPRINTENTER( "Dial.~" ) + delete iCmdOpen; + delete iCmdClose; + delete iDialerContainer; + __VTPRINTEXIT( "Dial.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::VideoWindow +// --------------------------------------------------------------------------- +// +MVtUiVideoWindow& CVtUiDialer::VideoWindow() const + { + __VTPRINTENTER( "Dial.VideoWindow" ) + __VTPRINTEXIT( "Dial.VideoWindow" ) + return *iDialerContainer->ComponentAsVideoWindow(); + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::VideoControl +// --------------------------------------------------------------------------- +// +CCoeControl& CVtUiDialer::VideoControl() const + { + __VTPRINTENTER( "Dial.VideoControl" ) + __VTPRINTEXIT( "Dial.VideoControl" ) + return *static_cast< MVtUiComponent* > + ( iDialerContainer )->ComponentAsControl(); + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::StartL +// --------------------------------------------------------------------------- +// +void CVtUiDialer::StartL() + { + __VTPRINTENTER( "Dial.StartL" ) + if ( State() == MVtUiFeature::EUnprepared ) + { + // fixed toolbar is set to be hidden + iFeatureManager.AppUi().ContextControl().MakeVisible( EFalse ); + iFeatureManager.UiStates().SetIsDialerActivating( ETrue ); + iFeatureManager.UiStates().SetIsFixedToolbarVisible( EFalse ); + iFeatureManager.CommandManager().RefreshL(); + PrepareL(); + iFeatureManager.ComponentManager().RequestActivationL( + MVtUiComponent::EComponentIdDialer ); + iFeatureState = EActive; + iFeatureManager.AppUi().SwitchLayoutToFlatStatusPaneL( ETrue ); + } + __VTPRINTEXIT( "Dial.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::Stop +// --------------------------------------------------------------------------- +// +void CVtUiDialer::Stop() + { + __VTPRINTENTER( "Dial.Stop" ) + if ( State() == MVtUiFeature::EActive ) + { + TInt error; + TRAP( error, + { + iFeatureManager.AppUi().SwitchLayoutToFlatStatusPaneL( EFalse ); + iFeatureManager.ComponentManager().DeActivateComponentL( + MVtUiComponent::EComponentIdDialer ); + } ); + Unprepare(); + iFeatureManager.AppUi().ContextControl().MakeVisible( ETrue ); + } + __VTPRINTEXIT( "Dial.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiDialer::InitFeatureL() + { + __VTPRINTENTER( "Dial.InitFeatureL" ) + iDialerContainer = + CVtUiDialerContainer::NewL( iFeatureManager ); + iCmdOpen = CVtUiCmdOpenDialer::NewL( iFeatureManager.CommandManager(), + *this ); + iCmdClose = CVtUiCmdCloseDialer::NewL( iFeatureManager.CommandManager(), + *this ); + __VTPRINTEXIT( "Dial.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::CVtUiDialer +// --------------------------------------------------------------------------- +// +CVtUiDialer::CVtUiDialer( CVtUiFeatureManager& aFeatureManager ) + : CVtUiFeatureBase( EVtUiFeatureIdDialer, aFeatureManager ) + { + __VTPRINTENTER( "Dial.ctor" ) + __VTPRINTEXIT( "Dial.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiDialer::ConstructL() + { + __VTPRINTENTER( "Dial.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "Dial.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::PrepareL +// --------------------------------------------------------------------------- +// +void CVtUiDialer::PrepareL() + { + __VTPRINTENTER( "Dial.PrepareL" ) + iDialerContainer->RegisterComponentL(); + iFeatureState = EReady; + __VTPRINTEXIT( "Dial.PrepareL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialer::Unprepare +// --------------------------------------------------------------------------- +// +void CVtUiDialer::Unprepare() + { + __VTPRINTENTER( "Dial.Unprepare" ) + iDialerContainer->UnregisterComponent(); + iFeatureState = EUnprepared; + __VTPRINTEXIT( "Dial.Unprepare" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuidialercontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuidialercontainer.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,482 @@ +/* +* Copyright (c) 2006 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: Dialer feature +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "VtUiUtility.h" +#include "VtUiLayout.h" +#include "mvtuicomponentmanager.h" +#include "cvtuidialercontainer.h" +#include "cvtuidialervideocontrol.h" +#include "tvtuiwsevent.h" +#include "tvtuistates.h" +#include "cvtuidialerskmodifier.h" +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" +#include "mvtuicommandmanager.h" +#include "cvtuidtmfbuffer.h" + +// Index of white color. +const TInt KVtUiColorWhite = 0; + +// Implementation of TVtUiMiniDialerComponentState + +// --------------------------------------------------------------------------- +// TVtUiDialerComponentState::TVtUiDialerComponentState +// --------------------------------------------------------------------------- +// +TVtUiDialerComponentState::TVtUiDialerComponentState( + MVtUiComponent& aComponent ) : + TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry ) ) + { + } + +// Implementation of CVtUiDialerContainer + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::NewL +// --------------------------------------------------------------------------- +// +CVtUiDialerContainer* CVtUiDialerContainer::NewL( + CVtUiFeatureManager& aFeatureManager ) + { + __VTPRINTENTER( "DialContainer.NewL" ) + CVtUiDialerContainer* self = + new ( ELeave ) CVtUiDialerContainer( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL( aFeatureManager.AppUi().BitmapManager() ); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "DialContainer.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::~CVtUiDialerContainer +// --------------------------------------------------------------------------- +// +CVtUiDialerContainer::~CVtUiDialerContainer() + { + __VTPRINTENTER( "DialContainer.~" ) + delete iAsyncDeactivate; + delete iVideoControl; + delete iDialer; + delete iSKModifier; + delete iInputBuffer; + delete iBgContext; + AknsUtils::DeregisterControlPosition( this ); + __VTPRINTEXIT( "DialContainer.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::HandleResourceChangeL +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::HandleResourceChangeL( TInt aType ) + { + __VTPRINTENTER( "DialContainer.HandleResourceChangeL" ) + switch ( aType ) + { + case KEikDynamicLayoutVariantSwitch: + case KAknsMessageSkinChange: + LayoutDialerContainer(); + break; + default: + break; + } + __VTPRINTEXIT( "DialContainer.HandleResourceChangeL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::ComponentId +// --------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiDialerContainer::ComponentId() const + { + return EComponentIdDialer; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::ComponentAsControl +// --------------------------------------------------------------------------- +// +CCoeControl* CVtUiDialerContainer::ComponentAsControl() + { + return iVideoControl; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::DoActivateL +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::DoActivateL() + { + __VTPRINTENTER( "DialContainer.DoActivateL" ) + iUiStates.SetIsDialerActivating( EFalse ); + LayoutDialerContainer(); + Reset(); + iVideoControl->MakeVisible( ETrue ); + iDialer->MakeVisible( ETrue ); + MakeVisible( ETrue ); + User::LeaveIfError( iFeatureManager-> + CommandManager().AddCommandModifier( *iSKModifier ) ); + iInputBuffer->Activate(); + iMode = CVtUiAppUi::ERenderingModeDialer; + TVtUiWsEvent< CVtUiAppUi::TRenderingMode > renderingEvent( + EVtUiWsEventBeginRenderingMode, &iMode ); + iCoeEnv->WsSession().SendEventToWindowGroup( + Window().WindowGroupId(), renderingEvent ); + iUiStates.SetIsDialerOpen( ETrue ); + iAsyncDeactivate->Cancel(); + __VTPRINTEXIT( "DialContainer.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::DoDeactivateL +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::DoDeactivateL() + { + __VTPRINTENTER( "DialContainer.DoDeactivateL" ) + iFeatureManager->CommandManager(). + RemoveCommandModifier( *iSKModifier ); + iUiStates.SetIsDialerOpen( EFalse ); + iVideoControl->MakeVisible( EFalse ); + iDialer->MakeVisible( EFalse ); + MakeVisible( EFalse ); + Reset(); + iInputBuffer->Deactivate(); + iAsyncDeactivate->CallBack(); + __VTPRINTEXIT( "DialContainer.DoDeactivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::GetContents +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::GetContents( TDes& aContents ) const + { + __VTPRINTENTER( "DialContainer.GetContents" ) + iInputBuffer->GetContents( aContents ); + __VTPRINTEXIT( "DialContainer.GetContents" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiDialerContainer::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aType ) + { + __VTPRINTENTER( "DialContainer.OfferKeyEventL" ) + TKeyResponse response( EKeyWasNotConsumed ); + TChar dtmfTone; + if ( VtUiUtility::IsDTMFEvent( aEvent, dtmfTone ) && + ( aType == EEventKey ) ) + { + response = EKeyWasConsumed; + AppendDigit( dtmfTone ); + } + __VTPRINTEXIT( "DialContainer.OfferKeyEventL" ) + return response; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::Draw +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::Draw( const TRect& ) const + { + __VTPRINTENTER( "DialContainer.Draw" ) + CWindowGc& gc( SystemGc() ); + gc.SetBrushStyle( CWindowGc::ESolidBrush ); + gc.SetPenStyle( CGraphicsContext::ENullPen ); + gc.SetBrushColor( AKN_LAF_COLOR( KVtUiColorWhite ) ); + gc.Clear(); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); + AknsDrawUtils::Background( skin, cc, this, gc, Rect() ); + __VTPRINTEXIT( "DialContainer.Draw" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::SizeChanged +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::SizeChanged() + { + __VTPRINTENTER( "DialContainer.SizeChanged" ) + TRect bgRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, bgRect ); + iBgContext->SetRect( bgRect ); + + AknsUtils::RegisterControlPosition( this ); + CCoeControl::SizeChanged(); + __VTPRINTEXIT( "DialContainer.SizeChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::PositionChanged +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::PositionChanged() + { + __VTPRINTENTER( "DialContainer.PositionChanged" ) + AknsUtils::RegisterControlPosition( this ); + CCoeControl::PositionChanged(); + __VTPRINTEXIT( "DialContainer.PositionChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::CountComponentControls +// --------------------------------------------------------------------------- +// +TInt CVtUiDialerContainer::CountComponentControls() const + { + return iDialer ? 1 : 0; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::ComponentControl +// --------------------------------------------------------------------------- +// +CCoeControl* CVtUiDialerContainer::ComponentControl( TInt aIndex ) const + { + CCoeControl* result = NULL; + switch ( aIndex ) + { + case 0: + result = iDialer; + break; + default: + break; + } + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::CVtUiDialerContainer +// --------------------------------------------------------------------------- +// +CVtUiDialerContainer::CVtUiDialerContainer( + CVtUiFeatureManager& aFeatureManager ) : + iComponentState( *this ), + iFeatureManager( &aFeatureManager ), + iComponentManager( &aFeatureManager.ComponentManager() ), + iUiStates( aFeatureManager.UiStates() ) + { + __VTPRINTENTER( "DialContainer.ctor" ) + __VTPRINTEXIT( "DialContainer.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::ConstructL( CVtUiBitmapManager& aBitmapManager ) + { + __VTPRINTENTER( "DialContainer.ConstructL" ) + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgScreen, Rect(), ETrue ); + CreateWindowL(); + DrawableWindow()->SetPointerGrab( ETrue ); + SetExtent( TPoint(), TSize() ); + ActivateL(); + MakeVisible( EFalse ); + iInputBuffer = CVtUiDTMFBuffer::NewL( *iCoeEnv ); + iVideoControl = CVtUiDialerVideoControl::NewL( aBitmapManager ); + iDialer = CVideoDTMFDialer::NewL( *this, *iVideoControl, DialerRect() ); + iSKModifier = CVtUiDialerSKModifier::NewL( *iFeatureManager ); + // Disable fading when using DP (eliminates nasty color error) + if ( FeatureManager::FeatureSupported( KFeatureIdDisplayPost ) ) + { + Window().SetNonFading( ETrue ); + } + iAsyncDeactivate = new ( ELeave ) CAsyncCallBack( + TCallBack( ASyncDoDeactivate, this ), CActive::EPriorityLow ); + __VTPRINTEXIT( "DialContainer.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::RegisterComponentL +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::RegisterComponentL() + { + __VTPRINTENTER( "DialContainer.RegisterComponentL" ) + User::LeaveIfError( iComponentManager->ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + User::LeaveIfError( + iComponentManager->ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + User::LeaveIfError( iComponentManager->ChangeKeyEventRegistration( + *this, MVtUiComponentManager::ERegister ) ); + __VTPRINTEXIT( "DialContainer.RegisterComponentL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::UnregisterComponent +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::UnregisterComponent() + { + __VTPRINTENTER( "DialContainer.UnregisterComponent" ) + iComponentManager->ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + iComponentManager->ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + iComponentManager->ChangeKeyEventRegistration( + *this, MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "DialContainer.UnregisterComponent" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::UnregisterComponent +// --------------------------------------------------------------------------- +// +MVtUiVideoWindow* CVtUiDialerContainer::ComponentAsVideoWindow() + { + __VTPRINTENTER( "DialContainer.ComponentAsVideoWindow" ) + __VTPRINTEXIT( "DialContainer.ComponentAsVideoWindow" ) + return iVideoControl; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::LayoutDialerContainer +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::LayoutDialerContainer() + { + __VTPRINTENTER( "DialContainer.LayoutDialerContainer" ) + + TAknWindowLineLayout mainPaneLL; + + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + // Landscape: Option11 (thin status pane, lsc) + mainPaneLL = AknLayoutScalable_Avkon::main_pane( 9 ).LayoutLine(); + } + else + { + // Portrait: main pane with status pane off, control pane on + mainPaneLL = AknLayoutScalable_Avkon::main_pane( 7 ).LayoutLine(); + } + + TRect appWinRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EApplicationWindow, + appWinRect ); + + // Layout container + AknLayoutUtils::LayoutControl( this, appWinRect, mainPaneLL ); + + // Layout dialer + const TInt variety( Layout_Meta_Data::IsLandscapeOrientation() ? + 1 : 0 ); + TAknWindowLineLayout dialerLLout( + AknLayoutScalable_Apps::main_video_tele_dialer_pane( + variety ).LayoutLine() ); + AknLayoutUtils::LayoutControl( iDialer, Rect(), dialerLLout ); + + // Layout video control + AknLayoutUtils::LayoutControl( iVideoControl, iDialer->Rect(), + AknLayoutScalable_Apps::video_down_pane_cp( + variety ).LayoutLine() ); + + __VTPRINTEXIT( "DialContainer.LayoutDialerContainer" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::DialerRect +// --------------------------------------------------------------------------- +// +TRect CVtUiDialerContainer::DialerRect() const + { + __VTPRINTENTER( "DialContainer.DialerRect" ) + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, + mainPaneRect ); + __VTPRINTEXIT( "DialContainer.DialerRect" ) + return mainPaneRect; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::Reset +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::Reset() + { + __VTPRINTENTER( "DialContainer.Reset" ) + iInputBuffer->Reset(); + __VTPRINTEXIT( "DialContainer.Reset" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::AppendDigit +// --------------------------------------------------------------------------- +// +void CVtUiDialerContainer::AppendDigit( TChar aDigit ) + { + __VTPRINTENTER( "DialContainer.AppendDigit" ) + iInputBuffer->Append( aDigit ); + __VTPRINTEXIT( "DialContainer.AppendDigit" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::MopSupplyObject +// --------------------------------------------------------------------------- +// +TTypeUid::Ptr CVtUiDialerContainer::MopSupplyObject( TTypeUid aId ) + { + __VTPRINTENTER( "CVtUiDialerContainer.MopSupplyObject" ) + // Required during rendering of the background skin in Draw() + if (aId.iUid == MAknsControlContext::ETypeId) + { + __VTPRINTEXIT( "CVtUiDialerContainer.MopSupplyObject.1" ) + return MAknsControlContext::SupplyMopObject( aId, iBgContext ); + } + __VTPRINTEXIT( "CVtUiDialerContainer.MopSupplyObject.2" ) + return CCoeControl::MopSupplyObject( aId ); + } + +// --------------------------------------------------------------------------- +// CVtUiDialerContainer::ASyncDoDeactivate +// --------------------------------------------------------------------------- +// +TInt CVtUiDialerContainer::ASyncDoDeactivate( TAny* aSelf ) + { + __VTPRINTENTER( "DialContainer.ASyncDoDeactivate" ) + CVtUiDialerContainer* self = + reinterpret_cast< CVtUiDialerContainer* >( aSelf ); + self->iMode = CVtUiAppUi::ERenderingModeDialer; + TVtUiWsEvent< CVtUiAppUi::TRenderingMode > renderingEvent( + EVtUiWsEventEndRenderingMode, &self->iMode ); + self->iCoeEnv->WsSession().SendEventToWindowGroup( + self->Window().WindowGroupId(), renderingEvent ); + __VTPRINTEXIT( "DialContainer.ASyncDoDeactivate" ) + return KErrNone; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuidialerskmodifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuidialerskmodifier.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 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: Softkey modifier class. +* +*/ + + +#include +#include "cvtuidialerskmodifier.h" +#include "mvtuicommandsetting.h" +#include "tvtuicommandmodifierpriority.h" +#include "cvtuifeaturemanager.h" +#include "tvtuistates.h" +#include "tvtuifeatureids.h" +#include "CVtUiAppUi.h" +#include +#include + + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiDialerSKModifier::NewL +// --------------------------------------------------------------------------- +// +CVtUiDialerSKModifier* CVtUiDialerSKModifier::NewL( + CVtUiFeatureManager& aFeatureMgr ) + { + __VTPRINTENTER( "CVtUiDialerSKModifier.NewL" ) + CVtUiDialerSKModifier* self = + new ( ELeave ) CVtUiDialerSKModifier( aFeatureMgr ); + __VTPRINTEXIT( "CVtUiDialerSKModifier.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerSKModifier::~CVtUiDialerSKModifier +// --------------------------------------------------------------------------- +// +CVtUiDialerSKModifier::~CVtUiDialerSKModifier() + { + __VTPRINTENTER( "CVtUiDialerSKModifier.~" ) + __VTPRINTEXIT( "CVtUiDialerSKModifier.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerSKModifier::CVtUiDialerSKModifier +// --------------------------------------------------------------------------- +// +CVtUiDialerSKModifier::CVtUiDialerSKModifier( + CVtUiFeatureManager& aFeatureMgr ) + : CVtUiCommandModifyBase( EVtUiCmdModifierPriorityNumberEntry ), + iFeatureMgr( aFeatureMgr ) + { + __VTPRINTENTER( "CVtUiDialerSKModifier.Ctr" ) + __VTPRINTEXIT( "CVtUiDialerSKModifier.Ctr" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerSKModifier::ModifyCommandsL +// --------------------------------------------------------------------------- +// +void CVtUiDialerSKModifier::ModifyCommandsL( MVtUiCommandSetting& ) + { + __VTPRINTENTER( "CVtUiDialerSKModifier.ModifyCommandsL" ) + CEikButtonGroupContainer* cba = iFeatureMgr.AppUi().GetCba(); + cba->SetCommandSetL( R_VIDEOTELUI_SOFTKEYS_EMPTY_DIALEREXIT ); + __VTPRINTEXIT( "CVtUiDialerSKModifier.ModifyCommandsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerSKModifier::Supports +// --------------------------------------------------------------------------- +// +TBool CVtUiDialerSKModifier::Supports( + MVtUiCommandSetting::Type aType ) const + { + __VTPRINTENTER( "CVtUiDialerSKModifier.Supports" ) + __VTPRINTEXIT( "CVtUiDialerSKModifier.Supports" ) + return ( aType == MVtUiCommandSetting::ECommandTypeSoftkeys ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/dialer/cvtuidialervideocontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/dialer/cvtuidialervideocontrol.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2006 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: Mini dialer feature +* +*/ + + +#include +#include +#include +#include + +#include "cvtuidialervideocontrol.h" + +// Portrait variety constant +const static TInt KVarietyPortrait = 0; + +// Landscape variety constant +const static TInt KVarietyLandscape = 1; + +// Implementation of CVtUiDialerVideoControl + +// --------------------------------------------------------------------------- +// CVtUiDialerVideoControl::NewL +// --------------------------------------------------------------------------- +// +CVtUiDialerVideoControl* CVtUiDialerVideoControl::NewL( + CVtUiBitmapManager& aBitmapManager ) + { + __VTPRINTENTER( "DialCtrl.NewL" ) + CVtUiDialerVideoControl* self = + new ( ELeave ) CVtUiDialerVideoControl( aBitmapManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "DialCtrl.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiDialerVideoControl::~CVtUiDialerVideoControl +// --------------------------------------------------------------------------- +// +CVtUiDialerVideoControl::~CVtUiDialerVideoControl() + { + __VTPRINTENTER( "DialCtrl.~" ) + __VTPRINTEXIT( "DialCtrl.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerVideoControl::CVtUiDialerVideoControl +// --------------------------------------------------------------------------- +// +CVtUiDialerVideoControl::CVtUiDialerVideoControl( + CVtUiBitmapManager& aBitmapManager ) : + CVtUiVideoControlBase( aBitmapManager ) + { + __VTPRINTENTER( "DialCtrl.ctor" ) + // Disable blind icon drawing + SetRenderingHint( ENoBlindIcon ); + __VTPRINTEXIT( "DialCtrl.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiDialerVideoControl::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiDialerVideoControl::ConstructL() + { + __VTPRINTENTER( "DialCtrl.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "DialCtrl.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiDialerVideoControl::WaitingTextLayout +// ----------------------------------------------------------------------------- +// +TAknTextLineLayout CVtUiDialerVideoControl::WaitingTextLayout( TInt aLine ) + { + __VTPRINTENTER( "DialCtrl.WaitingTextLayout" ) + + TInt variety( Layout_Meta_Data::IsLandscapeOrientation() ? + KVarietyLandscape : KVarietyPortrait ); + + TAknWindowComponentLayout l2( + AknLayoutScalable_Apps::main_video_tele_dialer_pane( variety ) ); + + TAknTextComponentLayout l3; + +#if 0 + if ( variety == KVarietyPortrait ) + { + if ( !aLine ) + { + l3 = AknLayoutScalable_Apps::main_video_tele_dialer_pane_t1( 0 ); + } + else + { + l3 = AknLayoutScalable_Apps::main_video_tele_dialer_pane_t2( 0 ); + } + } + else + { + if ( !aLine ) + { + l3 = AknLayoutScalable_Apps::call_video_pane_t1(); + } + else + { + l3 = AknLayoutScalable_Apps::call_video_pane_t2(); + } + } +#endif + + if ( !aLine ) + { + l3 = AknLayoutScalable_Apps::main_video_tele_dialer_pane_t1( 0 ); + } + else + { + l3 = AknLayoutScalable_Apps::main_video_tele_dialer_pane_t2( 0 ); + } + + __VTPRINTEXIT( "DialCtrl.WaitingTextLayout" ) + return TAknWindowComponentLayout::ComposeText( l2, l3 ).LayoutLine(); + } + +// ----------------------------------------------------------------------------- +// CVtUiMainControl::LayoutRemoteVideo +// ----------------------------------------------------------------------------- +// +void CVtUiDialerVideoControl::LayoutRemoteVideo( ) + { + __VTPRINTENTER( "DialCtrl.LayoutRemoteVideo" ) + if ( NULL != iRemoteVideoControl ) + { + TRect rectRemoteVideo(StreamClippingRect()); + rectRemoteVideo.Move(PositionRelativeToScreen()); + iRemoteVideoControl->SetExtent(rectRemoteVideo.iTl,rectRemoteVideo.Size()); + } + __VTPRINTEXIT( "DialCtrl.LayoutRemoteVideo" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/menu/cvtuimenucontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/menu/cvtuimenucontext.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2006 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: Menu context class. +* +*/ + + +#include + +#include "cvtuimenucontext.h" + +/** Menu context reference priority */ +const TInt KVtUiMenuContextPriority = 100; + +// --------------------------------------------------------------------------- +// CVtUiMenuContext::~CVtUiMenuContext +// --------------------------------------------------------------------------- +// +CVtUiMenuContext::~CVtUiMenuContext() + { + __VTPRINTENTER( "MenuCtx.~" ) + UnregisterCommandContext(); + __VTPRINTEXIT( "MenuCtx.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuContext::NewL +// --------------------------------------------------------------------------- +// +CVtUiMenuContext* CVtUiMenuContext::NewL( + MVtUiCommandManager& aCommandManager ) + { + __VTPRINTENTER( "MenuCtx.NewL" ) + CVtUiMenuContext* self = new ( ELeave ) CVtUiMenuContext( aCommandManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "MenuCtx.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiMenuContext::ValidateL +// --------------------------------------------------------------------------- +// +void CVtUiMenuContext::ValidateL( CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "MenuCtx.ValidateL" ) + ValidateMenuItemsL( aAction ); + __VTPRINTEXIT( "MenuCtx.ValidateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuContext::CVtUiMenuContext +// --------------------------------------------------------------------------- +// +CVtUiMenuContext::CVtUiMenuContext( MVtUiCommandManager& aCommandManager ) + : CVtUiCmdContext( aCommandManager, EVtUiCmdContextTypeMenu, + KVtUiMenuContextPriority ) + { + __VTPRINTENTER( "MenuCtx.ctor" ) + __VTPRINTEXIT( "MenuCtx.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuContext::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiMenuContext::ConstructL() + { + __VTPRINTENTER( "MenuCtx.ConstructL" ) + RegisterCommandContextL(); + __VTPRINTEXIT( "MenuCtx.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/menu/cvtuimenuitemdimmeraction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/menu/cvtuimenuitemdimmeraction.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2006 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: Menu item dimmer action class. +* +*/ + + +#include +#include + +#include "cvtuimenuitemdimmeraction.h" +#include "tvtuicmdvalidatorcallback.h" +#include "tvtuimenucommanditerator.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::NewL +// --------------------------------------------------------------------------- +// +CVtUiMenuItemDimmerAction* CVtUiMenuItemDimmerAction::NewL() + { + __VTPRINTENTER( "MenuDimAct.NewL" ) + CVtUiMenuItemDimmerAction* self = + new ( ELeave ) CVtUiMenuItemDimmerAction(); + __VTPRINTEXIT( "MenuDimAct.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::SetMenuPane +// --------------------------------------------------------------------------- +// +void CVtUiMenuItemDimmerAction::SetMenuPane( CEikMenuPane* aMenuPane ) + { + __VTPRINTENTER( "MenuDimAct.SetMenuPane" ) + iMenuPane = aMenuPane; + __VTPRINTEXIT( "MenuDimAct.SetMenuPane" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::ProcessL +// --------------------------------------------------------------------------- +// +void CVtUiMenuItemDimmerAction::ProcessL( + const MVtUiCmdValidatorCallBack& aCallBack ) + { + __VTPRINTENTER( "MenuDimAct.ProcessL" ) + + if ( iMenuPane ) + { + for ( TVtUiMenuCommandIterator i( *iMenuPane ); i.HasNext(); ) + { + TInt commandId( i.Next() ); + if ( !IsCommandHandled( commandId ) ) + { + if ( aCallBack.Call( commandId ) ) + { + CommandHandledL( commandId ); + SetItemDimmed( commandId ); + } + } + } + } + __VTPRINTEXIT( "MenuDimAct.ProcessL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::EndProcess +// --------------------------------------------------------------------------- +// +void CVtUiMenuItemDimmerAction::EndProcess() + { + __VTPRINTENTER( "MenuDimAct.EndProcess" ) + iMenuPane = NULL; + __VTPRINTEXIT( "MenuDimAct.EndProcess" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::CVtUiMenuItemDimmerAction +// --------------------------------------------------------------------------- +// +CVtUiMenuItemDimmerAction::CVtUiMenuItemDimmerAction() + { + __VTPRINTENTER( "MenuDimAct.ctor" ) + __VTPRINTEXIT( "MenuDimAct.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenuItemDimmerAction::SetItemDimmed +// --------------------------------------------------------------------------- +// +void CVtUiMenuItemDimmerAction::SetItemDimmed( TInt aCommandId ) + { + __VTPRINTENTER( "MenuDimAct.SetItemDimmed" ) + iMenuPane->SetItemDimmed( aCommandId, ETrue ); + __VTPRINTEXIT( "MenuDimAct.SetItemDimmed" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/menu/cvtuimenus.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/menu/cvtuimenus.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,156 @@ +/* +* Copyright (c) 2006 - 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" +* 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: Mennu Ui feature class. +* +*/ + + +#include + +#include "cvtuimenus.h" +#include "cvtuimenucontext.h" +#include "cvtuimenuitemdimmeraction.h" +#include "cvtuifeaturemanager.h" +#include "cvtuicommandmanager.h" + +// --------------------------------------------------------------------------- +// CVtUiMenus::NewL +// --------------------------------------------------------------------------- +// +CVtUiMenus* CVtUiMenus::NewL( CVtUiFeatureManager& aFeatureManager ) + { + __VTPRINTENTER( "Menus.NewL" ) + CVtUiMenus* self = new ( ELeave ) CVtUiMenus( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "Menus.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::~CVtUiMenus +// --------------------------------------------------------------------------- +// +CVtUiMenus::~CVtUiMenus() + { + __VTPRINTENTER( "Menus.~" ) + delete iMenuCommandContext; + delete iMenuDimmerAction; + __VTPRINTEXIT( "Menus.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::SetMenuPane +// --------------------------------------------------------------------------- +// +void CVtUiMenus::SetMenuPane( CEikMenuPane* aMenuPane ) + { + __VTPRINTENTER( "Menus.SetMenuPane" ) + iMenuDimmerAction->SetMenuPane( aMenuPane ); + __VTPRINTEXIT( "Menus.SetMenuPane" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::StartL +// --------------------------------------------------------------------------- +// +void CVtUiMenus::StartL() + { + __VTPRINTENTER( "Menus.StartL" ) + __VTPRINTEXIT( "Menus.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::Stop +// --------------------------------------------------------------------------- +// +void CVtUiMenus::Stop() + { + __VTPRINTENTER( "Menus.Stop" ) + __VTPRINTEXIT( "Menus.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiMenus::InitFeatureL() + { + __VTPRINTENTER( "Menus.InitFeatureL" ) + __VTPRINTEXIT( "Menus.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiMenus::RefreshL() + { + __VTPRINTENTER( "Menus.RefreshL" ) + iFeatureManager.CommandManager().ValidateMenuItemsL( *iMenuDimmerAction ); + __VTPRINTEXIT( "Menus.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::AddCommandModifier +// --------------------------------------------------------------------------- +// +TInt CVtUiMenus::AddCommandModifier( CVtUiCommandModifyBase& ) + { + __VTPRINTENTER( "Menus.AddCommandModifier" ) + __VTPRINTEXIT( "Menus.AddCommandModifier" ) + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::RemoveCommandModifier +// --------------------------------------------------------------------------- +// +void CVtUiMenus::RemoveCommandModifier( CVtUiCommandModifyBase& ) + { + __VTPRINTENTER( "Menus.RemoveCommandModifier" ) + __VTPRINTEXIT( "Menus.RemoveCommandModifier" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::CVtUiMenus +// --------------------------------------------------------------------------- +// +CVtUiMenus::CVtUiMenus( CVtUiFeatureManager& aFeatureManager ) + : CVtUiFeatureBase( EVtUiFeatureIdMenu, aFeatureManager ) + { + __VTPRINTENTER( "Menus.ctor" ) + __VTPRINTEXIT( "Menus.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiMenus::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiMenus::ConstructL() + { + __VTPRINTENTER( "Menus.ConstructL" ) + iMenuCommandContext = + CVtUiMenuContext::NewL( iFeatureManager.CommandManager() ); + iMenuDimmerAction = CVtUiMenuItemDimmerAction::NewL(); + + // No need to add this to command manager as command UI. Menu is explicitly + // updated by CVtUiAppUi::DynInitMenuPaneL and in all other situations + // update is not needed because menu is not open. + // NOTE: If a command modifier is implemented for menu then it needs + // to be added to command UI. + __VTPRINTEXIT( "Menus.ConstructL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/menu/tvtuimenucommanditerator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/menu/tvtuimenucommanditerator.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2006 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: Menu command iterator. +* +*/ + + +#include + +#include "tvtuimenucommanditerator.h" + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// TVtUiMenuCommandIterator::TVtUiMenuCommandIterator +// --------------------------------------------------------------------------- +// +TVtUiMenuCommandIterator::TVtUiMenuCommandIterator( CEikMenuPane& aMenuPane ) +: iMenuPane( &aMenuPane ), iCurrent( 0 ) + { + } + +// --------------------------------------------------------------------------- +// TVtUiMenuCommandIterator::HasNext +// --------------------------------------------------------------------------- +// +TBool TVtUiMenuCommandIterator::HasNext() const + { + return ( iCurrent < iMenuPane->NumberOfItemsInPane() ); + } + +// --------------------------------------------------------------------------- +// TVtUiMenuCommandIterator::Next +// --------------------------------------------------------------------------- +// +TInt TVtUiMenuCommandIterator::Next() + { + return iMenuPane->MenuItemCommandId( iCurrent++ ); + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/numberentry/CVtUiNumberEntryControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/numberentry/CVtUiNumberEntryControl.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,315 @@ +/* +* Copyright (c) 2004-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 the CVtUiNumberEntryControl control class. +* +*/ + + +// INCLUDE FILES +#include "CVtUiNumberEntryControl.h" +#include "VtUiLayout.h" +#include "VtUiUtility.h" +#include "mvtuicomponentmanager.h" +#include "tvtuistates.h" +#include "tvtuiwsevent.h" +#include "mvtuifeature.h" +#include "mvtuinumberentrycontrolobserver.h" +#include "cvtuidtmfbuffer.h" + +#include +#include +#include + +// CONSTANTS + +// ============================ MEMBER FUNCTIONS =============================== + +// Implementation for TVtUiNumberEntryComponentState + +// ----------------------------------------------------------------------------- +// TVtUiNumberEntryComponentState::TVtUiNumberEntryComponentState +// ----------------------------------------------------------------------------- +// +TVtUiNumberEntryComponentState::TVtUiNumberEntryComponentState( + MVtUiComponent& aComponent ) + : TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer ) ) + { + } + +// Implementation for CVtUiNumberEntryControl + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::CVtUiNumberEntryControl +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiNumberEntryControl::CVtUiNumberEntryControl( + MVtUiFeature& aFeature, + TVtUiStates& aUiStates ) + : iFeature( aFeature ), + iComponentState( *this ), + iUiStates( aUiStates ) + { + __VTPRINTENTER( "NECtrl.ctor" ) + __VTPRINTEXIT( "NECtrl.ctor" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::ConstructL( const TRect& aRect ) + { + __VTPRINTENTER( "NECtrl.ConstructL" ) + CreateWindowL(); + SetRect( aRect ); + ActivateL(); + MakeVisible( EFalse ); + iInputBuffer = CVtUiDTMFBuffer::NewL( *iCoeEnv ); + __VTPRINTEXIT( "NECtrl.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::~CVtUiNumberEntryControl +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiNumberEntryControl::~CVtUiNumberEntryControl() + { + __VTPRINTENTER( "NECtrl.~" ) + AknsUtils::DeregisterControlPosition( this ); + delete iInputBuffer; + __VTPRINTEXIT( "NECtrl.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::OpenNumberEntry +// ----------------------------------------------------------------------------- +// +TBool CVtUiNumberEntryControl::OpenNumberEntry() + { + __VTPRINTENTER( "NECtrl.OpenNumberEntry" ) + TBool result( EFalse ); + if ( !iUiStates.IsNumberEntryOpen() ) + { + __VTPRINT( DEBUG_GEN, "VtUiNumberEntry.OPEN" ) + iInputBuffer->Activate(); + iUiStates.SetIsNumberEntryOpen( ETrue ); + result = ETrue; + } + __VTPRINTEXITR( "NECtrl.OpenNumberEntry %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::IsNumberEntryOpen +// ----------------------------------------------------------------------------- +// +TBool CVtUiNumberEntryControl::IsNumberEntryOpen() const + { + __VTPRINTENTER( "NECtrl.IsNumberEntryOpen" ) + const TBool result( iUiStates.IsNumberEntryOpen() ); + __VTPRINTEXITR( "NECtrl.IsNumberEntryOpen %d",result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::CloseNumberEntry +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::CloseNumberEntry() + { + __VTPRINTENTER( "NECtrl.CloseNumberEntry" ) + if ( iUiStates.IsNumberEntryOpen() ) + { + __VTPRINT( DEBUG_GEN, "NECtrl.CloseNumberEntry CLOSE" ) + iUiStates.SetIsNumberEntryOpen( EFalse ); + iInputBuffer->Deactivate(); + } + __VTPRINTEXIT( "NECtrl.CloseNumberEntry" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::RegisterComponentL +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::RegisterComponentL( + MVtUiComponentManager& aComponentManager ) + { + __VTPRINTENTER( "NECtrl.RegisterComponentL" ) + User::LeaveIfError( aComponentManager.ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + __VTPRINTEXIT( "NECtrl.RegisterComponentL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::UnregisterComponent +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::UnregisterComponent( + MVtUiComponentManager& aComponentManager ) + { + __VTPRINTENTER( "NECtrl.UnregisterComponent" ) + iInputBuffer->Reset(); + aComponentManager.ChangeComponentRegistration( iComponentState, + MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "NECtrl.UnregisterComponent" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::SetNumberEntryControlObserver +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::SetNumberEntryControlObserver( + MVtUiNumberEntryControlObserver* aObserver ) + { + __VTPRINTENTER( "NECtrl.SetNumberEntryControlObserver" ) + iControlObserver = aObserver; + __VTPRINTEXIT( "NECtrl.SetNumberEntryControlObserver" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CVtUiNumberEntryControl::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode ) + { + __VTPRINTENTER( "NECtrl.OfferKeyEventL" ) + + TKeyResponse resp( EKeyWasNotConsumed ); + + if ( IsDisplayingMenuOrDialog() || + aKeyEvent.iCode == EKeyLeftArrow || + aKeyEvent.iCode == EKeyRightArrow || + aKeyEvent.iCode == EKeyUpArrow || + aKeyEvent.iCode == EKeyDownArrow || + aKeyEvent.iCode == EKeyBackspace || + aKeyEvent.iCode == EKeyZoomIn || + aKeyEvent.iCode == EKeyZoomOut || + aKeyEvent.iScanCode == EStdKeyUpArrow || + aKeyEvent.iScanCode == EStdKeyDownArrow || + aKeyEvent.iScanCode == EStdKeyLeftArrow || + aKeyEvent.iScanCode == EStdKeyRightArrow ) + { + return resp; + } + + TChar dtmfTone; + if ( VtUiUtility::IsDTMFEvent( aKeyEvent, dtmfTone ) ) + { + iInputBuffer->Append( dtmfTone ); + } + + __VTPRINTEXITR( "NECtrl.OfferKeyEvent %d", resp ) + return resp; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::DoCloseNumberEntry +// ----------------------------------------------------------------------------- +// +TInt CVtUiNumberEntryControl::DoCloseNumberEntry( TAny* aAny ) + { + __VTPRINTENTER( "NECtrl.DoCloseNumberEntry" ) + CVtUiNumberEntryControl* self = + reinterpret_cast< CVtUiNumberEntryControl* >( aAny ); + self->HandleTimeoutCloseNumberEntry(); + __VTPRINTEXIT( "NECtrl.DoCloseNumberEntry" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::HandleTimeoutCloseNumberEntry +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::HandleTimeoutCloseNumberEntry() + { + __VTPRINTENTER( "NECtrl.HandleTimeoutCloseNumberEntry" ) + __VTPRINTEXIT( "NECtrl.HandleTimeoutCloseNumberEntry" ) + iFeature.Stop(); + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::IsDisplayingMenuOrDialog +// ----------------------------------------------------------------------------- +// +TBool CVtUiNumberEntryControl::IsDisplayingMenuOrDialog() const + { + __VTPRINTENTER( "NECtrl.IsDisplayingMenuOrDialog" ) + CEikMenuBar* menuBar = iEikonEnv->AppUiFactory()->MenuBar(); + const TBool result( CCoeEnv::Static()->AppUi()->IsDisplayingDialog() || + ( menuBar && menuBar->IsDisplayed() ) ); + __VTPRINTEXITR( "NECtrl.IsDisplayingMenuOrDialog %d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::ComponentId +// ----------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiNumberEntryControl::ComponentId() const + { + __VTPRINTENTER( "NECtrl.ComponentId" ) + __VTPRINTEXIT( "NECtrl.ComponentId" ) + return MVtUiComponent::EComponentIdNumberEntry; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::ComponentAsControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CVtUiNumberEntryControl::ComponentAsControl() + { + __VTPRINTENTER( "NECtrl.ComponentAsControl" ) + __VTPRINTEXIT( "NECtrl.ComponentAsControl" ) + return this; + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::DoActivateL +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::DoActivateL() + { + __VTPRINTENTER( "NECtrl.DoActivateL" ) + OpenNumberEntry(); + if ( iControlObserver ) + { + iControlObserver->ControlActivatedL(); + } + __VTPRINTEXIT( "NECtrl.DoActivateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::DoDeactivateL +// ----------------------------------------------------------------------------- +// +void CVtUiNumberEntryControl::DoDeactivateL() + { + __VTPRINTENTER( "NECtrl.DoDeactivateL" ) + CloseNumberEntry(); + if ( iControlObserver ) + { + iControlObserver->ControlDeactivated(); + } + __VTPRINTEXIT( "NECtrl.DoDeactivateL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/numberentry/cvtuinumberentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/numberentry/cvtuinumberentry.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2006 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: Number entry UI feature implementation. +* +*/ + + +#include + +#include "cvtuinumberentry.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicommandmanager.h" +#include "mvtuicomponentmanager.h" +#include "mvtuicommandui.h" +#include "tvtuifeatureids.h" +#include "CVtUiNumberEntryControl.h" +#include "CVtUiAppUi.h" + + +// We need this to be able to make control's priority lower than activation +// control's priority is +extern const TInt KVtUiNumberEntryActivationPriority; + +// Priority of number entry control. +const TInt KVtUiNumberEntryControlPriorityHidden = + KVtUiNumberEntryActivationPriority - 1; + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::NewL +// --------------------------------------------------------------------------- +// +CVtUiNumberEntry* CVtUiNumberEntry::NewL( + CVtUiFeatureManager& aFeatureManager ) + { + __VTPRINTENTER( "NE.NewL" ) + CVtUiNumberEntry* self = + new ( ELeave ) CVtUiNumberEntry( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "NE.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::~CVtUiNumberEntry +// --------------------------------------------------------------------------- +// +CVtUiNumberEntry::~CVtUiNumberEntry() + { + __VTPRINTENTER( "NE.~" ) + DeleteNumberEntryControl(); + __VTPRINTEXIT( "NE.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::StartL +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::StartL() + { + __VTPRINTENTER( "NE.StartL" ) + if ( State() == MVtUiFeature::EUnprepared ) + { + PrepareL(); + iFeatureManager.ComponentManager().RequestActivationL( + MVtUiComponent::EComponentIdNumberEntry ); + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXIT( "NE.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::Stop +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::Stop() + { + __VTPRINTENTER( "NE.Stop" ) + if ( State() == MVtUiFeature::EActive ) + { + TRAP_IGNORE( iFeatureManager.ComponentManager().DeActivateComponentL( + MVtUiComponent::EComponentIdNumberEntry ) ); + iFeatureState = MVtUiFeature::EReady; + } + Unprepare(); + __VTPRINTEXIT( "NE.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::InitFeatureL() + { + __VTPRINTENTER( "NE.InitFeatureL" ) + CreateNumberEntryControlL(); + __VTPRINTEXIT( "NE.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::ControlActivated +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::ControlActivatedL() + { + __VTPRINTENTER( "NE.ControlActivatedL" ) + __VTPRINTEXIT( "NE.ControlActivatedL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::ControlDeactivated +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::ControlDeactivated() + { + __VTPRINTENTER( "NE.ControlDeactivated" ) + __VTPRINTEXIT( "NE.ControlDeactivated" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::CVtUiNumberEntry +// --------------------------------------------------------------------------- +// +CVtUiNumberEntry::CVtUiNumberEntry( CVtUiFeatureManager& aFeatureManager ) + : CVtUiFeatureBase( EVtUiFeatureIdNumberEntry, aFeatureManager ) + { + __VTPRINTENTER( "NE.ctor" ) + __VTPRINTEXIT( "NE.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::ConstructL() + { + __VTPRINTENTER( "NE.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "NE.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::PrepareL +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::PrepareL() + { + __VTPRINTENTER( "NE.PrepareL" ) + iNumberEntryControl->SetNumberEntryControlObserver( this ); + iNumberEntryControl->RegisterComponentL( + iFeatureManager.ComponentManager() ); + iFeatureManager.AppUi().AddToStackL( iNumberEntryControl, + KVtUiNumberEntryControlPriorityHidden, ECoeStackFlagRefusesFocus ); + iFeatureState = MVtUiFeature::EReady; + __VTPRINTEXIT( "NE.PrepareL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::Unprepare() +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::Unprepare() + { + __VTPRINTENTER( "NE.Unprepare" ) + if ( iFeatureState > MVtUiFeature::EUnprepared ) + { + iNumberEntryControl->SetNumberEntryControlObserver( NULL ); + iFeatureManager.AppUi().RemoveFromStack( iNumberEntryControl ); + iNumberEntryControl->UnregisterComponent( + iFeatureManager.ComponentManager() ); + iFeatureState = MVtUiFeature::EUnprepared; + } + __VTPRINTEXIT( "NE.Unprepare" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::CreateNumberEntryControlL +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::CreateNumberEntryControlL() + { + __VTPRINTENTER( "NE.CreateNumberEntryControlL" ) + iNumberEntryControl = new ( ELeave ) CVtUiNumberEntryControl( *this, + iFeatureManager.UiStates() ); + iNumberEntryControl->ConstructL( TRect() ); + iNumberEntryControl->SetMopParent( &iFeatureManager.AppUi() ); + __VTPRINTEXIT( "NE.CreateNumberEntryControlL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiNumberEntry::DeleteNumberEntryControl +// --------------------------------------------------------------------------- +// +void CVtUiNumberEntry::DeleteNumberEntryControl() + { + __VTPRINTENTER( "NE.DeleteNumberEntryControl" ) + delete iNumberEntryControl; + iNumberEntryControl = NULL; + iFeatureState = MVtUiFeature::EUnprepared; + __VTPRINTEXIT( "NE.DeleteNumberEntryControl" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuibrightness.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuibrightness.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2006 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. +* +*/ + + +#include +#include "cvtuibrightness.h" +#include "tvtuifeatureids.h" +#include "cvtuibrightnesspopup.h" +#include "cvtuipopupbase.h" +#include "cvtuiprefsliderbase.h" +#include "videotelui.hrh" +#include "cvtuifeaturemanager.h" +#include "tvtuistates.h" + +// --------------------------------------------------------------------------- +// CVtUiBrightness::NewL +// --------------------------------------------------------------------------- +// +CVtUiBrightness* CVtUiBrightness::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiBrightness.NewL" ) + CVtUiBrightness* self = + new ( ELeave ) CVtUiBrightness( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiBrightness.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiBrightness::~CVtUiBrightness +// --------------------------------------------------------------------------- +// +CVtUiBrightness::~CVtUiBrightness() + { + __VTPRINTENTER( "CVtUiBrightness.~" ) + __VTPRINTEXIT( "CVtUiBrightness.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightness::StartL +// --------------------------------------------------------------------------- +// +void CVtUiBrightness::StartL() + { + __VTPRINTENTER( "CVtUiBrightness.StartL" ) + CVtUiPrefSliderBase::StartL(); + iFeatureManager.UiStates().SetBrightnessModeOn( ETrue ); + __VTPRINTEXIT( "CVtUiBrightness.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightness::Stop +// --------------------------------------------------------------------------- +// +void CVtUiBrightness::Stop() + { + __VTPRINTENTER( "CVtUiBrightness.Stop" ) + CVtUiPrefSliderBase::Stop(); + iFeatureManager.UiStates().SetBrightnessModeOn( EFalse ); + __VTPRINTEXIT( "CVtUiBrightness.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightness::CVtUiBrightness +// --------------------------------------------------------------------------- +// +CVtUiBrightness::CVtUiBrightness( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefSliderBase( aFeatureManager, EVtUiFeatureIdBrightness ) + { + __VTPRINTENTER( "CVtUiBrightness.CVtUiBrightness" ) + __VTPRINTEXIT( "CVtUiBrightness.CVtUiBrightness" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightness::CVtUiBrightness +// --------------------------------------------------------------------------- +// +void CVtUiBrightness:: ConstructL() + { + __VTPRINTENTER( "CVtUiBrightness.ConstructL" ) + BaseConstructL(); + SetPopup( CVtUiBrightnessPopup::NewL( iFeatureManager ) ); + __VTPRINTEXIT( "CVtUiBrightness.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuibrightnesspopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuibrightnesspopup.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2006 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. +* +*/ + + + +#include +#include +#include "cvtuibrightnesspopup.h" +#include "tvtuilocalvariation.h" +#include "mvtuicomponent.h" +#include "CVtUiAppUi.h" +#include "mvtuicomponentmanager.h" +#include "tvtuicomponentstate.h" +#include + +// --------------------------------------------------------------------------- +// CVtUiBrightnessPopup::NewL +// --------------------------------------------------------------------------- +// +CVtUiBrightnessPopup* CVtUiBrightnessPopup::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiBrightnessPopup.NewL" ) + CVtUiBrightnessPopup* self = + new ( ELeave ) CVtUiBrightnessPopup( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiBrightnessPopup.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiBrightnessPopup::~CVtUiBrightnessPopup +// --------------------------------------------------------------------------- +// +CVtUiBrightnessPopup::~CVtUiBrightnessPopup() + { + __VTPRINTENTER( "CVtUiBrightnessPopup.~" ) + __VTPRINTEXIT( "CVtUiBrightnessPopup.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightnessPopup::CurrentValue +// --------------------------------------------------------------------------- +// +TInt CVtUiBrightnessPopup::CurrentValue() + { + __VTPRINTENTER( "CVtUiBrightnessPopup.CurrentValue" ) + // ask from engine current value + TInt value; + if ( iCameraPref->GetBrightness( value) ) + { + __VTPRINTEXIT( "CVtUiBrightnessPopup.CurrentValueERR" ) + return 0; + } + __VTPRINTEXIT( "CVtUiBrightnessPopup.CurrentValue" ) + return value; + } +// --------------------------------------------------------------------------- +// CVtUiBrightnessPopup::CVtUiBrightnessPopup +// --------------------------------------------------------------------------- +// +CVtUiBrightnessPopup::CVtUiBrightnessPopup( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefPopupBase( aFeatureManager, TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer | + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry | + MVtUiComponent::EComponentIdVolume | + MVtUiComponent::EComponentIdZoom | + MVtUiComponent::EVComponentIdContrast ), EVComponentIdBrightness, + KVtEngSetBrightness ) + { + + __VTPRINTENTER( "CVtUiBrightnessPopup.CVtUiBrightnessPopup" ) + __VTPRINTEXIT( "CVtUiBrightnessPopup.CVtUiBrightnessPopup" ) + } + +// --------------------------------------------------------------------------- +// CVtUiBrightnessPopup::CVtUiBrightnessPopup +// --------------------------------------------------------------------------- +// +void CVtUiBrightnessPopup:: ConstructL() + { + __VTPRINTENTER( "CVtUiBrightnessPopup.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "CVtUiBrightnessPopup.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuicolortone.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuicolortone.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,383 @@ +/* +* Copyright (c) 2006 - 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" +* 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: Color tone UI feature implementation. +* +*/ + + +#include +#include +#include +#include +#include "cvtuicolortone.h" +#include "tvtuifeatureids.h" +#include +#include "mvtuicomponentmanager.h" +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" +#include "tvtuilocalvariation.h" +#include "cvtuifeaturemanager.h" +#include "tvtuistates.h" +#include "cvtuicommandmanager.h" + +// Implementation of TVtUiColorToneComponentState + +// --------------------------------------------------------------------------- +// TVtUiColorToneComponentState::TVtUiColorToneComponentState +// --------------------------------------------------------------------------- +// +TVtUiColorToneComponentState::TVtUiColorToneComponentState( + MVtUiComponent& aComponent ) : + TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer | + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry ) ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::NewL +// --------------------------------------------------------------------------- +// +CVtUiColorTone* CVtUiColorTone::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "UiColorTone.NewL" ) + CVtUiColorTone* self = + new ( ELeave ) CVtUiColorTone( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "UiColorTone.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::~CVtUiColorTone +// --------------------------------------------------------------------------- +// +CVtUiColorTone::~CVtUiColorTone() + { + __VTPRINTENTER( "UiColorTone.~" ) + // unregister layout change + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + // unregister component + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "UiColorTone.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::StartL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::StartL() + { + __VTPRINTENTER( "UiColorTone.StartL" ) + if ( iFeatureState == MVtUiFeature::EReady ) + { + iFeatureManager.AppUi().EnableCommandActivatingAndCleanupPushL(); + iFeatureManager.UiStates().SetIsFixedToolbarVisible( EFalse ); + iFeatureManager.ComponentManager(). + RequestActivationL ( MVtUiComponent::EComponentIdColorTone ); + CleanupStack::Pop(); // EnableCommandActivatingAndCleanupPushL + // set state + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXIT( "UiColorTone.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::Stop +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::Stop() + { + __VTPRINTENTER( "UiColorTone.Stop" ) + iAsyncCallback->Cancel(); + iAsyncCallback->Set( TCallBack( &DoStopL, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "UiColorTone.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::InitFeatureL() + { + __VTPRINTENTER( "UiColorTone.InitFeatureL" ) + CVtUiPrefSettingListBase::InitFeatureL(); + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + iFeatureState = EReady; + __VTPRINTEXIT( "UiColorTone.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::ComponentId +// --------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiColorTone::ComponentId() const + { + __VTPRINTENTER( "UiColorTone.ComponentId" ) + __VTPRINTEXIT( "UiColorTone.ComponentId" ) + return MVtUiComponent::EComponentIdColorTone; + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::ComponentAsControl +// --------------------------------------------------------------------------- +// +CCoeControl* CVtUiColorTone::ComponentAsControl() + { + __VTPRINTENTER( "UiColorTone.ComponentAsControl" ) + __VTPRINTEXIT( "UiColorTone.ComponentAsControl" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::DoActivateL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::DoActivateL() + { + __VTPRINTENTER( "UiColorTone.DoActivateL" ) + // get supported color tone modes + iCameraPref->GetSupportedColorTones( iSupportedModes ); + __VTPRINT2( DEBUG_GEN, "UiColorTone.ConstructL=%d", iSupportedModes ) + iFeatureManager.UiStates().SetColorToneModeOn( ETrue ); + iAsyncCallback->Cancel(); + iAsyncCallback->Set( TCallBack( &DoStartL, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "UiColorTone.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::DoDeactivateL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::DoDeactivateL() + { + __VTPRINTENTER( "UiColorTone.DoDeactivateL" ) + iFeatureManager.UiStates().SetColorToneModeOn( EFalse ); + CVtUiPrefSettingListBase::StopSettingPageL(); + __VTPRINTEXIT( "UiColorTone.DoDeactivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::HandleLayoutChangeL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::HandleLayoutChangeL() + { + __VTPRINTENTER( "UiColorTone.HandleLayoutChangeL" ) + if ( iFeatureState == MVtUiFeature::EActive ) + { + SizeChanged(); + } + __VTPRINTEXIT( "UiColorTone.HandleLayoutChangeL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::CurrentSelection +// --------------------------------------------------------------------------- +// +TInt CVtUiColorTone::CurrentSelection() + { + __VTPRINTENTER( "UiColorTone.CurrentSelection" ) + // ask from engine which item is currently active + MVtEngCameraPreferences::TColorTone wb; + if ( iCameraPref->GetColorTone( wb ) ) + { + __VTPRINTEXIT( "UiColorTone.CurrentSelectionERR" ) + // if error occured return 0 i.e. first list item + return 0; + } + __VTPRINTEXIT( "UiColorTone.CurrentSelection" ) + return MapCTEnumToArrayIndex( wb ); + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::SetItemsL +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::SetItemsL( CDesCArray& aArray ) + { + __VTPRINTENTER( "UiColorTone.SetItemsL<" ) + __VTPRINT2( DEBUG_GEN, "UiColorTone.SetItemsL=%d", iSupportedModes ) + // Normal mode allways supported + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_CT_NORMAL_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::ENormal ); + + if( iSupportedModes & MVtEngCameraPreferences::ESepia ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_SEPIA_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::ESepia ); + } + if( iSupportedModes & MVtEngCameraPreferences::EGrayscale ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_B_AND_W_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::EGrayscale ); + } + if( iSupportedModes & MVtEngCameraPreferences::ENegative ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_NEGATIVE_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::ENegative ); + } + __VTPRINTEXIT( "UiColorTone.SetItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::SettingPageResId +// --------------------------------------------------------------------------- +// +TInt CVtUiColorTone::SettingPageResId() const + { + __VTPRINTENTER( "UiColorTone.SettingPageResId" ) + __VTPRINTEXIT( "UiColorTone.SettingPageResId" ) + return R_VIDEOTELUI_COLOR_TONE_SETTING_PAGE; + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::SettingPageItemChanged +// --------------------------------------------------------------------------- +// +void CVtUiColorTone::SettingPageItemChangedL( TInt aIndex ) + { + __VTPRINTENTER( "CVtUiColorTone.SettingPageItemChangedL" ) + __VTPRINT2( DEBUG_GEN, "CVtUiColorTone.index=%d", aIndex ) + if ( iFeatureManager.UiStates().ExecState() == TVtUiStates::EExecStateResetting ) + { + __VTPRINTEXIT( "CVtUiColorTone.SettingPageItemChangedL" ) + return; + } + // Map index to right color tone value + MVtEngCameraPreferences::TColorTone ct = MapArrayIndexToCTEnum( aIndex ); + + // cast the parameter + TPtrC8 params( reinterpret_cast< TUint8* >( &ct ), + sizeof( MVtEngCameraPreferences::TColorTone ) ); + + // Adjust color tone + MVtEngMedia::TCameraId currentCamId; + iFeatureManager.AppUi().Model().Media().GetCurrentCameraId( currentCamId ); + if( currentCamId == MVtEngMedia::ESecondaryCamera ) + { + iFeatureManager.AppUi().DoExecuteCmdL( KVtEngSetColorTone, ¶ms ); + iPendingSettingChangeCmd = EFalse; + } + else + iPendingSettingChangeCmd = ETrue; + __VTPRINTEXIT( "CVtUiColorTone.SettingPageItemChangedL" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiColorTone::CVtUiColorTone +// --------------------------------------------------------------------------- +// +CVtUiColorTone::CVtUiColorTone( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefSettingListBase( aFeatureManager, EVtUiFeatureIdColourTone ), + iComponentState( *this ) + { + __VTPRINTENTER( "UiColorTone.UiColorTone" ) + __VTPRINTEXIT( "UiColorTone.UiColorTone" ) + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::MapCTEnumToArrayIndex +// --------------------------------------------------------------------------- +// +TInt CVtUiColorTone::MapCTEnumToArrayIndex( MVtEngCameraPreferences:: + TColorTone& aColorTone ) const + { + __VTPRINTENTER( "CVtUiColorTone.MapCTEnumToArrayIndex" ) + __VTPRINT2( DEBUG_GEN, "CVtUiColorTone.cpunt=%d", iActiveItems.Count() ) + for ( TInt i = 0; i < iActiveItems.Count(); ++i ) + { + if ( iActiveItems [ i ] == aColorTone ) + { + __VTPRINT2( DEBUG_GEN, "CVtUiColorTone.index=%d", i ) + __VTPRINTEXIT( "CVtUiColorTone.MapCTEnumToArrayIndex" ) + return i; + } + } + __VTPRINTEXIT( "CVtUiColorTone.MapCTEnumToArrayIndex" ) + // not found + return KErrNotFound; + } +// --------------------------------------------------------------------------- +// CVtUiColorTone::MapArrayIndexToCTEnum +// --------------------------------------------------------------------------- +// +MVtEngCameraPreferences::TColorTone CVtUiColorTone::MapArrayIndexToCTEnum( + TInt aIndex) const + { + __VTPRINTENTER( "TColorTone.MapArrayIndexToCTEnum" ) + __VTPRINT2( DEBUG_GEN, "TColorTone.index=%d", aIndex ) + __VTPRINT2( DEBUG_GEN, "TColorTone.count=%d", iActiveItems.Count() ) + const TInt count = iActiveItems.Count(); + if ( count > 0 && aIndex < count && aIndex >= 0 ) + { + __VTPRINTEXIT( "TColorTone.MapArrayIndexToCTEnum" ) + return static_cast< MVtEngCameraPreferences::TColorTone > + ( iActiveItems[ aIndex ] ); + } + else // not valid index return first item in the list + { + __VTPRINTEXIT( "TColorTone.MapArrayIndexToCTEnum_ERROR_INDEX" ) + return static_cast< MVtEngCameraPreferences::TColorTone > + ( iActiveItems[ 0 ] ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::DoStop +// --------------------------------------------------------------------------- +// +TInt CVtUiColorTone::DoStopL( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiColorTone.DoStopL" ) + CVtUiColorTone* self = static_cast< CVtUiColorTone* >( aAny ); + if ( self->iFeatureState == MVtUiFeature::EActive ) + { + self->iFeatureManager.ComponentManager(). + DeActivateComponentL ( MVtUiComponent::EComponentIdColorTone ); + // set state + self->iFeatureState = MVtUiFeature::EReady; + } + __VTPRINTEXIT( "CVtUiColorTone.DoStopL" ) + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CVtUiColorTone::DoStart +// --------------------------------------------------------------------------- +// +TInt CVtUiColorTone::DoStartL( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiColorTone.DoStart" ) + CVtUiColorTone* self = static_cast< CVtUiColorTone* >( aAny ); + self->CVtUiPrefSettingListBase::StartSettingPageL(); + self->iFeatureManager.UiStates().SetIsCommandActivating( EFalse ); + __VTPRINTEXIT( "CVtUiColorTone.DoStart" ) + return KErrNone; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuicontrast.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuicontrast.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2006 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. +* +*/ + + +#include +#include "cvtuicontrast.h" +#include "tvtuifeatureids.h" +#include "cvtuicontrastpopup.h" +#include "cvtuipopupbase.h" +#include "videotelui.hrh" +#include "cvtuifeaturemanager.h" +#include "tvtuistates.h" + +// --------------------------------------------------------------------------- +// CVtUiContrast::NewL +// --------------------------------------------------------------------------- +// +CVtUiContrast* CVtUiContrast::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiContrast.NewL" ) + CVtUiContrast* self = + new ( ELeave ) CVtUiContrast( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiContrast.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiContrast::~CVtUiContrast +// --------------------------------------------------------------------------- +// +CVtUiContrast::~CVtUiContrast() + { + __VTPRINTENTER( "CVtUiContrast.~" ) + __VTPRINTEXIT( "CVtUiContrast.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrast::StartL +// --------------------------------------------------------------------------- +// +void CVtUiContrast::StartL() + { + __VTPRINTENTER( "CVtUiContrast.StartL" ) + CVtUiPrefSliderBase::StartL(); + iFeatureManager.UiStates().SetContrastModeOn( ETrue ); + __VTPRINTEXIT( "CVtUiContrast.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrast::Stop +// --------------------------------------------------------------------------- +// +void CVtUiContrast::Stop() + { + __VTPRINTENTER( "CVtUiContrast.Stop" ) + CVtUiPrefSliderBase::Stop(); + iFeatureManager.UiStates().SetContrastModeOn( EFalse ); + __VTPRINTEXIT( "CVtUiContrast.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrast::CVtUiContrast +// --------------------------------------------------------------------------- +// +CVtUiContrast::CVtUiContrast( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefSliderBase( aFeatureManager, EVtUiFeatureIdContrast ) + { + __VTPRINTENTER( "CVtUiContrast.CVtUiContrast" ) + __VTPRINTEXIT( "CVtUiContrast.CVtUiContrast" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrast::CVtUiContrast +// --------------------------------------------------------------------------- +// +void CVtUiContrast:: ConstructL() + { + __VTPRINTENTER( "CVtUiContrast.ConstructL" ) + BaseConstructL(); + SetPopup( CVtUiContrastPopup::NewL( iFeatureManager ) ); + __VTPRINTEXIT( "CVtUiContrast.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuicontrastpopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuicontrastpopup.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2006 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 Contrast popup +* +*/ + + + +#include +#include "cvtuicontrastpopup.h" +#include +#include "tvtuilocalvariation.h" +#include +#include "mvtuicomponent.h" +#include "CVtUiAppUi.h" +#include +#include + +// --------------------------------------------------------------------------- +// CVtUiContrastPopup::NewL +// --------------------------------------------------------------------------- +// +CVtUiContrastPopup* CVtUiContrastPopup::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiContrastPopup.NewL" ) + CVtUiContrastPopup* self = + new ( ELeave ) CVtUiContrastPopup( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiContrastPopup.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiContrastPopup::~CVtUiContrastPopup +// --------------------------------------------------------------------------- +// +CVtUiContrastPopup::~CVtUiContrastPopup() + { + __VTPRINTENTER( "CVtUiContrastPopup.~" ) + __VTPRINTEXIT( "CVtUiContrastPopup.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrastPopup::CurrentValue +// --------------------------------------------------------------------------- +// +TInt CVtUiContrastPopup::CurrentValue() + { + __VTPRINTENTER( "CVtUiContrastPopup.CurrentValue" ) + // ask from engine current value + TInt value; + if ( iCameraPref->GetContrast( value) ) + { + __VTPRINTEXIT( "CVtUiContrastPopup.CurrentValueERR" ) + return 0; + } + __VTPRINTEXIT( "CVtUiContrastPopup.CurrentValue" ) + return value; + } + +// --------------------------------------------------------------------------- +// CVtUiContrastPopup::CVtUiContrastPopup +// --------------------------------------------------------------------------- +// +CVtUiContrastPopup::CVtUiContrastPopup( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefPopupBase( aFeatureManager, TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer | + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry | + MVtUiComponent::EComponentIdVolume | + MVtUiComponent::EComponentIdZoom | + MVtUiComponent::EVComponentIdBrightness ), EVComponentIdContrast, + KVtEngSetContrast ) + { + __VTPRINTENTER( "CVtUiContrastPopup.CVtUiContrastPopup" ) + __VTPRINTEXIT( "CVtUiContrastPopup.CVtUiContrastPopup" ) + } + +// --------------------------------------------------------------------------- +// CVtUiContrastPopup::CVtUiContrastPopup +// --------------------------------------------------------------------------- +// +void CVtUiContrastPopup::ConstructL() + { + __VTPRINTENTER( "CVtUiContrastPopup.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "CVtUiContrastPopup.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuiprefpopupbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuiprefpopupbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 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 base class for video preference popups +* +*/ + + +#include +#include +#include + +#include "cvtuiprefpopupbase.h" +#include "mvtuicomponentmanager.h" +#include "mvtuicomponentstateobserver.h" +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" + +// Number of steps +static const TInt KStepCount = 20; + +// Slider min value +static const TInt KSLiderMinValue = -100; + +// Slider min value +static const TInt KSLiderDefaultValue = 0; + +// Slider max value +static const TInt KSLiderMaxValue = 100; + +// Min adjust value +static const TInt KMinAdjustValue = 0; + +// Max adjust value +static const TInt KMaxAdjustValue = 20; + +// default time out time for zoom popup +const TInt KDefaultPrefTimeOutTime = 5; + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::~CVtUiPrefPopupBase +// --------------------------------------------------------------------------- +// +CVtUiPrefPopupBase::~CVtUiPrefPopupBase() + { + __VTPRINTENTER( "CVtUiPrefPopupBase.~CVtUiPrefPopupBase" ) + __VTPRINTEXIT( "CVtUiPrefPopupBase.~CVtUiPrefPopupBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::HandleControlEventL() +// --------------------------------------------------------------------------- +// +void CVtUiPrefPopupBase::HandleControlEventL( + CCoeControl* aControl,TCoeEvent aEventType ) + { + __VTPRINTENTER( "CVtUiPrefPopupBase.HandleControlEventL" ) + CVtUiPopupBase::HandleControlEventL( aControl, aEventType ); + if ( aEventType == EEventStateChanged ) + { + const TInt value( Value() ); + if ( value != iCurrent ) + { + __VTPRINT( DEBUG_GEN, "CVtUiPrefPopupBase.OfferKeyEventL value != current " ) + iCurrent = value; + __VTPRINT2( DEBUG_GEN, "CVtUiPrefPopupBase.HandleControlEventL = %d", ScaledValue() ) + AdjustVideoL( ScaledValue() ); + } + } + + __VTPRINTEXIT( "CVtUiPrefPopupBase.HandleControlEventL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::UpdatePopupL() +// --------------------------------------------------------------------------- +// +void CVtUiPrefPopupBase::UpdatePopupL() + { + __VTPRINTENTER( "CVtUiPrefPopupBase.UpdatePrefPopupL" ) + + AdjustVideoL( ScaledValue() ); + + __VTPRINTEXIT( "CVtUiPrefPopupBase.UpdatePrefPopupL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiPrefPopupBase::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ) + { + __VTPRINTENTER( "CVtUiPrefPopupBase.OfferKeyEventL" ) + TKeyResponse response = + CVtUiPopupBase::OfferKeyEventL( aEvent, aCode ); + + if ( response == EKeyWasConsumed ) + { + AdjustVideoL( ScaledValue() ); + } + + __VTPRINTEXIT( "CVtUiPrefPopupBase.OfferKeyEventL" ) + return response; + } + +// CVtUiPrefPopupBase::AdjustVideoL() +// --------------------------------------------------------------------------- +// +void CVtUiPrefPopupBase::AdjustVideoL( TInt aValue ) + { + __VTPRINTENTER( "CVtUiPrefPopupBase.AdjustVideoL" ) + // cast the parameter + TPtrC8 params( reinterpret_cast< TUint8* >( &aValue ), sizeof( TInt ) ); + + // Adjust Contrast + iFeatureManager.AppUi().DoExecuteCmdL( iEngineCommandId, ¶ms ); + __VTPRINTEXIT( "CVtUiPrefPopupBase.AdjustVideoL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::DoActivateL() +// --------------------------------------------------------------------------- +// +void CVtUiPrefPopupBase::DoActivateL() + { + __VTPRINTENTER( "CVtUiPrefPopupBase.DoActivateL" ) + CVtUiPopupBase::DoActivateL(); + // Set current value + __VTPRINT2( DEBUG_GEN, "CVtUiPrefPopupBase.DoActivateL = %d", CurrentValue() ) + ScaleAndSetValue( CurrentValue() ); + AdjustVideoL( ScaledValue() ); + __VTPRINTEXIT( "CVtUiPrefPopupBase.DoActivateL" ) + } + +// CVtUiPrefPopupBase::CVtUiPrefPopupBase +// --------------------------------------------------------------------------- +// +CVtUiPrefPopupBase::CVtUiPrefPopupBase( CVtUiFeatureManager& aFeatureManager, + TVtUiBlockListBitField aBitField, TComponentId aComponentId, TInt aCmdId ) : + CVtUiPopupBase( aFeatureManager.ComponentManager(), aBitField, + aComponentId ), iFeatureManager( aFeatureManager ), + iEngineCommandId ( aCmdId ) + { + __VTPRINTENTER( "CVtUiPrefPopupBase.CVtUiPrefPopupBase" ) + __VTPRINTEXIT( "CVtUiPrefPopupBase.CVtUiPrefPopupBase" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiPrefPopupBase::BaseConstructL +// --------------------------------------------------------------------------- +// +void CVtUiPrefPopupBase::BaseConstructL() + { + __VTPRINTENTER( "CVtUiPrefPopupBase.BaseConstructL" ) + CVtUiPopupBase::BaseConstructL(); + // Get camera preferences extension. + iCameraPref = static_cast ( iFeatureManager. + AppUi().Model().Extension( KVtEngExtensionCameraPreferences ) ); + + // Set range and step count for the slider + SetAdjustRange( KMinAdjustValue, KMaxAdjustValue, KStepCount ); + + // Set value range to baseclass + // range e.g. 0-20 + SetMinAndMaxValues( KSLiderMinValue , KSLiderMaxValue ); + + // Set slider type to percentage + SetValueType( EAknSliderValuePercentage ); + + // Set default value + ScaleAndSetValue( KSLiderDefaultValue ); + + // Set timeout + SetTimeOut( KDefaultPrefTimeOutTime ); + + __VTPRINTEXIT( "CVtUiPrefPopupBase.BaseConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuiprefsettinglistbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuiprefsettinglistbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,360 @@ +/* +* Copyright (c) 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: Softkey UI feature implementation. +* +*/ + + +#include +#include +#include +#include +#include + +#include "cvtuiprefsettinglistbase.h" +#include "CVtUiAppUi.h" +#include "cvtuitransparentsettingpage.h" +#include "CVtUiMainControl.h" +#include "CVtUiContextControl.h" +#include "cvtuifeaturemanager.h" +#include "VtUiLayout.h" + +#include + +// constants +static const TInt KMaxNumberOfArrayItems = 5; +static const TInt KMaxNumberOfActiveItems = 5; + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::~CVtUiPrefSettingListBase +// --------------------------------------------------------------------------- +// +CVtUiPrefSettingListBase::~CVtUiPrefSettingListBase() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.~CVtUiPrefSettingListBase" ) + delete iViewfinderBitmap; + delete iSettingPage; + iActiveItems.Close(); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.~CVtUiPrefSettingListBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::InitFeatureL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.InitFeatureL" ) + ResizeBackroundBitmapRect(); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::IsPendingCmd +// --------------------------------------------------------------------------- +// +TBool CVtUiPrefSettingListBase::IsPendingCmd() + { + return iPendingSettingChangeCmd; + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::HandlePendingCmd +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::HandlePendingCmdL() + { + SettingPageItemChangedL( iOriginalSelection ); + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::HandleSettingPageEventL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::HandleSettingPageEventL( + CAknSettingPage* /*aSettingPage*/, TAknSettingPageEvent aEventType ) + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.HandleSettingPageEventL" ) + const TInt currentItem = iSettingPage->ListBoxControl()->CurrentItemIndex(); + switch ( aEventType ) + { + case EEventSettingCancelled: + { + if ( iOriginalSelection != currentItem ) + { + // Set back to orginal selection + SettingPageItemChangedL( iOriginalSelection ); + iCurrentSelection = iOriginalSelection; + } + Stop(); + break; + } + case EEventSettingChanged: + { + SettingPageItemChangedL( currentItem ); + iOriginalSelection = currentItem; + Stop(); + break; + } + case EEventSettingOked: + { + // Check if the current selection has changed + if ( iOriginalSelection != currentItem ) + { + SettingPageItemChangedL( currentItem ); + iOriginalSelection = currentItem; + iCurrentSelection = currentItem; + } + Stop(); + break; + } + default: + break; + } + __VTPRINTEXIT( "CVtUiPrefSettingListBase.HandleSettingPageEventL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::ListStateChangedL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::ListStateChangedL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.ListStateChangedL" ) + // Check if new item is focused in the selection list + + const TInt currentItem = iSettingPage->ListBoxControl()->CurrentItemIndex(); + if ( iCurrentSelection != currentItem ) + { + // Update current selection + iCurrentSelection = currentItem; + // Adjust frame + SettingPageItemChangedL( currentItem ); + } + __VTPRINTEXIT( "CVtUiPrefSettingListBase.ListStateChangedL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::StartSettingPageL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::StartSettingPageL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.StartSettingPageL" ) + // Swap image places if needed + iAppUi.SwitchViewFinderToMainPaneL(); + + // Get context control's window priority and position + iWindowPriority = iAppUi.ContextControl().DrawableWindow() + ->OrdinalPriority(); + iWindowPosition = iAppUi.ContextControl().DrawableWindow() + ->OrdinalPosition(); + + // Rise context control's window priority othwerwise setting page will be + // drawn partially over the context control window. + iAppUi.ContextControl().DrawableWindow()->SetOrdinalPosition( + iWindowPosition, iWindowPriority + 1 ); + + // Creates setting page + CreateSettingPageL(); + // Launch setting page. + iSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted, EFalse ); + iSettingPage = NULL; + __VTPRINTEXIT( "CVtUiPrefSettingListBase.StartSettingPageL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::StopSettingPageL +// +// +void CVtUiPrefSettingListBase::StopSettingPageL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.StopSettingPageL" ) + // Swap image places if needed + iAppUi.RestoreViewFinderL(); + + if ( iSettingPage) + { + // Cancell the setting page + TKeyEvent keyEvent; + keyEvent.iCode = EKeyEscape; + iSettingPage->OfferKeyEventL( keyEvent, EEventKey ); + } + + // Set contex control's window priority and position back to orginal value. + iAppUi.ContextControl().DrawableWindow()->SetOrdinalPosition( + iWindowPosition, iWindowPriority ); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.StopSettingPageL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::SizeChanged +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::SizeChanged() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.SizeChanged" ) + ResizeBackroundBitmapRect(); + // Set new coordinates and size + iSettingPage->SetBitmapPositionAndClipRect( iBitmapTopLeftCorner, + iBitmapClippingRect ); + iSettingPage->HandleLayoutChangeL(); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.SizeChanged" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::UpdateBackground +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::UpdateBackground( CFbsBitmap* aFrame ) + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.UpdateBackground" ) + if ( aFrame ) + { + // aFrame is valid only in this callback, the bitmap + // must be copied for use as the setting page background + iViewfinderBitmap->Duplicate( aFrame->Handle() ); + if ( iSettingPage ) + { + // Update background + iSettingPage->ChangeBackground( iViewfinderBitmap ); + } + } + __VTPRINTEXIT( "CVtUiPrefSettingListBase.UpdateBackground" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::UpdateSettingL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::UpdateSettingL() + { + // if no active items do nothing + if ( iActiveItems.Count() > 0 ) + { + // user change the focuse in the list but not + // select it indeed + if( iOriginalSelection != iCurrentSelection ) + SettingPageItemChangedL( iCurrentSelection ); + else + // yes,user has tapped down the OK button to choose a item + SettingPageItemChangedL( iOriginalSelection ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::CVtUiPrefSettingListBase +// --------------------------------------------------------------------------- +// +CVtUiPrefSettingListBase::CVtUiPrefSettingListBase( CVtUiFeatureManager& + aFeatureManager, TVtUiFeatureId aFeatureId ) : CVtUiFeatureBase( + aFeatureId, aFeatureManager ), iActiveItems( KMaxNumberOfActiveItems ), + iBitmapTopLeftCorner( 0, 0 ), iAppUi( aFeatureManager.AppUi() ),iPendingSettingChangeCmd( EFalse ) + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.CVtUiPrefSettingListBase" ) + __VTPRINTEXIT( "CVtUiPrefSettingListBase.CVtUiPrefSettingListBase" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::ConstructL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.ConstructL" ) + BaseConstructL(); + // Get camera preferences extension. + iCameraPref = static_cast (iFeatureManager. + AppUi().Model().Extension( KVtEngExtensionCameraPreferences ) ); + // Create backgound bitmap + iViewfinderBitmap = new ( ELeave ) CFbsBitmap(); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::ReadAndAppendItemL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::ReadAndAppendItemL( CDesCArray& aItems, + TInt aResId ) + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.ReadAndAppendItemL" ) + HBufC* text = iAppUi.GetEikonEnv()->AllocReadResourceLC( aResId ); + aItems.AppendL( *text ); + CleanupStack::PopAndDestroy(); // text + __VTPRINTEXIT( "CVtUiPrefSettingListBase.ReadAndAppendItemL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::CreateSettingPageL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::CreateSettingPageL() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.CreateSettingPageL" ) + CDesCArray* selectionArray = new ( ELeave ) + CDesCArraySeg( KMaxNumberOfArrayItems ); + CleanupStack::PushL( selectionArray ); + // Set items must be called before CurrentSelection function + // Otherwise iActiveItems array is not populated + iActiveItems.Reset(); + SetItemsL( *selectionArray ); + TInt resourceId = SettingPageResId(); + + // Current selection is needed when a new item is focused in the list + iCurrentSelection = iOriginalSelection; + TInt current( CurrentSelection() ); + if ( !iSettingPage ) + { + iSettingPage = new ( ELeave ) CVtUiTransparentSettingPage( resourceId, + iCurrentSelection, selectionArray ); + iSettingPage->ConstructL(); + iSettingPage->SetSettingPageObserver( this ); + iSettingPage->SetSettingPageEventStateObserver( this ); + } + CleanupStack::PopAndDestroy(); // selectionArray + ResizeBackroundBitmapRect(); + iSettingPage->SetBitmapPositionAndClipRect( iBitmapTopLeftCorner, + iBitmapClippingRect ); + __VTPRINTEXIT( "CVtUiPrefSettingListBase.CreateSettingPageL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSettingListBase::ShrinkBackroundBitmapRect +// --------------------------------------------------------------------------- +// +void CVtUiPrefSettingListBase::ResizeBackroundBitmapRect() + { + __VTPRINTENTER( "CVtUiPrefSettingListBase.ResizeBackroundBitmapRect" ) + TRect parent( iAppUi.MainControl().Size() ); + TAknWindowLineLayout rect; + TAknLayoutRect iStreamLayout; + VtUiLayout::GetSecondWindowStreamLayout( rect, ETrue ); + iStreamLayout.LayoutRect( parent, rect ); + + // In landscape rect from layout doesn't work + // for some reason + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + iBitmapClippingRect = parent; + } + else + { + iBitmapClippingRect = iStreamLayout.Rect(); + } + + iBitmapTopLeftCorner = iStreamLayout.Rect().iTl; + __VTPRINTEXIT( "CVtUiPrefSettingListBase.ResizeBackroundBitmapRect" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuiprefsliderbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuiprefsliderbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 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: Implementatin of base class for video pref sliders +* +*/ + + +#include + +#include "cvtuiprefsliderbase.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicomponentmanager.h" +#include "CVtUiAppUi.h" +#include "mvtuicommandmanager.h" +#include "cvtuiprefpopupbase.h" + + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::~CVtUiPrefSliderBase +// --------------------------------------------------------------------------- +// +CVtUiPrefSliderBase::~CVtUiPrefSliderBase() + { + __VTPRINTENTER( "CVtUiPrefSliderBase.~CVtUiPrefSliderBase" ) + __VTPRINTEXIT( "CVtUiPrefSliderBase.~CVtUiPrefSliderBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::StartL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSliderBase::StartL() + { + __VTPRINTENTER( "CVtUiPrefSliderBase.StartL" ) + // call base class implementation + CVtUiSliderBase::StartL(); + + // Swap image places if needed + iFeatureManager.AppUi().SwitchViewFinderToMainPaneL(); + + __VTPRINTEXIT( "CVtUiPrefSliderBase.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::Stop +// --------------------------------------------------------------------------- +// +void CVtUiPrefSliderBase::Stop() + { + __VTPRINTENTER( "CVtUiPrefSliderBase.Stop" ) + if ( iFeatureState == MVtUiFeature::EActive ) + { + // call base class implementation + CVtUiSliderBase::Stop(); + + // Swap image places if needed + TRAP_IGNORE( iFeatureManager.AppUi().RestoreViewFinderL() ); + } + __VTPRINTEXIT( "CVtUiPrefSliderBase.Stop" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSliderBase::InitFeatureL() + { + __VTPRINTENTER( "CVtUiPrefSliderBase.InitFeatureL" ) + // call base class implementation + CVtUiSliderBase::InitFeatureL(); + __VTPRINTEXIT( "CVtUiPrefSliderBase.InitFeatureL" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::CVtUiPrefSliderBase +// --------------------------------------------------------------------------- +// +CVtUiPrefSliderBase::CVtUiPrefSliderBase( CVtUiFeatureManager& aFeatureManager, + TVtUiFeatureId aFeatureId ) : CVtUiSliderBase( + aFeatureManager, aFeatureId ) + { + __VTPRINTENTER( "CVtUiPrefSliderBase.CVtUiPrefSliderBase" ) + __VTPRINTEXIT( "CVtUiPrefSliderBase.CVtUiPrefSliderBase" ) + } + + +// --------------------------------------------------------------------------- +// CVtUiPrefSliderBase::BaseConstructL +// --------------------------------------------------------------------------- +// +void CVtUiPrefSliderBase::BaseConstructL() + { + __VTPRINTENTER( "CVtUiPrefSliderBase.BaseConstructL" ) + CVtUiSliderBase::BaseConstructL(); + __VTPRINTEXIT( "CVtUiPrefSliderBase.BaseConstructL" ) + } + + + + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuitransparentsettingpage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuitransparentsettingpage.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,196 @@ +/* +* Copyright (c) 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: Transparent camera setting page. +* +*/ + + + +#include "cvtuitransparentsettingpage.h" +#include "mvtuisettingpageobserver.h" +#include "VtUiLayout.h" +#include +#include +#include +#include + + +/** +* CVtUiTransparentSettingPage +* +* Transparent camera setting page. Extends class CAknTransparentCameraSettingPage +* with position related functionality. +* +* @since S60 v3.2 +*/ +void CVtUiTransparentSettingPage::HandleLayoutChangeL() +{ + GetTheLayoutData(); +} + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::CVtUiTransparentSettingPage +// ----------------------------------------------------------------------------- +// +CVtUiTransparentSettingPage::CVtUiTransparentSettingPage( TInt aResourceID, + TInt& aCurrentSelectionIndex, const MDesCArray* aItemArray) : + CAknTransparentCameraSettingPage( aResourceID, + aCurrentSelectionIndex, aItemArray ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::ConstructL +// ----------------------------------------------------------------------------- +// +void CVtUiTransparentSettingPage::ConstructL() + { + CAknTransparentCameraSettingPage::ConstructL(); + } + + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::~CVtUiTransparentSettingPage +// ----------------------------------------------------------------------------- +// +CVtUiTransparentSettingPage::~CVtUiTransparentSettingPage() + { + } + +// ----------------------------------------------------------------------------- +// CVtUiNumberEntryControl::SetNumberEntryControlObserver +// ----------------------------------------------------------------------------- +// +void CVtUiTransparentSettingPage::SetSettingPageEventStateObserver( + MVtUiSettingPageObserver* aObserver ) + { + iSettingPageObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::GetTheLayoutData +// ----------------------------------------------------------------------------- +// +void CVtUiTransparentSettingPage::GetTheLayoutData() + { + // Varieties + TInt labelVariety = 0; + TInt listboxVariety = 0; + + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + labelVariety = 1; + listboxVariety = 1; + } + + // Rect for label and shadow text + TRect labelRect = RectFromLayout( AknLayoutScalable_Apps:: + aid_placing_vt_set_title( labelVariety ) ); + + // Rect for listbox control + TRect listBoxRect = RectFromLayout( AknLayoutScalable_Apps:: + aid_placing_vt_set_content( listboxVariety ) ); + + // Get text label from parent class + CEikLabel* textLabel = TextLabel(); + + // Set label's new positions + if ( textLabel ) + { + textLabel->SetPosition( labelRect.iTl ); + } + + // Get shadow text from parent class + CEikLabel* shadowText = ShadowText(); + + // Set shadow text's new positions if shadow text exists + if( shadowText ) + { + // This information should come from layout, but + // also AknSettingPage does the positioning in this way. + labelRect.Move( 1, 1 ); + shadowText->SetPosition( labelRect.iTl ); + } + + // Set new rect for listbox control + ListBoxControl()->SetRect( listBoxRect ); + } + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::DynamicInitL +// ----------------------------------------------------------------------------- +// +void CVtUiTransparentSettingPage::DynamicInitL() + { + GetTheLayoutData(); + } + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::HandleControlEventL +// ----------------------------------------------------------------------------- +// +void CVtUiTransparentSettingPage::HandleControlEventL( CCoeControl* /*aControl*/, + TCoeEvent aEventType ) + { + __VTPRINTENTER( "CVtUiTransparentSettingPage.HandleControlEventL" ) + if ( aEventType == EEventStateChanged ) + { + if ( iSettingPageObserver ) + { + iSettingPageObserver->ListStateChangedL(); + } + __VTPRINT( DEBUG_GEN, " CVtUiTransparentSettingPage.EEventStateChanged" ) + } + + __VTPRINTEXIT( "CVtUiTransparentSettingPage.HandleControlEventL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiTransparentSettingPage::RectFromLayout +// ----------------------------------------------------------------------------- +// +TRect CVtUiTransparentSettingPage::RectFromLayout( + const TAknWindowComponentLayout& aComponentLayout ) const + { + __VTPRINTENTER( "CVtUiTransparentSettingPage.RectFromLayout" ) + + TInt main_pane_variety( 0 ); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + main_pane_variety = 4; + } + + TAknWindowComponentLayout layout1 = + AknLayoutScalable_Apps::main_pane( main_pane_variety ); + TAknWindowComponentLayout layout2 = + AknLayoutScalable_Apps::main_video_tele_pane(); + + TAknWindowLineLayout layout = + TAknWindowComponentLayout::Compose( + TAknWindowComponentLayout::Compose( layout1, layout2 ), aComponentLayout ). + LayoutLine(); + + TRect screen; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( screen, layout ); + + // setting page is window owning control and its position is relative to mainpane + // layotdata is instead relative to screen + TRect rect( layoutRect.Rect() ); + rect.Move( -PositionRelativeToScreen() ); + + __VTPRINTEXIT( "CVtUiTransparentSettingPage.RectFromLayout" ) + return rect; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuivideoquality.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuivideoquality.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,441 @@ +/* +* Copyright (c) 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: Video quality UI feature implementation. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "cvtuivideoquality.h" +#include "tvtuifeatureids.h" +#include "VtUiLayout.h" +#include "VtUiUtility.h" +#include "CVtUiAppUi.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicomponentmanager.h" +#include "tvtuilocalvariation.h" +#include "tvtuistates.h" + +// constants +_LIT( KVtUiFormatActive, "0\t%S" ); +_LIT( KVtUiFormatInactive, "\t%S" ); +const TInt KVtUiMaxListItemLength = 128; + +// Implementation of TVtUiVideoQualityComponentState + +// --------------------------------------------------------------------------- +// TVtUiVideoQualityComponentState::TVtUiVideoQualityComponentState +// --------------------------------------------------------------------------- +// +TVtUiVideoQualityComponentState::TVtUiVideoQualityComponentState( + MVtUiComponent& aComponent ) : + TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer | + MVtUiComponent::EComponentIdNumberEntry ) ) + { + __VTPRINTENTER( "TVtUiVideoQualityComponentState.Ctor" ) + __VTPRINTEXIT( "TVtUiVideoQualityComponentState.Ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::NewL +// --------------------------------------------------------------------------- +// +CVtUiVideoQuality* CVtUiVideoQuality::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiVideoQuality.NewL" ) + CVtUiVideoQuality* self = + new ( ELeave ) CVtUiVideoQuality( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiVideoQuality.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::~CVtUiVideoQuality +// --------------------------------------------------------------------------- +// +CVtUiVideoQuality::~CVtUiVideoQuality() + { + __VTPRINTENTER( "CVtUiVideoQuality.~CVtUiVideoQuality" ) + + // Delete the callback + delete iShowSelectionListCallback; + + // unregister component + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + + __VTPRINTEXIT( "CVtUiVideoQuality.~CVtUiVideoQuality" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::StartL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::StartL() + { + __VTPRINTENTER( "CVtUiVideoQuality.StartL" ) + if ( iFeatureState == MVtUiFeature::EReady ) + { + iFeatureManager.UiStates().SetIsFixedToolbarVisible( EFalse ); + iFeatureManager.ComponentManager(). + RequestActivationL ( MVtUiComponent::EComponentIdVideoQuality ); + // set state + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXIT( "CVtUiVideoQuality.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::Stop +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::Stop() + { + __VTPRINTENTER( "CVtUiVideoQuality.Stop" ) + TRAP_IGNORE( + { + if ( iFeatureState == MVtUiFeature::EActive ) + { + iFeatureManager.ComponentManager(). + DeActivateComponentL ( MVtUiComponent::EComponentIdVideoQuality ); + // set state + iFeatureState = MVtUiFeature::EReady; + } + } ); + __VTPRINTEXIT( "CVtUiVideoQuality.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::InitFeatureL() + { + __VTPRINTENTER( "CVtUiVideoQuality.InitFeatureL" ) + // register component to conponent manager + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + iFeatureState = EReady; + __VTPRINTEXIT( "CVtUiVideoQuality.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ComponentId +// --------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiVideoQuality::ComponentId() const + { + __VTPRINTENTER( "CVtUiVideoQuality.ComponentId" ) + __VTPRINTEXIT( "CVtUiVideoQuality.ComponentId" ) + return MVtUiComponent::EComponentIdVideoQuality; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ComponentAsControl +// --------------------------------------------------------------------------- +// +CCoeControl* CVtUiVideoQuality::ComponentAsControl() + { + __VTPRINTENTER( "CVtUiWhiteBalance.ComponentAsControl" ) + __VTPRINTEXIT( "CVtUiVideoQuality.ComponentAsControl" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::DoActivateL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::DoActivateL() + { + __VTPRINTENTER( "CVtUiVideoQuality.DoActivateL" ) + __VTPRINTEXIT( "CVtUiVideoQuality.DoActivateL" ) + iFeatureManager.UiStates().SetVideoQualityModeOn( ETrue ); + iShowSelectionListCallback->CallBack(); + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::DoDeactivateL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::DoDeactivateL() + { + __VTPRINTENTER( "CVtUiVideoQuality.DoDeactivateL" ) + iFeatureManager.UiStates().SetVideoQualityModeOn( EFalse ); + __VTPRINTEXIT( "CVtUiVideoQuality.DoDeactivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::CreateIconLC +// --------------------------------------------------------------------------- +// +CGulIcon* CVtUiVideoQuality::CreateIconLC( TVtUiBitmapId aIconId, + TVtUiBitmapId aMaskId ) + { + __VTPRINTENTER( "CVtUiVideoQuality.CreateIconLC" ) + TFileName fileName; + TInt bitmapIndex; + TInt bitmapMaskIndex; + CFbsBitmap* newIconBmp; + CFbsBitmap* newIconMaskBmp; + VtUiLayout::Resolve( aIconId, fileName, bitmapIndex ); + TAknsItemID skinId = VtUiLayout::MapBitmapToSkinId( aIconId ); + VtUiLayout::Resolve( aMaskId, fileName, bitmapMaskIndex ); + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), skinId, newIconBmp, + newIconMaskBmp, fileName, bitmapIndex, bitmapMaskIndex ); + CleanupStack::PushL( newIconBmp ); + CleanupStack::PushL( newIconMaskBmp ); + CGulIcon* gulIcon = CGulIcon::NewL( newIconBmp, newIconMaskBmp ); + CleanupStack::Pop( newIconMaskBmp ); + CleanupStack::Pop( newIconBmp ); + CleanupStack::PushL( gulIcon ); + __VTPRINTEXIT( "CVtUiVideoQuality.CreateIconLC" ) + return gulIcon; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ShowSelectionListL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::ShowSelectionListL() + { + __VTPRINTENTER( "CVtUiVideoQuality.ShowSelectionListL" ) + // create listbox + CAknSingleGraphicPopupMenuStyleListBox* listBox = + new ( ELeave ) CAknSingleGraphicPopupMenuStyleListBox(); + CleanupStack::PushL( listBox ); + + // create popuplist + CAknPopupList* popUpList = + CAknPopupList::NewL( listBox, R_VIDEOTELUI_SOFTKEYS_SELECT_CANCEL ); + CleanupStack::PushL( popUpList ); + + listBox->ConstructL( popUpList, + EAknListBoxSelectionList | EAknListBoxLoopScrolling ); + + // Create an array of icons, reading them from the file and + // set them in the listbox + CArrayPtr* icons = new(ELeave) CAknIconArray( 1 ); + CleanupStack::PushL(icons); + CGulIcon* icon = CreateIconLC( EVtUiBitmap_qgn_prop_sub_current, + EVtUiBitmap_qgn_prop_sub_current_mask ); + icons->AppendL( icon ); + listBox->ItemDrawer()->ColumnData()->SetIconArray( icons ); + CleanupStack::Pop(2); //icon + icons + + // Read item array from resources + CDesCArray* textArray = + iFeatureManager.AppUi().GetEikonEnv()-> + ReadDesCArrayResourceL( R_VIDEOTELUI_VIDEO_QUALITY_ARRAY ); + CleanupStack::PushL( textArray ); + + CDesCArraySeg* listBoxRows = new ( ELeave ) CDesCArraySeg( 3 ); + CleanupStack::PushL( listBoxRows ); + + // Read items to array + SetItemsL( *listBoxRows, *textArray ); + + // Create listbox model. + CTextListBoxModel* listBoxModel = listBox->Model(); + // Set item array + listBoxModel->SetItemTextArray( listBoxRows ); + + // Set ownership + listBoxModel->SetOwnershipType( ELbmOwnsItemArray ); + + // Enable marquee + listBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); + + CleanupStack::Pop(2); // listBoxRows + testArray + + TInt popupOk = popUpList->ExecuteLD(); + + CleanupStack::Pop(); // popUpList + popUpList = NULL; + + if ( popupOk ) + { + ItemSelectedL( listBox->CurrentItemIndex() ); + } + else + { + // Selection canceled. + } + + // Reset arrays + listBoxRows->Reset(); + textArray->Reset(); + icons->ResetAndDestroy(); // icons + icon + + // Delete listbox + CleanupStack::PopAndDestroy( listBox ); // listBox + + iAsyncCallback->Set( TCallBack( &DoStop, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "CVtUiVideoQuality.ShowSelectionListL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::AsyncShowSelectionListL +// --------------------------------------------------------------------------- +// +TInt CVtUiVideoQuality::AsyncShowSelectionList( TAny* aPtr ) + { + CVtUiVideoQuality* self = reinterpret_cast< CVtUiVideoQuality* > ( aPtr ); + TRAPD( err, self->ShowSelectionListL() ); + return err; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::SetItemsL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::SetItemsL( CDesCArray& aTarget, + const CDesCArray& aSource ) + { + __VTPRINTENTER( "CVtUiVideoQuality.SetItemsL" ) + TInt activeItem( ActiveItem() ); + TInt count( aSource.Count() ); + for ( TInt i = 0; i < count; i++ ) + { + TBuf< KVtUiMaxListItemLength > item; + TPtrC sourceItem( aSource[ i ] ); + if ( i == activeItem ) + { + item.Format( KVtUiFormatActive(), &sourceItem ); + } + else + { + item.Format( KVtUiFormatInactive(), &sourceItem ); + } + aTarget.AppendL( item ); + } + __VTPRINTEXIT( "CVtUiVideoQuality.SetItemsL" ) + } +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ActiveItem +// --------------------------------------------------------------------------- +// +TInt CVtUiVideoQuality::ActiveItem() const + { + __VTPRINTENTER( "CVtUiVideoQuality.ActiveItem" ) + TInt activeItem( 0 ); + MVtEngMedia::TVideoQuality videoQuality; + VtUiUtility::GetVideoQuality( iFeatureManager.AppUi().Model().Media(), + videoQuality ); + switch( videoQuality ) + { + case MVtEngMedia::EVideoQualityNormal: + activeItem = 0; + break; + case MVtEngMedia::EVideoQualityDetail: + activeItem = 1; + break; + case MVtEngMedia::EVideoQualityMotion: + activeItem = 2; + break; + default: + break; + } + __VTPRINTEXIT( "CVtUiVideoQuality.ActiveItem" ) + return activeItem; + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ItemSelectedL +// --------------------------------------------------------------------------- +// + void CVtUiVideoQuality::ItemSelectedL( TInt aItemIndex ) + { + __VTPRINTENTER( "CVtUiVideoQuality.ItemSelectedL" ) + MVtEngMedia::TVideoQuality qualityLevel; + switch( aItemIndex ) + { + case 0: + qualityLevel = MVtEngMedia::EVideoQualityNormal; + break; + + case 1: + qualityLevel = MVtEngMedia::EVideoQualityDetail; + break; + + case 2: + qualityLevel = MVtEngMedia::EVideoQualityMotion; + break; + default: + break; + } + // cast the parameter + TPtrC8 params( reinterpret_cast< TUint8* >( &qualityLevel ), + sizeof( MVtEngMedia::TVideoQuality ) ); + iFeatureManager.AppUi().DoExecuteCmdL( KVtEngSetVideoQuality, ¶ms ); + __VTPRINTEXIT( "CVtUiVideoQuality.ItemSelectedL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::CVtUiVideoQuality +// --------------------------------------------------------------------------- +// +CVtUiVideoQuality::CVtUiVideoQuality( CVtUiFeatureManager& aFeatureManager ) : + CVtUiFeatureBase( EVtUiFeatureIdVideoQuality, aFeatureManager ), + iComponentState( *this ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.CVtUiVideoQuality" ) + __VTPRINTEXIT( "CVtUiVideoQuality.CVtUiVideoQuality" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVideoQuality::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiVideoQuality::ConstructL() + { + __VTPRINTENTER( "CVtUiVideoQuality.ConstructL" ) + BaseConstructL(); + iShowSelectionListCallback = new ( ELeave ) CAsyncCallBack( + TCallBack( &AsyncShowSelectionList, this ), + CActive::EPriorityStandard ); + __VTPRINTEXIT( "CVtUiVideoQuality.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiVideoQuality::DoStop +// ----------------------------------------------------------------------------- +// +TInt CVtUiVideoQuality::DoStop( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiVideoQuality.DoStop" ) + CVtUiFeatureBase* self = static_cast< CVtUiFeatureBase* >( aAny ); + self->Stop(); + __VTPRINTEXIT( "CVtUiVideoQuality.DoStop" ) + return KErrNone; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/prefs/cvtuiwhitebalance.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/prefs/cvtuiwhitebalance.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,390 @@ +/* +* Copyright (c) 2007 - 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" +* 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: White balance UI feature implementation. +* +*/ + + +#include +#include +#include +#include "cvtuiwhitebalance.h" +#include "tvtuifeatureids.h" +#include +#include +#include "mvtuicomponentmanager.h" +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" +#include "tvtuilocalvariation.h" +#include "tvtuistates.h" +#include "cvtuifeaturemanager.h" +#include "cvtuicommandmanager.h" + +// Implementation of TVtUiWhiteBalanceComponentState + +// --------------------------------------------------------------------------- +// TVtUiWhiteBalanceComponentState::TVtUiWhiteBalanceComponentState +// --------------------------------------------------------------------------- +// +TVtUiWhiteBalanceComponentState::TVtUiWhiteBalanceComponentState( + MVtUiComponent& aComponent ) : + TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry ) ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::NewL +// --------------------------------------------------------------------------- +// +CVtUiWhiteBalance* CVtUiWhiteBalance::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.NewL" ) + CVtUiWhiteBalance* self = + new ( ELeave ) CVtUiWhiteBalance( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiWhiteBalance.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::~CVtUiWhiteBalance +// --------------------------------------------------------------------------- +// +CVtUiWhiteBalance::~CVtUiWhiteBalance() + { + __VTPRINTENTER( "CVtUiWhiteBalance.~CVtUiWhiteBalance" ) + // unregister layout change + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + // unregister component + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "CVtUiWhiteBalance.~CVtUiWhiteBalance" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::StartL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::StartL() + { + __VTPRINTENTER( "CVtUiWhiteBalance.StartL" ) + if ( iFeatureState == MVtUiFeature::EReady ) + { + iFeatureManager.AppUi().EnableCommandActivatingAndCleanupPushL(); + iFeatureManager.UiStates().SetIsFixedToolbarVisible( EFalse ); + iFeatureManager.ComponentManager(). + RequestActivationL ( MVtUiComponent::EComponentIdWhiteBalance ); + CleanupStack::Pop(); // EnableCommandActivatingAndCleanupPushL + // set state + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXIT( "CVtUiWhiteBalance.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::Stop +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::Stop() + { + __VTPRINTENTER( "CVtUiWhiteBalance.Stop" ) + iAsyncCallback->Cancel(); + iAsyncCallback->Set( TCallBack( &DoStopL, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "CVtUiWhiteBalance.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::InitFeatureL() + { + __VTPRINTENTER( "CVtUiWhiteBalance.InitFeatureL" ) + CVtUiPrefSettingListBase::InitFeatureL(); + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + iFeatureState = EReady; + __VTPRINTEXIT( "CVtUiWhiteBalance.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::ComponentId +// --------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiWhiteBalance::ComponentId() const + { + __VTPRINTENTER( "CVtUiWhiteBalance.ComponentId" ) + __VTPRINTEXIT( "CVtUiWhiteBalance.ComponentId" ) + return MVtUiComponent::EComponentIdWhiteBalance; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::ComponentAsControl +// --------------------------------------------------------------------------- +// +CCoeControl* CVtUiWhiteBalance::ComponentAsControl() + { + __VTPRINTENTER( "CVtUiWhiteBalance.ComponentAsControl" ) + __VTPRINTEXIT( "CVtUiWhiteBalance.ComponentAsControl" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::DoActivateL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::DoActivateL() + { + __VTPRINTENTER( "CVtUiWhiteBalance.DoActivateL" ) + // get supported white balance modes + iCameraPref->GetSupportedWhiteBalanceModes( iSupportedModes ); + __VTPRINT2( DEBUG_GEN,"CVtUiWhiteBalance.DoActivateL=%d", iSupportedModes ) + iFeatureManager.UiStates().SetWhiteBalanceModeOn( ETrue ); + iAsyncCallback->Cancel(); + iAsyncCallback->Set( TCallBack( &DoStartL, this ) ); + iAsyncCallback->CallBack(); + __VTPRINTEXIT( "CVtUiWhiteBalance.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::DoDeactivateL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::DoDeactivateL() + { + __VTPRINTENTER( "CVtUiWhiteBalance.DoDeactivateL" ) + iFeatureManager.UiStates().SetWhiteBalanceModeOn( EFalse ); + CVtUiPrefSettingListBase::StopSettingPageL(); + __VTPRINTEXIT( "CVtUiWhiteBalance.DoDeactivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::HandleLayoutChangeL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::HandleLayoutChangeL() + { + __VTPRINTENTER( "CVtUiWhiteBalance.HandleLayoutChangeL" ) + if ( iFeatureState == MVtUiFeature::EActive ) + { + SizeChanged(); + } + __VTPRINTEXIT( "CVtUiWhiteBalance.HandleLayoutChangeL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::CurrentSelection +// --------------------------------------------------------------------------- +// +TInt CVtUiWhiteBalance::CurrentSelection() + { + __VTPRINTENTER( "CVtUiWhiteBalance.CurrentSelection" ) + // ask from engine which item is currently active + MVtEngCameraPreferences::TWhiteBalance wb; + if ( iCameraPref->GetWhiteBalance( wb ) ) + { + __VTPRINT( DEBUG_GEN, "CurrentSelection::error" ); + __VTPRINTEXIT( "CVtUiWhiteBalance.CurrentSelection" ) + // if error occured return 0 i.e. first list item + return 0; + } + __VTPRINTEXIT( "CVtUiWhiteBalance.CurrentSelection" ) + return MapWBEnumToArrayIndex( wb ); + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::SetItemsL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::SetItemsL( CDesCArray& aArray ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.SetItemsL" ) + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.SetItemsL=%d", iSupportedModes ) + // Auto mode allways supported + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_AUTOMATIC_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::EAuto ); + + if( iSupportedModes & MVtEngCameraPreferences::EDaylight ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_SUNNY_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::EDaylight ); + } + if( iSupportedModes & MVtEngCameraPreferences::ECloudy ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_CLOUDY_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::ECloudy ); + } + if( iSupportedModes & MVtEngCameraPreferences::ETungsten ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_INCANDESCENT_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::ETungsten ); + } + if( iSupportedModes & MVtEngCameraPreferences::EFluorescent ) + { + ReadAndAppendItemL( aArray, R_VIDEOTELUI_QTN_INCAL_FLUORESCENT_OPTION ); + iActiveItems.Append( MVtEngCameraPreferences::EFluorescent ); + } + __VTPRINTEXIT( "CVtUiWhiteBalance.SetItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::SettingPageResId +// --------------------------------------------------------------------------- +// +TInt CVtUiWhiteBalance::SettingPageResId() const + { + __VTPRINTENTER( "CVtUiWhiteBalance.SettingPageResId" ) + __VTPRINTEXIT( "CVtUiWhiteBalance.SettingPageResId" ) + return R_VIDEOTELUI_WHITE_BALANCE_SETTING_PAGE; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::SettingPageItemChangedL +// --------------------------------------------------------------------------- +// +void CVtUiWhiteBalance::SettingPageItemChangedL( TInt aIndex ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.SettingPageItemChangedL" ) + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.index=%d", aIndex ) + if ( iFeatureManager.UiStates().ExecState() == TVtUiStates::EExecStateResetting ) + { + __VTPRINTEXIT( "CVtUiWhiteBalance.SettingPageItemChangedL" ) + return; + } + // Map index to right white balance value + MVtEngCameraPreferences::TWhiteBalance wb = MapArrayIndexToWBEnum( aIndex ); + + // cast the parameter + TPtrC8 params( reinterpret_cast< TUint8* >( &wb ), + sizeof( MVtEngCameraPreferences::TWhiteBalance ) ); + + // Adjust white balance + MVtEngMedia::TCameraId camId; + iFeatureManager.AppUi().Model().Media().GetCurrentCameraId(camId); + + if( camId == MVtEngMedia::ESecondaryCamera ) + { + iFeatureManager.AppUi().DoExecuteCmdL( KVtEngSetWhiteBalance, ¶ms ); + iPendingSettingChangeCmd = EFalse; + } + else + iPendingSettingChangeCmd = ETrue; + __VTPRINTEXIT( "CVtUiWhiteBalance.SettingPageItemChangedL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::CVtUiWhiteBalance +// --------------------------------------------------------------------------- +// +CVtUiWhiteBalance::CVtUiWhiteBalance( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPrefSettingListBase( aFeatureManager, EVtUiFeatureIdWhiteBalance ), + iComponentState( *this ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.CVtUiWhiteBalance" ) + __VTPRINTEXIT( "CVtUiWhiteBalance.CVtUiWhiteBalance" ) + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::MapWBEnumToArrayIndex +// --------------------------------------------------------------------------- +// +TInt CVtUiWhiteBalance::MapWBEnumToArrayIndex( MVtEngCameraPreferences:: + TWhiteBalance& aWhiteBalance ) const + { + __VTPRINTENTER( "CVtUiWhiteBalance.MapWBEnumToArrayIndex" ) + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.cpunt=%d", iActiveItems.Count() ) + for ( TInt i = 0; i < iActiveItems.Count(); ++i ) + { + if ( iActiveItems [ i ] == aWhiteBalance ) + { + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.index=%d", i ) + __VTPRINTEXIT( "CVtUiWhiteBalance.MapWBEnumToArrayIndex" ) + return i; + } + } + // not found + __VTPRINTEXIT( "CVtUiWhiteBalance.MapWBEnumToArrayIndexNF" ) + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::MapArrayIndexToWBEnum +// --------------------------------------------------------------------------- +// +MVtEngCameraPreferences::TWhiteBalance CVtUiWhiteBalance:: + MapArrayIndexToWBEnum( TInt aIndex) const + { + __VTPRINTENTER( "CVtUiWhiteBalance.MapArrayIndexToWBEnum" ) + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.index=%d", aIndex ) + __VTPRINT2( DEBUG_GEN, "CVtUiWhiteBalance.count=%d", iActiveItems.Count() ) + const TInt count = iActiveItems.Count(); + if ( count > 0 && aIndex < count && aIndex >= 0 ) + { + __VTPRINTEXIT( "CVtUiWhiteBalance.MapArrayIndexToWBEnum" ) + return static_cast< MVtEngCameraPreferences::TWhiteBalance > + ( iActiveItems[ aIndex ] ); + } + else // not valid index return first item in the list + { + __VTPRINTEXIT( "CVtUiWhiteBalance.MapArrayIndexToWBEnum_ERROR_INDEX" ) + return static_cast< MVtEngCameraPreferences::TWhiteBalance > + ( iActiveItems[ 0 ] ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::DoStop +// --------------------------------------------------------------------------- +// +TInt CVtUiWhiteBalance::DoStopL( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.DoStopL" ) + CVtUiWhiteBalance* self = static_cast< CVtUiWhiteBalance* >( aAny ); + if ( self->iFeatureState == MVtUiFeature::EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiWhiteBalance::Stop1" ); + self->iFeatureManager.ComponentManager(). + DeActivateComponentL ( MVtUiComponent::EComponentIdWhiteBalance ); + // set state + self->iFeatureState = MVtUiFeature::EReady; + } + __VTPRINTEXIT( "CVtUiWhiteBalance.DoStopL" ) + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CVtUiWhiteBalance::DoStart +// --------------------------------------------------------------------------- +// +TInt CVtUiWhiteBalance::DoStartL( TAny* aAny ) + { + __VTPRINTENTER( "CVtUiWhiteBalance.DoStart" ) + CVtUiWhiteBalance* self = static_cast< CVtUiWhiteBalance* >( aAny ); + self->CVtUiPrefSettingListBase::StartSettingPageL(); + self->iFeatureManager.UiStates().SetIsCommandActivating( EFalse ); + __VTPRINTEXIT( "CVtUiWhiteBalance.DoStart" ) + return KErrNone; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/softkey/cvtuisoftkeycontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/softkey/cvtuisoftkeycontext.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2006 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: Sofkey context class implementation. +* +*/ + + +#include + +#include "cvtuisoftkeycontext.h" + +/** Softkey context reference priority */ +const TInt KVtUiSoftkeyContextPriority = 200; + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyContext::~CVtUiSoftkeyContext +// --------------------------------------------------------------------------- +// +CVtUiSoftkeyContext::~CVtUiSoftkeyContext() + { + __VTPRINTENTER( "SKCtx.~" ) + UnregisterCommandContext(); + __VTPRINTEXIT( "SKCtx.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyContext::NewL +// --------------------------------------------------------------------------- +// +CVtUiSoftkeyContext* CVtUiSoftkeyContext::NewL( + MVtUiCommandManager& aCommandManager ) + { + __VTPRINTENTER( "SKCtx.NewL" ) + CVtUiSoftkeyContext* self = + new ( ELeave ) CVtUiSoftkeyContext( aCommandManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "SKCtx.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyContext::ValidateL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeyContext::ValidateL( CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "SKCtx.ValidateL" ) + ValidateSoftkeyItemsL( aAction ); + __VTPRINTEXIT( "SKCtx.ValidateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyContext::CVtUiSoftkeyContext +// --------------------------------------------------------------------------- +// +CVtUiSoftkeyContext::CVtUiSoftkeyContext( MVtUiCommandManager& aCommandManager ) + : CVtUiCmdContext( aCommandManager, EVtUiCmdContextTypeSoftkey, + KVtUiSoftkeyContextPriority ) + { + __VTPRINTENTER( "SKCtx.ctor" ) + __VTPRINTEXIT( "SKCtx.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyContext::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeyContext::ConstructL() + { + __VTPRINTENTER( "SKCtx.ConstructL" ) + RegisterCommandContextL(); + __VTPRINTEXIT( "SKCtx.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/softkey/cvtuisoftkeys.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/softkey/cvtuisoftkeys.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2006 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: Softkey UI feature implementation. +* +*/ + + +#include +#include +#include "cvtuisoftkeys.h" +#include "cvtuisoftkeysetting.h" +#include "cvtuisoftkeyvalidationaction.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicommandmanager.h" +#include "cvtuisoftkeycontext.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::NewL +// --------------------------------------------------------------------------- +// +CVtUiSoftkeys* CVtUiSoftkeys::NewL( CVtUiFeatureManager& aFeatureManager, + CEikButtonGroupContainer& aButtonGroupContainer ) + { + __VTPRINTENTER( "SKs.NewL" ) + CVtUiSoftkeys* self = + new ( ELeave ) CVtUiSoftkeys( aFeatureManager, aButtonGroupContainer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "SKs.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::~CVtUiSoftkeys +// --------------------------------------------------------------------------- +// +CVtUiSoftkeys::~CVtUiSoftkeys() + { + __VTPRINTENTER( "SKs.~" ) + iFeatureManager.CommandManager().RemoveCommandUi( *this ); + delete iSoftkeyCommandContext; + delete iSoftkeySetting; + delete iSoftkeyValidationAction; + __VTPRINTEXIT( "SKs.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::ButtonGroup +// --------------------------------------------------------------------------- +// +CEikButtonGroupContainer& CVtUiSoftkeys::ButtonGroup() + { + __VTPRINTENTER( "SKs.ButtonGroup" ) + __VTPRINTEXIT( "SKs.ButtonGroup" ) + return iButtonGroupContainer; + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::StartL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::StartL() + { + __VTPRINTENTER( "SKs.StartL" ) + __VTPRINTEXIT( "SKs.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::Stop +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::Stop() + { + __VTPRINTENTER( "SKs.Stop" ) + __VTPRINTEXIT( "SKs.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::InitFeatureL() + { + __VTPRINTENTER( "SKs.InitFeatureL" ) + __VTPRINTEXIT( "SKs.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::RefreshL() + { + __VTPRINTENTER( "SKs.RefreshL" ) + iFeatureManager.CommandManager().ValidateSoftkeyItemsL( + *iSoftkeyValidationAction ); + iSoftkeySetting->DefineCommandsL( *iSoftkeyValidationAction ); + iButtonGroupContainer.DrawNow(); + __VTPRINTEXIT( "SKs.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::AddCommandModifierL +// --------------------------------------------------------------------------- +// +TInt CVtUiSoftkeys::AddCommandModifier( CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "SKs.AddCommandModifier" ) + TInt result( iSoftkeySetting->AddModifier( aModifier ) ); + __VTPRINTEXITR( "SKs.AddCommandModifier %d", result ) + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::RemoveCommandModifier +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::RemoveCommandModifier( CVtUiCommandModifyBase& aModifier ) + { + __VTPRINTENTER( "SKs.RemoveCommandModifier" ) + iSoftkeySetting->RemoveModifier( aModifier ); + __VTPRINTEXIT( "SKs.RemoveCommandModifier" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::CVtUiSoftkeys +// --------------------------------------------------------------------------- +// +CVtUiSoftkeys::CVtUiSoftkeys( CVtUiFeatureManager& aFeatureManager, + CEikButtonGroupContainer& aButtonGroupContainer ) + : CVtUiFeatureBase( EVtUiFeatureIdSoftkey, aFeatureManager ), + iButtonGroupContainer( aButtonGroupContainer ) + { + __VTPRINTENTER( "SKs.ctor" ) + __VTPRINTEXIT( "SKs.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeys::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeys::ConstructL() + { + __VTPRINTENTER( "SKs.ConstructL" ) + iSoftkeyCommandContext = CVtUiSoftkeyContext::NewL( + iFeatureManager.CommandManager() ); + iSoftkeySetting = new ( ELeave ) CVtUiSoftkeySetting( *this ); + iSoftkeyValidationAction = CVtUiSoftkeyValidationAction::NewL(); + User::LeaveIfError( + iFeatureManager.CommandManager().AddCommandUi( *this ) ); + __VTPRINTEXIT( "SKs.ConstructL" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/softkey/cvtuisoftkeysetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/softkey/cvtuisoftkeysetting.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2006 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: Softkey setting implementation. +* +*/ + + +#include +#include + +#include "cvtuisoftkeys.h" +#include "cvtuisoftkeysetting.h" +#include "cvtuisoftkeyvalidationaction.h" + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiSoftkeySetting::~CVtUiSoftkeySetting +// --------------------------------------------------------------------------- +// +CVtUiSoftkeySetting::~CVtUiSoftkeySetting() + { + __VTPRINTENTER( "SKSet.~" ) + __VTPRINTEXIT( "SKSet.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeySetting::CVtUiSoftkeySetting +// --------------------------------------------------------------------------- +// +CVtUiSoftkeySetting::CVtUiSoftkeySetting( CVtUiSoftkeys& aSoftkeys ) : + CVtUiCommandSetting( ECommandTypeSoftkeys ), + iSoftkeys( &aSoftkeys ) + { + __VTPRINTENTER( "SKSet.ctor" ) + __VTPRINTEXIT( "SKSet.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeySetting::DoDefineCommandsL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeySetting::DoDefineCommandsL() + { + __VTPRINTENTER( "SKSet.DoDefineCommandsL" ) + iSoftkeys->ButtonGroup().SetCommandSetL( Action().ResourceId() ); + __VTPRINTEXIT( "SKSet.DoDefineCommandsL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/softkey/cvtuisoftkeyvalidationaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/softkey/cvtuisoftkeyvalidationaction.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2006 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: Softkey validation action implementation. +* +*/ + + +#include +#include +#include + +#include "cvtuisoftkeyvalidationaction.h" +#include "tvtuicmdvalidatorcallback.h" + +// ======== MEMBER FUNCTIONS ======== + +// softkey ids +static const TInt SKIDS[] = + { + R_AVKON_SOFTKEYS_OPTIONS_BACK, + R_VIDEOTELUI_SOFTKEYS_EMPTY_ACTIVE_COMMAND, + R_VIDEOTELUI_SOFTKEYS_EMPTY_DIALEREXIT, + R_VIDEOTELUI_SOFTKEYS_SHARE_OBJECT_IMAGE, + R_VIDEOTELUI_SOFTKEYS_CAPTURE_VIDEO, + R_VIDEOTELUI_SOFTKEYS_ENABLE_AUDIO, + R_VIDEOTELUI_SOFTKEYS_ENABLE_VIDEO, + R_VIDEOTELUI_SOFTKEYS_DIALER, + R_VIDEOTELUI_SOFTKEYS_BT_HANDSFREE, + R_VIDEOTELUI_SOFTKEYS_LOUDSPEAKER, + R_VIDEOTELUI_SOFTKEYS_HANDSET_B, + R_VIDEOTELUI_SOFTKEYS_END_CALL, + R_AVKON_SOFTKEYS_EMPTY // this is end marker, keep it last + }; + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyValidationAction::NewL +// --------------------------------------------------------------------------- +// +CVtUiSoftkeyValidationAction* CVtUiSoftkeyValidationAction::NewL() + { + __VTPRINTENTER( "SKValAct.NewL" ) + CVtUiSoftkeyValidationAction* self = + new ( ELeave ) CVtUiSoftkeyValidationAction(); + __VTPRINTEXIT( "SKValAct.NewL" ) + return self; + } +// --------------------------------------------------------------------------- +// CVtUiSoftkeyValidationAction::BeginProcess +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeyValidationAction::BeginProcess() + { + __VTPRINTENTER( "SKValAct.EndProcess" ) + CVtUiCmdValidationActionBase::BeginProcess(); + iCurrentIdx = 0; + __VTPRINTEXIT( "SKValAct.EndProcess" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyValidationAction::ProcessL +// --------------------------------------------------------------------------- +// +void CVtUiSoftkeyValidationAction::ProcessL( + const MVtUiCmdValidatorCallBack& aCallBack ) + { + __VTPRINTENTER( "SKValAct.ProcessL" ) + while ( SKIDS[ iCurrentIdx ] != R_AVKON_SOFTKEYS_EMPTY ) + { + if ( aCallBack.Call( SKIDS[ iCurrentIdx ] ) ) + { + break; + } + else + { + iCurrentIdx++; + } + } + __VTPRINTEXIT( "SKValAct.ProcessL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyValidationAction::ResourceId +// --------------------------------------------------------------------------- +// +TInt CVtUiSoftkeyValidationAction::ResourceId() const + { + __VTPRINTENTER( "SKValAct.ResourceId" ) + __VTPRINTEXITR( "SKValAct.ResourceId %d", SKIDS[ iCurrentIdx ] ) + return SKIDS[ iCurrentIdx ]; + } + +// --------------------------------------------------------------------------- +// CVtUiSoftkeyValidationAction::CVtUiSoftkeyValidationAction +// --------------------------------------------------------------------------- +// +CVtUiSoftkeyValidationAction::CVtUiSoftkeyValidationAction() + { + __VTPRINTENTER( "SKValAct.ctor" ) + __VTPRINTEXIT( "SKValAct.ctor" ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuifixedtoolbar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuifixedtoolbar.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,294 @@ +/* +* 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" +* 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: Fixed toolbar UI feature implementation. +* +*/ + + +// INCLUDE FILES + +#include "cvtuifixedtoolbar.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicomponentmanager.h" +#include "mvtuicommandmanager.h" +#include "videotelui.hrh" +#include "tvtuistates.h" +#include "cvtuitoolbarcmdpolicy.h" +#include "cvtuitoolbarskmodifier.h" +#include "CVtUiAppUi.h" +#include +#include +#include +#include "tvtuistates.h" +#include + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::NewL +// ----------------------------------------------------------------------------- +// +CVtUiFixedToolbar* CVtUiFixedToolbar::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "FixedToolbar.NewL" ) + CVtUiFixedToolbar* self = new ( ELeave ) CVtUiFixedToolbar( + aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __VTPRINTEXIT( "FixedToolbar.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::CVtUiFixedToolbar +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiFixedToolbar::CVtUiFixedToolbar( CVtUiFeatureManager& + aFeatureManager ) : CVtUiToolbarBase( aFeatureManager ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::ConstructL() + { + __VTPRINTENTER( "FixedToolbar.ConstructL" ) + BaseConstructL(); + + //create toolbar + iToolbar = iFeatureManager.AppUi().CurrentFixedToolbar(); + + // create and add items into the toolbar + CreateToolbarButtonsL(); + + // Dim all toolbar buttons until first refresh is called + DimToolbarbuttons( ETrue ); + + if ( !Layout_Meta_Data::IsLandscapeOrientation() ) + { + MakeToolbarVisible( EFalse ); + } + + __VTPRINTEXIT( "FixedToolbar.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::~CVtUiFixedToolbar +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiFixedToolbar::~CVtUiFixedToolbar() + { + __VTPRINTENTER( "FixedToolbar.~" ) + delete iIdle; + __VTPRINTEXIT( "FixedToolbar.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::CreateToolbarButtons +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::CreateToolbarButtonsL() + { + __VTPRINTENTER( "FixedToolbar.CreateToolbarButtons" ) + // Default buttons created in base clase + CVtUiToolbarBase::CreateToolbarButtonsL(); + + // toggle microphone + CreateToolbarItemL( R_AVKONBUTTON_AUDIO_ROUTING_BUTTON, + EVtUiCmdToolbarAudioRouting, iFeatureManager.AppUi() ); + + + __VTPRINTEXIT( "FixedToolbar.CreateToolbarButtons" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::PopulateCmdsIdsL +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::PopulateCmdsIdsL() + { + __VTPRINTENTER( "FixedToolbar.PopulateCmdsIdsL" ) + // Default commands populated in base clase + CVtUiToolbarBase::PopulateCmdsIdsL(); + + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + + iCmdIds.AppendL( EVtUiCmdActivateBT ); + iCmdIds.AppendL( EVtUiCmdSwitchFromBTToIHF ); + iCmdIds.AppendL( EVtUiCmdActivateLoudspeaker ); + iCmdIds.AppendL( EVtUiCmdDeactivateLoudspeaker ); + + __VTPRINTEXIT( "FixedToolbar.PopulateCmdsIdsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::SetToolbarVisibilityAfterLayoutChangeL +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::SetToolbarVisibilityAfterLayoutChangeL( TBool aVisible ) + { + // Portrait to landscape show tb + __VTPRINTENTER( "FixedToolbar.SetToolbarVisibilityAfterLayoutChangeL" ) + if( aVisible ) + { + __VTPRINT(DEBUG_GEN, "FixedToolbar.SetToolbarVisibilityAfterLayoutChangeL.1" ) + // Set flag + iFeatureManager.UiStates().SetIsFixedToolbarVisible( ETrue ); + // set visible + iFeatureManager.AppUi().CurrentFixedToolbar() + ->SetToolbarVisibility( ETrue ); + // Set callback to dim toolbarbuttons + if ( !iIdle ) + { + iIdle = CIdle::NewL( CActive::EPriorityIdle ); + } + iIdle->Start( TCallBack( &DoDimToolbarButtons, this ) ); + } + // Landsacpe to portrait hide tb + else + { + __VTPRINT(DEBUG_GEN, "FixedToolbar.SetToolbarVisibilityAfterLayoutChangeL.2" ) + DimToolbarbuttons( EFalse ); + iFeatureManager.AppUi().CurrentFixedToolbar() + ->SetToolbarVisibility( EFalse ); + // Set flag + iFeatureManager.UiStates().SetIsFixedToolbarVisible( EFalse ); + } + __VTPRINTEXIT( "FixedToolbar.SetToolbarVisibilityAfterLayoutChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::DimToolbarbuttons +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::DimToolbarbuttons( TBool aIsDimmed ) + { + __VTPRINTENTER( "FixedToolbar.DimToolbarbuttons" ) + iToolbar->SetItemDimmed( EVtUiCmdToolbarToggleVideo, aIsDimmed, EFalse ); + iToolbar->SetItemDimmed( EVtUiCmdToolbarToggleMicrophone, aIsDimmed, EFalse ); + iToolbar->SetItemDimmed( EVtUiCmdToolbarAudioRouting, aIsDimmed, ETrue ); + __VTPRINTEXITR( "FixedToolbar.DimToolbarbuttons %d", aIsDimmed ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::MakeToolbarVisible +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::MakeToolbarVisible( const TBool aVisible ) + { + __VTPRINTENTER( "FixedToolbar.MakeToolbarVisible" ) + iFeatureManager.AppUi().CurrentFixedToolbar()-> + SetToolbarVisibility( aVisible ); + iFeatureManager.UiStates().SetIsFixedToolbarVisible( aVisible ); + __VTPRINTEXITR( "FixedToolbar.MakeToolbarVisible %d", aVisible ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::DoShowToolbarL +// ----------------------------------------------------------------------------- +// +TInt CVtUiFixedToolbar::DoShowToolbarL( TAny* aAny ) + { + __VTPRINTENTER( "FixedToolbar.DoShowToolbarL" ) + CVtUiFixedToolbar* self = static_cast< CVtUiFixedToolbar* >( aAny ); + self->iFeatureManager.AppUi().CurrentFixedToolbar() + ->SetToolbarVisibility( ETrue ); + __VTPRINTEXIT( "FixedToolbar.DoShowToolbarL" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::DoToolbarButton +// ----------------------------------------------------------------------------- +// +TInt CVtUiFixedToolbar::DoDimToolbarButtons( TAny* aAny ) + { + __VTPRINTENTER( "FixedToolbar.DoDimToolbarButtons" ) + CVtUiFixedToolbar* self = static_cast< CVtUiFixedToolbar* >( aAny ); + self->DimToolbarbuttons( ETrue ); + __VTPRINTEXIT( "FixedToolbar.DoDimToolbarButtons" ) + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::DoActivateL +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::DoActivateL() + { + __VTPRINTENTER( "FixedToolbar.DoActivateL" ) + if ( !iFeatureManager.UiStates().IsFixedToolbarVisible() && + !Layout_Meta_Data::IsLandscapeOrientation() ) + { + // reset flag + iFeatureManager.UiStates().SetIsFixedToolbarVisible( ETrue ); + // Show toolbar with delay in order to prevent overdrawing + // witht other components. + iAsyncCallback->Cancel(); + iAsyncCallback->Set( TCallBack( &DoShowToolbarL, this ) ); + iAsyncCallback->CallBack(); + } + else + { + // Undim buttons + __VTPRINT( DEBUG_GEN, "FixedToolbar.DoDeactivateL.DTB EFalse" ) + // toolbar might be unvisible, because condition in the contructor + // "if ( !Layout_Meta_Data::IsLandscapeOrientation() )" + // will be evaluated ture eventhough the orientation is forced to be landsacepe + // because it seems that the orientation is still portrait in the constructor phase + MakeToolbarVisible( ETrue ); + DimToolbarbuttons( EFalse ); + } + // Start blocking pointer events + BlockPointerEvents( ETrue ); + // Base class + CVtUiToolbarBase::DoActivateL(); + __VTPRINTEXIT( "FixedToolbar.DoActivateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFixedToolbar::DoDeactivateL +// ----------------------------------------------------------------------------- +// +void CVtUiFixedToolbar::DoDeactivateL() + { + __VTPRINTENTER( "FixedToolbar.DoDeactivateL" ) + iAsyncCallback->Cancel(); + if ( !iFeatureManager.UiStates().IsFixedToolbarVisible() && + !Layout_Meta_Data::IsLandscapeOrientation() ) + { + iFeatureManager.AppUi().CurrentFixedToolbar() + ->SetToolbarVisibility( EFalse ); + __VTPRINT( DEBUG_GEN, "FixedToolbar.DoDeactivateL.Vs" ) + } + else + { + // Dim all buttons + __VTPRINT( DEBUG_GEN, "FixedToolbar.DoDeactivateL.DTB ETrue" ) + DimToolbarbuttons( ETrue ); + } + // Stop blocking pointer events + BlockPointerEvents( EFalse ); + // Base class + CVtUiToolbarBase::DoDeactivateL(); + __VTPRINTEXIT( "FixedToolbar.DoDeactivateL" ) + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuifloatingtoolbar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuifloatingtoolbar.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,468 @@ +/* +* 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" +* 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: Floating toolbar UI feature implementation. +* +*/ + + +// INCLUDE FILES + +#include "cvtuifloatingtoolbar.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicomponentmanager.h" +#include "mvtuicommandmanager.h" +#include "cvtuitoolbarbutton.h" +#include "videotelui.hrh" +#include "tVtuifeaturevariation.h" +#include "tvtuistates.h" +#include "cvtuitoolbarcmdpolicy.h" +#include "cvtuitoolbarskmodifier.h" +#include "CVtUiAppUi.h" +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +static const TInt KThreeToolbarbuttons = 3; +static const TInt KFourToolbarbuttons = 4; +static const TInt KFiveToolbarbuttons = 5; +static const TInt KSixToolbarbuttons = 6; +static const TInt KSevenToolbarbuttons = 7; + + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::NewL +// ----------------------------------------------------------------------------- +// +CVtUiFloatingToolbar* CVtUiFloatingToolbar::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "FloatingToolbar.NewL" ) + TVtUiSideVolumeKeysVariation svkvariation; + if ( !svkvariation.IsSideVolumeKeysSupported() ) + { + // User of this class should notice that newl could return null, + // even if no leave happened. + __VTPRINT(DEBUG_GEN, "Toolbar.NewL.NULL" ) + return NULL; + } + CVtUiFloatingToolbar* self = new ( ELeave ) CVtUiFloatingToolbar( + aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + __VTPRINTEXIT( "FloatingToolbar.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::CVtUiFloatingToolbar +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiFloatingToolbar::CVtUiFloatingToolbar( CVtUiFeatureManager& + aFeatureManager ) : CVtUiToolbarBase( aFeatureManager ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::ConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::ConstructL() + { + __VTPRINTENTER( "FloatingToolbar.ConstructL" ) + BaseConstructL(); + + // fixed toolbar is always visible ( defined in resource) hide it + iFeatureManager.AppUi().CurrentFixedToolbar()->SetToolbarVisibility( EFalse ); + + // create toolbar + iToolbar = CAknToolbar::NewL( R_VIDEOTELUI_FLOATING_TOOLBAR ); + + GfxTransEffect::Register( iToolbar, KNullUid, EFalse ); + + // create and add items into the toolbar + CreateToolbarButtonsL(); + + iFeatureManager.UiStates().SetIsFloatingToolbarVisible( EFalse ); + + // layout toolbar + LayoutToolbarL(); + + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + + __VTPRINTEXIT( "FloatingToolbar.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::~CVtUiFloatingToolbar +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiFloatingToolbar::~CVtUiFloatingToolbar() + { + __VTPRINTENTER( "FloatingToolbar.~" ) + // unregister resource change registration + iFeatureManager.ComponentManager().ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + delete iToolbar; + iToolbar = NULL; + __VTPRINTEXIT( "FloatingToolbar.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::PopulateCmdsIdsL +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::PopulateCmdsIdsL() + { + __VTPRINTENTER( "FloatingToolbar.PopulateCmdsIdsL" ) + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + + // Default commands populated in base clase + CVtUiToolbarBase::PopulateCmdsIdsL(); + + iCmdIds.AppendL( EVtUiCmdZoom ); + + switch( iNumberOfToolbarButtons ) + { + case KFourToolbarbuttons: + iCmdIds.AppendL( EVtUiCmdUsePrimaryCamera ); + iCmdIds.AppendL( EVtUiCmdUseSecondaryCamera ); + break; + + case KFiveToolbarbuttons: + iCmdIds.AppendL( EVtUiCmdUsePrimaryCamera ); + iCmdIds.AppendL( EVtUiCmdUseSecondaryCamera ); + iCmdIds.AppendL( EVtUiCmdSwapImagesPlaces ); + break; + + case KSixToolbarbuttons: + iCmdIds.AppendL( EVtUiCmdUsePrimaryCamera ); + iCmdIds.AppendL( EVtUiCmdUseSecondaryCamera ); + iCmdIds.AppendL( EVtUiCmdSwapImagesPlaces ); + iCmdIds.AppendL( EVtUiCmdShareObjectImage ); + break; + /* + case KSevenToolbarbuttons: + iCmdIds.AppendL( EVtUiCmdUsePrimaryCamera ); + iCmdIds.AppendL( EVtUiCmdUseSecondaryCamera ); + iCmdIds.AppendL( EVtUiCmdSwapImagesPlaces ); + iCmdIds.AppendL( EVtUiCmdShareObjectImage ); + iCmdIds.AppendL( EVtUiCmdSnapshot ); + break; + */ + default: + break; + } + + __VTPRINTEXIT( "FloatingToolbar.PopulateCmdsIdsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::CreateToolbarButtons +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::CreateToolbarButtonsL() + { + __VTPRINTENTER( "FloatingToolbar.CreateToolbarButtons" ) + + // Default buttons created in base clase + CVtUiToolbarBase::CreateToolbarButtonsL(); + + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + + // activate zoom mode + CreateToolbarItemL( R_AVKONBUTTON_ACTIVATE_ZOOM_MODE_BUTTON, + EVtUiCmdZoom, appUi ); + // disable tooltip from button's latched state + // because tooltip needs to be shown only when + // button gets focus not then when button is selected + FindToolbarItemByCommandId( EVtUiCmdZoom )->State( 1 ) + ->SetHelpTextL( KNullDesC() ); + + switch( iNumberOfToolbarButtons ) + { + case KFourToolbarbuttons: + // toggle camera + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_CAMERA_BUTTON, + EVtUiCmdToolbarToggleCamera, appUi ); + break; + + case KFiveToolbarbuttons: + // toggle camera + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_CAMERA_BUTTON, + EVtUiCmdToolbarToggleCamera, appUi ); + + // swap images + CreateToolbarItemL( R_AVKONBUTTON_SWAP_IMAGES_BUTTON, + EVtUiCmdSwapImagesPlaces, appUi ); + break; + + case KSixToolbarbuttons: + // toggle camera + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_CAMERA_BUTTON, + EVtUiCmdToolbarToggleCamera, appUi ); + + // swap images + CreateToolbarItemL( R_AVKONBUTTON_SWAP_IMAGES_BUTTON, + EVtUiCmdSwapImagesPlaces, appUi ); + + // share file + CreateToolbarItemL(R_AVKONBUTTON_SHARE_FILE_BUTTON, + EVtUiCmdShareObjectImage, appUi ); + break; + /* + case KSevenToolbarbuttons: + // toggle camera + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_CAMERA_BUTTON, + EVtUiCmdToolbarToggleCamera, appUi ); + + // swap images + CreateToolbarItemL( R_AVKONBUTTON_SWAP_IMAGES_BUTTON, + EVtUiCmdSwapImagesPlaces, appUi ); + + // share file + CreateToolbarItemL(R_AVKONBUTTON_SHARE_FILE_BUTTON, + EVtUiCmdShareObjectImage, appUi ); + + CreateToolbarItemL( R_AVKONBUTTON_SNAPSHOT_BUTTON, + EVtUiCmdSnapshot, appUi ); + + break; + */ + default: + break; + } + + __VTPRINTEXIT( "FloatingToolbar.CreateToolbarButtons" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::DoActivateL +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::DoActivateL() + { + __VTPRINTENTER( "FloatingToolbar.DoActivateL" ) + // start blocking key events + BlockKeyEvents( ETrue ); + // make toolbar visible + if ( !iToolbar->IsVisible() || + !iFeatureManager.UiStates().IsFloatingToolbarVisible() ) + { + // Show toolbar + iToolbar->SetToolbarVisibility( ETrue ); + } + else + { + // Undim toolbar + DimToolbar( EFalse, EFalse ); + if ( iCmdFocus != KErrNotFound ) + { + // Set focus item + iToolbar->SetItemDimmed( iCmdFocus, EFalse, ETrue ); + iToolbar->SetFocusedItemL( iCmdFocus ); + iCmdFocus = KErrNotFound; + } + } + iFeatureManager.UiStates().SetIsFloatingToolbarVisible( EFalse ); + CVtUiToolbarBase::DoActivateL(); + __VTPRINTEXIT( "FloatingToolbar.DoActivateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::DoDeactivateL +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::DoDeactivateL() + { + __VTPRINTENTER( "FloatingToolbar.DoDeactivateL" ) + // stop blocking key events + BlockKeyEvents( EFalse ); + if ( iToolbar ) + { + // Save foces item; + if ( iToolbar->FocusedItem() != KErrNotFound ) + { + iCmdFocus = iToolbar->FocusedItem(); + } + TVtUiStates& uiStates = iFeatureManager.UiStates(); + if ( !uiStates.IsFloatingToolbarVisible() ) + { + __VTPRINT( DEBUG_GEN, "FloatingToolbar.DoDeactivateL.Vs" ) + iToolbar->SetToolbarVisibility( EFalse ); + } + else + { + // Dim toolbar + __VTPRINT( DEBUG_GEN, "FloatingToolbar.DoDeactivateL.Dim ETrue" ) + DimToolbar( ETrue, EFalse ); + } + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + const TBool isZoomModeOn( uiStates.IsZoomModeOn() ); + if ( isZoomModeOn ) + { + // set zoom indicator to be hidden + appUi.SetZoomModeL( EFalse ); + } + } + CVtUiToolbarBase::DoDeactivateL(); + __VTPRINTEXIT( "FloatingToolbar.DoDeactivateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::HandleResourceChangeL +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::HandleResourceChangeL( TInt /*aType*/ ) + { + __VTPRINTENTER( "FloatingToolbar.HandleResourceChangeL" ) + // akntoolbar should allways be in the control stack + // no need to call + // iToolbar->HandleResourceChange + LayoutToolbarL(); + __VTPRINTEXIT( "FloatingToolbar.HandleResourceChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::RectFromLayout +// ----------------------------------------------------------------------------- +// +TRect CVtUiFloatingToolbar::RectFromLayout( + const TAknWindowComponentLayout& aComponentLayout ) const + { + __VTPRINTENTER( "FloatingToolbar.RectFromLayout" ) + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + + TAknWindowLineLayout lineLayout = aComponentLayout.LayoutLine(); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( mainPaneRect, lineLayout ); + __VTPRINTEXIT( "FloatingToolbar.RectFromLayout" ) + return layoutRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::LayoutToolbarL +// ----------------------------------------------------------------------------- +// +void CVtUiFloatingToolbar::LayoutToolbarL() + { + __VTPRINTENTER( "FloatingToolbar.LayoutToolbarL" ) + + // Get variety + TInt variety = GetVariety( Layout_Meta_Data::IsLandscapeOrientation() ); + // get toolbar rect from layout + TRect toolbarRect = RectFromLayout( AknLayoutScalable_Apps:: + popup_toolbar_window_cp04( variety ).LayoutLine() ); + //set top left coordinates i.e. placeholder + iToolbar->SetPosition( toolbarRect.iTl ); + + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + __VTPRINT( DEBUG_GEN, "Toolbar.LayoutToolbarL.LS" ) + iToolbar->SetOrientation( EAknOrientationVertical ); + } + else + { + __VTPRINT( DEBUG_GEN, "Toolbar.LayoutToolbarL.PR" ) + iToolbar->SetOrientation( EAknOrientationHorizontal ); + } + __VTPRINTEXIT( "FloatingToolbar.LayoutToolbarL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiFloatingToolbar::GetVariety +// ----------------------------------------------------------------------------- +// +TInt CVtUiFloatingToolbar::GetVariety( TBool aIsLandscapeOrientation ) + { + __VTPRINTENTER( "FloatingToolbar.GetVariety" ) + TInt variety = 0; + switch ( iNumberOfToolbarButtons ) + { + case KThreeToolbarbuttons: + if( aIsLandscapeOrientation ) + { + variety = 5; + } + else + { + variety = 9; + } + break; + + case KFourToolbarbuttons: + if( aIsLandscapeOrientation ) + { + variety = 4; + } + else + { + variety = 8; + } + break; + + case KFiveToolbarbuttons: + if( aIsLandscapeOrientation ) + { + variety = 3; + } + else + { + variety = 7; + } + break; + + case KSixToolbarbuttons: + if( aIsLandscapeOrientation ) + { + variety = 2; + } + else + { + variety = 6; + } + break; + + case KSevenToolbarbuttons: + if( aIsLandscapeOrientation ) + { + variety = 1; + } + else + { + variety = 4; + } + break; + + default: + + break; + } + __VTPRINTEXITR( "FloatingToolbar.GetVariety =%d",variety ) + return variety; + } +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuihidetoolbaritemaction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuihidetoolbaritemaction.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,246 @@ +/* +* 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: Toolbar hide item action class. +* +*/ + + +#include +#include "cvtuihidetoolbaritemaction.h" +#include "tvtuicmdvalidatorcallback.h" +#include "tvtuitoolbarcommanditerator.h" +#include "cvtuitoolbarbase.h" +#include "videotelui.hrh" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::NewL +// --------------------------------------------------------------------------- +// +CVtUiHideToolbarItemAction* CVtUiHideToolbarItemAction::NewL( + CVtUiToolbarBase* aToolbar, const TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "HideTbAct.NewL" ) + CVtUiHideToolbarItemAction* self = + new ( ELeave ) CVtUiHideToolbarItemAction( aToolbar, aUiStates ); + __VTPRINTEXIT( "HideTbAct.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::~CVtUiHideToolbarItemAction +// --------------------------------------------------------------------------- +// +CVtUiHideToolbarItemAction::~CVtUiHideToolbarItemAction() + { + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::ProcessL +// --------------------------------------------------------------------------- +// +void CVtUiHideToolbarItemAction::ProcessL( + const MVtUiCmdValidatorCallBack& aCallBack ) + { + __VTPRINTENTER( "HideTbAct.ProcessL" ) + for ( TVtUiToolbarCommandIterator i( *iToolbar ); i.HasNext(); ) + { + TInt commandId( i.Next() ); + if ( !IsCommandHandled( commandId ) ) + { + __VTPRINT2( DEBUG_GEN, "HideTbAct.cb.call.cmddId=%d", commandId ) + if ( aCallBack.Call( commandId ) ) // primarypolicy + { // says can't be shown + CommandHandledL( commandId ); + SetItemHiddenL( commandId ); + } + else + { + HideOrShowToolbarControlL( commandId ); + } + } + } + __VTPRINTEXIT( "HideTbAct.ProcessL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::CVtUiHideToolbarItemAction +// --------------------------------------------------------------------------- +// +CVtUiHideToolbarItemAction::CVtUiHideToolbarItemAction + ( CVtUiToolbarBase* aToolbar, const TVtUiStates& aUiStates ) + : iToolbar( aToolbar ), iUiStates ( aUiStates ) + { + __VTPRINTENTER( "HideTbAct.ctor" ) + __VTPRINTEXIT( "HideTbAct.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::SetItemHiddenL +// --------------------------------------------------------------------------- +// +void CVtUiHideToolbarItemAction::SetItemHiddenL( TInt aCommandId ) + { + __VTPRINTENTER( "HideTbAct.SetItemHidden" ) + iToolbar->SetCmdIdVisibilityStateL( aCommandId, + CVtUiToolbarBase::EHidden ); + __VTPRINTEXIT( "HideTbAct.SetItemHidden" ) + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::HideOrShowToolbarControlL +// --------------------------------------------------------------------------- +// +void CVtUiHideToolbarItemAction::HideOrShowToolbarControlL + ( TInt aCommandId ) + { + __VTPRINTENTER( "HideTbAct.HideOrShowToolbarControlL" ) + TBool isZoomModeOn = iUiStates.IsZoomModeOn(); + TBool isVolumeModeOn = iUiStates.IsVolumeModeOn(); + TBool isBrightnessModeOn = iUiStates.IsBrightnessModeOn(); + TBool isContrastModeOn = iUiStates.IsContrastModeOn(); + TBool dimmed = EFalse; + const TVtUiMediaState& mediaState( iUiStates.MediaState() ); + const TVtUiAudioState& audioState( iUiStates.AudioState() ); + + switch ( aCommandId ) + { + case EVtUiCmdDisableVideo: + case EVtUiCmdSwapImagesPlaces: + case EVtUiCmdDisableAudio: + case EVtUiCmdEnableAudio: + if ( isContrastModeOn || + isBrightnessModeOn + || isZoomModeOn || isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + case EVtUiCmdEnableVideo: + if ( isZoomModeOn || isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + + case EVtUiCmdUsePrimaryCamera: + case EVtUiCmdUseSecondaryCamera: + if ( isContrastModeOn || + isBrightnessModeOn + || iUiStates.IsCaptureModeOn() || + mediaState.IsSharing() + || isZoomModeOn || isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + case EVtUiCmdZoom: + if ( isContrastModeOn || + isBrightnessModeOn|| + !mediaState.IsVideo() || + mediaState.IsFrozen() || + mediaState.IsSharing() || + isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + + case EVtUiCmdShareObjectImage: + if ( isContrastModeOn || + isBrightnessModeOn || + isZoomModeOn || mediaState.IsFrozen() || + mediaState.IsVideoPermanentlyStopped() || + isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + + case EVtUiCmdActivateBT: + dimmed = !audioState.CanActivateBtHf() || + audioState.IsAudioPermanentlyStopped() || + isZoomModeOn || isContrastModeOn || + isBrightnessModeOn || + isVolumeModeOn ; + break; + + case EVtUiCmdDeactivateLoudspeaker: + dimmed = !audioState.CanDeactivateLoudspeaker() || + audioState.IsAudioPermanentlyStopped() || + isZoomModeOn || isContrastModeOn || + isBrightnessModeOn || + isVolumeModeOn; + break; + + case EVtUiCmdSwitchFromBTToIHF: + dimmed = !audioState.CanDeactivateBtHf() || + !audioState.CanActivateLoudspeaker() || + audioState.IsAudioPermanentlyStopped() || + isZoomModeOn || isContrastModeOn || + isBrightnessModeOn || + isVolumeModeOn; + break; + + case EVtUiCmdActivateLoudspeaker: + dimmed = !audioState.CanActivateLoudspeaker() || + audioState.IsAudioPermanentlyStopped() || + isZoomModeOn || isContrastModeOn || + isBrightnessModeOn || + isVolumeModeOn; + break; + + /* + case EVtUiCmdSnapshot: + if ( iUiStates.IsContrastModeOn() || iUiStates.IsBrightnessModeOn () + || isZoomModeOn || ( !iUiStates.MediaState().IsVideo() && + !iUiStates.MediaState().IsFrozen() ) || + !iUiStates.MediaState().IsFreezeSupported() || iUiStates.IsContrastModeOn() || + iUiStates.IsBrightnessModeOn() || isVolumeModeOn ) + { + dimmed = ETrue; + } + break; + */ + default: + dimmed = EFalse; + break; + } + + // update toolbar's commands visibility values + if ( dimmed ) + { + iToolbar->SetCmdIdVisibilityStateL( aCommandId, + CVtUiToolbarBase::EDimmed ); + } + else + { + iToolbar->SetCmdIdVisibilityStateL( aCommandId, + CVtUiToolbarBase::EShown ); + } + __VTPRINTEXIT( "HideTbAct.HideOrShowToolbarControlL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiHideToolbarItemAction::EndProcess +// --------------------------------------------------------------------------- +// +void CVtUiHideToolbarItemAction::EndProcess() + { + __VTPRINTENTER( "HideTbAct.EndProcess" ) + TRAP_IGNORE( iToolbar->UpdateToolbarL() ); + __VTPRINTEXIT( "HideTbAct.EndProcess" ) + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuitoolbarbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuitoolbarbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,1244 @@ +/* +* 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" +* 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: Base class for toolbar. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include "videotelui.hrh" +#include "cvtuitoolbarbase.h" +#include "mvtuifeature.h" +#include "tvtuistates.h" +#include "cvtuitoolbarcontext.h" +#include "cvtuitoolbarcmdpolicy.h" +#include "cvtuicommandpolicymanager.h" +#include "cvtuihidetoolbaritemaction.h" +#include "cvtuifeaturemanager.h" +#include "CVtUiAppUi.h" +#include "mvtuicommandui.h" +#include "cvtuitoolbarskmodifier.h" +#include "mvtuicommandmanager.h" +#include "mvtuicomponentmanager.h" +#include "cvtuitoolbarbutton.h" +#include "VideoTelephonyInternalCRKeys.h" +#include "tVtuifeaturevariation.h" +#include "cvtuitoolbarbutton.h" +#include + +// Implementation of TVtUiToolbarComponentState + +// --------------------------------------------------------------------------- +// TVtUiToolbarComponentState::TVtUiToolbarComponentState +// --------------------------------------------------------------------------- +// +TVtUiToolbarComponentState::TVtUiToolbarComponentState( + MVtUiComponent& aComponent ) : + TVtUiComponentState( aComponent, + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdNull ) ) + { + } + +// --------------------------------------------------------------------------- +// Used in FindToolbaItemByCommandId method to search toolbar item by cmd id. +// --------------------------------------------------------------------------- +// +TInt ToolbarItemIdCmpFunc( const TInt* aId, + const CVtUiToolbarButton& aToolbarItem ) + { + return ( *aId - aToolbarItem.CmdId() ); + } + + +// --------------------------------------------------------------------------- +// Used in CreateToolbarItemL method to search feature by cmd id. +// --------------------------------------------------------------------------- +// +TInt ToolbarCmpFunc( const CVtUiToolbarButton& aV1, const CVtUiToolbarButton& aV2 ) + { + return ( aV1.CmdId() - aV2.CmdId() ); + } + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::CVtUiToolbarBase +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVtUiToolbarBase::CVtUiToolbarBase( CVtUiFeatureManager& aFeatureManager ) + : CVtUiFeatureBase( EVtUiFeatureIdToolbar, aFeatureManager ), + iComponentState( *this ) + { + __VTPRINTENTER( "Toolbar.CVtUiToolbarBase" ) + // Get number of supported buttons. + // Six is the default value for floating toolbar + // and three buttons for fixed toolbar + TVtUiToolbarVariation toolbar; + iNumberOfToolbarButtons = toolbar.NumberOfButtons(); + iCmdFocus = KErrNotFound; + __VTPRINTEXITR( "Toolbar.CVtUiToolbarBase %d", iNumberOfToolbarButtons ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::BaseConstructL +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::BaseConstructL() + { + __VTPRINTENTER( "Toolbar.ConstructL" ) + CVtUiFeatureBase::BaseConstructL(); + iFeatureManager.UiStates().SetIsToolbarAvailable( ETrue ); + __VTPRINTEXIT( "Toolbar.ConstructL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::~CVtUiToolbarBase +// Destructor. +// ----------------------------------------------------------------------------- +// +CVtUiToolbarBase::~CVtUiToolbarBase() + { + __VTPRINTENTER( "Toolbar.~" ) + // Stop(); + // Stop can not be called here if toolbar is asked from ui fw = fixed toolbar. + // If stop is called a crash occurs, whose root cause can not be solved. + // It is related somehow with focus lost in ui fw. + + Clean(); + // unregister layout change + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + // no need tot call resetanddestroy because buttons ownership is + // transferred to akntoolbar. + iToolBarControls.Reset(); + delete iToolbarCtx; + delete iToolbarCmdPolicy; + delete iHideToolbarItemAction; + delete iToolbarSKModifier; + iCmdIds.Close(); + iCmdStates.Close(); + __VTPRINTEXIT( "Toolbar.~" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::DynInitToolbarL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::DynInitToolbarL( TInt /*aResourceId*/, + CAknToolbar* /*aToolbar*/ ) + { + __VTPRINTENTER( "Toolbar.DynInitToolbarL" ) + __VTPRINTEXIT( "Toolbar.DynInitToolbarL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::OfferToolbarEventL +// Destructor. +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::OfferToolbarEventL( TInt aCommand ) + { + __VTPRINTENTER( "Toolbar.OfferToolbarEventL" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.OfferToolbarEventL.aCommand=%d", aCommand ) + + // if capture mode is on all msk events must be converted to capture command + if ( iFeatureManager.UiStates().IsCaptureModeOn() ) + { + iFeatureManager.AppUi().HandleCommandL( EVtUiCmdCapture ); + return; + } + + TInt command = MapCmdIdToChilId( aCommand ); + + if ( EVtUiCmdSwapImagesPlaces == command ) + { + if ( !( iFeatureManager.AppUi().CanSwapImagePlaces() ) ) + { + return; + } + } + + iFeatureManager.AppUi().HandleCommandL( command ); + + __VTPRINTEXITR( "Toolbar.OfferToolbarEventL.cmd %d", aCommand ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::StartL +// Destructor. +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::StartL() + { + CVtUiFeatureBase::StartL(); + __VTPRINTENTER( "Toolbar.StartL" ) + TInt error; + if ( iFeatureState == MVtUiFeature::EReady ) + { + TRAP( error, iFeatureManager.ComponentManager(). + RequestActivationL( MVtUiComponent::EComponentIdToolbar ) ); + + // set state + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXITR( "Toolbar.StartL error = %d", error ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::Stop +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::Stop() + { + __VTPRINTENTER( "Toolbar.Stop" ) + TInt error; + if ( iFeatureState == MVtUiFeature::EActive ) + { + TRAP( error, iFeatureManager.ComponentManager(). + DeActivateComponentL ( MVtUiComponent::EComponentIdToolbar ) ); + // set state + iFeatureState = MVtUiFeature::EReady; + } + __VTPRINTEXITR( "Toolbar.Stop error = %d", error ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::InitFeature +// Delayed initialization of the feature +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::InitFeatureL() + { + __VTPRINTENTER( "Toolbar.InitFeatureL" ) + iFeatureState = EPreparing; + iToolBarControls.ReserveL( iNumberOfToolbarButtons ); + + //create toolbar + //iToolbar = CAknToolbar::NewL( R_VIDEOTELUI_TOOLBAR ); + + iToolbar->SetToolbarObserver( this ); + + // Prohibit toolbar sliding on UI. + iToolbar->SetWithSliding( EFalse ); + + // create toolbar context and policy + iToolbarCtx = + CVtUiToolbarContext::NewL( iFeatureManager.CommandManager() ); + + iToolbarCmdPolicy = CVtUiToolbarCmdPolicy::NewL( *this ); + + // create toolbaraction + iHideToolbarItemAction = CVtUiHideToolbarItemAction::NewL( this, + iFeatureManager.UiStates() ); + + // create sofkey modifier + iToolbarSKModifier = CVtUiToolbarSKModifier:: + NewL( iFeatureManager.AppUi(), iFeatureManager.UiStates() ); + + // set supported commands + PopulateCmdsIdsL(); + + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + + User::LeaveIfError( + iFeatureManager.ComponentManager().ChangeLayoutChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + + iFeatureState = EReady; + + __VTPRINTEXIT( "Toolbar.InitFeatureL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::MapCmdIdToChilId +// ----------------------------------------------------------------------------- +// +TInt CVtUiToolbarBase::MapCmdIdToChilId( TInt aCmdId ) + { + __VTPRINTENTER( "Toolbar.MapCmdIdToChilId" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.MapCmdIdToChilId.aCmdId=%d", aCmdId ) + TInt result = aCmdId; + + CVtUiToolbarButton* tbButton = FindToolbarItemByCommandId( aCmdId ); + + const TInt stateIndexValue( tbButton->StateIndex() ); + __VTPRINT2( DEBUG_GEN, "Toolbar.MapCmdIdToChilId.idx=%d", stateIndexValue ) + switch( aCmdId ) + { + case EVtUiCmdToolbarToggleVideo: + { + switch ( stateIndexValue ) + { + case 0: + case 1: + result = EVtUiCmdDisableVideo; + break; + case 2: + case 3: + result = EVtUiCmdEnableVideo; + break; + } + } + break; + + case EVtUiCmdToolbarToggleMicrophone: + { + switch ( stateIndexValue ) + { + case 0: + case 1: + result = EVtUiCmdDisableAudio; + break; + case 2: + case 3: + result = EVtUiCmdEnableAudio; + break; + } + } + break; + + case EVtUiCmdToolbarAudioRouting: + { + switch ( stateIndexValue ) + { + case 0: + case 1: + result = EVtUiCmdDeactivateLoudspeaker; + break; + case 2: + case 3: + result = EVtUiCmdSwitchFromBTToIHF; + break; + case 4: + case 5: + result = EVtUiCmdActivateLoudspeaker; + break; + case 6: + case 7: + result = EVtUiCmdActivateBT; + break; + default: + break; + }; + } + break; + + case EVtUiCmdToolbarToggleCamera: + { + switch ( stateIndexValue ) + { + case 0: + case 1: + result = EVtUiCmdUsePrimaryCamera; + break; + case 2: + case 3: + result = EVtUiCmdUseSecondaryCamera; + break; + } + } + break; + + default: + break; + } + + if ( aCmdId == result ) + { + TInt index( stateIndexValue - 1 ); + if ( index < 0 ) + { + index = tbButton->StatesCount() - 1; + } + tbButton->SetCurrentState( index, EFalse ); + } + + __VTPRINTEXITR( "Toolbar.MapCmdIdToChilId.result %d", (TInt)result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::MapCmdIdToParentId +// ----------------------------------------------------------------------------- +// +TInt CVtUiToolbarBase::MapCmdIdToParentId( TInt aCmdId ) + { + __VTPRINTENTER( "Toolbar.MapCmdIdToParentId" ) + TInt result = aCmdId; + switch( aCmdId ) + { + case EVtUiCmdDisableVideo: + case EVtUiCmdEnableVideo: + result = EVtUiCmdToolbarToggleVideo; + break; + + case EVtUiCmdDisableAudio: + case EVtUiCmdEnableAudio: + result = EVtUiCmdToolbarToggleMicrophone; + break; + + case EVtUiCmdActivateBT: + case EVtUiCmdSwitchFromBTToIHF: + case EVtUiCmdActivateLoudspeaker: + case EVtUiCmdDeactivateLoudspeaker: + result = EVtUiCmdToolbarAudioRouting; + break; + + case EVtUiCmdUsePrimaryCamera: + case EVtUiCmdUseSecondaryCamera: + result = EVtUiCmdToolbarToggleCamera; + break; + + default: + break; + } + __VTPRINTEXITR( "Toolbar.MapCmdIdToParentId.result %d", (TInt)result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::IsCmdIdVisibleInToggleButton +// ----------------------------------------------------------------------------- +// +TBool CVtUiToolbarBase::IsCmdIdVisibleInToggleButton( TInt aCmdId ) + { + __VTPRINTENTER( "Toolbar.IsCMdIdVisibleInTogB" ) + TBool result( ETrue ); + TInt cmdId( MapCmdIdToParentId( aCmdId ) ); + TInt targetStateIndex( KErrNotFound ); + switch( aCmdId ) + { + case EVtUiCmdActivateBT: + targetStateIndex = 6; + break; + + case EVtUiCmdActivateLoudspeaker: + targetStateIndex = 4; + break; + + case EVtUiCmdSwitchFromBTToIHF: + case EVtUiCmdEnableVideo: + case EVtUiCmdEnableAudio: + case EVtUiCmdUseSecondaryCamera: + targetStateIndex = 2; + break; + + case EVtUiCmdDisableVideo: + case EVtUiCmdDisableAudio: + case EVtUiCmdUsePrimaryCamera: + case EVtUiCmdDeactivateLoudspeaker: + targetStateIndex = 0; + break; + + default: + break; + } + + if ( targetStateIndex != KErrNotFound ) + { + result = ( FindToolbarItemByCommandId( cmdId ) + ->StateIndex() == targetStateIndex ); + } + + __VTPRINTEXITR( "Toolbar.IsCMdIdVisibleInTogB.result %d", (TInt)result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::PopulateCmdsIdsL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::PopulateCmdsIdsL() + { + __VTPRINTENTER( "Toolbar.PopulateCmdsIdsL" ) + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + + // default commands + iCmdIds.AppendL( EVtUiCmdDisableVideo ); + iCmdIds.AppendL( EVtUiCmdEnableVideo ); + iCmdIds.AppendL( EVtUiCmdDisableAudio ); + iCmdIds.AppendL( EVtUiCmdEnableAudio ); + + __VTPRINTEXIT( "Toolbar.PopulateCmdsIdsL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::SetToolbarVisibilityAfterLayoutChangeL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::SetToolbarVisibilityAfterLayoutChangeL( TBool /*aVisible*/ ) + { + __VTPRINTENTER( "Toolbar.SetToolbarVisibilityAfterLayoutChangeL" ) + __VTPRINTEXIT( "Toolbar.SetToolbarVisibilityAfterLayoutChangeL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::IsToggleButtonHidden +// ----------------------------------------------------------------------------- +// +TBool CVtUiToolbarBase::IsToggleButtonHidden(TInt aFirstCmdId, TInt aSecondCmdId ) + { + __VTPRINTENTER( "Toolbar.IsToggleButtonHidden" ) + TInt count = 0; + TBool result = EFalse; + for ( TInt i = 0; i < iCmdStates.Count(); i++ ) + { + if ( iCmdStates[ i ].iCmdId == aFirstCmdId || + iCmdStates[ i ].iCmdId == aSecondCmdId ) + { + if ( iCmdStates[ i ].iNewState == EHidden ) + { + count++; + } + } + } + + if ( count > 1 ) + { + __VTPRINT(DEBUG_GEN, "IsToggleButtonHidden.Count>1" ) + result = ETrue; + } + __VTPRINTEXITR( "Toolbar.IsToggleButtonHidden.result%d", result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::Clean +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::Clean() + { + __VTPRINTENTER( "Toolbar.Clean" ) + TRAP_IGNORE( CVtUiToolbarBase::DoDeactivateL() ); + // unregister component change registration + iFeatureManager.ComponentManager().ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "Toolbar.Clean" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::CreateToolbarButtons +// ----------------------------------------------------------------------------- +// + +void CVtUiToolbarBase::CreateToolbarButtonsL() + { + __VTPRINTENTER( "Toolbar.CreateToolbarButtons" ) + CVtUiAppUi& appUi = iFeatureManager.AppUi(); + + // two default buttons + // toggle video + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_VIDEO_BUTTON, + EVtUiCmdToolbarToggleVideo, appUi ); + + // toggle microphone + CreateToolbarItemL( R_AVKONBUTTON_TOGGLE_MICROPHONE_BUTTON, + EVtUiCmdToolbarToggleMicrophone, appUi ); + + __VTPRINTEXIT( "Toolbar.CreateToolbarButtons" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::CreateToolbarItemL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::CreateToolbarItemL( TInt aResourceId, TInt aCommandId, + CVtUiAppUi& appUi ) + { + __VTPRINTENTER( "Toolbar.CreateToolbarItemL" ) + + CVtUiToolbarButton* toolbarItem = NULL; + TLinearOrder< CVtUiToolbarButton > linOrder( ::ToolbarCmpFunc ); + + // create toolbaritem + toolbarItem = CVtUiToolbarButton::NewLC( aResourceId, appUi, aCommandId ); + + // add toolbar item to toolbar + // CVtUiToolbarButton ownership is transferred to akntoolbar + iToolbar->AddItemL( toolbarItem, EAknCtButton, + aCommandId , NULL ); + + // add toolbar item to array + iToolBarControls.InsertInOrderL( toolbarItem, linOrder ); + + CleanupStack::Pop(); // toolbaritem + + __VTPRINTEXIT( "Toolbar.CreateToolbarItemL" ) + } + + + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::HideToolbarButton +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::HideToolbarButton( const TInt aCommandId, const TBool aHide, + const TBool aDrawNow ) + { + __VTPRINTENTER( "Toolbar.HideToolbarButton" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.HideToolbarButton.aCommandId=%d", aCommandId ) + TInt cmdId = MapCmdIdToParentId( aCommandId ); + + // unhide for toggle buttons not handled + if ( !aHide && cmdId != aCommandId ) + { + return; + } + + // Get toolbar item + CVtUiToolbarButton* tbItem = FindToolbarItemByCommandId( cmdId ); + + // get button's current state + TInt stateIndex = tbItem->StateIndex(); + + switch ( cmdId ) + { + case EVtUiCmdToolbarToggleVideo: + // if both items should be hidden in togglebutton, + // then dim togglebutton + if ( IsToggleButtonHidden( EVtUiCmdDisableVideo, + EVtUiCmdEnableVideo ) ) + { + // update visibility state + TRAP_IGNORE( + SetCmdIdVisibilityStateL( EVtUiCmdDisableVideo, EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdEnableVideo, EDimmed ); + ); + iToolbar->SetItemDimmed( cmdId, ETrue, EFalse ); + return; + } + if ( ( stateIndex == 0 || stateIndex == 1 ) && + EVtUiCmdDisableVideo == aCommandId ) + { + tbItem->SetCurrentState ( 2, EFalse ); + } + else if( ( stateIndex == 2 || stateIndex == 3 )&& + EVtUiCmdEnableVideo == aCommandId ) + { + tbItem->SetCurrentState ( 0, EFalse ); + } + break; + + case EVtUiCmdToolbarToggleMicrophone: + // if both items should be hidden in togglebutton, + // then dim togglebutton + if ( IsToggleButtonHidden( EVtUiCmdDisableAudio, + EVtUiCmdEnableAudio ) ) + { + // update visibility state + TRAP_IGNORE( + SetCmdIdVisibilityStateL( EVtUiCmdDisableAudio, EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdEnableAudio, EDimmed ); + ); + iToolbar->SetItemDimmed( cmdId, ETrue, EFalse ); + return; + } + if ( ( stateIndex == 0 || stateIndex == 1 ) && + EVtUiCmdDisableAudio == aCommandId ) + { + tbItem->SetCurrentState ( 2, EFalse ); + } + else if( ( stateIndex == 2 || stateIndex == 3 ) && + EVtUiCmdEnableAudio == aCommandId ) + { + tbItem->SetCurrentState ( 0, EFalse ); + } + break; + + case EVtUiCmdToolbarAudioRouting: + { + const TBool isToggleButtonHidden( + IsToggleButtonHidden( EVtUiCmdActivateBT, + EVtUiCmdSwitchFromBTToIHF ) && + IsToggleButtonHidden( EVtUiCmdActivateLoudspeaker, + EVtUiCmdDeactivateLoudspeaker ) + ); + + if ( isToggleButtonHidden ) + { + TRAP_IGNORE( + SetCmdIdVisibilityStateL( EVtUiCmdActivateBT, EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdDeactivateLoudspeaker, + EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdSwitchFromBTToIHF, EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdActivateLoudspeaker, + EDimmed ); + ); + iToolbar->SetItemDimmed( cmdId, ETrue, EFalse ); + return; + } + else + { + if ( tbItem ) + { + const TVtUiAudioState& audioState( + iFeatureManager.UiStates().AudioState() ); + + TInt state( 0 ); // Deactivate loudspeaker + + if ( audioState.CanDeactivateBtHf() ) + { + state = 2; // Deactivate bthf + } + else if ( audioState.CanActivateBtHf() ) + { + state = 6; // Activate bthf + } + else if ( audioState.CanActivateLoudspeaker() ) + { + state = 4; // Activate loudspeaker + } + __VTPRINT2( DEBUG_GEN, + "Toolbar.HideToolbarButton.AudioRoutingState=%d", + state ) + tbItem->SetCurrentState ( state, EFalse ); + } + } + } + break; + + case EVtUiCmdToolbarToggleCamera: + // if both items should be hidden in togglebutton, + // then dim togglebutton + if ( IsToggleButtonHidden( EVtUiCmdUsePrimaryCamera, + EVtUiCmdUseSecondaryCamera ) ) + { + // update visibility state + TRAP_IGNORE( + SetCmdIdVisibilityStateL( EVtUiCmdUsePrimaryCamera, EDimmed ); + SetCmdIdVisibilityStateL( EVtUiCmdUseSecondaryCamera, EDimmed ); + ); + iToolbar->SetItemDimmed( cmdId, ETrue, EFalse ); + return; + } + if ( ( stateIndex == 0 || stateIndex == 1 ) && + EVtUiCmdUsePrimaryCamera == aCommandId ) + { + tbItem->SetCurrentState ( 2, EFalse ); + } + else if( ( stateIndex == 2 || stateIndex == 3 ) && + EVtUiCmdUseSecondaryCamera == aCommandId ) + { + tbItem->SetCurrentState ( 0, EFalse ); + } + break; + + default: + iToolbar->HideItem( cmdId, aHide, aDrawNow); + __VTPRINT( DEBUG_GEN, "Toolbar.HideToolbarButton" ) + break; + } + __VTPRINTEXIT( "Toolbar.HideToolbarButton" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::DimToolbar +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::DimToolbar( const TBool aDimmed, const TBool aDrawNow ) + { + __VTPRINTENTER( "Toolbar.DimToolbar" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.DimToolbar.aDimmed=%d", (TInt)aDimmed ) + + TInt count = iCmdStates.Count(); + for( TInt i = 0; i < count; i++ ) + { + __VTPRINT2( DEBUG_GEN, "iCmdId = %d", iCmdStates[ i ].iCmdId ) + __VTPRINT3( DEBUG_GEN, "iCmdStates.iOldState=%d iCmdStates.iNewState=%d", + iCmdStates[ i ].iOldState, iCmdStates[ i ].iNewState ) + // dim item + if ( iCmdStates[ i ].iNewState == EShown ) + { + DimToolbarButton( iCmdStates[ i ].iCmdId, aDimmed, aDrawNow ); + } + } + __VTPRINTEXIT( "Toolbar.DimToolbar" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::DimToolbarButton +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::DimToolbarButton( const TInt aCommandId, const TBool aDimmed, + const TBool aDrawNow ) + { + __VTPRINTENTER( "Toolbar.DimToolbarButton" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.DimToolbarButton.aCmdId=%d", aCommandId ) + + // command not visible, no need to update button + if ( !IsCmdIdVisibleInToggleButton( aCommandId ) ) + { + __VTPRINTEXIT("Toolbar.DimToolbarButton.NotVisible" ) + return; + } + TInt cmdId = MapCmdIdToParentId( aCommandId ); + // dim item + iToolbar->SetItemDimmed( cmdId, aDimmed, aDrawNow ); + __VTPRINTEXIT( "Toolbar.DimToolbarButton" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::FindToolbaItemByCommandId +// ----------------------------------------------------------------------------- +// +CVtUiToolbarButton* CVtUiToolbarBase::FindToolbarItemByCommandId + ( const TInt aCommandId ) + { + __VTPRINTENTER( "Toolbar.FindToolbarItemByCmdId" ) + CVtUiToolbarButton* result = NULL; + + TInt index( iToolBarControls. + FindInOrder( aCommandId,::ToolbarItemIdCmpFunc ) ); + + if ( index != KErrNotFound ) + { + result = iToolBarControls[ index ]; + } + __VTPRINTEXITR( "Toolbar.FindToolbarItemByCmdId.result %d", (TInt)result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::StartBlocking +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::BlockPointerEvents( TBool aIsBlocking ) + { + __VTPRINTENTER( "Toolbar.BlockPointerEvents" ) + for (TInt i = 0; i < iToolBarControls.Count(); ++i ) + { + iToolBarControls[ i ]->BlockPointerEvents( aIsBlocking ); + } + __VTPRINTEXITR( "Toolbar.BlockPointerEvents =%d", aIsBlocking ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::StopBlocking +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::BlockKeyEvents( TBool aIsBlocking ) + { + __VTPRINTENTER( "Toolbar.BlockKeyEvents" ) + for ( TInt i = 0; i < iToolBarControls.Count(); ++i ) + { + iToolBarControls[ i ]->BlockKeyEvents( aIsBlocking ); + } + __VTPRINTEXITR( "Toolbar.BlockKeyEvents =%d", aIsBlocking ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::IsDialerActive +// ----------------------------------------------------------------------------- +// +TBool CVtUiToolbarBase::IsDialerActive() const + { + __VTPRINTENTER( "Toolbar.IsDialerActive" ) + TBool ret( EFalse ); + MVtUiFeature* dialer = iFeatureManager. + GetFeatureById( EVtUiFeatureIdDialer ); + if ( dialer ) + { + if ( dialer->State() == MVtUiFeature::EActive ) + { + ret = ETrue; + } + } + __VTPRINTEXITR( "Toolbar.IsDialerActive =%d", ret ) + return ret; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::NumberOfToolbarControls +// ----------------------------------------------------------------------------- +// +TInt CVtUiToolbarBase::NumberOfToolbarControls() const + { + __VTPRINTENTER( "Toolbar.NumberOfToolbarControls" ) + __VTPRINTEXIT( "Toolbar.NumberOfToolbarControls" ) + return iCmdIds.Count(); + } + + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::CommandIdByCmdIdsArrayIndex +// ----------------------------------------------------------------------------- +// + TInt CVtUiToolbarBase::CommandIdByCmdIdsArrayIndex( TInt aIndex ) const + { + __VTPRINTENTER( "Toolbar.CommandIdByCmdIdsArrayIndex" ) + __VTPRINTEXIT( "Toolbar.CommandIdByCmdIdsArrayIndex.cmdId" ) + return iCmdIds[aIndex]; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::UpdateToolbar +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::UpdateToolbarL() + { + __VTPRINTENTER( "Toolbar.UpdateToolbar" ) + TVtUiStates& uiStates = iFeatureManager.UiStates(); + + // Zoom mode can be activated also from options menu + // therefore set zoom buttons state to latched + if ( uiStates.IsZoomModeOn() && + IsCommandInToolbar( EVtUiCmdZoom )&& + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->StateIndex() == 0 ) + { + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->SetCurrentState ( 1, ETrue ); + } + + + if ( uiStates.IsCaptureModeOn() && IsCommandInToolbar( EVtUiCmdZoom ) ) + { + __VTPRINT( DEBUG_GEN, "Toolbar.UpdateToolbarL.IsCaptureModeOn" ) + // remove zoom mode button tooltip + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->State( 0 )->SetHelpTextL( KNullDesC() ); + // set zoom mode button to be focused + iToolbar->SetFocusedItemL( EVtUiCmdZoom ); + } + + TInt count = iCmdStates.Count(); + for( TInt i = 0; i < count; i++ ) + { + // no need to do anything + if ( iCmdStates[ i ].iOldState == iCmdStates[ i ].iNewState ) + { + if ( ( iCmdStates[ i ].iCmdId == EVtUiCmdDisableVideo || + iCmdStates[ i ].iCmdId == EVtUiCmdEnableVideo ) && + iCmdStates[ i ].iNewState != EShown && + !( iFeatureManager.UiStates().MediaState().IsSharing() ) ) + { + CVtUiToolbarButton* tbButton = static_cast< CVtUiToolbarButton* >( + FindToolbarItemByCommandId( EVtUiCmdToolbarToggleVideo ) ); + tbButton->SetCurrentState( + iFeatureManager.UiStates().MediaState().IsVideo() ? 0 : 2 , ETrue ); + } + // for the case that EVtUiCmdDisableVideo and + // EVtUiCmdActivateBT command + // need to be shown but it is not visible in + // toogle button. + if ( ( iCmdStates[ i ].iCmdId == EVtUiCmdSwitchFromBTToIHF || + iCmdStates[ i ].iCmdId == EVtUiCmdActivateBT || + iCmdStates[ i ].iCmdId == EVtUiCmdActivateLoudspeaker || + iCmdStates[ i ].iCmdId == EVtUiCmdDeactivateLoudspeaker || + iCmdStates[ i ].iCmdId == EVtUiCmdDisableAudio || + iCmdStates[ i ].iCmdId == EVtUiCmdEnableAudio || + iCmdStates[ i ].iCmdId == EVtUiCmdDisableVideo || + iCmdStates[ i ].iCmdId == EVtUiCmdEnableVideo) && + iCmdStates[ i ].iNewState == EShown ) + { + // Nothing goes here. + } + else + { + continue; + } + } + // dim item + if ( iCmdStates[ i ].iNewState == EDimmed ) + { + DimToolbarButton( iCmdStates[ i ].iCmdId, ETrue, EFalse ); + } + // hide item + // currently used only for toggle buttons + // otherwise EDrawNow parameter must be updated for last element + else if ( iCmdStates[ i ].iNewState == EHidden ) + { + HideToolbarButton( iCmdStates[ i ].iCmdId, ETrue, EFalse ); + } + // show item + else if ( iCmdStates[ i ].iNewState == EShown ) + { + // items are undimmed if they were dimmed + // iCmdStates[ i ].iOldState == EDimmed comparison does + // not work with toggle buttons. + // That is why all buttons are undimmed. + DimToolbarButton( iCmdStates[ i ].iCmdId, EFalse, EFalse ); + + HideToolbarButton( iCmdStates[ i ].iCmdId, EFalse, EFalse ); + } + } + + // capture mode ended remove zoom button's latched state + if ( !uiStates.IsZoomModeOn() && + IsCommandInToolbar( EVtUiCmdZoom )&& + FindToolbarItemByCommandId( EVtUiCmdZoom )->StateIndex() == 1 ) + { + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->SetCurrentState ( 0, ETrue ); + } + + // if capture mode was activated set zoom mode button active + if ( uiStates.IsCaptureModeOn() && IsCommandInToolbar( EVtUiCmdZoom ) ) + { + // set latched (selected) state + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->SetCurrentState ( 1, ETrue); + } + else + { + // tooltip must be returned to zoom mode button + // only after zoom mode buttons latched state is changed + // because changing the buttons state will draw the tooltip + if ( IsCommandInToolbar( EVtUiCmdZoom ) && + ( KNullDesC() == ( FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->State(0)->HelpText() ) ) ) + { + HBufC* tooltip = StringLoader::LoadLC( R_VIDEOTELUI_TOOLTIP_ZOOM ); + FindToolbarItemByCommandId( EVtUiCmdZoom ) + ->State(0)->SetHelpTextL( *tooltip ); + CleanupStack::PopAndDestroy( ); // tooltip + } + } + + // draw toolbar + //iToolbar->DrawDeferred(); + iToolbar->DrawNow(); + __VTPRINTEXIT( "Toolbar.UpdateToolbar" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::SetCmdIdVisibilityStateL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::SetCmdIdVisibilityStateL( TInt aCmdId, + TCmdStateFlags aNewState ) + { + __VTPRINTENTER( "Toolbar.SetCmdIdVisibilityStateL" ) + __VTPRINT2( DEBUG_GEN, "Toolbar.SetCmdIdVbStateL.aCmdId=%d", aCmdId ) + __VTPRINT2( DEBUG_GEN, "Toolbar.SetCmdIdVbStateL.aNewState=%d", aNewState ) + + TInt result = KErrNotFound; + for ( TInt i = 0; i < iCmdStates.Count(); i++ ) + { + if ( iCmdStates[ i ].iCmdId == aCmdId ) + { + // command found + result = i; + break; + } + } + // new item + // add to array + if( result == KErrNotFound ) + { + TCommandState state; + state.iCmdId = aCmdId; + state.iOldState = ENotInitialized; + state.iNewState = aNewState; + iCmdStates.AppendL( state ); + } + else // old item + { + iCmdStates[ result ].iOldState = iCmdStates[ result ].iNewState; + iCmdStates[ result ].iNewState = aNewState; + } + + __VTPRINTEXIT( "Toolbar.SetCmdIdVbStateL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::IsCommandInToolbar +// ----------------------------------------------------------------------------- +// +TBool CVtUiToolbarBase::IsCommandInToolbar( TInt aCmdId ) const + { + __VTPRINTENTER( "Toolbar.SetCmdIdVisibilityStateL" ) + TBool result = EFalse; + for ( TInt i = 0; i < iCmdIds.Count(); i++ ) + { + if ( iCmdIds[ i ] == aCmdId ) + { + result = ETrue; + break; + } + } + __VTPRINTEXITR( "Toolbar.IsCommandInToolbar.result %d", (TInt)result ) + return result; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::RefreshL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::RefreshL() + { + __VTPRINTENTER( "Toolbar.RefreshL" ) + iFeatureManager.CommandManager(). + ValidateToolbarItemsL( *iHideToolbarItemAction ); + __VTPRINTEXIT( "Toolbar.RefreshL" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::AddCommandModifier +// ----------------------------------------------------------------------------- +// +TInt CVtUiToolbarBase::AddCommandModifier( CVtUiCommandModifyBase& /*aModifier*/ ) + { + __VTPRINTENTER( "Toolbar.AddCommandModifier" ) + __VTPRINTEXIT( "Toolbar.AddCommandModifier" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::RemoveCommandModifier +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::RemoveCommandModifier( CVtUiCommandModifyBase& /*aModifier*/ ) + { + __VTPRINTENTER( "Toolbar.RemoveCommandModifier" ) + __VTPRINTEXIT( "Toolbar.RemoveCommandModifier" ) + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::ComponentId +// ----------------------------------------------------------------------------- +// +MVtUiComponent::TComponentId CVtUiToolbarBase::ComponentId() const + { + __VTPRINTENTER( "Toolbar.ComponentId" ) + __VTPRINTEXIT( "Toolbar.ComponentId" ) + return MVtUiComponent::EComponentIdToolbar; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::ComponentAsControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CVtUiToolbarBase::ComponentAsControl() + { + __VTPRINTENTER( "Toolbar.ComponentAsControl" ) + __VTPRINTEXIT( "Toolbar.ComponentAsControl" ) + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::DoActivateL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::DoActivateL() + { + __VTPRINTENTER( "Toolbar.DoActivateL" ) + // add command ui to commandmanager + User::LeaveIfError( + iFeatureManager.CommandManager().AddCommandUi( *this ) ); + // add command modifier + User::LeaveIfError( iFeatureManager. + CommandManager().AddCommandModifier( *iToolbarSKModifier ) ); + // add validator + User::LeaveIfError( iFeatureManager.CommandManager(). + AddValidator( *iToolbarCmdPolicy ) ); + // refresh + iFeatureManager.CommandManager().RefreshL(); + __VTPRINTEXIT( "Toolbar.DoActivateL" ) + } + + +// ----------------------------------------------------------------------------- +// CVtUiToolbarBase::DoDeactivateL +// ----------------------------------------------------------------------------- +// +void CVtUiToolbarBase::DoDeactivateL() + { + __VTPRINTENTER( "Toolbar.DoDeactivateL" ) + // remove command modifier + iFeatureManager.CommandManager(). + RemoveCommandModifier( *iToolbarSKModifier ); + // remove command validator + iFeatureManager.CommandManager().RemoveValidator( *iToolbarCmdPolicy ); + // remove commandui + iFeatureManager.CommandManager().RemoveCommandUi( *this ); + if ( iToolbar ) + { + __VTPRINT(DEBUG_GEN, "Toolbar.DoDeactivateL, iToolbar is not null" ) + iToolbar->DrawNow(); + } + __VTPRINTEXIT( "Toolbar.DoDeactivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarBase::HandleLayoutChangeL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarBase::HandleLayoutChangeL() + { + __VTPRINTENTER( "CVtUiToolbarBase.HandleLayoutChangeL" ) + TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); + CEikMenuBar* menuBar = CEikonEnv::Static()->AppUiFactory()->MenuBar(); + + // This check prevents toolbar from drawing over the dialer + // when orientation is changed from landscape to portrait + + // Transition from landsacpe to portrait + // toolbar must be hided + if ( !isLandscape && IsDialerActive() ) + { + __VTPRINT(DEBUG_GEN, "CVtUiToolbarBase.LayoutChangeL.Stop" ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + else if ( iFeatureManager.UiStates().IsSelectingShare() ) + { + __VTPRINT( DEBUG_GEN, "ToolbarBase::HandleLayoutChangeL ShareImage." ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + else if ( !isLandscape && iFeatureManager.UiStates().IsVideoQualityModeOn() ) + { + __VTPRINT( DEBUG_GEN, "ToolbarBase::HandleLayoutChangeL Video Quality." ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + else if ( !isLandscape && iFeatureManager.UiStates().IsWhiteBalanceModeOn() ) + { + __VTPRINT( DEBUG_GEN, "ToolbarBase::HandleLayoutChangeL White Balance." ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + else if ( !isLandscape && iFeatureManager.UiStates().IsColorToneModeOn() ) + { + __VTPRINT( DEBUG_GEN, "ToolbarBase::HandleLayoutChangeL Color Tone." ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + else if ( !isLandscape && menuBar && menuBar->IsDisplayed() ) + { + __VTPRINT( DEBUG_GEN, "ToolbarBase::HandleLayoutChangeL Menu Displayed." ) + SetToolbarVisibilityAfterLayoutChangeL( EFalse ); + } + // Transition from portrait to landsacpe + // toolbar must be set to visible + else if ( isLandscape && IsDialerActive() ) + { + __VTPRINT(DEBUG_GEN, "CVtUiToolbarBase.LayoutChangeL.StartL" ) + SetToolbarVisibilityAfterLayoutChangeL( ETrue ); + } + __VTPRINTEXIT( "CVtUiToolbarBase.HandleLayoutChangeL" ) + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuitoolbarbutton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuitoolbarbutton.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 2006 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: CVtUiToolbarButton implementation. +* +*/ + + +// INCLUDE FILES +#include +#include "cvtuitoolbarbutton.h" +#include "CVtUiAppUi.h" +#include "videotelui.hrh" + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::NewL +// ----------------------------------------------------------------------------- +// +CVtUiToolbarButton* CVtUiToolbarButton::NewL( TInt aResourceId, + CVtUiAppUi& aAppUi, TInt aCmdId ) + { + __VTPRINTENTER( "CVtUiToolbarButton.NewL" ) + CVtUiToolbarButton* self = CVtUiToolbarButton::NewLC( aResourceId, aAppUi, + aCmdId ); + CleanupStack::Pop( self ); + __VTPRINTEXIT( "CVtUiToolbarButton.NewL" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CVtUiNaviPane::NewLC +// ----------------------------------------------------------------------------- +// +CVtUiToolbarButton* CVtUiToolbarButton::NewLC( TInt aResourceId, + CVtUiAppUi& aAppUi, TInt aCmdId ) + { + __VTPRINTENTER( "CVtUiToolbarButton.NewLC" ) + CVtUiToolbarButton* self = new ( ELeave ) CVtUiToolbarButton( aAppUi, + aCmdId ); + CleanupStack::PushL( self ); + self->ConstructL(); + self->ConstructFromResourceL( aResourceId ); + __VTPRINTEXIT( "CVtUiToolbarButton.NewLC" ) + return self; + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::~CVtUiToolbarButton +// ---------------------------------------------------------------------------- +// +CVtUiToolbarButton::~CVtUiToolbarButton() + { + __VTPRINTENTER( "CVtUiToolbarButton.~" ) + __VTPRINTEXIT( "CVtUiToolbarButton.~" ) + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::CVtUiToolbarButton +// ---------------------------------------------------------------------------- +// +CVtUiToolbarButton::CVtUiToolbarButton( CVtUiAppUi& aAppUi, TInt aCmdId ) +: CAknButton( 0 ), iAppUi( aAppUi ), iCmdId ( aCmdId ), + iIsBlockingKeyEvents ( EFalse ), iIsBlockingPointerEvents( EFalse ) + { + __VTPRINTENTER( "CVtUiToolbarButton.CVtUiToolbarButton" ) + __VTPRINTEXIT( "CVtUiToolbarButton.CVtUiToolbarButton") + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::ShowHelpL +// ---------------------------------------------------------------------------- +// +void CVtUiToolbarButton::ShowHelpL() + { + __VTPRINTENTER( "CVtUiToolbarButton.ShowHelpL" ) + CAknButton::ShowHelpL(); + __VTPRINTEXIT( "CVtUiToolbarButton.ShowHelpL") + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::CmdId +// ---------------------------------------------------------------------------- +// +TInt CVtUiToolbarButton::CmdId() const + { + __VTPRINTENTER( "CVtUiToolbarButton.CmdId" ) + __VTPRINTEXIT( "CVtUiToolbarButton.CmdId") + return iCmdId; + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::BlockPointerEvents +// ---------------------------------------------------------------------------- +// +void CVtUiToolbarButton::BlockPointerEvents( TBool aIsBlocking ) + { + __VTPRINTENTER( "CVtUiToolbarButton.BlockPointerEvents" ) + iIsBlockingPointerEvents = aIsBlocking; + __VTPRINTEXITR( "CVtUiToolbarButton.BlockPointerEvents=%d", aIsBlocking ) + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::BlockKeyEvents +// ---------------------------------------------------------------------------- +// +void CVtUiToolbarButton::BlockKeyEvents( TBool aIsBlocking ) + { + __VTPRINTENTER( "CVtUiToolbarButton.BlockKeyEvents" ) + iIsBlockingKeyEvents = aIsBlocking; + __VTPRINTEXITR( "CVtUiToolbarButton.BlockKeyEvents=%d", aIsBlocking ) + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::OfferKeyEventL +// ---------------------------------------------------------------------------- +// +TKeyResponse CVtUiToolbarButton::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + __VTPRINTENTER( "CVtUiToolbarButton.OfferKeyEventL" ) + if ( IsCommandActive() && iIsBlockingKeyEvents ) + { + __VTPRINTEXIT( "CVtUiToolbarButton.OfferKeyEventL.Blocked" ) + return EKeyWasConsumed; + } + __VTPRINTEXIT( "CVtUiToolbarButton.OfferKeyEventL" ) + return CAknButton::OfferKeyEventL( aKeyEvent, aType); + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::HandlePointerEventL +// ---------------------------------------------------------------------------- +// +void CVtUiToolbarButton::HandlePointerEventL( const + TPointerEvent& aPointerEvent ) + { + __VTPRINTENTER( "CVtUiToolbarButton.HandlePointerEventL" ) + if ( IsCommandActive() && iIsBlockingPointerEvents ) + { + __VTPRINTEXIT( "CVtUiToolbarButton.HandlePointerEventL.Blocked" ) + return; + } + __VTPRINTEXIT( "CVtUiToolbarButton.HandlePointerEventL.To.AknButton" ) + return CAknButton::HandlePointerEventL( aPointerEvent ); + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::StatesCount +// ---------------------------------------------------------------------------- +// +TInt CVtUiToolbarButton::StatesCount() const + { + return iStates->Count(); + } + +// ---------------------------------------------------------------------------- +// CVtUiToolbarButton::IsCommandActive +// ---------------------------------------------------------------------------- +// +TBool CVtUiToolbarButton::IsCommandActive() const + { + __VTPRINTENTER( "CVtUiToolbarButton.IsCommandActive" ) + TBool value( EFalse ); + value = ( iAppUi.IsActiveCommand( EVtUiCmdDisableVideo ) || + iAppUi.IsActiveCommand( EVtUiCmdEnableVideo ) || + iAppUi.IsActiveCommand( EVtUiCmdEnableAudio ) || + iAppUi.IsActiveCommand( EVtUiCmdDisableAudio ) || + iAppUi.IsActiveCommand( EVtUiCmdUsePrimaryCamera ) || + iAppUi.IsActiveCommand( EVtUiCmdUseSecondaryCamera ) || + // Audio routing to blocking + iAppUi.IsActiveCommand( EVtUiCmdActivateBT ) || + iAppUi.IsActiveCommand( EVtUiCmdSwitchFromBTToIHF ) || + iAppUi.IsActiveCommand( EVtUiCmdActivateLoudspeaker ) || + iAppUi.IsActiveCommand( EVtUiCmdDeactivateLoudspeaker ) + ); + + __VTPRINTEXITR( "CVtUiToolbarButton.IsCommandActive=%d", value ) + return value; + } +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuitoolbarcmdpolicy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuitoolbarcmdpolicy.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2006 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: Toolbar command policy implementation. +* +*/ + + +#include + +#include "cvtuitoolbarcmdpolicy.h" +#include "cvtuicmdvalidationactionbase.h" +#include "tvtuicmdvalidatorcallback.h" +#include "cvtuitoolbarbase.h" +#include "videotelui.hrh" + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::NewL +// --------------------------------------------------------------------------- +// +CVtUiToolbarCmdPolicy* CVtUiToolbarCmdPolicy::NewL( CVtUiToolbarBase& aToolbar ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.NewL" ) + CVtUiToolbarCmdPolicy* self = new ( ELeave ) CVtUiToolbarCmdPolicy( + aToolbar ); + __VTPRINTEXIT( "ToolbarCmdPolicy.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::ValidateMenuItemsL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarCmdPolicy::ValidateMenuItemsL( + CVtUiCmdValidationActionBase& aAction, TInt /*aReferencePriority*/ ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.ValidateMenuItemsL" ) + aAction.ProcessL( + TVtUiCmdValidatorCallBack< CVtUiToolbarCmdPolicy >( *this, + ValidateMenuCommand ) ); + __VTPRINTEXIT( "ToolbarCmdPolicy.ValidateMenuItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::ValidateSoftkeyItemsL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarCmdPolicy::ValidateSoftkeyItemsL( + CVtUiCmdValidationActionBase& /*aAction*/, TInt /*aReferencePriority*/ ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.ValidateSoftkeyItemsL" ) + __VTPRINTEXIT( "ToolbarCmdPolicy.ValidateSoftkeyItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::ValidateToolbarItemsL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarCmdPolicy::ValidateToolbarItemsL( + CVtUiCmdValidationActionBase& /*aAction*/, TInt /*aReferencePriority*/ ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.ValidateToolbarItemsL" ) + __VTPRINTEXIT( "ToolbarCmdPolicy.ValidateToolbarItemsL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::CustomValidationL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarCmdPolicy::CustomValidationL( + CVtUiCmdCustomValidationActionBase&, TInt ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.CustomValidationL" ) + __VTPRINTEXIT( "ToolbarCmdPolicy.CustomValidationL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::ValidatesContext +// --------------------------------------------------------------------------- +// +TBool CVtUiToolbarCmdPolicy::ValidatesContext( + const TVtUiCmdContextType& aCtxType ) const + { + __VTPRINTENTER( "ToolbarCmdPolicy.ValidatesContext" ) + + TBool result( EFalse ); + + switch ( aCtxType ) + { + case EVtUiCmdContextTypeMenu: + case EVtUiCmdContextTypeSoftkey: + case EVtUiCmdContextTypeToolbar: + result = ETrue; + break; + + default: + break; + } + + __VTPRINTEXITR( "ToolbarCmdPolicy.ValidatesContext %d", result ) + + return result; + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::CVtUiToolbarCmdPolicy +// --------------------------------------------------------------------------- +// +CVtUiToolbarCmdPolicy::CVtUiToolbarCmdPolicy( CVtUiToolbarBase& aToolbar ) + : CVtUiCmdValidatorBase( EVtUiCmdPolicyPriorityToolbar ), + iToolbar( aToolbar ) + { + __VTPRINTENTER( "ToolbarCmdPolicy.ctor" ) + __VTPRINTEXIT( "ToolbarCmdPolicy.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarCmdPolicy::ValidateMenuCommand +// --------------------------------------------------------------------------- +// +TBool CVtUiToolbarCmdPolicy::ValidateMenuCommand( TInt /*aCommandId*/ ) const + { + __VTPRINTENTER( "ToolbarCmdPolicy.ValidateMenuCommand" ) + // all commands are also in options menu + __VTPRINTEXIT( "ToolbarCmdPolicy.ValidateMenuCommand") + return EFalse; + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuitoolbarcontext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuitoolbarcontext.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2006 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: Toolbar context implementation. +* +*/ + + +#include + +#include "cvtuitoolbarcontext.h" + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiToolbarContext::~CVtUiToolbarContext +// --------------------------------------------------------------------------- +// +CVtUiToolbarContext::~CVtUiToolbarContext() + { + __VTPRINTENTER( "ToolbarCtx.~" ) + UnregisterCommandContext(); + __VTPRINTEXIT( "ToolbarCtx.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarContext::NewL +// --------------------------------------------------------------------------- +// +CVtUiToolbarContext* CVtUiToolbarContext::NewL( + MVtUiCommandManager& aCommandManager ) + { + __VTPRINTENTER( "ToolbarCtx.NewL" ) + CVtUiToolbarContext* self = + new ( ELeave ) CVtUiToolbarContext( aCommandManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "ToolbarCtx.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarContext::ValidateL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarContext::ValidateL( CVtUiCmdValidationActionBase& aAction ) + { + __VTPRINTENTER( "ToolbarCtx.ValidateL" ) + ValidateToolbarItemsL( aAction ); + __VTPRINTEXIT( "ToolbarCtx.ValidateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarContext::CVtUiToolbarContext +// --------------------------------------------------------------------------- +// +CVtUiToolbarContext::CVtUiToolbarContext( + MVtUiCommandManager& aCommandManager ) + : CVtUiCmdContext( aCommandManager, EVtUiCmdContextTypeToolbar, + KVtUiToolbarContextPriority ) + { + __VTPRINTENTER( "ToolbarCtx.ctor" ) + __VTPRINTEXIT( "ToolbarCtx.ctor" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarContext::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiToolbarContext::ConstructL() + { + __VTPRINTENTER( "ToolbarCtx.ConstructL" ) + RegisterCommandContextL(); + __VTPRINTEXIT( "ToolbarCtx.ConstructL" ) + } + +// End of File + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/cvtuitoolbarskmodifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/cvtuitoolbarskmodifier.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2006 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: Softkey modifier class implementation. +* +*/ + + +#include +#include "cvtuitoolbarskmodifier.h" +#include "mvtuicommandsetting.h" +#include "tvtuicommandmodifierpriority.h" +#include "CVtUiAppUi.h" +#include "tvtuistates.h" +#include +#include + + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::NewL +// --------------------------------------------------------------------------- +// +CVtUiToolbarSKModifier* CVtUiToolbarSKModifier::NewL( CVtUiAppUi& aAppUi, + const TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.NewL" ) + CVtUiToolbarSKModifier* self = + new ( ELeave ) CVtUiToolbarSKModifier( aAppUi, aUiStates ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + __VTPRINTEXIT( "CVtUiToolbarSKModifier.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::~CVtUiToolbarSKModifier +// --------------------------------------------------------------------------- +// +CVtUiToolbarSKModifier::~CVtUiToolbarSKModifier() + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.~" ) + __VTPRINTEXIT( "CVtUiToolbarSKModifier.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::CVtUiToolbarSKModifier +// --------------------------------------------------------------------------- +// +CVtUiToolbarSKModifier::CVtUiToolbarSKModifier( CVtUiAppUi& aAppUi, + const TVtUiStates& aUiStates ) : + CVtUiCommandModifyBase ( EVtUiCmdModifierPriorityToolbar ), + iAppUi ( aAppUi ), iUiStates ( aUiStates ) + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.Ctr" ) + __VTPRINTEXIT( "CVtUiToolbarSKModifier.Ctr" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::CVtUiToolbarSKModifier +// --------------------------------------------------------------------------- +// +void CVtUiToolbarSKModifier::ConstructL() + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.ConstructL" ) + __VTPRINTEXIT( "CVtUiToolbarSKModifier.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::CVtUiToolbarSKModifier +// --------------------------------------------------------------------------- +// +void CVtUiToolbarSKModifier::ModifyCommandsL( + MVtUiCommandSetting& aCommandSettings ) + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.ModifyCommandsL" ) + aCommandSettings.DoDefineCommandsL(); + + // No need to change MSK during snapshot + if ( iUiStates.IsCaptureModeOn() ) + { + return; + } + + CEikButtonGroupContainer* cba = iAppUi.GetCba(); + const TInt mskIndex = 3; + // Set selection key to msk + cba->SetCommandL( mskIndex, R_VIDEOTELUI_SELECT_CBA_BUTTON ); + __VTPRINTEXIT( "CVtUiToolbarSKModifier.ModifyCommandsL" ) + } +// --------------------------------------------------------------------------- +// CVtUiToolbarSKModifier::CVtUiToolbarSKModifier +// --------------------------------------------------------------------------- +// +TBool CVtUiToolbarSKModifier::Supports( MVtUiCommandSetting::Type aType ) const + { + __VTPRINTENTER( "CVtUiToolbarSKModifier.Supports" ) + __VTPRINTEXIT( "CVtUiToolbarSKModifier.Supports" ) + return ( aType == MVtUiCommandSetting::ECommandTypeSoftkeys ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/toolbar/tvtuitoolbarcommanditerator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/toolbar/tvtuitoolbarcommanditerator.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,53 @@ +/* +* 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: Toolbar command iterator implementation. +* +*/ + + +#include "cvtuitoolbarbase.h" +#include "tvtuitoolbarcommanditerator.h" + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// TVtUiToolbarCommandIterator::TVtUiToolbarCommandIterator +// --------------------------------------------------------------------------- +// +TVtUiToolbarCommandIterator::TVtUiToolbarCommandIterator( CVtUiToolbarBase& + aToolbar ) : iToolbar( &aToolbar ), iCurrent( 0 ) + { + } + +// --------------------------------------------------------------------------- +// TVtUiToolbarCommandIterator::HasNext +// --------------------------------------------------------------------------- +// +TBool TVtUiToolbarCommandIterator::HasNext() const + { + return ( iCurrent < iToolbar->NumberOfToolbarControls() ); + } + +// --------------------------------------------------------------------------- +// TVtUiToolbarCommandIterator::Next +// --------------------------------------------------------------------------- +// +TInt TVtUiToolbarCommandIterator::Next() + { + return iToolbar->CommandIdByCmdIdsArrayIndex( iCurrent++ ); + } + +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/volume/cvtuivolume.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/volume/cvtuivolume.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2006 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: Volume feature implementation. +* +*/ + + +#include +#include "cvtuivolume.h" +#include "tvtuifeatureids.h" +#include "cvtuivolumepopup.h" +#include "cvtuifeaturemanager.h" +#include "tvtuifeatureids.h" +#include "tvtuistates.h" + +// --------------------------------------------------------------------------- +// CVtUiVolume::NewL +// --------------------------------------------------------------------------- +// +CVtUiVolume* CVtUiVolume::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiVolume.NewL" ) + CVtUiVolume* self = + new ( ELeave ) CVtUiVolume( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiVolume.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::~CVtUiVolume +// --------------------------------------------------------------------------- +// +CVtUiVolume::~CVtUiVolume() + { + __VTPRINTENTER( "CVtUiVolume.~" ) + __VTPRINTEXIT( "CVtUiVolume.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiVolume::RefreshL() + { + __VTPRINTENTER( "CVtUiVolume.RefreshL" ) + if ( State() == EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiPopupBase.RefreshL.EActive" ) + static_cast< CVtUiVolumePopup& >( Popup() ).RefreshL(); + } + else + { + __VTPRINT( DEBUG_GEN, "CVtUiVolume.RefreshL.Else" ) + static_cast< CVtUiVolumePopup& >( Popup() ).UpdateVolumeAndRoutingL(); + } + __VTPRINTEXIT( "CVtUiVolume.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::StartL +// --------------------------------------------------------------------------- +// +void CVtUiVolume::StartL() + { + __VTPRINTENTER( "CVtUiVolume.StartL" ) + // if brightness or contrast slider is active stop those + MVtUiFeature* br = iFeatureManager. + GetFeatureById( EVtUiFeatureIdBrightness ); + if ( br && br->State() == EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiPopupBase.StartL.br->Stop" ) + br->Stop(); + } + + MVtUiFeature* cr = iFeatureManager. + GetFeatureById( EVtUiFeatureIdContrast ); + if ( cr && cr->State() == EActive ) + { + __VTPRINT( DEBUG_GEN, "CVtUiPopupBase.StartL.cr->Stop" ) + cr->Stop(); + } + + if ( State() == EActive ) + { + // need to refresh when already active to replenish the close timer + RefreshL(); + } + else + { + iFeatureManager.UiStates().SetIsFloatingToolbarVisible( ETrue ); + CVtUiSliderBase::StartL(); + iFeatureManager.UiStates().SetVolumeModeOn( ETrue ); + // Toolbar needs to be refreshed if contrat and brightness were dismissed + + } + __VTPRINTEXIT( "CVtUiVolume.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::Stop +// --------------------------------------------------------------------------- +// +void CVtUiVolume::Stop() + { + __VTPRINTENTER( "CVtUiVolume.Stop" ) + iFeatureManager.UiStates().SetVolumeModeOn( EFalse ); + CVtUiSliderBase::Stop(); + __VTPRINTEXIT( "CVtUiVolume.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::GetVolumeValue +// --------------------------------------------------------------------------- +// +TInt CVtUiVolume::GetVolumeValue() + { + __VTPRINTENTER( "CVtUiVolume.GetVolumeValue" ) + __VTPRINTEXITR( "CVtUiVolume.GetVolumeValue%d", Popup().Value() ) + return Popup().Value(); + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::CVtUiVolume +// --------------------------------------------------------------------------- +// +CVtUiVolume::CVtUiVolume( CVtUiFeatureManager& aFeatureManager ) + : CVtUiSliderBase( aFeatureManager, EVtUiFeatureIdVolume ) + { + + __VTPRINTENTER( "CVtUiVolume.CVtUiVolume" ) + __VTPRINTEXIT( "CVtUiVolume.CVtUiVolume" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolume::CVtUiVolume +// --------------------------------------------------------------------------- +// +void CVtUiVolume:: ConstructL() + { + __VTPRINTENTER( "CVtUiVolume.ConstructL" ) + BaseConstructL(); + SetPopup( CVtUiVolumePopup::NewL( iFeatureManager ) ); + __VTPRINTEXIT( "CVtUiVolume.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/volume/cvtuivolumecontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/volume/cvtuivolumecontrol.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,157 @@ +/* +* 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" +* 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 the cvtuivolumecontrol class. +* +*/ + + +#include "cvtuivolumecontrol.h" +#include "MVtUiEngineCommandManager.h" +#include +#include +#include "cvtuivolume.h" +#include "cvtuifeaturemanager.h" + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::CVtUiVolumeControl +// ----------------------------------------------------------------------------- +// +CVtUiVolumeControl::CVtUiVolumeControl( + MVtEngCommandHandler& aCommandHandler, + MVtEngAudio& aAudio, + MVtUiEngineCommandManager& aCommandManager, + CVtUiFeatureManager& aFeatureManager ) + : iCommandHandler( aCommandHandler ), + iAudio( aAudio ), + iCommandManager( aCommandManager ), + iVolumePtr( (TUint8*)&iVolume, sizeof( TVolume ) ), + iFeatureManager( aFeatureManager ) + { + } + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::~CVtUiVolumeControl +// ----------------------------------------------------------------------------- +// +CVtUiVolumeControl::~CVtUiVolumeControl() + { + if ( iIsActive ) + { + iCommandHandler.CancelCommand( KVtEngSetAudioVolume ); // ignore error + } + iCommandManager.RemoveObserver( *this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::ExecuteDialogLD +// ----------------------------------------------------------------------------- +// +void CVtUiVolumeControl::ConstructL() + { + CleanupStack::PushL( this ); + iCommandManager.AddObserverL( *this ); + CleanupStack::Pop( this ); + } + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::SetVoAdjustVolumeL +// ----------------------------------------------------------------------------- +// +void CVtUiVolumeControl::AdjustVolumeL( TVolume aVolume ) + { + __VTPRINTENTER( "VtUiVolCtrl.AdjustVolumeL") + if ( iIsActive ) + { + __VTPRINTENTER( "VtUiVolCtrl.AdjustVolumeL.Isactive") + return; + } + iIsActive = ETrue; + iVolume = aVolume; + iCommandHandler.ExecuteL( KVtEngSetAudioVolume, &iVolumePtr ); + __VTPRINTEXIT( "VtUiVolCtrl.AdjustVolumeL") + } + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +void CVtUiVolumeControl::HandleVTCommandPerformedL( + TVtEngCommandId aCommand, + const TInt aError ) + { + __VTPRINTENTER( "VtUiVolCtrl.HandleVTCommandPerformedL") + if ( aCommand == KVtEngSetAudioVolume ) + { + __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.perf" ) + TInt error = aError; + // If volume has been changed, then try to set volume again. + //iIsActive = ETrue; + if ( IsVolumeChangedL() ) + { + __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.retry" ) + TRAP( error, + iCommandHandler.ExecuteL( + KVtEngSetAudioVolume, + &iVolumePtr ) ); + __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.err.%d", error ) + iIsActive = ( error == KErrNone ); + } + else + { + __VTPRINT( DEBUG_GEN, + "VtUiVolCtrl.HandleVTCommandPerformedL iIsActive = EFalse; " ) + iIsActive = EFalse; + } + + } + __VTPRINTEXIT( "VtUiVolCtrl.HandleVTCommandPerformedL") + } + +// ----------------------------------------------------------------------------- +// CVtUiVolumeControl::IsVolumeChangedL +// ----------------------------------------------------------------------------- +// +TBool CVtUiVolumeControl::IsVolumeChangedL() + { + __VTPRINTENTER( "VtUiVolCtrl.IsVolumeChangedL" ) + MVtEngAudio::TAudioRoutingState audioRouting; + User::LeaveIfError( iAudio.GetRoutingState( audioRouting ) ); + const TInt volume( iAudio.OutputVolume( + !( audioRouting == MVtEngAudio::EAudioLoudspeaker ) ) ); + + CVtUiVolume* vp = static_cast< CVtUiVolume* >( + iFeatureManager.GetFeatureById( EVtUiFeatureIdVolume ) ); + TInt sliderVolume( volume ); + if ( vp ) + { + sliderVolume = vp->GetVolumeValue(); + // update correct volume + if ( audioRouting == MVtEngAudio::EAudioLoudspeaker ) + { + __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.IsVolumeChangedL.LS") + iVolume.iHandsfreeVolume = sliderVolume; + } + else + { + __VTPRINT( DEBUG_GEN, "VtUiVolCtrl.IsVolumeChangedL.HS") + iVolume.iHandsetVolume = sliderVolume; + } + } + + __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.vol %d", volume ) + __VTPRINT2( DEBUG_GEN, "VtUiVolCtrl.slidvol %d", sliderVolume ) + __VTPRINTEXITR( "VtUiVolCtrl.IsVolumeChangedL %d", sliderVolume == volume ) + return sliderVolume == volume ? EFalse : ETrue; + } +// End of File diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/volume/cvtuivolumepopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/volume/cvtuivolumepopup.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,277 @@ +/* +* Copyright (c) 2006 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: Volume popup implementation. +* +*/ + + +#include +#include +#include "cvtuivolumepopup.h" +#include "cvtuifeaturemanager.h" +#include "tVtuifeaturevariation.h" +#include "CVtUiAppUi.h" +#include "cvtengmodel.h" + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::NewL +// --------------------------------------------------------------------------- +// +CVtUiVolumePopup* CVtUiVolumePopup::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiVolumePopup.NewL" ) + CVtUiVolumePopup* self = + new ( ELeave ) CVtUiVolumePopup( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiVolumePopup.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::~CVtUiVolumePopup +// --------------------------------------------------------------------------- +// +CVtUiVolumePopup::~CVtUiVolumePopup() + { + __VTPRINTENTER( "CVtUiVolumePopup.~" ) + __VTPRINTEXIT( "CVtUiVolumePopup.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::UpdateVolumeAndRouting +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::UpdateVolumeAndRoutingL() + { + __VTPRINTENTER( "CVtUiVolumePopup.UpdateVolumeAndRoutingL" ) + MVtEngAudio& audio( iModel.Audio() ); + MVtEngAudio::TAudioRoutingState audioRouting; + User::LeaveIfError( audio.GetRoutingState( audioRouting ) ); + //update routing and volume for this routing + iAudioRouting = audioRouting; + iVolume = OutputVolume( iAudioRouting ); + SetValue( iVolume ); + __VTPRINTEXIT( "CVtUiVolumePopup.UpdateVolumeAndRoutingL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::RefreshL() + { + __VTPRINTENTER( "CVtUiVolumePopup.RefreshL" ) + MVtEngAudio& audio( iModel.Audio() ); + MVtEngAudio::TAudioRoutingState audioRouting; + User::LeaveIfError( audio.GetRoutingState( audioRouting ) ); + + // Check if audio routing has changed + if ( audioRouting != iAudioRouting ) + { + __VTPRINT( DEBUG_GEN, + "CVtUiVolumePopup.RefreshL audio routing changed" ) + // Audio routing changed -> update routing and volume for this routing + iAudioRouting = audioRouting; + iVolume = OutputVolume( iAudioRouting ); + SetValue( iVolume ); + __VTPRINT2( DEBUG_GEN, "CVtUiVolumePopup.RefreshL routing = %d", + iAudioRouting ) + __VTPRINT2( DEBUG_GEN, "CVtUiVolumePopup.RefreshL volume = %d", + iVolume ) + ClosePopup(); + } + else + { + // No change in audio routing + const TInt volume( OutputVolume( iAudioRouting ) ); + if ( volume != iVolume ) + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.RefreshL volume changed" ) + iVolume = volume; + SetValue( iVolume ); + __VTPRINT2( DEBUG_GEN, "CVtUiVolumePopup.RefreshL volume = %d", + iVolume ) + if ( !IsPopUpVisible() ) + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.RefreshL OpenPopupL" ) + OpenPopupL(); + } + else + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.RefreshL ShowPopupL" ) + ShowPopupL(); + } + } + else + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.RefreshL ShowPopupL2" ) + ShowPopupL(); + } + } + __VTPRINTEXIT( "CVtUiVolumePopup.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::DoActivateL() +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::DoActivateL() + { + __VTPRINTENTER( "CVtUiVolumePopup.DoActivateL" ) + CVtUiPopupBase::DoActivateL(); + // In order to refresh softkey. + iFeatureManager.AppUi().RefreshSoftkeysL(); + __VTPRINTEXIT( "CVtUiVolumePopup.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiVolumePopup::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode /*aCode*/ ) + { + __VTPRINTENTER( "CVtUiVolumePopup.OfferKeyEventL" ) + TKeyResponse response( EKeyWasNotConsumed ); + TVtUiSideVolumeKeysVariation svkvariation; + if ( !svkvariation.IsSideVolumeKeysSupported() && + ( aEvent.iScanCode == EStdKeyLeftArrow || + aEvent.iScanCode == EStdKeyRightArrow ) ) + { + ShowPopupL(); + UpdateVolumeL(); + } + __VTPRINTEXITR( "CVtUiVolumePopup.OfferKeyEventL %d", response ) + return response; + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::HandleControlEventL +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::HandleControlEventL( CCoeControl* aControl, + TCoeEvent aEventType ) + { + __VTPRINTENTER( "CVtUiVolumePopup.HandleControlEventL" ) + CVtUiPopupBase::HandleControlEventL( aControl, aEventType ); + if ( aEventType == EEventStateChanged ) + { + UpdateVolumeL(); + } + __VTPRINTEXIT( "CVtUiVolumePopup.HandleControlEventL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::CVtUiVolumePopup +// --------------------------------------------------------------------------- +// +CVtUiVolumePopup::CVtUiVolumePopup( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPopupBase( aFeatureManager.ComponentManager(), + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry | + MVtUiComponent::EComponentIdZoom | + MVtUiComponent::EVComponentIdContrast | + MVtUiComponent::EVComponentIdBrightness ), + EComponentIdVolume ), + iModel( aFeatureManager.AppUi().Model() ), + iFeatureManager ( aFeatureManager ) + { + __VTPRINTENTER( "CVtUiVolumePopup.CVtUiVolumePopup" ) + __VTPRINTEXIT( "CVtUiVolumePopup.CVtUiVolumePopup" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::ConstructL() + { + __VTPRINTENTER( "CVtUiVolumePopup.ConstructL" ) + BaseConstructL(); + // set default value + MVtEngAudio& audio( iModel.Audio() ); + MVtEngAudio::TAudioRoutingState audioRouting; + User::LeaveIfError( audio.GetRoutingState( audioRouting ) ); + SetValue( OutputVolume( audioRouting ) ); + // set default audiorouting + iAudioRouting = audioRouting; + __VTPRINTEXIT( "CVtUiVolumePopup.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::OutputVolume +// --------------------------------------------------------------------------- +// +TInt CVtUiVolumePopup::OutputVolume( + MVtEngAudio::TAudioRoutingState aRouting ) const + { + __VTPRINTENTER( "CVtUiVolumePopup.OutputVolume" ) + const MVtEngAudio& audio( iModel.Audio() ); + const TInt volume( audio.OutputVolume( + !( aRouting == MVtEngAudio::EAudioLoudspeaker ) ) ); + __VTPRINTEXITR( "CVtUiVolumePopup.OutputVolume %d", volume ) + return volume; + } + +// --------------------------------------------------------------------------- +// CVtUiVolumePopup::UpdateVolumeL +// --------------------------------------------------------------------------- +// +void CVtUiVolumePopup::UpdateVolumeL() + { + __VTPRINTENTER( "CVtUiVolumePopup.UpdateVolumeL" ) + + MVtEngAudio& audio( iModel.Audio() ); + MVtEngAudio::TAudioRoutingState audioRouting; + User::LeaveIfError( audio.GetRoutingState( audioRouting ) ); + + const TInt volume( OutputVolume( iAudioRouting ) ); + + __VTPRINT2( DEBUG_GEN, "CVtUiVolumePopup.UpdateVolumeL volume = %d", + volume ) + __VTPRINT2( DEBUG_GEN, "CVtUiVolumePopup.UpdateVolumeL Value() = %d", + Value() ) + if ( volume != Value() ) + { + MVtEngAudio::TVtEngOutputVolume newVolume; + + // Get current audio values from engine + // and set new audio volume to right routing + if ( iAudioRouting == MVtEngAudio::EAudioLoudspeaker ) + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.UpdateVolumeL.LS") + // changed value + newVolume.iHandsfreeVolume = Value(); + // old value + TInt volume = audio.OutputVolume( ETrue ); + newVolume.iHandsetVolume = volume; + } + else + { + __VTPRINT( DEBUG_GEN, "CVtUiVolumePopup.UpdateVolumeL.HS") + // changed value + newVolume.iHandsetVolume = Value(); + // old value + TInt volume = audio.OutputVolume( EFalse ); + newVolume.iHandsfreeVolume = volume; + } + + iFeatureManager.AppUi().CmdUpdateVolumeL( newVolume ); + } + __VTPRINTEXIT( "CVtUiVolumePopup.UpdateVolumeL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/zoom/cvtuizoom.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/zoom/cvtuizoom.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,139 @@ +/* +* Copyright (c) 2006 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: Zoom feature implementation. +* +*/ + + +#include +#include "cvtuizoom.h" +#include "tvtuifeatureids.h" +#include "cvtuizoompopup.h" +#include "cvtuifeaturemanager.h" +#include "tvtuistates.h" + +// --------------------------------------------------------------------------- +// CVtUiZoom::NewL +// --------------------------------------------------------------------------- +// +CVtUiZoom* CVtUiZoom::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiZoom.NewL" ) + CVtUiZoom* self = + new ( ELeave ) CVtUiZoom( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiZoom.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::~CVtUiZoom +// --------------------------------------------------------------------------- +// +CVtUiZoom::~CVtUiZoom() + { + __VTPRINTENTER( "CVtUiZoom.~" ) + __VTPRINTEXIT( "CVtUiZoom.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiZoom::RefreshL() + { + __VTPRINTENTER( "CVtUiZoom.RefreshL" ) + if ( State() == EActive ) + { + static_cast< CVtUiZoomPopup& >( Popup() ).RefreshL(); + } + __VTPRINTEXIT( "CVtUiZoom.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::StartL +// --------------------------------------------------------------------------- +// +void CVtUiZoom::StartL() + { + __VTPRINTENTER( "CVtUiZoom.StartL" ) + if ( State() == EActive ) + { + // need to refresh when already active to replenish the close timer + RefreshL(); + } + else + { + iFeatureManager.UiStates().SetIsFloatingToolbarVisible( ETrue ); + CVtUiSliderBase::StartL(); + iFeatureManager.UiStates().SetZoomModeOn( ETrue ); + } + __VTPRINTEXIT( "CVtUiZoom.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::Stop +// --------------------------------------------------------------------------- +// +void CVtUiZoom::Stop() + { + __VTPRINTENTER( "CVtUiZoom.Stop" ) + iFeatureManager.UiStates().SetZoomModeOn( EFalse ); + CVtUiSliderBase::Stop(); + __VTPRINTEXIT( "CVtUiZoom.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::ComponenStateChangedL() +// --------------------------------------------------------------------------- +// +void CVtUiZoom::ComponenStateChangedL() + { + __VTPRINTENTER( "CVtUiZoom.ComponenStateChangedL()" ) + // Close event received stop the feature + // If this was a block event then do not stop the feature + // Currently we can't separate block and stop events from component manager + if ( !iFeatureManager.UiStates().IsCaptureModeOn() ) + { + __VTPRINT( DEBUG_GEN, "CVtUiZoom.ComponenStateChangedL.Stop" ) + Stop(); + } + __VTPRINTEXIT( "CVtUiZoom.ComponenStateChangedL()" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::CVtUiZoom +// --------------------------------------------------------------------------- +// +CVtUiZoom::CVtUiZoom( CVtUiFeatureManager& aFeatureManager ) + : CVtUiSliderBase( aFeatureManager, EVtUiFeatureIdZoom ) + { + __VTPRINTENTER( "CVtUiZoom.CVtUiZoom" ) + __VTPRINTEXIT( "CVtUiZoom.CVtUiZoom" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoom::CVtUiZoom +// --------------------------------------------------------------------------- +// +void CVtUiZoom::ConstructL() + { + __VTPRINTENTER( "CVtUiZoom.ConstructL" ) + BaseConstructL(); + SetPopup( CVtUiZoomPopup::NewL( iFeatureManager ) ); + __VTPRINTEXIT( "CVtUiZoom.ConstructL" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/features/zoom/cvtuizoompopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/features/zoom/cvtuizoompopup.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2006 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: Zoom popup implementation. +* +*/ + + +#include +#include +#include "cvtuizoompopup.h" +#include "cvtuifeaturemanager.h" +#include "tVtuifeaturevariation.h" +#include "CVtUiAppUi.h" +#include "cvtengmodel.h" + +// Number of zoom steps +static const TInt KZoomStepCount = 10; + +// Minimum zoom factor value +static const TInt KMinZoomFactor = 0; + +// default time out time for zoom popup +const TInt KDefaultZoomTimeOutTime = 5; + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::NewL +// --------------------------------------------------------------------------- +// +CVtUiZoomPopup* CVtUiZoomPopup::NewL( CVtUiFeatureManager& + aFeatureManager ) + { + __VTPRINTENTER( "CVtUiZoomPopup.NewL" ) + CVtUiZoomPopup* self = + new ( ELeave ) CVtUiZoomPopup( aFeatureManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + __VTPRINTEXIT( "CVtUiZoomPopup.NewL" ) + return self; + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::~CVtUiZoomPopup +// --------------------------------------------------------------------------- +// +CVtUiZoomPopup::~CVtUiZoomPopup() + { + __VTPRINTENTER( "CVtUiZoomPopup.~" ) + __VTPRINTEXIT( "CVtUiZoomPopup.~" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::RefreshL +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::RefreshL() + { + __VTPRINTENTER( "CVtUiZoomPopup.RefreshL" ) + + UpdateAdjustRangeL(); + + iCurrent = CurrentZoomStep(); + if ( iCurrent < KMinZoomFactor ) + { + User::Leave( KErrArgument ); + } + SetValue( iCurrent ); + ShowPopupL(); + __VTPRINTEXIT( "CVtUiZoomPopup.RefreshL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::DoActivateL() +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::DoActivateL() + { + __VTPRINTENTER( "CVtUiZoomPopup.DoActivateL" ) + UpdateAdjustRangeL(); + CVtUiPopupBase::DoActivateL(); + // In order to refresh softkey. + iFeatureManager.AppUi().RefreshSoftkeysL(); + __VTPRINTEXIT( "CVtUiZoomPopup.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiZoomPopup::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ) + { + __VTPRINTENTER( "CVtUiZoomPopup.OfferKeyEventL" ) + TKeyResponse response( EKeyWasNotConsumed ); + // Don't handle other types here + if ( aCode != EEventKey ) + { + return response; + } + + if ( aEvent.iScanCode == EStdKeyUpArrow || + aEvent.iScanCode == EStdKeyDownArrow || + aEvent.iCode == EKeyZoomIn || + aEvent.iCode == EKeyZoomOut ) + { + __VTPRINT( DEBUG_GEN, "CVtUiZoomPopup.OfferKeyEventL zoom key" ) + TInt step( 1 ); + if ( aEvent.iScanCode == EStdKeyDownArrow || + aEvent.iCode == EKeyZoomOut ) + { + step = -step; + } + const TInt current( Value() ); + TInt value( current + step ); + value = Max( KMinZoomFactor, Min( value, KZoomStepCount ) ); + if ( value != current ) + { + __VTPRINT2( DEBUG_GEN, "CVtUiZoomPopup.OfferKeyEventL zoom = %d", + value ) + SetValue( value ); + iFeatureManager.AppUi().SetZoomFactorL( ScaledValue() ); + response = EKeyWasConsumed; + } + ShowPopupL(); + } + __VTPRINTEXITR( "CVtUiZoomPopup.OfferKeyEventL %d", response ) + return response; + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::HandleControlEventL +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::HandleControlEventL( CCoeControl* aControl, + TCoeEvent aEventType ) + { + __VTPRINTENTER( "CVtUiZoomPopup.HandleControlEventL" ) + CVtUiPopupBase::HandleControlEventL( aControl, aEventType ); + + if ( aEventType == EEventStateChanged ) + { + __VTPRINT2( DEBUG_GEN, "CVtUiZoomPopup.HandleControlEventL zoom = %d", ScaledValue() ) + + if ( CurrentZoomStep() != Value() ) + { + iFeatureManager.AppUi().SetZoomFactorL( ScaledValue() ); + } + } + + __VTPRINTEXIT( "CVtUiZoomPopup.HandleControlEventL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::CVtUiZoomPopup +// --------------------------------------------------------------------------- +// +CVtUiZoomPopup::CVtUiZoomPopup( CVtUiFeatureManager& aFeatureManager ) + : CVtUiPopupBase( aFeatureManager.ComponentManager(), + TVtUiBlockListBitField( + MVtUiComponent::EComponentIdDialer | + MVtUiComponent::EComponentIdToolbar | + MVtUiComponent::EComponentIdNumberEntry | + MVtUiComponent::EComponentIdVolume | + MVtUiComponent::EVComponentIdBrightness | + MVtUiComponent::EVComponentIdContrast + ), + EComponentIdZoom ), + iFeatureManager( aFeatureManager ), + iMedia( aFeatureManager.AppUi().Model().Media() ), + iCurrent( KErrNotReady ) + { + __VTPRINTENTER( "CVtUiZoomPopup.CVtUiZoomPopup" ) + __VTPRINTEXIT( "CVtUiZoomPopup.CVtUiZoomPopup" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::ConstructL() + { + __VTPRINTENTER( "CVtUiZoomPopup.ConstructL" ) + BaseConstructL(); + // Set slider type to percentage + SetValueType( EAknSliderValuePercentage ); + + // Set timeout + SetTimeOut( KDefaultZoomTimeOutTime ); + __VTPRINTEXIT( "CVtUiZoomPopup.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::UpdateAdjustRangeL +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::UpdateAdjustRangeL() + { + __VTPRINTENTER( "CVtUiZoomPopup.UpdateAdjustRangeL" ) + // Get max zoom step from engine + iMax = MaxZoomStep(); + // Set value range to visible slider control + // range 0-10 or 0-iMax if max < 0 + // stepcount = 10 or iMax if max < 10 + SetAdjustRange( KMinZoomFactor, Min( KZoomStepCount, iMax ), Min( KZoomStepCount, iMax ) ); + + // Set value range to baseclass + // range on e.g. 0-20 + SetMinAndMaxValues( KMinZoomFactor, iMax ); + + // Get current zoom step + iCurrent = CurrentZoomStep(); + + if ( iCurrent == KErrNotFound || iMax == KErrNotFound || iCurrent > iMax ) + { + User::Leave( KErrNotFound ); + } + // Set new value + SetValue( iCurrent ); + __VTPRINTEXIT( "CVtUiZoomPopup.UpdateAdjustRangeL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::CurrentZoomStep +// --------------------------------------------------------------------------- +// +TInt CVtUiZoomPopup::CurrentZoomStep() const + { + __VTPRINTENTER( "CVtUiZoomPopup.CurrentZoomStep" ) + TInt current( KMinZoomFactor ); + const TInt error( iMedia.GetCurrentZoomStep( current ) ); + current = ( error ? KErrNotFound : current ); + + // Value asked from the engine must be scaled. + // If the current asked value is 1 then the scaling formula in the + // popupbase doesn't round the value to 1 there fore value is + // initalized to 1. + TInt val = 1; + if ( current != 1 ) + { + val = SliderValueWithScaling( current ); + } + __VTPRINTEXITR( "CVtUiZoomPopup.CurrentZoomStep %d", val ) + return val; + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::MaxZoomStep +// --------------------------------------------------------------------------- +// +TInt CVtUiZoomPopup::MaxZoomStep() const + { + __VTPRINTENTER( "CVtUiZoomPopup.MaxZoomStep" ) + TInt max( KMinZoomFactor ); + const TInt error( iMedia.GetMaxZoomStep( max ) ); + max = ( error ? KErrNotFound : max ); + __VTPRINTEXITR( "CVtUiZoomPopup.MaxZoomStep %d", max ) + return max; + } + +// --------------------------------------------------------------------------- +// CVtUiZoomPopup::ScaleAndSetZoomFactorL +// --------------------------------------------------------------------------- +// +void CVtUiZoomPopup::ScaleAndSetZoomFactorL( TInt aValue ) + { + __VTPRINTENTER( "CVtUiZoomPopup.ScaleAndSetZoomFactorL" ) + const TInt value = aValue * MaxZoomStep() / 10; // 10 vakioksi count + 1 ei yhtä + iFeatureManager.AppUi().SetZoomFactorL( value ); + __VTPRINTEXITR( "CVtUiZoomPopup.ScaleAndSetZoomFactorL %d", value ) + } + diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/sliders/cvtuipopupbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/sliders/cvtuipopupbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,509 @@ +/* +* Copyright (c) 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: Base class for video telephone popups +* +*/ + + +#include +#include +#include +#include + +#include "cvtuipopupbase.h" +#include "mvtuicomponentmanager.h" +#include "mvtuicomponentstateobserver.h" +#include "VtUiPanic.h" +#include +#include +#include + +// default time out time for popup +const TInt KDefaultTimeOutTime = 2; + +// max value for slider is 100 (100%) +const TInt KMaxSliderValue = 100; + +// Implementation of TVtUiBaseComponentState + +// --------------------------------------------------------------------------- +// TVtUiBaseComponentState::TVtUiBaseComponentState +// --------------------------------------------------------------------------- +// +TVtUiBaseComponentState::TVtUiBaseComponentState( + MVtUiComponent& aComponent, TVtUiBlockListBitField aBitField ) : + TVtUiComponentState( aComponent, aBitField ) + { + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::~CVtUiPopupBase +// --------------------------------------------------------------------------- +// +CVtUiPopupBase::~CVtUiPopupBase() + { + __VTPRINTENTER( "CVtUiPopupBase.~CVtUiPopupBase" ) + if ( iPopup ) + { + iPopup->CloseVolumePopup(); + } + // unregister component change registration + iComponentManager.ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::EUnregister ); + delete iPopup; + __VTPRINTEXIT( "CVtUiPopupBase.~CVtUiPopupBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::ComponentId +// --------------------------------------------------------------------------- +// + MVtUiComponent::TComponentId CVtUiPopupBase::ComponentId() const + { + __VTPRINTENTER( "CVtUiPopupBase.ComponentId" ) + __VTPRINTEXIT( "CVtUiPopupBase.ComponentId" ) + return iComponentId; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::ComponentAsControl +// --------------------------------------------------------------------------- +// + CCoeControl* CVtUiPopupBase::ComponentAsControl() + { + __VTPRINTENTER( "CVtUiPopupBase.ComponentAsControl" ) + __VTPRINTEXIT( "CVtUiPopupBase.ComponentAsControl" ) + return NULL; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::DoActivateL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::DoActivateL() + { + __VTPRINTENTER( "CVtUiPopupBase.DoActivateL" ) + User::LeaveIfError( + iComponentManager.ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::ERegister ) ); + + User::LeaveIfError( iComponentManager.ChangeKeyEventRegistration( + *this, MVtUiComponentManager::ERegister ) ); + + ShowPopupL(); + __VTPRINTEXIT( "CVtUiPopupBase.DoActivateL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::DoDeactivateL() +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::DoDeactivateL() + { + __VTPRINTENTER( "CVtUiPopupBase.DoDeactivateL()" ) + iPopup->CloseVolumePopup(); + //notify observer that popup has been closed + if ( iCompStateObserver ) + { + iCompStateObserver->ComponenStateChangedL(); + } + // unregister resource change registration + iComponentManager.ChangeResourceChangeRegistration( + *this, MVtUiComponentManager::EUnregister ); + + iComponentManager.ChangeKeyEventRegistration( + *this, MVtUiComponentManager::EUnregister ); + __VTPRINTEXIT( "CVtUiPopupBase.DoDeactivateL()" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::HandleResourceChangeL() +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::HandleResourceChangeL( TInt aType ) + { + __VTPRINTENTER( "CVtUiPopupBase.HandleResourceChangeL()" ) + if ( aType == KEikDynamicLayoutVariantSwitch ) + { + iPopup->SetPosition( PopupPosition() ); + } + __VTPRINTEXIT( "CVtUiPopupBase.HandleResourceChangeL()" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::HandleControlEventL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::HandleControlEventL( CCoeControl* /*aControl*/, + TCoeEvent aEventType ) + { + __VTPRINTENTER( "CVtUiPopupBase.HandleControlEventL" ) + if ( aEventType == EEventStateChanged ) + { + // popup closed + if( !IsPopUpVisible() ) + { + ClosePopup(); + } + } + __VTPRINTEXIT( "CVtUiPopupBase.HandleControlEventL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CVtUiPopupBase::OfferKeyEventL( const TKeyEvent& aEvent, + TEventCode aCode ) + { + __VTPRINTENTER( "CVtUiPopupBase.OfferKeyEventL" ) + TKeyResponse response( EKeyWasNotConsumed ); + // Don't handle other types here + if ( aCode != EEventKey ) + { + return response; + } + + if ( aEvent.iScanCode == EStdKeyUpArrow || + aEvent.iScanCode == EStdKeyDownArrow ) + { + __VTPRINT( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL" ) + TInt step( 1 ); + if ( aEvent.iScanCode == EStdKeyDownArrow ) + { + step = -step; + } + + const TInt current( Value() ); + TInt value( current + step ); + + TInt maxValue; + TInt minValue; + iPopup->GetRange( minValue, maxValue ); + + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL iPopup minValue = %d", + minValue ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL iPopup maxValue = %d", + maxValue ) + + minValue = minValue / iScalingConstant; + value = Max( minValue, Min( value, iStepCount ) ); + if ( value != current ) + { + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OfferKeyEventL Volume value = %d", + value ) + SetValue( value ); + response = EKeyWasConsumed; + } + ShowPopupL(); + } + __VTPRINTEXITR( "CVtUiPopupBase.OfferKeyEventL %d", response ) + return response; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetObserver() +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetObserver( MVtUiComponentStateObserver& aCompStateObserver ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetObserver()" ) + iCompStateObserver = &aCompStateObserver; + __VTPRINTEXIT( "CVtUiPopupBase.SetObserver()" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetValueType() +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetValueType( TInt aValueType ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetValueType" ) + iPopup->SetValueType( aValueType ); + __VTPRINTEXIT( "CVtUiPopupBase.SetValueType" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetPermanenVisibility() +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetPermanenVisibility( TBool aPermanent ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetPermanenVisibility" ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase = %d", aPermanent ); + const TInt longPeriod( 86400 ); // 24 h + if ( aPermanent ) + { + iPopup->SetTimeOutAsSecond( longPeriod ); + iPopup->ClosePopupWhenTappedOutside( !aPermanent ); + } + else + { + iPopup->ClosePopupWhenTappedOutside( !aPermanent ); + iPopup->SetTimeOutAsSecond( iTimeOutTime ); + } + __VTPRINTEXIT( "CVtUiPopupBase.SetPermanenVisibility" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::CVtUiPopupBase +// --------------------------------------------------------------------------- +// +CVtUiPopupBase::CVtUiPopupBase( MVtUiComponentManager& aComponentManager, + TVtUiBlockListBitField aBitField, TComponentId aComponentId ) : + iComponentManager ( aComponentManager ), iComponentState( *this, aBitField ), + iComponentId( aComponentId ), iScalingConstant( 1 ) + { + __VTPRINTENTER( "CVtUiPopupBase.CVtUiPopupBase" ) + __VTPRINTEXIT( "CVtUiPopupBase.CVtUiPopupBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::BaseConstructL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::BaseConstructL() + { + __VTPRINTENTER( "CVtUiPopupBase.BaseConstructL" ) + iPopup = CAknVolumePopup::NewL( NULL, ETrue ); + iPopup->SetObserver( this ); + + // Initialized to 2 seconds + iTimeOutTime = KDefaultTimeOutTime; + + // set position + iPopup->SetPosition( PopupPosition() ); + + User::LeaveIfError( + iComponentManager.ChangeComponentRegistration( + iComponentState, MVtUiComponentManager::ERegister ) ); + __VTPRINTEXIT( "CVtUiPopupBase.BaseConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::ShowPopupL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::ShowPopupL() + { + __VTPRINTENTER( "CVtUiPopupBase.ShowPopupL" ) + iPopup->ShowVolumePopupL(); + __VTPRINTEXIT( "CVtUiPopupBase.ShowPopupL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::OpenPopupL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::OpenPopupL() + { + __VTPRINTENTER( "CVtUiPopupBase.OpenPopupL" ) + TRAPD( error, + iComponentManager.RequestActivationL( ComponentId() ) ); + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.OpenPopupL reqAct=%d", error ); + User::LeaveIfError( error ); + __VTPRINTEXIT( "CVtUiPopupBase.OpenPopupL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::ClosePopup +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::ClosePopup() + { + __VTPRINTENTER( "CVtUiPopupBase.ClosePopup" ) + TInt error( KErrNone ); + TRAP( error, iComponentManager.DeActivateComponentL( ComponentId() ) ); + __VTPRINTEXITR( "CVtUiPopupBase.ClosePopup %d", error ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetTimeOut +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetTimeOut( TInt aTime ) + { + iTimeOutTime = aTime; + iPopup->SetTimeOutAsSecond( aTime ); + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::IsPopUpVisible +// --------------------------------------------------------------------------- +// +TBool CVtUiPopupBase::IsPopUpVisible() + { + return iPopup->IsVisible(); + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::PopupPosition +// --------------------------------------------------------------------------- +// +TPoint CVtUiPopupBase::PopupPosition() const + { + __VTPRINTENTER( "CVtUiPopupBase.PopupPosition" ) + TRect mainPaneRect; + TAknWindowLineLayout popupLineLayout; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + popupLineLayout = + AknLayoutScalable_Apps::aid_placing_vt_slider_lsc().LayoutLine(); + } + else + { + popupLineLayout = + AknLayoutScalable_Apps::aid_placing_vt_slider_prt().LayoutLine(); + } + + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( mainPaneRect, popupLineLayout ); + __VTPRINTEXIT( "CVtUiPopupBase.PopupPosition" ) + return layoutRect.Rect().iTl; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetPopupValue +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetPopupValue( TInt aValue ) + { + iPopup->SetValue( aValue * iScalingConstant ); + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetAdjustRange +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetAdjustRange( TInt aMinValue, TInt aMaxValue, + TInt aStepCount ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetAdjustRange" ) + __ASSERT_ALWAYS( aMinValue <= aMaxValue && + ( aMaxValue - aMinValue ) >= aStepCount && + aStepCount > 0, VtUiPanic::Panic( EVtUiPanicOutOfRange ) ); + + // store stepcount + iStepCount = aStepCount; + + // Aknvolumepopup does not do any scaling i.e max value + // must be 100 or otherwise the per cent value is not shown right. + // Scaling constant is used to multiple max value to be 100. + iScalingConstant = KMaxSliderValue / aMaxValue; + iPopup->SetRange( aMinValue, KMaxSliderValue ); + TInt stepSize = KMaxSliderValue / aStepCount; + iPopup->SetStepSize( stepSize ); + __VTPRINTEXIT( "CVtUiPopupBase.SetAdjustRange" ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetValue +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetValue( TInt aValue ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetValue" ) + SetPopupValue( aValue ); + __VTPRINTEXITR( "CVtUiPopupBase.SetValue %d", Value() ) + } + + // --------------------------------------------------------------------------- +// CVtUiPopupBase::ScaleAndSetValue +// --------------------------------------------------------------------------- +// + void CVtUiPopupBase::ScaleAndSetValue( TInt aValue ) + { + __VTPRINTENTER( "CVtUiPopupBase.ScaleAndSetValue" ) + SetPopupValue( SliderValueWithScaling( aValue ) ); + __VTPRINTEXITR( "CVtUiPopupBase.ScaleAndSetValue %d", Value() ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::ScaledValue +// --------------------------------------------------------------------------- +// + TInt CVtUiPopupBase::ScaledValue() const + { + __VTPRINTENTER( "CVtUiPopupBase.ScaledValue" ) + TInt value = Value() * ( iMax-iMin ) / iStepCount + iMin; + __VTPRINTEXITR( "CVtUiPopupBase.ScaledValue %d", value ) + return value; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SliderValueWithScaling +// --------------------------------------------------------------------------- +// + TInt CVtUiPopupBase::SliderValueWithScaling( TInt aValue) const + { + __VTPRINTENTER( "CVtUiPopupBase.SliderValueWithScaling" ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.aValue=%d", aValue ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.iStepCount=%d", iStepCount ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase.iMax=%d", iMax ) + + if ( iMax == aValue) + { + return iStepCount; + } + else if ( iMin == aValue ) + { + return 0; + } + TInt modValue = iStepCount * ( aValue - iMin) % ( iMax - iMin ); + TInt value = iStepCount * ( aValue - iMin) / ( iMax - iMin ); + + if ( modValue > ( iMax - iMin ) / 2 ) + { + value++; + } + + __VTPRINTEXITR( "CVtUiPopupBase.SliderValueWithScaling %d", value ) + return value; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::SetMinAndMaxValues +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::SetMinAndMaxValues( TInt aMin, TInt aMax ) + { + __VTPRINTENTER( "CVtUiPopupBase.SetMaxAndMinValues" ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase..aMax=%d", aMax ) + __VTPRINT2( DEBUG_GEN, "CVtUiPopupBase..aMinV=%d", aMin ) + iMax = aMax; + iMin = aMin; + __VTPRINTEXIT( "CVtUiPopupBase.SetMaxAndMinValues " ) + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::Value +// --------------------------------------------------------------------------- +// +TInt CVtUiPopupBase::Value() const + { + __VTPRINTENTER( "CVtUiPopupBase.Value" ) + __VTPRINTEXITR( "CVtUiPopupBase.Value %d", iPopup->Value() ) + return iPopup->Value() / iScalingConstant; + } + +// --------------------------------------------------------------------------- +// CVtUiPopupBase::UpdatePopupL +// --------------------------------------------------------------------------- +// +void CVtUiPopupBase::UpdatePopupL() + { + __VTPRINTENTER( "CVtUiPopupBase.UpdatePopupL" ) + __VTPRINTEXIT( "CVtUiPopupBase.UpdatePopupL " ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/sliders/cvtuisliderbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/sliders/cvtuisliderbase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 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: Base class implementation for video telephone sliders +* +*/ + + +#include + +#include "cvtuisliderbase.h" +#include "cvtuipopupbase.h" +#include "cvtuifeaturemanager.h" +#include "mvtuicomponentmanager.h" + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::~CVtUiSliderBase +// --------------------------------------------------------------------------- +// +CVtUiSliderBase::~CVtUiSliderBase() + { + __VTPRINTENTER( "CVtUiSliderBase.~CVtUiSliderBase" ) + delete iPopup; + __VTPRINTEXIT( "CVtUiSliderBase.~CVtUiSliderBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::UpdateSlider +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::UpdateSlider() + { + __VTPRINTENTER( "CVtUiSliderBase.UpdateSlider" ) + + iPopup->UpdatePopupL(); + + __VTPRINTEXIT( "CVtUiSliderBase.UpdateSlider" ) + } +// --------------------------------------------------------------------------- +// CVtUiSliderBase::StartL +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::StartL() + { + __VTPRINTENTER( "CVtUiSliderBase.StartL" ) + if ( iFeatureState == MVtUiFeature::EReady ) + { + iFeatureManager.ComponentManager(). + RequestActivationL( iPopup->ComponentId() ); + // set state + iFeatureState = MVtUiFeature::EActive; + } + __VTPRINTEXIT( "CVtUiSliderBase.StartL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::Stop +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::Stop() + { + __VTPRINTENTER( "CVtUiSliderBase.Stop" ) + TRAP_IGNORE( + { + if ( iFeatureState == MVtUiFeature::EActive ) + { + // set state + iFeatureState = MVtUiFeature::EReady; + iFeatureManager.ComponentManager(). + DeActivateComponentL( iPopup->ComponentId() ); + } + } ); + __VTPRINTEXIT( "CVtUiSliderBase.Stop" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::InitFeatureL +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::InitFeatureL() + { + __VTPRINTENTER( "CVtUiSliderBase.InitFeatureL" ) + iFeatureState = EReady; + __VTPRINTEXIT( "CVtUiSliderBase.InitFeatureL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::ComponenStateChangedL() +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::ComponenStateChangedL() + { + __VTPRINTENTER( "CVtUiSliderBase.ComponenStateChangedL()" ) + // Close event received stop the feature + Stop(); + __VTPRINTEXIT( "CVtUiSliderBase.ComponenStateChangedL()" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::SetPermanenVisibility() +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::SetPermanenVisibility( TBool aPermanent ) + { + if ( iPopup ) + { + iPopup->SetPermanenVisibility( aPermanent ); + } + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::CVtUiSliderBase +// --------------------------------------------------------------------------- +// +CVtUiSliderBase::CVtUiSliderBase( CVtUiFeatureManager& aFeatureManager, + TVtUiFeatureId aFeatureId ) : CVtUiFeatureBase( + aFeatureId, aFeatureManager ) + { + __VTPRINTENTER( "CVtUiSliderBase.CVtUiSliderBase" ) + __VTPRINTEXIT( "CVtUiSliderBase.CVtUiSliderBase" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::ConstructL +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::ConstructL() + { + __VTPRINTENTER( "CVtUiSliderBase.ConstructL" ) + BaseConstructL(); + __VTPRINTEXIT( "CVtUiSliderBase.ConstructL" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::SetPopup +// --------------------------------------------------------------------------- +// +void CVtUiSliderBase::SetPopup( CVtUiPopupBase* aPopup ) + { + __VTPRINTENTER( "CVtUiSliderBase.SetPopup" ) + iPopup = aPopup; + if ( iPopup ) + { + iPopup->SetObserver( *this ); + } + __VTPRINTEXIT( "CVtUiSliderBase.SetPopup" ) + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::SetPopup +// --------------------------------------------------------------------------- +// +CVtUiPopupBase& CVtUiSliderBase::Popup() + { + return *iPopup; + } + +// --------------------------------------------------------------------------- +// CVtUiSliderBase::SetPopup +// --------------------------------------------------------------------------- +// +const CVtUiPopupBase& CVtUiSliderBase::Popup() const + { + return *iPopup; + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/tvtuiappstatebase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/tvtuiappstatebase.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,399 @@ +/* +* Copyright (c) 2007 - 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" +* 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: base class for application states +* +*/ + + +#include "tvtuiappstates.h" +#include "videotelui.hrh" +#include "tvtuistates.h" +#include "cvtuiappshutter.h" +#include "mvtuistatecontext.h" +#include +#include +#include +#include +#include +#include +#include +#include + +// By default call ending command is allowed to send to call handling. + +// Initially no shutdown request +TBool TVtUiAppStateBase::iShutdownRequested = EFalse; + +// ----------------------------------------------------------------------------- +// c++ constructor +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TVtUiAppStateBase( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ) : iCtx(aCtx), iUiStates( aUiStates ) + { + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::~TVtUiAppStateBase() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::AppUiStartupPhase1DoneL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::AppUiStartupPhase1DoneL() + { + // no default behavior + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::AppUiStartupPhase2DoneL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::AppUiStartupPhase2DoneL() + { + // no default behavior + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::ShutdownDoneL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::ShutdownDoneL() + { + // no default behavior + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +TBool TVtUiAppStateBase::HandleForegroundChangedL( + const TBool /*aIsForegroung*/ ) + { + // no default behavior + return EFalse; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::PreHandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +TBool TVtUiAppStateBase::PreHandleForegroundChangedL( + const TBool /*aIsForegroung*/ ) + { + // no default behavior + return EFalse; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::StartDtmfTone +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::StartDtmfTone( const TChar& /*aTone*/ ) + { + // no default behavior + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::StopDtmfTone +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::StopDtmfTone() + { + // no default behavior + } + + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::SetInitialStateL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::SetInitialStateL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "TVtUiAppStateBase.SetInitialState" ) + TVtUiAppStateBase* initialState = + TVtUiStateStarting::InstanceL( aCtx, aUiStates ); + aCtx.ChangeState( initialState ); + initialState->OpenL(); + __VTPRINTEXIT( "TVtUiAppStateBase.SetInitialState" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::AppUiStartupFailedL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::AppUiStartupFailedL() + { + __VTPRINTENTER( "TVtUiAppStateBase.AppUiStartupFailedL" ) + // Shutdown + ChangeStateL( *TVtUiStateResetting::InstanceL( iCtx, iUiStates ) ); + __VTPRINTEXIT( "TVtUiAppStateBase.AppUiStartupFailedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::OpenL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::OpenL() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::Close +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::Close() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::ChangeStateL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::ChangeStateL( TVtUiAppStateBase& aNewState ) + { + __VTPRINTENTER( "TVtUiAppStateBase.ChangeStateL" ) + + // Check for transition to already active state. + TVtUiAppStateBase* state = &aNewState; + if ( state == this ) + { + __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", 0 ) + return; + } + const TVtEngCommandId pending = + iCtx.Model().CommandHandler().PendingCommand(); + if ( pending != KVtEngCommandNone && + state == TVtUiStateResetting::InstanceL( iCtx, iUiStates ) ) + { + // delay shutdown until engine command completes + __VTPRINT2( DEBUG_GEN, "TVtUiAppStateBase.ChangeStateL, pengind command is: %d", pending ); + TVtUiAppStateBase::iShutdownRequested = ETrue; + + if ( pending == KVtEngInitializeShareImage ) + { + iCtx.Model().CommandHandler().CancelCommand( pending ); + } + + __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", KErrNotReady ) + return; + } + __VTPRINT( DEBUG_GEN, + " TVtUiAppStateBase.ChangeStateL !! STATE TRANSITION !!" ) + iCtx.ChangeState( &aNewState ); + Close(); + // perform entry action for new state + aNewState.OpenL(); + __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", 1 ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::CleanupResetPushL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::CleanupResetPushL() + { + // Shutdown if leave occurs in critical ops. + CleanupStack::PushL( + TCleanupItem( TransitionToReset, this ) ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::TransitionToReset +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::TransitionToReset( TAny* aAny ) + { + TVtUiAppStateBase* state = reinterpret_cast< TVtUiAppStateBase* >( aAny ); + TRAP_IGNORE( state->ChangeStateL( *TVtUiStateResetting::InstanceL( + state->iCtx, state->iUiStates ) ) ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleVTCommandPerformedL( + TVtEngCommandId /*aCommand*/, + const TInt /*aError*/ ) + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleVTCommandPerformedL" ) + // By default all UI is allowed to handle all command completions. + TEventResponse handled = EEventNotHandled; + + // check if shutdown requested while command was pending + const TVtEngCommandId pending = iCtx.Model().CommandHandler().PendingCommand(); + if ( pending == KVtEngCommandNone && + TVtUiAppStateBase::iShutdownRequested ) + { + __VTPRINT( DEBUG_GEN, "Handling delayed shutdown" ); + ChangeStateL( *TVtUiStateResetting::InstanceL( + iCtx, iUiStates ) ); + } + __VTPRINTEXIT( "TVtUiAppStateBase.HandleVTCommandPerformedL" ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleVtEventL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleVtEventL( + const TInt aEvent ) + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleVtEventL" ) + TEventResponse handled = EEventHandled; + switch ( aEvent ) + { + case KVtEngDeviceLockOn: + case KVtEngDeviceLockOff: + HandleDeviceLockEventL( aEvent == KVtEngDeviceLockOn ); + break; + case KVtEngRemoteDisconnect: + /** Don't allow sending of end active call command to call handling + * because requesting disconnect from the network after NW originated + * termination violates standards. + */ + break; + default: + handled = EEventNotHandled; + break; + } + __VTPRINTEXIT( "TVtUiAppStateBase.HandleVtEventL" ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleCommandL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleCommandL( + const TInt /*aCommand*/ ) + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleCommandL" ) + TEventResponse handled = EEventNotHandled; + __VTPRINTEXITR( "TVtUiAppStateBase.HandleCommandL %d", handled ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleLayoutChangedL +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::HandleLayoutChangedL( ) + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleLayoutChangedL" ) + // By default only indicate that layout change needs to be handled. + iUiStates.SetLayoutChangeNeeded( ETrue ); + __VTPRINTEXIT( "TVtUiAppStateBase.HandleLayoutChangedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleShutdownReady +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::HandleShutdownReady() + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleShutdownReady" ) + // forwarded to AppUi which handles UI framework exit + iCtx.HandleShutdownReady(); + iCtx.ChangeState( NULL ); + // deletes current state + Close(); + __VTPRINTEXIT( "TVtUiAppStateBase.HandleShutdownReady" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::HandleDeviceLockEventL +// +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::HandleDeviceLockEventL( const TBool aDeviceIsLocked ) + { + __VTPRINTENTER( "TVtUiAppStateBase.HandleDeviceLockEventL" ) + iUiStates.SetDeviceLockOn( aDeviceIsLocked ); + if ( aDeviceIsLocked ) + { + iCtx.ChangeApplicationFocus( EFalse ); + } + __VTPRINTEXITR( "TVtUiAppStateBase.HandleDeviceLockEventL lock state=%d", + aDeviceIsLocked ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::CheckEndActiveCallL +// ----------------------------------------------------------------------------- +// +TBool TVtUiAppStateBase::CheckEndActiveCallL() + { + __VTPRINTENTER( "TVtUiAppStateBase.CheckEndActiveCallL" ) + const MVtEngSessionInfo::TSessionState state = SessionState( EFalse ); + TBool shutdownStarted( EFalse ); + if ( state == MVtEngSessionInfo::EIdle ) + { + __VTPRINT( DEBUG_GEN, "VtUi.Release bearer" ) + // h.245 session is ended + ChangeStateL( *TVtUiStateResetting::InstanceL( iCtx, iUiStates ) ); + shutdownStarted = ETrue; + } + __VTPRINTEXITR( "TVtUiAppStateBase.CheckEndActiveCallL %d", + shutdownStarted ) + return shutdownStarted; + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::SessionState +// ----------------------------------------------------------------------------- +// +MVtEngSessionInfo::TSessionState TVtUiAppStateBase::SessionState( + const TBool aUpdate ) const + { + const CVtEngModel& model = iCtx.Model(); + const MVtEngSessionInfo& session = model.Session(); + return session.State( aUpdate ); + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::SetLightsState +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::SetLightsState( const TBool aOn ) + { + __VTPRINTENTER( "TVtUiAppStateBase.SetLightsState" ) + const TInt value = aOn ? EForcedLightsOn : EForcedLightsOff; + RProperty::Set( + KPSUidCoreApplicationUIs, + KLightsVTForcedLightsOn, + value ); + __VTPRINTEXIT( "TVtUiAppStateBase.SetLightsState" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiAppStateBase::SetExecState +// ----------------------------------------------------------------------------- +// +void TVtUiAppStateBase::SetExecState( const TVtUiStates::TVtUiExecState aState ) + { + __VTPRINTENTER( "TVtUiAppStateBase.SetExecState" ) + iUiStates.SetExecState( aState ); + __VTPRINTEXITR( "TVtUiAppStateBase.SetExecState %d", aState ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/tvtuistateresetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/tvtuistateresetting.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,243 @@ +/* +* Copyright (c) 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: waiting details application state +* +*/ + + +#include "tvtuistates.h" +#include "tvtuiappstates.h" +#include "mvtuistatecontext.h" +#include "cvtuiappshutter.h" +#include +#include + +TVtUiStateResetting* TVtUiStateResetting::iInstance = NULL; + +// c++ constructor +TVtUiStateResetting::TVtUiStateResetting( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates, + const TVtEngCommandId aCommand ) + : TVtUiAppStateBase( aCtx, aUiStates ), + iCommand( aCommand ) + { + __VTPRINT2( DEBUG_GEN, "TVtUiStateResetting.ctr iCommand=%d", iCommand ) + } + +// Destructor +TVtUiStateResetting::~TVtUiStateResetting() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting:: +// ----------------------------------------------------------------------------- +// +TVtUiStateResetting* TVtUiStateResetting::InstanceL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates, + const TVtEngCommandId aCommand ) + { + __VTPRINTENTER( "TVtUiStateResetting.InstanceL" ) + if ( iInstance == NULL ) + { + iInstance = new ( ELeave ) TVtUiStateResetting( + aCtx, aUiStates, aCommand ); + } + else if ( aCommand != KVtEngCommandNone ) + { // if call ending is UI originated, command is given + iInstance->iCommand = aCommand; + __VTPRINT2( DEBUG_GEN, "TVtUiStateResetting.InstanceL iCommand=%d", + iInstance->iCommand ) + } + __VTPRINTEXIT( "TVtUiStateResetting.InstanceL" ) + return iInstance; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::ShutdownDoneL +// AppUi has finished its own shutdown steps. Notify app shutter that it may +// proceed. +// +// ----------------------------------------------------------------------------- +// +void TVtUiStateResetting::ShutdownDoneL() + { + __VTPRINTENTER( "TVtUiStateResetting.ShutdownDone" ) + CVtUiAppShutter* shutter = CVtUiAppShutter::InstanceL( *this ); + if ( shutter ) + { + shutter->StartShutdown(); + } + __VTPRINTEXIT( "TVtUiStateResetting.ShutdownDone" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::AppUiStartupFailedL +// ----------------------------------------------------------------------------- +// +void TVtUiStateResetting::AppUiStartupFailedL() + { + __VTPRINTENTER( "TVtUiStateResetting.AppUiStartupFailedL" ) + // no-op (overrides default behavior) + __VTPRINTEXIT( "TVtUiStateResetting.AppUiStartupFailedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::HandleVTCommandPerformedL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateResetting::HandleVTCommandPerformedL + ( + TVtEngCommandId aCommand, + const TInt /*aError*/ ) + { + __VTPRINTENTER( "TVtUiStateResetting.HandleVTCommandPerformedL" ) + // By default responses to commands are ignored while resetting + TEventResponse handled = EEventHandled; + switch ( aCommand ) + { + case KVtEngResetEngine: + // Allow UI to process reset command response + handled = EEventNotHandled; + break; + case KVtEngTerminateSession: + case KVtEngSwitchToVoice: + // + iCtx.ShutdownL(); + break; + default: + break; + } + __VTPRINTEXIT( "TVtUiStateResetting.HandleVTCommandPerformedL" ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::HandleVtEventL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateResetting::HandleVtEventL( + const TInt aEvent ) + { + __VTPRINTENTER( "TVtUiStateResetting.HandleVtEventL" ) + TEventResponse handled = EEventHandled; + switch ( aEvent ) + { + // While resetting appUi should not handle these events. + case KVtEngSourceChanged: + case KVtEngCameraChanged: + case KVtEngSourceCapsChanged: + case KVtEngSessionStateChanged: + case KVtEngDurationSettingChanged: + case KVtEngAudioOutputVolumeChanged: + case KVtEngAudioRoutingAvailabilityChanged: + case KVtEngAudioRoutingChanged: + case KVtEngAudioMuted: + case KVtEngAudioUnmuted: + case KVtEngRemoteVideoStopped: + case KVtEngSessionWaitingCallActive: + case KVtEngSessionWaitingCallInactive: + break; + default: + // allow appUi to handle other events + handled = EEventNotHandled; + break; + } + __VTPRINTEXIT( "TVtUiStateResetting.HandleVtEventL" ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::HandleCommandL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateResetting::HandleCommandL( + const TInt /*aCommand*/ ) + { + __VTPRINTENTER( "TVtUiStateResetting.HandleCommandL" ) + /* All commands ignored while resetting. CAknAppUi::Exit() is called + when shutdown is completed with asistance of CVtUiAppShutter */ + __VTPRINTEXIT( "TVtUiStateResetting.HandleCommandL" ) + return EEventHandled; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::HandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +TBool TVtUiStateResetting::HandleForegroundChangedL( + const TBool /*aIsForeground*/ ) + { + __VTPRINTENTER( "TVtUiStateResetting.HandleForegroundChangedL" ) + __VTPRINTEXIT( "TVtUiStateResetting.HandleForegroundChangedL" ) + // not on "foreground" while resetting + return EFalse; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::HandleLayoutChangedL +// ----------------------------------------------------------------------------- +// +void TVtUiStateResetting::HandleLayoutChangedL() + { + __VTPRINTENTER( "TVtUiStateResetting.HandleLayoutChangedL" ) + // no-op (overrides default behavior) + __VTPRINTEXIT( "TVtUiStateResetting.HandleLayoutChangedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::OpenL +// ----------------------------------------------------------------------------- +// +void TVtUiStateResetting::OpenL() + { + __VTPRINTENTER( "TVtUiStateResetting.OpenL" ) + SetExecState( TVtUiStates::EExecStateResetting ); + iCtx.StopDtmfTone(); + iCtx.ChangeApplicationFocus( EFalse ); + + if ( iCommand != KVtEngCommandNone ) + { + // Command is either KVtEngTerminateSession or KVtEngSwitchToVoice + // Need to wait for callback before ShutdownL can be called on context. + iCtx.DoExecuteCmdL( iCommand, NULL ); + } + else + { + // This branch is executed when resetting state is opened due + // to emergency call or state change to one causing shutdown. + // No need to wait for any callbacks (emergency call callback + // handled by CVtUiAppShutter). + iCtx.ShutdownL(); + } + __VTPRINTEXIT( "TVtUiStateResetting.OpenL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateResetting::Close +// ----------------------------------------------------------------------------- +// +void TVtUiStateResetting::Close() + { + __VTPRINTENTER( "TVtUiStateResetting.Close" ) + SetExecState( TVtUiStates::EExecStateFinalized ); + if ( TVtUiStateResetting::iInstance ) + { + delete TVtUiStateResetting::iInstance; + TVtUiStateResetting::iInstance = NULL; + } + __VTPRINTEXIT( "TVtUiStateResetting.Close" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/tvtuistaterunning.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/tvtuistaterunning.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,303 @@ +/* +* Copyright (c) 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: running (normal operation) application state +* +*/ + + +#include "tvtuistates.h" +#include "tvtuiappstates.h" +#include "mvtuistatecontext.h" +#include "cvtuiappshutter.h" +#include "videotelui.hrh" +#include +#include +#include +#include +#include + +TVtUiStateRunning* TVtUiStateRunning::iInstance = NULL; + +// c++ constructor +TVtUiStateRunning::TVtUiStateRunning( + MVtUiStateContext& aCtx, TVtUiStates& aUiStates ) + : TVtUiAppStateBase( aCtx, aUiStates ), iCreateVoiceCallDlg( NULL ) + { + } + +// Destructor +TVtUiStateRunning::~TVtUiStateRunning() + { + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::InstanceL +// ----------------------------------------------------------------------------- +// +TVtUiStateRunning * TVtUiStateRunning::InstanceL( + MVtUiStateContext& aCtx, + TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "UiStateRunning.InstanceL" ) + if ( iInstance == NULL ) + iInstance = new ( ELeave ) TVtUiStateRunning( aCtx, aUiStates ); + __VTPRINTEXIT( "UiStateRunning.InstanceL" ) + return iInstance; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::HandleVtEventL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateRunning::HandleVtEventL( + const TInt aEvent ) + { + __VTPRINTENTER( "UiStateRunning.HandleVtEventL" ) + // let TVtUiAppStateBase base class do common tasks + TEventResponse handled = TVtUiAppStateBase::HandleVtEventL( aEvent ); + switch ( aEvent ) + { + case KVtEngDeviceLockOn: + case KVtEngDeviceLockOff: + TVtUiAppStateBase::HandleVtEventL( aEvent ); + if ( aEvent == KVtEngDeviceLockOff ) + { + iCtx.ChangeApplicationFocus( ETrue ); + } + break; + case KVtEngSessionStateChanged: + if ( CheckEndActiveCallL() ) + { + // At this point shutdown is in progress. Don't allow + // appUi to do actions due to this event. + handled = EEventHandled; + } + break; + default: + break; + } + __VTPRINTEXIT( "UiStateRunning.HandleVtEventL" ) + return handled; + } + + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::HandleCommandL +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateRunning::HandleCommandL( + const TInt aCommand ) + { + __VTPRINTENTER( "UiStateRunning.HandleCommandL" ) + /** By default all commands are enabled by running state. + * Other details command validations are done elsewhere + */ + TEventResponse handled = EEventHandled; + switch ( aCommand ) + { + case EVtUiCmdEndActiveCall: + ShutdownWithEngineCommandL( KVtEngTerminateSession ); + break; + case EVtUiCmdCreateVoice: + CreateVoiceCallL(); + break; + case EVtUiCmdDialEmergency: + // Attempt emergency call. Note that emergency number check is done + // after calling DialEmergencyCallL and if supplied number is not + // emergency leave occurs. + TRAP_IGNORE( DialEmergencyCallL() ); + break; + default: + handled = TVtUiAppStateBase::HandleCommandL( aCommand ); + break; + } + __VTPRINTEXITR( "UiStateRunning.HandleCommandL %d", handled ) + return handled; + } + + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::HandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +TBool TVtUiStateRunning::HandleForegroundChangedL( const TBool aIsForeground ) + { + __VTPRINTENTER( "UiStateRunning.HandleForegroundChangedL" ) + + // Closes create voice call dialog if it is open + delete iCreateVoiceCallDlg; iCreateVoiceCallDlg = NULL; + + SetLightsState( aIsForeground ); + + iCtx.RefreshL( MVtUiStateContext::ENaviPane ); + + TBool handleAsForeground( aIsForeground ); + TPtrC8 params( reinterpret_cast< TUint8* >( &handleAsForeground ), + sizeof( TBool ) ); + iCtx.DoExecuteCmdL( KVtEngSetUIForeground, ¶ms ); + __VTPRINTEXIT( "UiStateRunning.HandleForegroundChangedL" ) + return handleAsForeground; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::PreHandleForegroundChangedL +// ----------------------------------------------------------------------------- +// +TBool TVtUiStateRunning::PreHandleForegroundChangedL( const TBool aIsForeground ) + { + __VTPRINTENTER( "UiStateRunning.PreHandleForegroundChangedL" ) + TBool handleAsForeground( aIsForeground ); + TPtrC8 params( reinterpret_cast< TUint8* >( &handleAsForeground ), sizeof( TBool ) ); + iCtx.DoExecuteCmdL( KVtEngSetUIForeground, ¶ms ); + __VTPRINTEXIT( "UiStateRunning.PreHandleForegroundChangedL" ) + return handleAsForeground; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::HandleLayoutChangedL +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::HandleLayoutChangedL( ) + { + __VTPRINTENTER( "UiStateRunning.HandleLayoutChangedL" ) + iUiStates.SetLayoutChangeNeeded( EFalse ); + iCtx.DoHandleLayoutChangedL(); + __VTPRINTEXIT( "UiStateRunning.HandleLayoutChangedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::StartDtmfTone +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::StartDtmfTone( const TChar& aTone ) + { + iCtx.StartDtmfTone( aTone ); + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::StopDtmfTone +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::StopDtmfTone() + { + iCtx.StopDtmfTone(); + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::CreateVoiceCallL +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::CreateVoiceCallL() + { + __VTPRINTENTER( "TVtUiStateRunning.CreateVoiceCallL" ) + HBufC* prompt = + StringLoader::LoadLC( R_VIDEOTELUI_QTN_QUERY_CREATE_VOICE_CALL ); + + // Create and initialize query dialog + CAknQueryDialog* createVoiceCallDlg = CAknQueryDialog::NewL(); + CleanupStack::PushL( createVoiceCallDlg ); + createVoiceCallDlg->SetPromptL( *prompt ); + CleanupStack::Pop(); // createVoiceCallDlg + + iCreateVoiceCallDlg = createVoiceCallDlg; + TInt result( KErrNone ); + TRAPD( error, result = iCreateVoiceCallDlg->ExecuteLD( + R_VIDEOTELUI_CREATE_VOICE_QUERY ) ); + // Just set to NULL because ExecuteLD() deletes instance + iCreateVoiceCallDlg = NULL; + // Leave if ExecuteLD() left + User::LeaveIfError( error ); + CleanupStack::PopAndDestroy( ); // prompt + if ( result ) + { + //user answered yes + iCtx.DoExecuteCmdL( KVtEngSwitchToVoice, NULL ); + } + __VTPRINTEXITR( "TVtUiAppStateBase.CreateVoiceCallL %d", result ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::ShutdownWithEngineCommandL +// Starts shutdown with command to engine. +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::ShutdownWithEngineCommandL( const TInt aCommand ) + { + __VTPRINTENTER( + "TVtUiStateRunning.ShutdownWithEngineCommandL" ) + TVtUiAppStateBase* resetState = + TVtUiStateResetting::InstanceL( iCtx, iUiStates, aCommand ); + CVtUiAppShutter* shutter = CVtUiAppShutter::InstanceL( *resetState ); + if ( shutter ) + { + // open resetting state, handles engine command request/reply + ChangeStateL( *resetState ); +#ifdef _DEBUG + __VTPRINTEXIT( + "TVtUiStateRunning.ShutdownWithEngineCommandL 1" ) + return; +#endif + } + + __VTPRINTEXIT( + "TVtUiStateRunning.ShutdownWithEngineCommandL 0" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::DialEmergencyCallL +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::DialEmergencyCallL() + { + __VTPRINTENTER( + "TVtUiStateRunning.DialEmergencyCallL" ) + TVtUiAppStateBase* resetState = + TVtUiStateResetting::InstanceL( iCtx, iUiStates ); + CVtUiAppShutter* shutter = CVtUiAppShutter::InstanceL( *resetState ); + if ( shutter ) + { + // Make emergency call and proceed when 1) state has given permission + // and 2) callback from emergency call api is received + shutter->ShutdownWithEmergencyCallL( iCtx ); + ChangeStateL( *resetState ); + } + __VTPRINTEXIT( "TVtUiStateRunning.DialEmergencyCallL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::OpenL +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::OpenL() + { + __VTPRINTENTER( "TVtUiStateRunning.OpenL" ) + SetExecState( TVtUiStates::EExecStateRunning ); + iCtx.RefreshStatesL(); + __VTPRINTEXIT( "TVtUiStateRunning.OpenL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateRunning::Close +// ----------------------------------------------------------------------------- +// +void TVtUiStateRunning::Close() + { + __VTPRINTENTER( "TVtUiStateRunning.Close" ) + if ( TVtUiStateRunning::iInstance ) + { + delete TVtUiStateRunning::iInstance; + TVtUiStateRunning::iInstance = NULL; + } + __VTPRINTEXIT( "TVtUiStateRunning.Close" ) + } diff -r 000000000000 -r ed9695c8bcbe vtuis/videotelui/src/tvtuistatestarting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtuis/videotelui/src/tvtuistatestarting.cpp Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,310 @@ +/* +* Copyright (c) 2007 - 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" +* 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: waiting details application state +* +*/ + + +#include "tvtuistates.h" +#include "tvtuiappstates.h" +#include "mvtuistatecontext.h" +#include "videotelui.hrh" +#include "cvtuiappshutter.h" +#include +#include +#include +#include +#include + + +TVtUiStateStarting* TVtUiStateStarting::iInstance = NULL; + +// c++ constructor +TVtUiStateStarting::TVtUiStateStarting( + MVtUiStateContext& aCtx, TVtUiStates& aUiStates ) + : TVtUiAppStateBase( aCtx, aUiStates ) + { + iPreconditions.Set( EWaitingCLI ); + iPreconditions.Set( EWaitingPhase1ToComplete ); + } + +// Destructor +TVtUiStateStarting::~TVtUiStateStarting() + { + delete iStartCallback; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::InstanceL +// +// ----------------------------------------------------------------------------- +// +TVtUiStateStarting * TVtUiStateStarting::InstanceL( + MVtUiStateContext& aCtx, TVtUiStates& aUiStates ) + { + __VTPRINTENTER( "TVtUiStateStarting.InstanceL" ) + if ( iInstance == NULL ) + { + iInstance = new ( ELeave ) TVtUiStateStarting( aCtx, aUiStates ); + } + __VTPRINTEXIT( "TVtUiStateStarting.InstanceL" ) + return iInstance; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::AppUiStartupPhase1DoneL +// +// Phase 1 of application startup is completed, check if we can proceed to +// phase 2. +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::AppUiStartupPhase1DoneL() + { + __VTPRINTENTER( "TVtUiStateStarting.AppUiStartupPhase1DoneL" ) + // From startup phase point of view we're ready to proceed + // to phase 2. Clear that precondition and proceed if otherwise ready. + CheckPhase2StartupL( EWaitingPhase1ToComplete ); + __VTPRINTEXIT( "TVtUiStateStarting.AppUiStartupPhase1DoneL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::AppUiStartupPhase2DoneL +// +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::AppUiStartupPhase2DoneL() + { + __VTPRINTENTER( "TVtUiStateStarting.AppUiStartupPhase2DoneL" ) + // Phase 2 completed, proceed to next state + ChangeStateL( *TVtUiStateRunning::InstanceL( iCtx, iUiStates ) ); + __VTPRINTEXIT( "TVtUiStateStarting.AppUiStartupPhase2DoneL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::HandleVtEventL +// +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateStarting::HandleVtEventL( + const TInt aEvent ) + { + __VTPRINTENTER( "TVtUiStateStarting.HandleVtEventL" ) + TEventResponse handled = EEventHandled; + switch ( aEvent ) + { + case KVtEngRemoteDisconnect: + // base class handles this. + handled = TVtUiAppStateBase::HandleVtEventL( aEvent ); + break; + case KVtEngSessionStateChanged: + { + // check if session state is proper for proceeding to next phase + // in startup. + CheckSessionStateL(); + } + break; + case KVtEngRemoteVideoStarted: + // allow to start remote video rendering + case KVtEngSourceChanged: + // allow handling of source changed event + handled = EEventNotHandled; + break; + case KVtEngCLIAvailable: + HandleCLIReceivedL(); + break; + + case KVtEngRemoteUIIIA5StringSupport: + break; + case KVtEngDeviceLockOn: + case KVtEngDeviceLockOff: + default: + handled = TVtUiAppStateBase::HandleVtEventL( aEvent ); + break; + } + __VTPRINTEXIT( "TVtUiStateStarting.HandleVtEventL" ) + return handled; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::HandleCommandL +// +// ----------------------------------------------------------------------------- +// +TVtUiAppStateBase::TEventResponse TVtUiStateStarting::HandleCommandL( + const TInt /*aCommand*/ ) + { + __VTPRINTENTER( "TVtUiStateStarting.HandleCommandL" ) + __VTPRINTEXIT( "TVtUiStateStarting.HandleCommandL" ) + return EEventNotHandled; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::HandleForegroundChangedL +// +// ----------------------------------------------------------------------------- +// +TBool TVtUiStateStarting::HandleForegroundChangedL( const TBool aIsForeground ) + { + __VTPRINTENTER( "TVtUiStateStarting.HandleForegroundChangedL" ) + + SetLightsState( aIsForeground ); + iCtx.RefreshL( MVtUiStateContext::ENaviPane ); + + // behave as in background if CLI (=details) has not yet received + TBool handleAsForeground( aIsForeground && iUiStates.IsDetailsReceived() ); + TVtUiAppStateBase::ExecuteEngineCommand( KVtEngSetUIForeground, + handleAsForeground ); + + __VTPRINTEXIT( "TVtUiStateStarting.HandleForegroundChangedL" ) + return handleAsForeground; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::OpenL +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::OpenL() + { + __VTPRINTENTER( "TVtUiStateStarting.OpenL" ) + iStartCallback = new ( ELeave ) CAsyncCallBack ( + TCallBack( &AsynchOpen, this ), + CActive::EPriorityStandard ); + iStartCallback->CallBack(); + __VTPRINTEXIT( "TVtUiStateStarting.OpenL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::AsynchOpen +// asynchronous entry to the state. +// ----------------------------------------------------------------------------- +// +TInt TVtUiStateStarting::AsynchOpen( TAny* aAny ) + { + __VTPRINTENTER( "TVtUiStateStarting.AsynchOpen" ) + TVtUiStateStarting* state = reinterpret_cast( aAny ); + delete state->iStartCallback; + state->iStartCallback = NULL; + TRAPD( res, state->DoOpenL() ); + __VTPRINTEXITR( "TVtUiStateStarting.AsynchOpen err=%d>", res ) + return res; + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::DoOpenL +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::DoOpenL() + { + __VTPRINTENTER( "TVtUiStateStarting.DoOpenL" ) + if ( !CheckEndActiveCallL() ) + { + // not shutting down, proceed to phase 1 + iCtx.StartupPhase1L(); + } + __VTPRINTEXIT( "TVtUiStateStarting.DoOpenL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::CheckSessionStateL +// Resolve action based on session state change in the engine. +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::CheckSessionStateL() + { + __VTPRINTENTER( "TVtUiStateStarting.CheckSessionStateL" ) + const MVtEngSessionInfo::TSessionState state = SessionState( EFalse ); + switch ( state ) + { + case MVtEngSessionInfo::EConnected: + case MVtEngSessionInfo::ENegotiating: + case MVtEngSessionInfo::EOpen: + // From session state point of view we're ready to proceed. + // Clear precondition and proceed if otherwise ready. + CheckPhase2StartupL( EWaitingSessionState ); + break; + default: + // Is session state such that we need to shutdown? + CheckEndActiveCallL(); + break; + } + __VTPRINTEXIT( "TVtUiStateStarting.CheckSessionStateL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::CheckPhase2StartupL +// +// mark precondition passed and if no more preconditions exist proceed +// in startup. +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::CheckPhase2StartupL( + const TPreconditions aCond ) + { + __VTPRINTENTER( "TVtUiStateStarting.CheckPhase2StartupL" ) + // First check that at least one precondition holds + if ( iPreconditions.Value() ) + { + iPreconditions.Clear( aCond ); + if ( !iPreconditions.Value() ) + { + CleanupResetPushL(); // start shutdown if StartupPhase2L leaves + iCtx.StartupPhase2L(); + CleanupStack::Pop(); // CleanupResetPushL + } + } +#ifdef VTDEBUG + else { + __VTPRINT( DEBUG_GEN, "TVtUiStateStarting.CheckPhase2StartupL NoOp!" ) + } +#endif // VTDEBUG + __VTPRINTEXITR( "TVtUiStateStarting.CheckPhase2StartupL cond=%d", + (TInt) iPreconditions.Value() ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::HandleCLIReceivedL +// CLI reception from engine is one of the two preconditions for proceeding +// to phase2 startup. +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::HandleCLIReceivedL() + { + __VTPRINTENTER( "TVtUiStateStarting.HandleCLIReceivedL" ) + const MVtEngSessionInfo& session = iCtx.Model().Session(); + MVtEngSessionInfo::TCLI cli; + if ( session.GetCLI( cli ) == KErrNone ) + { + iUiStates.SetDetailsReceived( ETrue ); + iUiStates.SetCLIReceived( cli.iVoiceCallPossible ); + iCtx.SetCallIdL( cli.iCallId ); + iCtx.SetCallNameL( cli.iName ); + } + CheckPhase2StartupL( EWaitingCLI ); + __VTPRINTEXIT( "TVtUiStateStarting.HandleCLIReceivedL" ) + } + +// ----------------------------------------------------------------------------- +// TVtUiStateStarting::Close +// ----------------------------------------------------------------------------- +// +void TVtUiStateStarting::Close() + { + __VTPRINTENTER( "TVtUiStateStarting.Close" ) + if ( TVtUiStateStarting::iInstance ) + { + delete TVtUiStateStarting::iInstance; + TVtUiStateStarting::iInstance = NULL; + } + __VTPRINTEXIT( "TVtUiStateStarting.Close" ) + }