diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccsubcontroller/inc/mccsymsubthreadclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccsubcontroller/inc/mccsymsubthreadclient.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,312 @@ +/* +* 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: Provides an symmetric subthread client definition +* +*/ + + + + +#ifndef MCCSYMSUBTHREADCLIENT_H +#define MCCSYMSUBTHREADCLIENT_H + +// INCLUDES +#include +#include +#include +#include "mccsubthreadclientbase.h" +#include "mccinternaldef.h" + + +// FORWARD DECLARATIONS +class CMccRtpManager; +class CMccSymStreamBase; +class TMccEvent; +class MMccResources; +class CMccRtpMediaClock; + +// CLASS DECLARATION + +/** +* Mcc Symmetric Subthread Client +* +* @lib Mccsubthreads.lib +* @since Series 60 3.0 +*/ + +NONSHARABLE_CLASS( CMccSymSubthreadClient ): public CMccSubThreadClientBase, + public MAsyncEventHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMccSymSubthreadClient* NewL( MMccEventHandler* aObserver, + MMccResources* aMccResources, + TInt aLinkType, + TUint32 aMccSessionId ); + + /** + * Destructor. + */ + virtual ~CMccSymSubthreadClient(); + + public: // Functions from MAsyncEventHandler + + TInt SendEventToClient( const TMMFEvent& aEvent ); + + public: // Functions from CMccSubThreadClientBase + + void OpenL( TInt aStreamType, + TFourCC aFourCC, + MDataSource* aDataSource, + MDataSink* aSink, + const TUint32 aStreamId, + TMMFPrioritySettings aSettings ); + + void SetBalanceL( const TUint32 aStreamId, + TInt aLeftBalance, + TInt aRightBalance ); + + void GetBalanceL( const TUint32 aStreamId, + TInt& aLeftBalance, + TInt& aRightBalance ); + + void PrepareL( const TUint32 aStreamId, + const TUint32 aEndpointId ); + + void PlayL( const TUint32 aStreamId, + const TUint32 aEndpointId, + TBool aStreamPaused, + TBool aEnableRTCP ); + + void StopL( const TUint32 aStreamId, + const TUint32 aEndpointId ); + + void PauseL( const TUint32 aStreamId, + const TUint32 aEndpointId, + TBool aEnableRTCP ); + void ResumeL( const TUint32 aStreamId, + const TUint32 aEndpointId, + TBool aEnableRTCP ); + + void CloseL( const TUint32 aStreamId ); + + void CloseL(); + + TBool StreamsExistsL(); + + void SetVolumeL( TInt aVolume ); + + void SetGainL( TInt aGain ); + + TInt MaxVolumeL( const TUint32 aStreamId); + + TInt MaxGainL( const TUint32 aStreamId ); + + TInt GetVolumeL( const TUint32 aStreamId ); + + TInt GetGainL( const TUint32 aStreamId ); + + void SendMediaSignalL( const TMccEvent& aEvent ); + + /** + * Sends RTCP receiver report to uplink if possible. + * @param aStreamId - [input] Stream ID identifying stream + * @return void + */ + void SendRTCPReceiverReportL( const TUint32 aStreamId ); + + /** + * Sends RTCP sender report to uplink if possible. + * @param aStreamId - [input] Stream ID identifying stream + * @return void + */ + void SendRTCPSenderReportL( const TUint32 aStreamId ); + + /** + * Sends Non-RTCP data to uplink if possible. + * @param aStreamId - [input] Stream ID identifying stream + * @param aData - [input] Data to send + * @return void + */ + void SendRTCPDataL( const TUint32 aStreamId, + const TDesC8& aData ); + + /** + * Starts inactivity timer for a stream in a given session. + * @param aStreamId - [input] Stream ID identifying stream + * @param aTimeoutTime - [input] timeout value in milliseconds + * @return One of the standard system-wide error codes. + */ + void StartInactivityTimerL( const TUint32 aStreamId, + TUint32 aTimeoutTime ); + + /** + * Stops inactivity timer for a stream in a given session. + * @param aStreamId - [input] Stream ID identifying stream + * @return One of the standard system-wide error codes. + */ + void StopInactivityTimerL( const TUint32 aStreamId ); + + /** + * Get the supported bitrates from the codec of the specified stream + * @since Series 60 3.0 + * @param aStreamId - [input] Stream ID identifying stream + * @param aBitrates Array for the bitrates + * @leave System wide error code if unsuccessful + * @return None + */ + void GetSupportedBitratesL( const TUint32 aStreamId, + RArray& aBitrates ); + /** + * @See CMccSubThreadClientBase + * + */ + void GetSSRCL( const TUint32 aStreamId, TUint32& aSSRCValue ); + + MDataSink* DataSink( const TUint32 aStreamId ); + + MDataSource* DataSource( const TUint32 aStreamId ); + + /** + * Get the supported bitrates from the codec of the specified stream + * @since Series 60 3.0 + * @param aStreamId - [input] Stream ID identifying stream + * @param aFmtp [output] The FMTP attribute + * @return None + */ + void GetFmtpAttrL( const TUint32 aStreamId, TDes8& aFmtp ); + + void SetRemoteAddressL( TInetAddr aRemAddr ); + + void SetRemoteRtcpAddrL( TInetAddr aRemAddr ); + + /** + * 2nd step to create link + * @since Series 60 3.0 + * @param [input/output] aStatus + * @param [input] aIapId + * @return void + */ + void InitializeLinkL( TRequestStatus& aStatus, TInt aIapId ); + + /** + * 3rd step to create link. Creates a RTP session in the subthread + * @since Series 60 3.0 + * @param [input/output] aPort + * @param [input] aEnableRTCP + * @param [input] TOS bit settings + * @param [input] Reference to RTP Media Clock instance + * @return void + */ + void CreateRtpSessionL( TUint aPort, + TBool aEnableRTCP, + TInt aIpTos, + CMccRtpMediaClock& aClock ); + + void SetAudioRouteL( TUint32 aStreamId, + TUint32 aRoutingDestination ); + + void GetAudioRouteL( TUint32 aStreamId, + TUint32& aRoutingDestination ); + + void UnuseL( TUint32 aStreamId ); + + /** + * Resolves and returns local IP addresses and ports + * @since Series 60 3.2 + * @param [input/output] aClientData Client data + * @return void + */ + void GetLocalIpAddressesL( TMccCreateLink& aClientData ); + + void SetParameterL( TUint32 aParam, + TUint32 aStreamId, + TUint32 aEndpointId, + const TDesC8& aVal ); + + void GetParameterL( TUint32 aParam, + TUint32 aStreamId, + TUint32 aEndpointId, + TDesC8& aVal ); + + + /** + * Bind context into stream. + * @since Series 60 3.2 + * @param aStreamId The stream id + * @param aEndpointId The endpoint id + * @param aContextParams Crypto context + * @return void + */ + void BindContextIntoStreamL( TUint32 aStreamId, + TUint32 aEndpointId, + const TMccCryptoContext& aContextParams ); + + /** + * Remove context. + * @since Series 60 3.2 + * @param aStreamId The stream id + * @param aEndpointId The endpoint id + + * @return void + */ + void RemoveContextL( TUint32 aStreamId, + TUint32 aEndpointId ); + + private: // Private construction + + /** + * C++ default constructor. + */ + CMccSymSubthreadClient( MMccEventHandler* aObserver, + MMccResources* aMccResources, + TInt aLinkType, + TUint32 aMccSessionId ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + + private: // New functions + + void DoMccEvent( TMccEvent& aEvent, const TMMFEvent& aMMFEvent ); + + TInt HandleAmrEvent( const TMMFEvent& aEvent, + const TMccEvent& aMccEvent ); + + private: // Data + + // Priority settings + TMMFPrioritySettings iPrioritySettingsData; + + RArray iUnusedStreams; + + // Rtp media clock instance + CMccRtpMediaClock* iRtpMediaClock; + + #ifdef TEST_EUNIT + friend class UT_CMccSymSubthreadClient; + #endif + + }; + +#endif // MCCSYMSUBTHREADCLIENT_H + +// End of File +