--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccsubcontroller/inc/mccsubthreadclientbase.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,526 @@
+/*
+* 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 a baseclass for subthread clients to implement
+*
+*/
+
+
+
+
+#ifndef MCCSUBTHREADCLIENTBASE_H
+#define MCCSUBTHREADCLIENTBASE_H
+
+// INCLUDES
+#include <e32base.h>
+#include "mccinternalcodecs.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class MDataSource;
+class MDataSink;
+class MMccEventHandler;
+class TMccEvent;
+class CMccRtpManager;
+class MMccResources;
+class CMccRtpMediaClock;
+class TMccCreateLink;
+class CMccSymStreamBase;
+class TMccCryptoContext;
+
+/**
+* Mcc Subthread Client baseclass
+*
+* @lib Mccsubthreads.lib
+* @since Series 60 3.0
+*/
+NONSHARABLE_CLASS( CMccSubThreadClientBase ) : public CBase
+ {
+ public: // Constructor
+
+ /**
+ * Destructor
+ */
+ virtual ~CMccSubThreadClientBase();
+
+ public: // New functions
+
+ /**
+ * 1st step to create link asynchronously
+ * @since Series 60 3.0
+ * @param [input/output] aStatus
+ * @param [input] aIapId
+ * @return void
+ */
+ virtual void InitializeLinkL( TRequestStatus& aStatus,
+ TInt aIapId );
+
+ /**
+ * 2nd step to create link. Creates a RTP session in the subthread
+ * @since Series 60 3.0
+ * @param [input/output] aPort Local port
+ * @param [input] aEnableRTCP Whether to enable RTCP for RTP session
+ * @param [input] aIpTos TOS bit settings
+ * @param [input] aClock Mediaclock for timestamp synchronization
+ * @return void
+ */
+ virtual void CreateRtpSessionL( TUint aPort,
+ TBool aEnableRTCP,
+ TInt aIpTos,
+ CMccRtpMediaClock& aClock );
+
+ /**
+ * Returns the codec info of the subthread client
+ * @since Series 60 3.0
+ * @param aStreamId The stream id
+ * @param [output] aCodec The codec info reference where to write
+ * @return void
+ */
+ void CodecInformationL( TUint32 aStreamId, TMccCodecInfo& aCodec );
+
+ /**
+ * Sets the codec information for this stream
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @param aCodecInfo Codec information
+ * @param aFmtp FMTP line associated with codec
+ * @return void
+ */
+ void SetCodecInformationL( TUint32 aStreamId,
+ const TMccCodecInfo& aCodecInfo,
+ const TDesC8& aFmtp );
+
+ /**
+ * Sets the MMF priority settings for the subthread
+ * @since Series 60 3.0
+ * @param aStreamId The stream id
+ * @param [input] aPrioritySettings The priority settings
+ * @return void
+ */
+ void SetPrioritySettingsL( TUint32 aStreamId,
+ const TMMFPrioritySettings& aPrioritySet );
+
+ /**
+ * Stores the link id number
+ * @since Series 60 3.0
+ * @param [input] aLinkId Link index number
+ * @return void
+ */
+ void SetLinkId( const TUint32 aLinkId );
+
+ /**
+ * Returns the link index number
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt System wide error code
+ */
+ TUint32 GetLinkId() const;
+
+ /**
+ * Returns the MCC session id
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt System wide error code
+ */
+ TUint32 MccSessionId() const;
+
+ /**
+ * Returns current volume
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @return TInt Current volume
+ */
+ virtual TInt GetVolumeL( const TUint32 aStreamId ) = 0;
+
+ /**
+ * Sets current volume
+ * @since Series 60 3.0
+ * @param [input] New volume
+ * @return void
+ */
+ virtual void SetVolumeL( TInt aVolume ) = 0;
+
+ /**
+ * Returns maximum volume
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @return TInt Max volume
+ */
+ virtual TInt MaxVolumeL( const TUint32 aStreamId ) = 0;
+
+ /**
+ * Returns current gain of uplink subthread
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @return TInt Current gain
+ */
+ virtual TInt GetGainL( const TUint32 aStreamId ) = 0;
+
+ /**
+ * Sets the gain for uplink subthread
+ * @since Series 60 3.0
+ * @param [input] aGain Gain for uplink playback
+ * @return void
+ */
+ virtual void SetGainL( TInt aGain ) = 0;
+
+ /**
+ * Returns the maximum gain for uplink subthread
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @param [output] aMaxGain Contains the audio HW maximum gain
+ * @return void
+ */
+ virtual TInt MaxGainL( const TUint32 aStreamId ) = 0;
+
+ /**
+ * Opens & creates the subthread
+ * @since Series 60 3.0
+ * @param [input] aStreamType The type of stream
+ * @param [input] aFourCC the fourCC code of the desired codec
+ * @param [input] aDatasource Datasource
+ * @param [input] aDatasink Datasink
+ * @param [input] aStreamId id of the new stream
+ * @return TUint32
+ */
+ virtual void OpenL( TInt aStreamType,
+ TFourCC aFourCC,
+ MDataSource* aDatasource,
+ MDataSink* aDatasink,
+ const TUint32 aStreamID,
+ TMMFPrioritySettings aSettings ) = 0;
+
+ /**
+ * Sets the record/playback balance for ul/dl streams
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @param [input] aLeftBalance Left side balance for balance
+ * @param [input] aRightBalance Right side balance for balance
+ * @return void
+ */
+ virtual void SetBalanceL( const TUint32 aStreamId,
+ TInt aLeftBalance,
+ TInt aRightBalance ) = 0;
+
+ /**
+ * Returns the record/playback balance for ul/dl streams
+ * @since Series 60 3.0
+ * @param [input] Stream ID
+ * @param [output] aLeftBalance Return value of left side balance for
+ * balance
+ * @param [output] aRightBalance Return value of right side balance for
+ * balance
+ * @return void
+ */
+ virtual void GetBalanceL( const TUint32 aStreamId,
+ TInt& aLeftBalance,
+ TInt& aRightBalance ) = 0;
+
+ /**
+ * Sets the remote address
+ * @since Series 60 3.0
+ * @param [input] aRemAddr Contains the remote host IP address
+ * @return void
+ */
+ virtual void SetRemoteAddressL( TInetAddr aRemAddr );
+
+ /**
+ * Sets the remote rtcp address
+ * @since Series 60 3.0
+ * @param [input] aRemAddr Contains the remote rtcp host IP address
+ * @return void
+ */
+ virtual void SetRemoteRtcpAddrL( TInetAddr aRemAddr );
+
+ /**
+ * Prepares the subthread
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void PrepareL( const TUint32 aStreamId,
+ const TUint32 aEndpointId ) = 0;
+
+ /**
+ * Starts a subthread
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void PlayL( const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aStreamPaused,
+ TBool aEnableRTCP ) = 0;
+
+ /**
+ * Stops a subthread
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void StopL( const TUint32 aStreamId,
+ const TUint32 aEndpointId ) = 0;
+
+ /**
+ * Pauses subthread record or playback
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void PauseL( const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aEnableRTCP ) = 0;
+
+ /**
+ * Resumes a paused subthread
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void ResumeL( const TUint32 aStreamId,
+ const TUint32 aEndpointId,
+ TBool aEnableRTCP ) = 0;
+
+ /**
+ * Closes the subthread clients
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void CloseL( const TUint32 aStreamId ) = 0;
+
+ /**
+ * Closes all subthread clients
+ * @since Series 60 3.0
+ * @param aStreamId Stream ID
+ * @return void
+ */
+ virtual void CloseL();
+
+ /**
+ * Checks if link contains any streams
+ * @since Series 60 3.0
+ * @return ETrue, if streams exists
+ */
+ virtual TBool StreamsExistsL();
+
+ /**
+ * Sends media signals to this stream
+ * @since Series 60 3.0
+ * @param aEvent Media event to be sent
+ * @return void
+ */
+ virtual void SendMediaSignalL( const TMccEvent& aEvent );
+
+ /**
+ * Sends RTCP receiver report to uplink if possible.
+ * @param aStreamId - [input] Stream ID identifying stream
+ * @return void
+ */
+ virtual void SendRTCPReceiverReportL( const TUint32 aStreamId );
+
+ /**
+ * Sends RTCP sender report to uplink if possible.
+ * @param aStreamId - [input] Stream ID identifying stream
+ * @return void
+ */
+ virtual 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
+ */
+ virtual 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.
+ */
+ virtual 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.
+ */
+ virtual 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
+ */
+ virtual void GetSupportedBitratesL( const TUint32 aStreamId,
+ RArray<TUint>& aBitrates );
+
+ /**
+ * Get Syncronization source for the specified stream
+ * @since Series 60 3.0
+ * @param aStreamId - [input] Stream ID identifying stream
+ * @param aSSRCValue - [input] a reference value of SSRC.
+ * @leave System wide error code if unsuccessful
+ * @return None.
+ */
+
+ virtual void GetSSRCL( const TUint32 aStreamId,
+ TUint32& aSSRCValue);
+
+ /**
+ * Get the supported bitrates from the codec of the specified stream
+ * @since Series 60 3.0
+ * @param aStreamId - [input] Stream ID identifying stream
+ * @return None
+ */
+ virtual void GetFmtpAttrL( const TUint32 aStreamId, TDes8& aFmtp );
+
+ virtual inline TBool IsDtmf()
+ {
+ return iIsDTMF;
+ }
+
+ virtual MDataSink* DataSink( const TUint32 aStreamId ) = 0;
+
+ virtual MDataSource* DataSource( const TUint32 aStreamId ) = 0;
+
+ virtual void SetAudioRouteL( TUint32 aStreamId,
+ TUint32 aRoutingDestination ) = 0;
+
+ virtual void GetAudioRouteL( TUint32 aStreamId,
+ TUint32& aRoutingDestination ) = 0;
+
+ virtual void UnuseL( TUint32 aStreamId ) = 0;
+
+ /**
+ * Resolves local IP addresses and ports
+ * @since Series 60 3.2
+ * @param [input/output] aClientData Client data
+ * @return void
+ */
+ virtual void GetLocalIpAddressesL( TMccCreateLink& aClientData ) = 0;
+
+ virtual void SetParameterL( TUint32 aParam,
+ TUint32 aStreamId,
+ TUint32 aEndpointId,
+ const TDesC8& aVal ) = 0;
+
+ virtual void GetParameterL( TUint32 aParam,
+ TUint32 aStreamId,
+ TUint32 aEndpointId,
+ TDesC8& aVal ) = 0;
+
+ /**
+ * 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
+ */
+ virtual void BindContextIntoStreamL( TUint32 aStreamId,
+ TUint32 aEndpointId,
+ const TMccCryptoContext& aContextParams ) = 0;
+
+ /**
+ * Remove context.
+ * @since Series 60 3.2
+ * @param aStreamId The stream id
+ * @param aEndpointId The endpoint id
+ * @return void
+ */
+ virtual void RemoveContextL( TUint32 aStreamId,
+ TUint32 aEndpointId ) = 0;
+
+ protected: // Constructor
+
+ /**
+ * C++ constructor
+ */
+ inline CMccSubThreadClientBase( MMccEventHandler* aObserver,
+ MMccResources* aMccResources,
+ TInt aLinkType,
+ TUint32 aSessionId ) :
+ iDatasink( NULL ),
+ iDatasource( NULL ),
+ iLinkType( aLinkType ),
+ iSessionId( aSessionId ),
+ iObserver( aObserver ),
+ iMccResources( aMccResources ),
+ iSessionCreated( EFalse ),
+ iIsDTMF( EFalse )
+ {
+ }
+
+
+ /**
+ * Helper functions for searching a stream with given
+ * ID.
+ */
+ TInt FindStreamL( TUint32 aStreamId );
+ TInt FindStream( TUint32 aStreamId );
+
+ protected: // Data
+
+ CMccRtpManager* iRtpmanager;
+
+ // Datasink of the subthread
+ MDataSink* iDatasink;
+
+ // Datasource of the subthread
+ MDataSource* iDatasource;
+
+ // Client observer
+ MMccEventHandler* iObserver;
+
+ MMccResources* iMccResources;
+
+ // Priority settings
+ TMMFPrioritySettings iPrioritySettings;
+
+ // Flag for session creation
+ TBool iSessionCreated;
+
+ //Flag dtmf
+ TBool iIsDTMF;
+
+ /**
+ * Link type
+ */
+ TInt iLinkType;
+
+ // Id of this link
+ TUint32 iLinkId;
+
+ // Streams owned by the link
+ RPointerArray<CMccSymStreamBase> iStreams;
+
+ // MCC session id
+ TUint32 iSessionId;
+
+ #ifdef TEST_EUNIT
+ friend class UT_CMccSymSubthreadClient;
+ #endif
+ };
+
+#endif // MCCSUBTHREADCLIENTBASE_H
+
+// End of File