multimediacommscontroller/mmccsubcontroller/inc/mcculdlclient.h
changeset 0 1bce908db942
child 49 64c62431ac08
--- /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 <mmf/common/mmfbase.h>
+#include <mmf/common/mmfutilities.h>
+#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<TUint>& 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<CMccSubThreadClientBase> 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
+
+
+