multimediacommscontroller/mmcccontroller/inc/mcccontroller.h
changeset 0 1bce908db942
child 49 64c62431ac08
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 #ifndef MCCCONTROLLER_H
       
    23 #define MCCCONTROLLER_H
       
    24 
       
    25 //  INCLUDES
       
    26 #include <mmf/common/mmfcontroller.h>
       
    27 #include <mmf/common/mmfstandardcustomcommands.h>
       
    28 #include "mmcctranscoder.h"
       
    29 
       
    30 #ifdef FTD_ENABLED
       
    31 #include <e32msgqueue.h>
       
    32 #include "Mccstreamstats.h"
       
    33 #include "Mcccodecstats.h"
       
    34 #include "Mccjbufferstats.h"
       
    35 #endif
       
    36         
       
    37 #include "mccdef.h"
       
    38 #include "mccinternaldef.h"
       
    39 #include "mccrateadaptationobserver.h"
       
    40 #include "masynclinkcreationobserver.h"
       
    41 
       
    42 // CONSTANTS
       
    43 
       
    44 // MACROS
       
    45 
       
    46 // DATA TYPES
       
    47 
       
    48 // FUNCTION PROTOTYPES
       
    49 
       
    50 // FORWARD DECLARATIONS
       
    51 class CMccUlDlClient;
       
    52 class CMccResourcePool;
       
    53 class CMccQosController;
       
    54 class CMccAsyncLinkCreator;
       
    55 class MMccSourceSink;
       
    56 
       
    57 // CLASS DECLARATION
       
    58 
       
    59 /**
       
    60 *  Mcc Controller methods
       
    61 *
       
    62 *  MccController.dll
       
    63 *  @since Series 60 3.0
       
    64 */
       
    65 class CMccController : public CMMFController,
       
    66                        public MMMFAudioPlayDeviceCustomCommandImplementor,
       
    67                        public MMMFAudioRecordDeviceCustomCommandImplementor,
       
    68                        public MMccEventHandler,
       
    69                        public MMccRateAdaptationObserver,
       
    70                        public MAsyncLinkCreationObserver,
       
    71                          public MMccTranscoderObserver
       
    72                         
       
    73     {
       
    74     public: // Constructors and destructor
       
    75 
       
    76         /**
       
    77         * Two-phased constructor.
       
    78         */
       
    79         static CMccController* NewL();
       
    80           
       
    81         /**
       
    82         * Destructor.
       
    83         */
       
    84         virtual ~CMccController();
       
    85 
       
    86     public: // New functions
       
    87 
       
    88     public: // Functions from base classes
       
    89     
       
    90         // From MMccEventHandler
       
    91         
       
    92         virtual TInt SendMccEventToClient( TMccEvent& aEvent );
       
    93 
       
    94 	    virtual void StateChange( TInt aState, TUint32 aLinkId );
       
    95 
       
    96 	    virtual void ErrorOccured( TInt aError, 
       
    97 	                               TUint32 aSessionId, 
       
    98 	                               TUint32 aLinkId,
       
    99 	                               TUint32 aStreamId, 
       
   100 	                               TUint32 aEndpointId );
       
   101 
       
   102         // From CMMFController
       
   103         virtual void CustomCommand( TMMFMessage& aMessage );
       
   104 
       
   105         // From MMMFAudioPlayDeviceCustomCommandImplementor
       
   106         virtual void MapdGetVolumeL( TInt& aVolume );
       
   107         virtual void MapdGetMaxVolumeL( TInt& aMaxVolume );
       
   108         virtual void MapdSetVolumeL( TInt aVolume );
       
   109         virtual void MapdGetBalanceL( TInt& aBalance );
       
   110         virtual void MapdSetBalanceL( TInt aBalance );
       
   111         virtual void MapdSetVolumeRampL( const TTimeIntervalMicroSeconds& aRampDuration );
       
   112       
       
   113         // From MMMFAudioRecordDeviceCustomCommandImplementor
       
   114         virtual void MardSetGainL( TInt aGain );
       
   115         virtual void MardGetMaxGainL( TInt& aMaxGain );
       
   116         virtual void MardGetGainL( TInt& aGain );
       
   117         virtual void MardSetBalanceL( TInt aRBalance );
       
   118         virtual void MardGetBalanceL( TInt& aRBalance );
       
   119         
       
   120         // From MMccRateAdaptationObserver
       
   121         virtual TInt RateAdaptationRequest( const TMccEvent& aInputData, 
       
   122                                             TMccEvent& aOutputData );                                   
       
   123         virtual TInt RateAdaptationAlert( const TMccEvent& aAdaptationData,
       
   124                                           TAlertType aAlertType );
       
   125         
       
   126         // From MAsyncLinkCreationObserver
       
   127         
       
   128         /**
       
   129         * Called when CMccAsyncLinkCreator has finished link creation
       
   130         * and can be deleted
       
   131         * @since Series 60 v3.1
       
   132         * @param aClientData Data for the client containing resolved 
       
   133         *                    IP addresses and ports
       
   134         * @param aCreator    The link creator which has finished
       
   135         * @param aError      System wide error code
       
   136         */
       
   137         virtual void CreationProcessEnd( const TMccCreateLinkPckg& aClientData, 
       
   138                                          CMccAsyncLinkCreator* aCreator, 
       
   139                                          TInt aError );
       
   140          
       
   141         // From MMccTranscoderObserver                                          
       
   142         virtual void MccTranscoderEventReceived( TMccEvent& aEvent );
       
   143 
       
   144     protected:  // Functions from base classes
       
   145     
       
   146         // From CMMFController
       
   147         virtual void AddDataSinkL( MDataSink& aSink );
       
   148         virtual void AddDataSourceL( MDataSource& aSource );
       
   149         virtual void SetPrioritySettings( const TMMFPrioritySettings& aPrioritySettings );
       
   150 
       
   151         // -- Not used --
       
   152         virtual void RemoveDataSourceL( MDataSource& aDataSource );
       
   153         virtual void RemoveDataSinkL( MDataSink& aDataSink );
       
   154         virtual void ResetL();
       
   155         virtual void PlayL();
       
   156         virtual void StopL();
       
   157         virtual void PrimeL();
       
   158         virtual void PauseL();
       
   159         virtual TTimeIntervalMicroSeconds PositionL() const;
       
   160         virtual void SetPositionL( const TTimeIntervalMicroSeconds& aPosition );
       
   161         virtual TTimeIntervalMicroSeconds DurationL() const;
       
   162         virtual void GetNumberOfMetaDataEntriesL( TInt& aNumberOfEntries );
       
   163         virtual CMMFMetaDataEntry* GetMetaDataEntryL( TInt aIndex );
       
   164         // --------------
       
   165 
       
   166     private:
       
   167         /**
       
   168         * C++ default constructor.
       
   169         */
       
   170         CMccController();
       
   171         
       
   172         /**
       
   173         * By default Symbian 2nd phase constructor is private.
       
   174         */
       
   175         void ConstructL();
       
   176 
       
   177         /**
       
   178         * Gets the identifier of current data sink
       
   179         * @param aMessage - Message from clientside
       
   180         * @leave system wide error code if unsuccessful
       
   181         */
       
   182 		void GetSinkIdL( TMMFMessage& aMessage );
       
   183 
       
   184         /**
       
   185         * Gets the identifier of current data source
       
   186         * @param aMessage - Message from clientside
       
   187         * @leave system wide error code if unsuccessful
       
   188         */
       
   189 		void GetSourceIdL( TMMFMessage& aMessage );
       
   190 		
       
   191         /**
       
   192         * Creates an Mcc session
       
   193         * @since Series 60 3.0
       
   194         * @param aMessage - [input] Message from clientside
       
   195         * @leave system wide error code if unsuccessful
       
   196         * @return None
       
   197         */
       
   198         void CreateSessionL( TMMFMessage& aMessage );
       
   199        
       
   200         /**
       
   201         * Closes an Mcc session
       
   202         * @since Series 60 3.0
       
   203         * @param aMessage - [input] Message from clientside
       
   204         */    
       
   205         void CloseSessionL( TMMFMessage& aMessage );
       
   206 
       
   207         /**
       
   208         * Creates a Mcc link
       
   209         * @since Series 60 3.0
       
   210         * @param aMessage - [input] Message from clientside
       
   211         * @return TInt - KErrNone if successful; system wide error code otherwise
       
   212         */
       
   213         void CreateLinkL( TMMFMessage& aMessage );
       
   214 
       
   215         /**
       
   216         * Closes a Mcc link
       
   217         * @since Series 60 3.0
       
   218         * @param aMessage - [input] Message from clientside
       
   219         */    
       
   220         void CloseLinkL( TMMFMessage& aMessage );
       
   221 
       
   222         /**
       
   223         * Starts stream
       
   224         * @since Series 60 3.0
       
   225         * @param aMessage - [input] Message from clientside
       
   226         * @leave System wide error code if unsuccessful
       
   227         * @return None
       
   228         */
       
   229         void StartStreamL( TMMFMessage& aMessage );
       
   230         
       
   231         /**
       
   232         * Stops stream
       
   233         * @since Series 60 3.0
       
   234         * @param aMessage - [input] Message from clientside
       
   235         */
       
   236         void StopStreamL( TMMFMessage& aMessage );
       
   237         
       
   238         /**
       
   239         * Starts inactivity timer for a stream in a given session.
       
   240         * @since Series 60 3.0
       
   241         * @param aMessage - [input] Message from clientside
       
   242         * @leave System wide error code if unsuccessful
       
   243         * @return None
       
   244         */
       
   245         void StartInactivityTimerL( TMMFMessage& aMessage );
       
   246         
       
   247         /**
       
   248         * Stops inactivity timer for a stream in a given session.
       
   249         * @since Series 60 3.0
       
   250         * @param aMessage - [input] Message from clientside
       
   251         * @leave System wide error code if unsuccessful
       
   252         * @return None
       
   253         */
       
   254         void StopInactivityTimerL( TMMFMessage& aMessage );
       
   255         
       
   256         /**
       
   257         * Request Event Notification
       
   258         * @since Series 60 3.0
       
   259         * @param aMessage - [input] Message from clientside
       
   260         * @leave System wide error code if unsuccessful
       
   261         * @return None
       
   262         */    
       
   263         void RequestEventNotificationL( TMMFMessage& aMessage );
       
   264 
       
   265         /**
       
   266         * Creates event to eventbuffer and sends event to client
       
   267         * @since Series 60 3.0
       
   268         */
       
   269         void SendEvent();
       
   270         void SendEventL();
       
   271         
       
   272         /**
       
   273         * Creates stream
       
   274         * @since Series 60 3.0
       
   275         * @param aMessage - [input] Message from clientside
       
   276         * @leave System wide error code if unsuccessful
       
   277         * @return None
       
   278         */
       
   279         void CreateStreamL( TMMFMessage& aMessage );
       
   280 
       
   281         /**
       
   282         * Deletes stream
       
   283         * @since Series 60 3.0
       
   284         * @param aMessage - [input] Message from clientside
       
   285         */
       
   286         void DeleteStreamL( TMMFMessage& aMessage );
       
   287 
       
   288         /**
       
   289         * Prepares stream
       
   290         * @since Series 60 3.0
       
   291         * @param aMessage - [input] Message from clientside
       
   292         * @leave System wide error code if unsuccessful
       
   293         * @return None
       
   294         */
       
   295         void PrepareStreamL( TMMFMessage& aMessage );
       
   296 
       
   297         /**
       
   298         * Pauses stream
       
   299         * @since Series 60 3.0
       
   300         * @param aMessage - [input] Message from clientside
       
   301         * @leave System wide error code if unsuccessful
       
   302         * @return None
       
   303         */
       
   304         void PauseStreamL( TMMFMessage& aMessage );
       
   305 
       
   306         /**
       
   307         * Resumes stream
       
   308         * @since Series 60 3.0
       
   309         * @param aMessage - [input] Message from clientside
       
   310         * @leave System wide error code if unsuccessful
       
   311         * @return None
       
   312         */
       
   313         void ResumeStreamL( TMMFMessage& aMessage );
       
   314         
       
   315         /**
       
   316         * Checks if streams exists in certain link
       
   317         * @since Series 60 3.0
       
   318         * @param aMessage - [input] Message from clientside
       
   319         * @leave System wide error code if unsuccessful
       
   320         * @return None
       
   321         */
       
   322         void StreamsExistsL( TMMFMessage& aMessage );
       
   323         
       
   324 
       
   325         /**
       
   326         * Get List of supported codecs
       
   327         * @since Series 60 3.0
       
   328         * @param aMessage - [input] Message from clientside
       
   329         */
       
   330         void GetSupportedCodecsL( TMMFMessage& aMessage ) const;
       
   331 
       
   332         /**
       
   333         * Get current codec
       
   334         * @since Series 60 3.0
       
   335         * @param aMessage - [input] Message from clientside
       
   336         */
       
   337         void GetCodecL( TMMFMessage& aMessage );
       
   338         
       
   339         /**
       
   340         * Get fmtp string
       
   341         * @since Series 60 3.0
       
   342         * @param aMessage - [input] Message from clientside
       
   343         */
       
   344         void GetFmtpAttrL( TMMFMessage& aMessage );
       
   345         
       
   346         /**
       
   347         * Set Codec
       
   348         * @since Series 60 3.0
       
   349         * @param aMessage - [input] Message from clientside
       
   350         */
       
   351         void SetCodecL( TMMFMessage& aMessage );
       
   352 
       
   353         /**
       
   354         * Get the supported bitrates from the codec of the specified stream
       
   355         * @since Series 60 3.0
       
   356         * @param aMessage - [input] Message from clientside
       
   357         */
       
   358         void GetSupportedBitratesL( TMMFMessage& aMessage );
       
   359         
       
   360         /**
       
   361         * Get syncronisation source from the specified stream
       
   362         * @since Series 60 3.0
       
   363         * @param aMessage - [input] Message from clientside
       
   364         */
       
   365         void GetSSRCL( TMMFMessage& aMessage );
       
   366 
       
   367         /**
       
   368         * Set Priority for stream
       
   369         * @since Series 60 3.0
       
   370         * @param aMessage - [input] Message from clientside
       
   371         */
       
   372         void SetPriorityL( TMMFMessage& aMessage );
       
   373 
       
   374         /**
       
   375         * Sets stream settings
       
   376         * @since Series 60 3.0
       
   377         * @param aMessage - [input] Message from clientside
       
   378         */
       
   379         void StreamSettingsL( TMMFMessage& aMessage );
       
   380         
       
   381         /**
       
   382         * Sends RTCP receiver report to uplink if possible.
       
   383         * @since Series 60 3.0
       
   384         * @param aMessage - [input] Message from clientside
       
   385         * @leave System wide error code if unsuccessful
       
   386         * @return None
       
   387         */
       
   388         void SendRTCPReceiverReportL( TMMFMessage& aMessage ); 
       
   389         
       
   390         /**
       
   391         * Sends RTCP sender report to uplink if possible.
       
   392         * @since Series 60 3.0
       
   393         * @param aMessage - [input] Message from clientside
       
   394         * @leave System wide error code if unsuccessful
       
   395         * @return None
       
   396         */
       
   397         void SendRTCPSenderReportL( TMMFMessage& aMessage ); 
       
   398         
       
   399         /**
       
   400         * Sends non-RTCP data to uplink if possible.
       
   401         * @since Series 60 3.0
       
   402         * @param aMessage - [input] Message from clientside
       
   403         * @leave System wide error code if unsuccessful
       
   404         * @return None
       
   405         */
       
   406         void SendRTCPDataL( TMMFMessage& aMessage ); 
       
   407 
       
   408         /**
       
   409         * Sets remote address for given session
       
   410         * @since Series 60 3.0
       
   411         * @param aMessage - [input] Message from clientside
       
   412         * @leave System wide error code if unsuccessful
       
   413         * @return None
       
   414         */
       
   415         void SetRemoteAddressL( TMMFMessage& aMessage );
       
   416 
       
   417 		/**
       
   418         * Sets remote address for given session
       
   419         * @since Series 60 3.0
       
   420         * @param aMessage - [input] Message from clientside
       
   421         * @leave System wide error code if unsuccessful
       
   422         * @return None
       
   423         */
       
   424 		void SetRemoteRtcpAddrL( TMMFMessage& aMessage );
       
   425 		
       
   426         /**
       
   427         * Finds given session from session array
       
   428         * @since Series 60 3.0
       
   429         * @param aSessionID - [input] RTP session ID
       
   430         * @return TInt - Sessionarray index
       
   431         */
       
   432         TInt FindSessionL( TUint32 aSessionID );
       
   433 
       
   434         /**
       
   435         * CustomCommand 
       
   436         * @since Series 60 3.0
       
   437         * @param aMessage - [input] TMMFMessage
       
   438         * @leave System wide error code if unsuccessful
       
   439         * @return None
       
   440         */
       
   441         void CustomCommandL( TMMFMessage& aMessage );
       
   442         
       
   443         /**
       
   444         * Sends media signals to given stream in given session
       
   445         * @since Series 60 3.0
       
   446         * @param aMessage - [input] Message containing the media signal
       
   447         * @return void
       
   448         */
       
   449         void SendMediaSignalL( TMMFMessage& aMessage );
       
   450 
       
   451         /**
       
   452         * Enables camera viewfinder
       
   453         * @param aMessage - [input] Message containing the media signal
       
   454         * @return void
       
   455         */
       
   456         void EnableViewFinderL( TMMFMessage& aMessage );
       
   457 
       
   458         /**
       
   459         * Disables camera viewfinder
       
   460         * @param aMessage - [input] Message containing the media signal
       
   461         * @return void
       
   462         */
       
   463         void DisableViewFinderL( TMMFMessage& aMessage );
       
   464 
       
   465         /**
       
   466         * Gets current viewfinder settings
       
   467         * @param aMessage - [input]
       
   468         * @return void
       
   469         */
       
   470         void ViewFinderSettingsL( TMMFMessage& aMessage );
       
   471         
       
   472         /**
       
   473         * Get camera info
       
   474         * @param aMessage - [input] Message 
       
   475         * @return void
       
   476         */
       
   477         void GetCamInfoL( TMMFMessage& aMessage );
       
   478         
       
   479         /**
       
   480         * Get num of available cameras
       
   481         * @param aMessage - [input] Message 
       
   482         * @return void
       
   483         */
       
   484         void GetNumOfCamsL( TMMFMessage& aMessage );
       
   485 
       
   486         /**
       
   487         * Set camera configuration value
       
   488         * @param aMessage - [input] Message 
       
   489         * @return void
       
   490         */
       
   491         void SetCamValue1L( TMMFMessage& aMessage );
       
   492 
       
   493         /**
       
   494         * Get camera configuration value
       
   495         * @param aMessage - [input] Message 
       
   496         * @return void
       
   497         */
       
   498         void GetCamValue1L( TMMFMessage& aMessage );
       
   499 
       
   500         /**
       
   501         * Set camera configuration value
       
   502         * @param aMessage - [input] Message 
       
   503         * @return void
       
   504         */
       
   505         void SetCamValue2L( TMMFMessage& aMessage );
       
   506 
       
   507         /**
       
   508         * Get camera configuration value
       
   509         * @param aMessage - [input] Message 
       
   510         * @return void
       
   511         */
       
   512         void GetCamValue2L( TMMFMessage& aMessage );
       
   513         
       
   514         /**
       
   515         * Set audio routing
       
   516         * @param aMessage - [input] Message 
       
   517         * @return void
       
   518         */
       
   519         void SetAudioRouteL( TMMFMessage& aMessage );
       
   520         
       
   521         /**
       
   522         * Get current audio routing destination
       
   523         * @param aMessage - [input] Message 
       
   524         * @return void
       
   525         */
       
   526         void GetAudioRouteL( TMMFMessage& aMessage );
       
   527        
       
   528        /**
       
   529         * Get endpoint parameters
       
   530         * @param aMessage - [input] Message 
       
   531         * @return void
       
   532         */
       
   533         void GetEndpointParameterL( TMMFMessage& aMessage );
       
   534           
       
   535         /**
       
   536         * Set endpoint parameters
       
   537         * @param aMessage - [input] Message 
       
   538         * @return void
       
   539         */
       
   540         void SetEndpointParameterL( TMMFMessage& aMessage );
       
   541         
       
   542         /**
       
   543         * Updates endpoin
       
   544         * @param aMessage - [input] Message 
       
   545         * @return void
       
   546         */
       
   547         void UpdateEndpointL( TMMFMessage& aMessage );
       
   548         
       
   549         /**
       
   550         * Reuse endpoint
       
   551         * @param aMessage - [input] Message 
       
   552         * @return void
       
   553         */
       
   554         void ReuseL( TMMFMessage& aMessage );
       
   555 
       
   556         /**
       
   557         * Get referece count of endpoint
       
   558         * @param aMessage - [input] Message 
       
   559         * @return void
       
   560         */
       
   561         void ReferenceCountL( TMMFMessage& aMessage );
       
   562         
       
   563         /**
       
   564         * Removes endpoint, all streams, using the endpoint, are stopped.
       
   565         * @return void
       
   566         */
       
   567         void RemoveEndpointL( TUint32 aEndpointId );
       
   568         
       
   569         /**
       
   570         * Transcodes media file
       
   571         * @return void
       
   572         */
       
   573         void TranscodeFileL( TMMFMessage& aMessage );
       
   574         
       
   575         /**
       
   576         * Cancel transcodes media file
       
   577         * @return void
       
   578         */
       
   579         void CancelTranscodeFileL( TMMFMessage& aMessage );
       
   580         
       
   581         /**
       
   582          * Binds context into stream
       
   583          * @param aMessage - [input] Message
       
   584          * @return void
       
   585          */
       
   586         void BindContextIntoStreamL( TMMFMessage& aMessage );
       
   587         
       
   588         /**
       
   589          * Remove context.
       
   590          * @param aMessage - [input] Message
       
   591          * @return void
       
   592          */
       
   593         void RemoveContextL( TMMFMessage& aMessage );
       
   594         
       
   595     private:
       
   596         
       
   597         TInt StoreAndSendEvent( const TMccEvent& aEvent );
       
   598         
       
   599         void StoreEventL( const TMccEvent& aEvent );
       
   600         
       
   601         void StreamActionL( const TMccEvent& aEvent, const TMccEvent* aAdditionalEvent );
       
   602         
       
   603         void CancelMmfMessage();
       
   604     
       
   605         void PauseByEndPointIdL( const TMccEvent& aEvent, TUint32 aEndPointId );
       
   606         
       
   607         void ResumeByEndPointIdL( const TMccEvent& aEvent, TUint32 aEndPointId );
       
   608         
       
   609         TInt UpdateEndpointVolumeSettings( MMccSourceSink& aEndpoint );
       
   610 
       
   611         void AddCodec(
       
   612             const TUint32& aCodec,
       
   613             const RArray< TFourCC >& aSupportedOutCodecs,
       
   614             const RArray< TFourCC >& aSupportedInCodecs,
       
   615             TFixedArray<TFourCC, KMccFourCCArraySize>& aCodecs,
       
   616             TInt aIndex ) const;
       
   617         
       
   618     private:    // Data
       
   619 
       
   620         // Priority settings
       
   621         TMMFPrioritySettings    iPrioritySettings;
       
   622 
       
   623         // Type of stream EMccAudioUplink/EMccAudioDownlink
       
   624         TInt iStreamType;
       
   625 
       
   626         // IapID
       
   627         TUint iIapID;
       
   628         
       
   629         // MaxVolume
       
   630         TInt iMaxVolume;
       
   631 
       
   632         // Volume
       
   633         TInt iVolume;
       
   634         
       
   635         // MaxGain
       
   636         TInt iMaxGain;
       
   637 
       
   638         // Gain
       
   639         TInt iGain;
       
   640 
       
   641         // Session Index
       
   642         TUint32 iSessionIndex;
       
   643 
       
   644         TMMFMessage* iMessage;
       
   645 
       
   646         // Stream settings package
       
   647         TMccStreamPckg iStreamPckg;
       
   648 
       
   649         // Session PointerArray
       
   650         RPointerArray<CMccUlDlClient> iSessionArray;
       
   651         
       
   652         // Event Buffer
       
   653         RPointerArray<TMccEvent> iEventBuf;
       
   654 		
       
   655 		CMccResourcePool* iResourcePool;
       
   656 		
       
   657 		CMccQosController* iQosController;
       
   658 
       
   659 		// Asynchronous Link Creator object
       
   660         RPointerArray<CMccAsyncLinkCreator> iCreatorArray;
       
   661 		
       
   662 		CMccTranscoder* iTranscoder;
       
   663 		
       
   664 		// key used to destroy transcoder implemetation
       
   665 		TUid iTranscoderKey;
       
   666 		
       
   667 		// DTMF payload types indexed by link ID
       
   668 		RArray< TMccKeyValuePair<TUint32, TUint8> > iDtmfPayloadTypes;
       
   669         
       
   670         #ifdef FTD_ENABLED
       
   671         
       
   672         // Message queue carrying stream statistics
       
   673         RMsgQueue<TMccStreamStats> iStreamStatsQueue;
       
   674         
       
   675         // Message queue carrying codec statistics
       
   676         RMsgQueue<TMccCodecStats> iCodecStatsQueue;
       
   677         
       
   678         // Message queue carrying jitter buffer statistics
       
   679         RMsgQueue<TMccJBufferStats> iJBufferStatsQueue;
       
   680         
       
   681         #endif
       
   682           
       
   683     private:    // Friend classes
       
   684 
       
   685     #ifdef TEST_EUNIT
       
   686     friend class UT_CMccController;
       
   687     #endif
       
   688     };
       
   689 
       
   690 #endif