diff -r 8ee96d21d9bf -r 7e0eff37aedb profilesservices/RingingTone3DPlugin/inc/CRingingTone3DPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesservices/RingingTone3DPlugin/inc/CRingingTone3DPlugin.h Wed Sep 01 12:20:44 2010 +0100 @@ -0,0 +1,360 @@ +/* +* 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: Plug-In that implements C3DRingingToneInterface. +* +*/ + + +#ifndef CRINGINGTONE3DPLUGIN_H +#define CRINGINGTONE3DPLUGIN_H + +// INCLUDES +#include +#include +#include + +#include +#include "C3DAudioTimeOutTimer.h" +#include "C3DAudioPattern.h" +#include "C3DAudioXMLParser.h" + +#include +#include + + +// FORWARD DECLARATIONS +class C3DAudioTimeOutTimer; +class CEnvironmentalReverbUtility; +class CSourceDoppler; +class CSourceLocation; +class CListenerLocation; + +class C3DPatternParser; + +#ifdef __STEREO_WIDENING_EFFECT_UI +class CStereoWidening; +#endif + + +// CONSTANTS +const TInt32 KRingingTone3DAudioEComPluginUID = 0x10208ADF; +const TInt KBufSize256 = 256; + + + +// CLASS DECLARATION + + +/** +* Plug-In implementing C3DRingingToneInterface. +* +* Used for playing 3D ringing tones. For playing, plugin uses player utility +* (eg CDrmPlayerUtility) from calling application. 3D effect is achieved by +* adding 3D data into normal ringing tone. C3DAudioXMLParser reads this +* data from .xml files (one file per 3D effect). +* +* @lib RingingTone3DPlugin.dll +* @since 5.0 +*/ +NONSHARABLE_CLASS (CRingingTone3DPlugin): public C3DRingingToneInterface, + public M3DAudioTimeOutNotifier + { + private: + + enum TRingingTonePlayerType + { + EMdaAudioPlayerUtility, + EMdaAudioToneUtility, + EDrmPlayerUtility, + EVideoPlayerUtility + }; + + + public: + + /** + * Two-phased constructor. + */ + static CRingingTone3DPlugin* NewL( TAny* aParameter ); + + /** + * Destructor. + */ + virtual ~CRingingTone3DPlugin(); + + private: + + /** + * C++ default constructor. + */ + CRingingTone3DPlugin(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TAny* aParameter ); + + + public: // Functions from C3DRingingToneInterface + + /** + * Set 3D plugin attribute. + * @param aAttributeKey + * @param aValue + * @return System-wide error code. + */ + TInt SetAttr( T3DRingingToneInterfaceAttr aAttributeKey, TInt aValue ); + + /** + * Set 3D plugin attribute. + * @param aAttributeKey + * @param aValue + * @return System-wide error code. + */ + TInt SetAttr( T3DRingingToneInterfaceAttr aAttributeKey, const TDesC& aValue ); + + /** + * Set 3D plugin attribute. + * @param aAttributeKey + * @param aValue + * @return System-wide error code. + */ + TInt SetAttr( TInt aAttributeKey, TAny* aValue ); + + /** + * Plays 3D ringing tone. + */ + void PlayL(); + + /** + * Stops playing 3D ringing tone. + */ + void Stop(); + + + private: // from M3DAudioTimeOutNotifier + + /** + * Callback initiated from C3DAudioTimeOutTimer. + */ + void TimerExpiredL(); + + private: + + /** + * Initializes player utility. + * @param aSamplePlayer Player utility. + */ + void Init( CMdaAudioPlayerUtility* aSamplePlayer ); + + /** + * Initializes player utility. + * @param aSamplePlayer Player utility. + */ + void Init( CMdaAudioToneUtility* aSamplePlayer ); + + /** + * Initializes player utility. + * @param aSamplePlayer Player utility. + */ + void Init( CDrmPlayerUtility* aSamplePlayer ); + +#ifdef RD_VIDEO_AS_RINGING_TONE + /** + * Initializes player utility. + * @param aSamplePlayer Player utility. + */ + void Init( CVideoPlayerUtility* aSamplePlayer ); +#endif + + /** + * Plays 3D ringing tone. + */ + void DoPlayL(); + + /** + * Add 3D pattern (effect) data into normal ringing tone. + */ + void SetNext3DPatternPositionL(); + + /** + * Plays 3D ringing tone. + */ + void PlayRingingTone(); + + /** + * Stops playing 3D ringing tone. + */ + void StopRingingTone(); + + private: + + /** + * Calculates the correct dTime according to velocity-value in cenrep. + * @param aTime Time from the script to be calculated. + */ + void CalculateDTime( TInt& aTime ); + + /** + * Plugin initialization. + */ + void InitializeL(); + + /** + * Plugin uninitialization. Needed in error case when normal ringing + * tone is played. + */ + void UnInitialize(); + + + private: + + /** + * Gets CEnvironmentalReverbUtility object. + * @return CEnvironmentalReverbUtility. + */ + CEnvironmentalReverbUtility* EnvironmentalReverbUtilityL(); + + /** + * Gets CSourceLocation object. + * @return CSourceLocation. + */ + CSourceLocation* SourceLocationL(); + + /** + * Gets CListenerLocation object. + * @return CListenerLocation. + */ + CListenerLocation* ListenerLocationL(); + + /** + * Gets CSourceDoppler object. + * @return CSourceDoppler. + */ + CSourceDoppler* SourceDopplerL(); + +#ifdef __STEREO_WIDENING_EFFECT_UI + CStereoWidening* StereoWideningL(); +#endif + + + private: + + /** + * Read active profile setting from profile engine. Needed in case calling + * app does not set 3D effect and echo attributes. + */ + void ReadActiveProfileL(); + + /** + * Checks that tone can be used as 3D ringing tone. This check is only + * done if calling app explicitly sets ringing tone attribute. + */ + TBool CheckRingingTone(); + + /** + * Panics plugin dll. + * @param aReason Panic code. + */ + void Panic(TInt aReason); + + +#ifdef _DEBUG + public: + void FlogRepositoryL(CRepository* aRepository, TInt aEcho); + //void FlogPatternsL(TInt aOldPattern, TInt aNewPattern); + void FlogProfileL(MProfile* aProfile); + void FlogPlayer(TInt aPlayer); + void Check3DEchoL(TInt aEcho); + void Check3DPatternL(TInt aPattern); + void FlogPositionL(T3DPosition& aPosition, TInt aIndex); + void FlogVelocityL(T3DVelocity& aVelocity, TInt aIndex); + void FlogTimeL(TInt aTime, TInt aIndex); + void FlogPubSubL(TInt aEcho); +#endif + + + private: // Data + + // 3D Ringing tone velocity + TInt iVelocity; + + // Doppler status + TBool iDoppler; + + // 3D effect (pattern) + TInt iProfile3DToneEffect; + + // 3D echo + TInt iProfile3DToneEcho; + + // ringing tone, used only for validity check + TFileName iRingingTone; + + // profile id, currently not used + TInt iProfileId; + + // ringing tone player type + TInt iPlayerType; + + // is ringing tone playing + TInt iPlaying; + + // 3D pattern parser + C3DAudioXMLParser* iParser; + + // current position in pattern script + TInt iCurrentUpdate; + + // player utility used for playback + CMdaAudioPlayerUtility* iAudioPlayerUtility; + + // player utility + CMdaAudioToneUtility* iAudioToneUtility; + + // player utility + CDrmPlayerUtility* iDrmPlayerUtility; + +#ifdef RD_VIDEO_AS_RINGING_TONE + // player utility + CVideoPlayerUtility* iVideoPlayerUtility; +#endif + + // timer for updating 3D pattern position + C3DAudioTimeOutTimer* iTimer; + + // reverberation utility used to set reverb presets + CEnvironmentalReverbUtility* iReverbEffect; + + // doppler-effect + CSourceDoppler* iDopplerEffect; + + // source location-effect + CSourceLocation* iSource; + + // listener location-effect + CListenerLocation* iListener; + +#ifdef __STEREO_WIDENING_EFFECT_UI + // stereo widening-effect + CStereoWidening* iStereoWidening; +#endif + }; + + + + +#endif // CRINGINGTONE3DPLUGIN_H + +// End of File