diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccsubcontroller/inc/mccsymstreambase.h --- /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 + +#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& 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 iControlledEndpoints; + + RArray 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