--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccsubcontroller/inc/mccsymstreambase.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,565 @@
+/*
+* 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 symmetric subthread streams
+*
+*/
+
+
+
+#ifndef MCCSYMSTREAMBASE_H
+#define MCCSYMSTREAMBASE_H
+
+// INCLUDES
+#include <e32base.h>
+
+#include "mccinternalcodecs.h"
+#include "mmccevents.h"
+
+
+// FORWARD DECLARATIONS
+class TMMFPrioritySettings;
+class CMccDataPathBase;
+class MDataSink;
+class MDataSource;
+class CMccRtpManager;
+class CMMFDevSound;
+class MMccResources;
+class CMccMultiplexer;
+class CMccRtpMediaClock;
+class TMccCryptoContext;
+
+// CLASS DECLARATION
+
+/**
+* Mcc Symmetric subthread stream baseclass
+*
+* @lib Mccsubthreads.lib
+* @since Series 60 3.0
+*/
+NONSHARABLE_CLASS( CMccSymStreamBase ) : public CBase,
+ public MAsyncEventHandler
+ {
+ public: // Enumerations
+
+ enum TStreamState
+ {
+ EStateNone = 0,
+ EStatePrepared = 1,
+ EStateStreaming = 2,
+ EStatePaused = 3,
+ EStateStopped = 4
+ };
+
+ enum TCodecState
+ {
+ EStateCodecNone = 0,
+ EStateCodecNegotiated = 1,
+ EStateCodecPrepared = 2,
+ EStateCodecLoaded = 3,
+ EStateCodecLoadedAndUpdating = 4
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMccSymStreamBase();
+
+ public: // Functions from MAsyncEventHandler
+
+ TInt SendEventToClient( const TMMFEvent& aEvent );
+
+ public: // New functions
+
+ /**
+ * Returns the streams identifier
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt stream identifier
+ */
+ inline TUint32 MccStreamId()
+ {
+ return iMccStreamId;
+ };
+
+ /**
+ * Sets the priority settings for this stream
+ * @since Series 60 3.0
+ * @param aPriority MMF Priority settings
+ * @return void
+ */
+ virtual void SetPrioritySettingsL(
+ const TMMFPrioritySettings& aPriority ) = 0;
+
+ /**
+ * Adds the sink and source to the stream
+ * @since Series 60 3.0
+ * @param aDatasink MDataSink
+ * @param aDatasource MDataSource
+ * @return void
+ */
+ virtual void AddSinkAndSourceL( MDataSink* aDatasink,
+ MDataSource* aDatasource ) = 0;
+
+ /**
+ * Loads a codec in the stream
+ * @since Series 60 3.0
+ * @param aCodecInfo TMccCodecInfo
+ * @return void
+ */
+ virtual void LoadCodecL( const TMccCodecInfo& aCodecInfo,
+ const TDesC8& aFmtp ) = 0;
+
+ /**
+ * Primes the audio stream ready
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void PrimeL( const TUint32 aEndpointId ) = 0;
+
+ /**
+ * Starts the audio streaming
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void PlayL( const TUint32 aEndpointId,
+ TBool aStreamPaused,
+ TBool aEnableRtcp ) = 0;
+
+ /**
+ * Pauses the audio streaming
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void PauseL( const TUint32 aEndpointId,
+ TBool aEnableRtcp ) = 0;
+
+ /**
+ * Resumes the audio streaming
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void ResumeL( const TUint32 aEndpointId,
+ TBool aEnableRtcp ) = 0;
+
+ /**
+ * Stops the audio streaming
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void StopL( const TUint32 aEndpointId ) = 0;
+
+ /**
+ * Sets the current record gain
+ * @since Series 60 3.0
+ * @param aGain New gain
+ * @return void
+ */
+ void SetGainL( TInt aGain );
+
+ /**
+ * Sets the current playback volume
+ * @since Series 60 3.0
+ * @param aVolume New volume
+ * @return void
+ */
+ void SetVolumeL( TInt aVolume );
+
+ /**
+ * Returns the maximum volume
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt
+ */
+ TInt MaxVolumeL();
+
+ /**
+ * Returns the maximum gain
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt
+ */
+ TInt MaxGainL();
+
+ /**
+ * Returns the current volume
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt
+ */
+ TInt VolumeL();
+
+ /**
+ * Returns the current gain
+ * @since Series 60 3.0
+ * @param None
+ * @return TInt
+ */
+ TInt GainL();
+
+ /**
+ * Resets Jitterbuffer
+ * @since Series 60 3.0
+ * @param None
+ * @return void
+ */
+ virtual void ResetCountersL() = 0;
+
+ /**
+ * Sets the current record/play balance depending on the stream type
+ * @since Series 60 3.0
+ * @param aLeftbal Left balance
+ * @param aRightbal Right balance
+ * @return void
+ */
+ virtual void SetBalanceL( TInt aLeftbal, TInt aRightbal ) = 0;
+
+ /**
+ * Reuturns the current record/play balance depending on the stream type
+ * @since Series 60 3.0
+ * @param aLeftbal Left balance
+ * @param aRightbal Right balance
+ * @return void
+ */
+ virtual void GetBalanceL( TInt& aLeftbal, TInt& aRightbal ) = 0;
+
+ /**
+ * Sends a media event in a uplink stream. Default implementation will
+ * leave with error code KErrNotSupported
+ * @since Series 60 3.0
+ * @param aEvent Event to be sent
+ * @return void
+ */
+ virtual void SendMediaSignalL( const TMccEvent& aEvent );
+
+ /**
+ * Sends RTCP receiver report to uplink if possible.
+ * @param none
+ * @return One of the standard system-wide error codes.
+ */
+ virtual void SendRTCPReceiverReportL();
+
+ /**
+ * Sends RTCP sender report to uplink if possible.
+ * @param none
+ * @return One of the standard system-wide error codes.
+ */
+ virtual void SendRTCPSenderReportL();
+
+ /**
+ * Sends Non-RTCP data to uplink if possible.
+ * @param aData - [input] Data to send
+ * @return One of the standard system-wide error codes.
+ */
+ virtual void SendRTCPDataL( const TDesC8& aData );
+
+ /**
+ * Starts inactivity timer for a stream in a given session.
+ * @since Series 60 3.0
+ * @param aMessage Message from client
+ * @return TBool Was function Sync/Async
+ */
+ virtual void StartInactivityTimerL( TUint32 aTimeoutTime );
+
+ /**
+ * Stops inactivity timer for a stream in a given session.
+ * @since Series 60 3.0
+ * @param aMessage Message from client
+ * @return TBool Was function Sync/Async
+ */
+ virtual void StopInactivityTimerL();
+
+ virtual void GetSSRCL( TUint32& aSSRCValue ) = 0;
+
+ /**
+ * Function for dynamic bitrate change. This is used only for AMR
+ * encoder, but this will trap the call to DoChangeBitrateL() function
+ * which will be inherited by subclasses.
+ * @param aBitrate New encoder bitrate
+ * @return TInt System-wide error code
+ */
+ TInt ChangeBitrate( TInt aBitrate );
+
+ /**
+ * Fetches FMTP
+ * @since Series 60 3.0
+ */
+ void GetFmtpL( TDes8& aFmtp );
+
+ /**
+ * Fetches codec info
+ * @since Series 60 3.0
+ */
+ virtual void GetCodecL( TMccCodecInfo& aCodec );
+
+ /**
+ *
+ */
+ virtual TBool IsUplink() = 0;
+
+ /**
+ *
+ */
+ virtual void StandByL() = 0;
+
+ /**
+ *
+ */
+ virtual void SetAudioRouteL( TUint32 aRoutingDestination );
+
+ /**
+ *
+ */
+ virtual void GetAudioRouteL( TUint32& aRoutingDestination );
+
+ /**
+ *
+ */
+ MDataSink* DataSink() { return iDatasink; };
+
+ /**
+ *
+ */
+ MDataSource* DataSource() { return iDatasource; };
+
+ /**
+ *
+ */
+ const TUid Type();
+
+ /**
+ *
+ */
+ TBool LocalStream() const;
+
+ /**
+ *
+ */
+ TBool StandbyStream() const;
+
+ /**
+ *
+ */
+ void InformStreamStateChange( TMccEventType aEventType,
+ TUint32 aEndpointId );
+
+ /**
+ * Bind context into stream.
+ * @since Series 60 3.2
+ * @param aEndpointId The endpoint id
+ * @param aContextParams Crypto context
+ * @return void
+ */
+ virtual void BindContextIntoStreamL( TUint32 aEndpointId,
+ const TMccCryptoContext& aContextParams );
+
+ /**
+ * Remove crypto context.
+ * @since Series 60 3.2
+ * @param aEndpointId The endpoint id, If 0
+ * will remove context from all existing endpoints
+ * @return Error code.
+ */
+ virtual TInt RemoveContext( TUint32 aEndpointId );
+
+ protected: // New functions
+
+ /**
+ * Gets sink of the multiplexer
+ */
+ virtual MDataSink* MultiplexerSink();
+
+ /**
+ * Sets the state of the stream
+ * @since Series 60 3.0
+ * @param TStreamState New state
+ * @return void
+ */
+ TBool SetStateL( TStreamState aState, TUint32 aEndpointId );
+
+ /**
+ * Worker function for dynamic bitrate change
+ * @since Series 60 3.0
+ * @param aBitrate New bitrate
+ * @return void
+ */
+ virtual void DoChangeBitrateL( TInt aBitrate );
+
+ /**
+ * Returns the current state of the stream
+ * @since Series 60 3.0
+ * @param None
+ * @return TStreamState
+ */
+ TStreamState CurrentState();
+
+ /**
+ * Standby activation/deactivation
+ */
+ void HandleStandby( TUint32 aEndpointId, TBool aStreamPaused );
+
+ /**
+ * Send streaming events of uncontrolled/MMF endpoints.
+ */
+ TInt SendStreamEventToClient( TMccEventType aEventType,
+ TUint32 aEndpointId,
+ TInt aError = KErrNone );
+
+ /**
+ * Updates multiplexer.
+ */
+ void HandleMultiplexerL();
+
+ /**
+ * Updates sink/source if needed.
+ */
+ void HandleSpecialSinksAndSources();
+
+ /**
+ *
+ */
+ void MultiplexerCleanup();
+
+ void DoPrimeL();
+
+ void DoPlayL();
+
+ void DoPauseL();
+
+ void DoResumeL();
+
+ void DoStopL();
+
+ void ParsePayloadTypesL( RArray<TUint>& aPayloadTypes,
+ const TMccCodecInfo& aCodecInfo ) const;
+
+ TBool IsControllingMmfEndpoint() const;
+
+ TCodecState CurrentCodecState() const;
+
+ void SetCodecState( TCodecState aState );
+
+ void UpdateCodecLoadingPermission( TBool aLoadingAllowed );
+
+ TBool CodecLoadingAllowed() const;
+
+ TBool IsControlled( TUint32 aEndpointId ) const;
+
+ TBool IsCodecOperationAllowed() const;
+
+ void ClearStateChangeEvent();
+
+
+ public: // Functions from base classes
+ // Set priority settings
+ void SetMMFPriority (
+ const TMMFPrioritySettings& aPriority );
+
+ protected: // Constructor
+
+ /**
+ * Constructor
+ */
+ CMccSymStreamBase( TUint32 aMccStreamId,
+ MAsyncEventHandler* aEventhandler,
+ MMccResources* aMccResources,
+ CMccRtpManager* aManager,
+ TInt aStreamType );
+
+ private: // Consturctor
+
+ /**
+ * Private constructor
+ */
+ inline CMccSymStreamBase() : iDatapath( NULL ), iEventhandler( NULL ),
+ iDatasink( NULL ), iDatasource( NULL ),
+ iCodecInfo( TMccCodecInfo() ), iRtpmanager( NULL ),
+ iSoundDevice( NULL ), iMccStreamId( (TUint) KErrNotFound ),
+ iState ( EStateNone )
+ { };
+
+ protected: // Data
+
+ // Streams datapath
+ CMccDataPathBase* iDatapath;
+
+ // Eventhandler for the stream
+ MAsyncEventHandler* iEventhandler;
+
+ MMccResources* iMccResources;
+
+ // Datasink
+ MDataSink* iDatasink;
+
+ // Datasource
+ MDataSource* iDatasource;
+
+ // Codec information
+ TMccCodecInfo iCodecInfo;
+
+ // fmtp string
+ HBufC8* iFmtpAttr;
+
+ // RTP Manager instance
+ CMccRtpManager* iRtpmanager;
+
+ // Devsound instance used by this stream
+ CMMFDevSound* iSoundDevice;
+
+ // Identifier of this stream
+ TUint32 iMccStreamId;
+
+ // Type of the stream
+ TUint8 iType;
+
+ RArray<TUint32> iControlledEndpoints;
+
+ RArray<TUint32> iUncontrolledEndpoints;
+
+ // Multiplexer, not owned
+ CMccMultiplexer* iMultiplexer;
+
+ // Rtp media clock
+ CMccRtpMediaClock* iRtpMediaClock;
+
+ TMMFPrioritySettings iPrioritySettings;
+
+ private: // Data
+ // Current state
+ TStreamState iState;
+
+ TCodecState iCodecState;
+
+ TBool iCodecLoadingAllowed;
+
+ // Currently used state change event
+ TMccEvent iStreamStateChangeEvent;
+
+ private: // Friend classes
+ #if defined( TEST_EUNIT )
+ friend class UT_CMccSymDlStream;
+ friend class UT_CMccSymUlStream;
+ friend class UT_CMccSymSimpleDlStream;
+ #endif
+ };
+
+#endif // MCCSYMSTREAMBASE_H
+
+// End of File