--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmcccontroller/inc/mcccontroller.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,690 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+
+#ifndef MCCCONTROLLER_H
+#define MCCCONTROLLER_H
+
+// INCLUDES
+#include <mmf/common/mmfcontroller.h>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include "mmcctranscoder.h"
+
+#ifdef FTD_ENABLED
+#include <e32msgqueue.h>
+#include "Mccstreamstats.h"
+#include "Mcccodecstats.h"
+#include "Mccjbufferstats.h"
+#endif
+
+#include "mccdef.h"
+#include "mccinternaldef.h"
+#include "mccrateadaptationobserver.h"
+#include "masynclinkcreationobserver.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CMccUlDlClient;
+class CMccResourcePool;
+class CMccQosController;
+class CMccAsyncLinkCreator;
+class MMccSourceSink;
+
+// CLASS DECLARATION
+
+/**
+* Mcc Controller methods
+*
+* MccController.dll
+* @since Series 60 3.0
+*/
+class CMccController : public CMMFController,
+ public MMMFAudioPlayDeviceCustomCommandImplementor,
+ public MMMFAudioRecordDeviceCustomCommandImplementor,
+ public MMccEventHandler,
+ public MMccRateAdaptationObserver,
+ public MAsyncLinkCreationObserver,
+ public MMccTranscoderObserver
+
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMccController* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMccController();
+
+ public: // New functions
+
+ public: // Functions from base classes
+
+ // 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 );
+
+ // From CMMFController
+ virtual void CustomCommand( TMMFMessage& aMessage );
+
+ // From MMMFAudioPlayDeviceCustomCommandImplementor
+ virtual void MapdGetVolumeL( TInt& aVolume );
+ virtual void MapdGetMaxVolumeL( TInt& aMaxVolume );
+ virtual void MapdSetVolumeL( TInt aVolume );
+ virtual void MapdGetBalanceL( TInt& aBalance );
+ virtual void MapdSetBalanceL( TInt aBalance );
+ virtual void MapdSetVolumeRampL( const TTimeIntervalMicroSeconds& aRampDuration );
+
+ // From MMMFAudioRecordDeviceCustomCommandImplementor
+ virtual void MardSetGainL( TInt aGain );
+ virtual void MardGetMaxGainL( TInt& aMaxGain );
+ virtual void MardGetGainL( TInt& aGain );
+ virtual void MardSetBalanceL( TInt aRBalance );
+ virtual void MardGetBalanceL( TInt& aRBalance );
+
+ // From MMccRateAdaptationObserver
+ virtual TInt RateAdaptationRequest( const TMccEvent& aInputData,
+ TMccEvent& aOutputData );
+ virtual TInt RateAdaptationAlert( const TMccEvent& aAdaptationData,
+ TAlertType aAlertType );
+
+ // From MAsyncLinkCreationObserver
+
+ /**
+ * Called when CMccAsyncLinkCreator has finished link creation
+ * and can be deleted
+ * @since Series 60 v3.1
+ * @param aClientData Data for the client containing resolved
+ * IP addresses and ports
+ * @param aCreator The link creator which has finished
+ * @param aError System wide error code
+ */
+ virtual void CreationProcessEnd( const TMccCreateLinkPckg& aClientData,
+ CMccAsyncLinkCreator* aCreator,
+ TInt aError );
+
+ // From MMccTranscoderObserver
+ virtual void MccTranscoderEventReceived( TMccEvent& aEvent );
+
+ protected: // Functions from base classes
+
+ // From CMMFController
+ virtual void AddDataSinkL( MDataSink& aSink );
+ virtual void AddDataSourceL( MDataSource& aSource );
+ virtual void SetPrioritySettings( const TMMFPrioritySettings& aPrioritySettings );
+
+ // -- Not used --
+ virtual void RemoveDataSourceL( MDataSource& aDataSource );
+ virtual void RemoveDataSinkL( MDataSink& aDataSink );
+ virtual void ResetL();
+ virtual void PlayL();
+ virtual void StopL();
+ virtual void PrimeL();
+ virtual void PauseL();
+ virtual TTimeIntervalMicroSeconds PositionL() const;
+ virtual void SetPositionL( const TTimeIntervalMicroSeconds& aPosition );
+ virtual TTimeIntervalMicroSeconds DurationL() const;
+ virtual void GetNumberOfMetaDataEntriesL( TInt& aNumberOfEntries );
+ virtual CMMFMetaDataEntry* GetMetaDataEntryL( TInt aIndex );
+ // --------------
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CMccController();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Gets the identifier of current data sink
+ * @param aMessage - Message from clientside
+ * @leave system wide error code if unsuccessful
+ */
+ void GetSinkIdL( TMMFMessage& aMessage );
+
+ /**
+ * Gets the identifier of current data source
+ * @param aMessage - Message from clientside
+ * @leave system wide error code if unsuccessful
+ */
+ void GetSourceIdL( TMMFMessage& aMessage );
+
+ /**
+ * Creates an Mcc session
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave system wide error code if unsuccessful
+ * @return None
+ */
+ void CreateSessionL( TMMFMessage& aMessage );
+
+ /**
+ * Closes an Mcc session
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void CloseSessionL( TMMFMessage& aMessage );
+
+ /**
+ * Creates a Mcc link
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @return TInt - KErrNone if successful; system wide error code otherwise
+ */
+ void CreateLinkL( TMMFMessage& aMessage );
+
+ /**
+ * Closes a Mcc link
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void CloseLinkL( TMMFMessage& aMessage );
+
+ /**
+ * Starts stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void StartStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Stops stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void StopStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Starts inactivity timer for a stream in a given session.
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void StartInactivityTimerL( TMMFMessage& aMessage );
+
+ /**
+ * Stops inactivity timer for a stream in a given session.
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void StopInactivityTimerL( TMMFMessage& aMessage );
+
+ /**
+ * Request Event Notification
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void RequestEventNotificationL( TMMFMessage& aMessage );
+
+ /**
+ * Creates event to eventbuffer and sends event to client
+ * @since Series 60 3.0
+ */
+ void SendEvent();
+ void SendEventL();
+
+ /**
+ * Creates stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void CreateStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Deletes stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void DeleteStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Prepares stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void PrepareStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Pauses stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void PauseStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Resumes stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void ResumeStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Checks if streams exists in certain link
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void StreamsExistsL( TMMFMessage& aMessage );
+
+
+ /**
+ * Get List of supported codecs
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void GetSupportedCodecsL( TMMFMessage& aMessage ) const;
+
+ /**
+ * Get current codec
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void GetCodecL( TMMFMessage& aMessage );
+
+ /**
+ * Get fmtp string
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void GetFmtpAttrL( TMMFMessage& aMessage );
+
+ /**
+ * Set Codec
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void SetCodecL( TMMFMessage& aMessage );
+
+ /**
+ * Get the supported bitrates from the codec of the specified stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void GetSupportedBitratesL( TMMFMessage& aMessage );
+
+ /**
+ * Get syncronisation source from the specified stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void GetSSRCL( TMMFMessage& aMessage );
+
+ /**
+ * Set Priority for stream
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void SetPriorityL( TMMFMessage& aMessage );
+
+ /**
+ * Sets stream settings
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ */
+ void StreamSettingsL( TMMFMessage& aMessage );
+
+ /**
+ * Sends RTCP receiver report to uplink if possible.
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void SendRTCPReceiverReportL( TMMFMessage& aMessage );
+
+ /**
+ * Sends RTCP sender report to uplink if possible.
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void SendRTCPSenderReportL( TMMFMessage& aMessage );
+
+ /**
+ * Sends non-RTCP data to uplink if possible.
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void SendRTCPDataL( TMMFMessage& aMessage );
+
+ /**
+ * Sets remote address for given session
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void SetRemoteAddressL( TMMFMessage& aMessage );
+
+ /**
+ * Sets remote address for given session
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message from clientside
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void SetRemoteRtcpAddrL( TMMFMessage& aMessage );
+
+ /**
+ * Finds given session from session array
+ * @since Series 60 3.0
+ * @param aSessionID - [input] RTP session ID
+ * @return TInt - Sessionarray index
+ */
+ TInt FindSessionL( TUint32 aSessionID );
+
+ /**
+ * CustomCommand
+ * @since Series 60 3.0
+ * @param aMessage - [input] TMMFMessage
+ * @leave System wide error code if unsuccessful
+ * @return None
+ */
+ void CustomCommandL( TMMFMessage& aMessage );
+
+ /**
+ * Sends media signals to given stream in given session
+ * @since Series 60 3.0
+ * @param aMessage - [input] Message containing the media signal
+ * @return void
+ */
+ void SendMediaSignalL( TMMFMessage& aMessage );
+
+ /**
+ * Enables camera viewfinder
+ * @param aMessage - [input] Message containing the media signal
+ * @return void
+ */
+ void EnableViewFinderL( TMMFMessage& aMessage );
+
+ /**
+ * Disables camera viewfinder
+ * @param aMessage - [input] Message containing the media signal
+ * @return void
+ */
+ void DisableViewFinderL( TMMFMessage& aMessage );
+
+ /**
+ * Gets current viewfinder settings
+ * @param aMessage - [input]
+ * @return void
+ */
+ void ViewFinderSettingsL( TMMFMessage& aMessage );
+
+ /**
+ * Get camera info
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetCamInfoL( TMMFMessage& aMessage );
+
+ /**
+ * Get num of available cameras
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetNumOfCamsL( TMMFMessage& aMessage );
+
+ /**
+ * Set camera configuration value
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void SetCamValue1L( TMMFMessage& aMessage );
+
+ /**
+ * Get camera configuration value
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetCamValue1L( TMMFMessage& aMessage );
+
+ /**
+ * Set camera configuration value
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void SetCamValue2L( TMMFMessage& aMessage );
+
+ /**
+ * Get camera configuration value
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetCamValue2L( TMMFMessage& aMessage );
+
+ /**
+ * Set audio routing
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void SetAudioRouteL( TMMFMessage& aMessage );
+
+ /**
+ * Get current audio routing destination
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetAudioRouteL( TMMFMessage& aMessage );
+
+ /**
+ * Get endpoint parameters
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void GetEndpointParameterL( TMMFMessage& aMessage );
+
+ /**
+ * Set endpoint parameters
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void SetEndpointParameterL( TMMFMessage& aMessage );
+
+ /**
+ * Updates endpoin
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void UpdateEndpointL( TMMFMessage& aMessage );
+
+ /**
+ * Reuse endpoint
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void ReuseL( TMMFMessage& aMessage );
+
+ /**
+ * Get referece count of endpoint
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void ReferenceCountL( TMMFMessage& aMessage );
+
+ /**
+ * Removes endpoint, all streams, using the endpoint, are stopped.
+ * @return void
+ */
+ void RemoveEndpointL( TUint32 aEndpointId );
+
+ /**
+ * Transcodes media file
+ * @return void
+ */
+ void TranscodeFileL( TMMFMessage& aMessage );
+
+ /**
+ * Cancel transcodes media file
+ * @return void
+ */
+ void CancelTranscodeFileL( TMMFMessage& aMessage );
+
+ /**
+ * Binds context into stream
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void BindContextIntoStreamL( TMMFMessage& aMessage );
+
+ /**
+ * Remove context.
+ * @param aMessage - [input] Message
+ * @return void
+ */
+ void RemoveContextL( TMMFMessage& aMessage );
+
+ private:
+
+ TInt StoreAndSendEvent( const TMccEvent& aEvent );
+
+ void StoreEventL( const TMccEvent& aEvent );
+
+ void StreamActionL( const TMccEvent& aEvent, const TMccEvent* aAdditionalEvent );
+
+ void CancelMmfMessage();
+
+ void PauseByEndPointIdL( const TMccEvent& aEvent, TUint32 aEndPointId );
+
+ void ResumeByEndPointIdL( const TMccEvent& aEvent, TUint32 aEndPointId );
+
+ TInt UpdateEndpointVolumeSettings( MMccSourceSink& aEndpoint );
+
+ void AddCodec(
+ const TUint32& aCodec,
+ const RArray< TFourCC >& aSupportedOutCodecs,
+ const RArray< TFourCC >& aSupportedInCodecs,
+ TFixedArray<TFourCC, KMccFourCCArraySize>& aCodecs,
+ TInt aIndex ) const;
+
+ private: // Data
+
+ // Priority settings
+ TMMFPrioritySettings iPrioritySettings;
+
+ // Type of stream EMccAudioUplink/EMccAudioDownlink
+ TInt iStreamType;
+
+ // IapID
+ TUint iIapID;
+
+ // MaxVolume
+ TInt iMaxVolume;
+
+ // Volume
+ TInt iVolume;
+
+ // MaxGain
+ TInt iMaxGain;
+
+ // Gain
+ TInt iGain;
+
+ // Session Index
+ TUint32 iSessionIndex;
+
+ TMMFMessage* iMessage;
+
+ // Stream settings package
+ TMccStreamPckg iStreamPckg;
+
+ // Session PointerArray
+ RPointerArray<CMccUlDlClient> iSessionArray;
+
+ // Event Buffer
+ RPointerArray<TMccEvent> iEventBuf;
+
+ CMccResourcePool* iResourcePool;
+
+ CMccQosController* iQosController;
+
+ // Asynchronous Link Creator object
+ RPointerArray<CMccAsyncLinkCreator> iCreatorArray;
+
+ CMccTranscoder* iTranscoder;
+
+ // key used to destroy transcoder implemetation
+ TUid iTranscoderKey;
+
+ // DTMF payload types indexed by link ID
+ RArray< TMccKeyValuePair<TUint32, TUint8> > iDtmfPayloadTypes;
+
+ #ifdef FTD_ENABLED
+
+ // Message queue carrying stream statistics
+ RMsgQueue<TMccStreamStats> iStreamStatsQueue;
+
+ // Message queue carrying codec statistics
+ RMsgQueue<TMccCodecStats> iCodecStatsQueue;
+
+ // Message queue carrying jitter buffer statistics
+ RMsgQueue<TMccJBufferStats> iJBufferStatsQueue;
+
+ #endif
+
+ private: // Friend classes
+
+ #ifdef TEST_EUNIT
+ friend class UT_CMccController;
+ #endif
+ };
+
+#endif