diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccsubcontroller/inc/mcculdlclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccsubcontroller/inc/mcculdlclient.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,707 @@ +/* +* 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: Provides interface for UL/DL subthread clients +* +*/ + + + + +#ifndef MCCULDLCLIENT_H +#define MCCULDLCLIENT_H + +// INCLUDES +#include +#include +#include "rtpapi.h" +#include "rtpdef.h" +#include "mmccinterfacedef.h" +#include "mccinternaldef.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CMccSubThreadClientBase; +class CMccUlSubThreadClient; +class CMccDlSubThreadClient; +class MDataSource; +class MDataSink; +class CMccDTMFClient; +class CMccSymSubthreadClient; +class MMccEventHandler; +class TMccCodecInfo; +class TMccEvent; +class MMccResources; +class CMccRtpMediaClock; +class TMccCryptoContext; + +// CLASS DECLARATION + +/** +* Mcc Uplink/Downlink client interface +* +* @lib Mccsubthreads.lib +* @since Series 60 3.0 +*/ +class CMccUlDlClient : public CBase, public MMccEventHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CMccUlDlClient* NewL( MMccEventHandler* aMccEventHandler, + MMccResources* aMccResources, + TUint32 aSessionId ); + /** + * Destructor. + */ + IMPORT_C virtual ~CMccUlDlClient(); + + public: // New functions + + + IMPORT_C static void GetCodecDefaultsL( const TUid aType, + TDes8& aParam, + TMccCodecInfo& aCodec ); + + /** + * Gets the gain of current stream + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [output] aGain Return value of the current gain + * @return TInt System wide error code + */ + IMPORT_C TInt GetGainL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt& aGain ); + /** + * Sets the gain for ul client + * @since Series 60 3.0 + * @param [input] aGain The wanted gain value + * @return TInt System wide error code + */ + IMPORT_C TInt SetGainL( TInt aGain ); + /** + * Returns the maximum gain of current stream + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [output] aMaxGain Value of the maximum gain + * @return System wide error code + */ + IMPORT_C void MaxGainL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt& aMaxGain ); + + /** + * Sets the volume for current stream + * @since Series 60 3.0 + * @param [input] aVolume Value for the current volume + * @return System wide error code + */ + IMPORT_C TInt SetVolumeL( TInt aVolume ); + + /** + * Returns the maximum volume for current stream + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [output] aMaxVolume Return value of the maximum volume + * @return TInt System wide error code + */ + IMPORT_C void MaxVolumeL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt& aMaxVolume ); + /** + * Returns the used codec + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [output] aCodec Codec information struct containing codec info + * @return void + */ + IMPORT_C void GetCodecL( const TUint32 aLinkId, + const TUint32 aStreamId, + TMccCodecInfo& aCodec ); + + /** + * Returns the fmtp + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @return the fmtp string for the link + */ + IMPORT_C void GetFmtpAttrL( const TUint32 aLinkId, + const TUint32 aStreamId, + TDes8& aFmtp ); + + /** + * Sets the stream priority + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aPrioritySettings An object that holds the + * audio client's priority and device state settings. + * @return TInt System wide error code + */ + IMPORT_C TInt SetPriorityL( const TUint32 aLinkId, + const TUint32 aStreamId, + TMMFPrioritySettings aPrioritySettings ); + /** + * Opens the ul or dl client subthread + * @since Series 60 3.0 + * @param [input] aLinkId Link ID + * @param [input] aStreamId unique id for the stream + * @param [input] aStreamType The desired stream type + * @param [input] aFourCC the fourCC code of the desired codec + * @param [input] aDataSource Data source of the client + * @param [input] aSink Data sink of the client + * @param [input] aSettings MMF settings + * @leave System-wide error code if unsuccessful + * @return void + */ + IMPORT_C void OpenL( const TUint32 aLinkIdId, + const TUint32 aStreamId, + TInt aStreamType, + TFourCC aFourCC, + MDataSource* aDataSource, + MDataSink* aSink, + TMMFPrioritySettings aSettings ); + + /** + * Prepares ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void PrepareL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TUint32 aEndpointId ); + + /** + * Plays ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void PlayL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TUint32 aEndpointId, + const TBool aStreamPaused, + const TBool aEnableRTCP ); + + /** + * Pauses ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aEnableRTCP ETrue if automatic RTCP sending should be + * enabled when the stream is paused + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void PauseL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TUint32 aEndpointId, + const TBool aEnableRTCP ); + + /** + * Stops ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @return TInt System wide error code + */ + IMPORT_C void StopL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TUint32 aEndpointId ); + + /** + * Resumes ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aEnableRTCP ETrue if automatic RTCP sending should be + * enabled when the stream is paused + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void ResumeL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TUint32 aEndpointId, + const TBool aEnableRTCP ); + + /** + * Checks if link contais stream + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @leave System wide error code if unsuccessful + * @return ETrue, if streams exists + */ + IMPORT_C TBool StreamsExistsL( const TUint32 aLinkId ); + + /** + * Returns the play balance + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [output] aLeftBalance Value for the left balance + * @param [output] aRightBalance Value for the right balance + * @return System wide error code + */ + IMPORT_C TInt GetPlayBalanceL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt& aLeftBalance, + TInt& aRightBalance ); + + /** + * Returns the record balance + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [output] aLeftBalance Value for the left balance + * @param [output] aRightBalance Value for the right balance + * @return System wide error code + */ + IMPORT_C TInt GetRecordBalanceL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt& aLeftBalance, + TInt& aRightBalance ); + + /** + * Sets the record balance + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aLeftBalance Value for the left balance + * @param [input] aRightBalance Value for the right balance + * @leave System wide error code + */ + IMPORT_C void SetRecordBalanceL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt aLeftBalance, + TInt aRightBalance ); + + /** + * Sets the play balance + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aLeftBalance Value for the left balance + * @param [input] aRightBalance Value for the right balance + * @leave System wide error code + */ + IMPORT_C void SetPlayBalanceL( const TUint32 aLinkId, + const TUint32 aStreamId, + TInt aLeftBalance, + TInt aRightBalance ); + + /** + * Closes ul/dl streams + * @since Series 60 3.0 + * @param [input] aLinkId ID of link that contains stream + * @param [input] aStreamId ID of stream to close + * @return void + */ + IMPORT_C void CloseL( const TUint32 aLinkIdId, + const TUint32 aStreamId ); + + /** + * Returns the session ID + * @since Series 60 3.0 + * @param None + * @return Value which represents the session ID + */ + IMPORT_C TUint32 GetSessionId(); + + /** + * Sets the remote address for aStream + * @since Series 60 3.0 + * @param [input] aRemAddr Denotes the remote IP address + * @param [input] aLinkId Link location in the array + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SetRemoteAddressL( TInetAddr aRemAddr, + const TUint32 aLinkId ); + + /** + * Sets the remote rtcp address for aStream + * @since Series 60 3.0 + * @param [input] aRemAddr Denotes the remote rtcp IP address + * @param [input] aLinkId Link location in the array + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SetRemoteRtcpAddrL( TInetAddr aRemAddr, + const TUint32 aLinkId ); + + /** + * Creates link + * @since Series 60 3.0 + * @param [input] aLinkId ID of the new link (UL or DL client) + * @param [input] aType Type of the link to be created + * @return void + */ + IMPORT_C void CreateLinkL( TUint32& aLinkId, + TInt aType ); + + /** + * Initializes link + * @since Series 60 3.0 + * @param [input/output] aStatus Status of the request + * @param [input] aLinkId ID of the link + * @param [input] aIapId IAP ID + * @return void + */ + IMPORT_C void InitializeLinkL( TRequestStatus& aStatus, + TUint32 aLinkId, + TInt aIapId ); + + /** + * Creates the RTP session + * @since Series 60 3.0 + * @param [input] aLinkId + * @param [input/output] aPort + * @param [input] aIpTOS + * @param [input] aMediaSignaling + * @return void + */ + IMPORT_C void CreateRtpSessionL( TUint32 aLinkId, + TUint aPort, + TInt aIpTOS, + TInt aMediaSignaling ); + + /** + * Closes ul/dl links + * @since Series 60 3.0 + * @param [input] aLinkId ID of link to close + * @return System wide error code + */ + IMPORT_C TInt CloseLinkL( TUint32 aLinkIdId ); + + + /** + * Sends media signals to uplink if possible + * @since Series 60 3.0 + * @param aStreamId Stream into which the signal should be sent + * @param aEvent The event to be sent + * @return void + */ + IMPORT_C void SendMediaSignalL( const TMccEvent& aEvent ); + + /** + * Sets the codec information for specific stream + * @since Series 60 3.0 + * @param [input] aLink Link for which the codec information is set + * @param [input] aStreamId ID of the stream + * @param aCodecInfo Codec information for the stream + * @return void + */ + IMPORT_C void SetCodecInformationL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TMccCodecInfo& aCodecInfo, + const TDesC8& aFmtp ); + + /** + * Get the supported bitrates from the codec of the specified stream + * @since Series 60 3.0 + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aBitrates Array for the bitrates + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void GetSupportedBitratesL( const TUint32 aLinkIdId, + const TUint32 aStreamId, + RArray& aBitrates ); + + /** + * Get syncrinization source from the specified stream + * @since Series 60 3.0 + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aaSSRCValue - [input] SSRC value to be retturn + * @leave System wide error code if unsuccessful + * @return none. + */ + IMPORT_C void GetSSRCL( const TUint32 aLinkId, + const TUint32 aStreamId, + TUint32& aSSRCValue); + + /** + * Sends RTCP receiver report to uplink if possible. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SendRTCPReceiverReportL( const TUint32 aLinkIdId, + const TUint32 aStreamId ); + + /** + * Sends RTCP sender report to uplink if possible. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SendRTCPSenderReportL( const TUint32 aLinkIdId, + const TUint32 aStreamId ); + + + /** + * Sends RTCP data to uplink if possible. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aData - [input] Non-RTCP data + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SendRTCPDataL( const TUint32 aLinkId, + const TUint32 aStreamId, + const TDesC8& aData ); + /** + * Starts inactivity timer for a stream in a given session. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aTimeoutTime - [input] timeout value in milliseconds + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void StartInactivityTimerL( const TUint32 aLinkIdId, + const TUint32 aStreamId, + TUint32 aTimeoutTime ); + + /** + * Stops inactivity timer for a stream in a given session. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void StopInactivityTimerL( const TUint32 aLinkIdId, + const TUint32 aStreamId ); + + /** + * Sets audio route for a stream in a given session. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aRoutingDestination - [input] routing destination + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void SetAudioRouteL( TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aRoutingDestination ); + + + /** + * Sets audio route for a stream in a given session. + * @param aLinkId - [input] link ID + * @param aStreamId - [input] Stream ID identifying stream + * @param aRoutingDestination - [output] routing destination + * @leave System wide error code if unsuccessful + * @return None + */ + IMPORT_C void GetAudioRouteL( TUint32 aLinkId, + TUint32 aStreamId, + TUint32& aRoutingDestination ); + + /** + * Generates a random stream identifier + * @since Series 60 3.0 + * @param None + * @return TInt New stream ID + */ + IMPORT_C TUint32 GenerateStreamId(); + + /** + * Unuses ul/dl stream + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @return TInt System wide error code + */ + IMPORT_C void UnuseL( const TUint32 aLinkId, + const TUint32 aStreamId ); + + /** + * Resolves local IP addresses and ports + * @since Series 60 3.2 + * @param [input/output] aClientData Client data + * @return void + */ + IMPORT_C void GetLocalIpAddressesL( TMccCreateLink& aClientData ); + + + /** + * Bind context into stream. + * @since Series 60 3.2 + * @param aLinkId The link id + * @param aStreamId The stream id + * @param aEndpointId The endpoint id + * @param aCryptoContext Crypto context + * @return void + */ + IMPORT_C void BindContextIntoStreamL( TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aEndpointId, + const TMccCryptoContext& aCryptoContext ); + + /** + * Remove context. + * @since Series 60 3.2 + * @param aLinkId The link id + * @param aStreamId The stream id + * @param aEndpointId The endpoint id + * @return void + */ + IMPORT_C void RemoveContextL( TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aEndpointId ); + + /** + * Generic value setter. + * @param [input] aParam identifier of the param to be set + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aEndpointId ID of the endpoint + * @param [input] aVal value to be set + */ + IMPORT_C void SetParameterL( TUint32 aParam, + TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aEndpointId, + const TDesC8& aVal ); + + /** + * Generic value getter. + * @param [input] aParam identifier of the param to be get + * @param [input] aLinkId Link location in the array + * @param [input] aStreamId ID of the stream + * @param [input] aEndpointId ID of the endpoint + * @param [input] aVal value fill be set to this + */ + IMPORT_C void GetParameterL( TUint32 aParam, + TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aEndpointId, + TDesC8& aVal ); + + public: // From MMccEventHandler + + virtual TInt SendMccEventToClient( TMccEvent& aEvent ); + + virtual void StateChange( TInt aState, TUint32 aLinkId ); + + virtual void ErrorOccured( TInt aError, + TUint32 aSessionId, + TUint32 aLinkId, + TUint32 aStreamId, + TUint32 aEndpointId ); + + protected: // New functions + + + protected: // Functions from base classes + + private: // New functions + + /** + * Method for finding correct streams + * @since Series 60 3.0 + * @param [input] aLinkId Link location in the array + * @return TInt System wide error code + */ + TInt FindLinkL( const TUint32 aLinkId ); + + /** + * Stores the link (pointer to clients) + * @since Series 60 3.0 + * @param [input] aClient client object + * @return TInt System wide error code + */ + TInt StoreLink( CMccSubThreadClientBase* aClient ); + + private: // Constructors + + /** + * C++ default constructor. + */ + CMccUlDlClient( MMccEventHandler* aMccEventHandler, + MMccResources* aMccResources, + TUint32 aSessionId ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + public: // Data + + protected: // Data + + private: // Data + + // array for storing ul & dl client pointers to streams + RPointerArray iClientArray; + + // member variable for storing session id + TUint32 iSessionId; + + // Variable for storing event error code + TInt iErrorCode; + + // Datasink of the subthread + MDataSink* iDatasink; + + // Datasource of the subthread + MDataSource* iDatasource; + + // Event handler + MMccEventHandler* iMccEventHandler; + + // Resources + MMccResources* iMccResources; + + // Rtp media clock + CMccRtpMediaClock* iRtpMediaClock; + + public: // Friend classes + + protected: // Friend classes + + private: // Friend classes + + + }; + +#endif // MCCULDLCLIENT_H + +// End of File + + +