ipappsrv_plat/media_control_api/inc/mmccinterface.h
changeset 0 1bce908db942
child 49 64c62431ac08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipappsrv_plat/media_control_api/inc/mmccinterface.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,794 @@
+/*
+* Copyright (c) 2006 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:    Class is used for controlling MCC.
+*
+*/
+
+
+
+
+#ifndef MMCCINTERFACE_H
+#define MMCCINTERFACE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <mmf/common/mmffourcc.h>
+#include <mmf/common/mmfstandardcustomcommands.h>
+#include <mmccnetworksettings.h>
+#include <mmccinterfacedef.h>
+#include <mmccevents.h>
+
+// FORWARD DECLARATIONS
+class CMccCodecInformation;
+class CMccEvent;
+class TCameraInfo;
+
+// CONSTANTS
+const TUid KUidMccInterface     = { 0x102073F7 };
+const TUid KUidMccFileSink      = { 0x102747D7 };
+const TUid KUidMccFileSource    = { 0x102747D5 };
+const TUid KUidMccRtpSource     = { 0x1020740B };
+const TUid KUidMccRtpSink       = { 0x1020740C };
+const TUid KUidMccVideoSource   = { 0x102747D6 };
+const TUid KUidMccVideoSink     = { 0x102747D8 };
+const TUid KUidMccTranscoder    = { 0x10282897 };
+const TUid KUidMccAnySource     = { 0x10283394 };
+const TUid KUidMccAnySink       = { 0x10283395 };
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// CLASS DECLARATION
+
+/**
+*  MCC subsystem client interface. Class is used for setting up and controlling
+*  multimedia streams. Details of resources needed by the cleint are unknown, 
+*  hence specified in details in every session.
+*
+*  MCC interface is based on four components: Session, link, stream and endpoint
+*  (sink or source). In order to create multimedia streams, client need to
+*  construct it by using these four components. 
+*
+*  @lib mmccinterface.lib
+*/
+class CMccInterface : public CBase
+{
+public:  // Constructors and destructor
+    /**
+    * Two-phased constructor.
+    * @param aObserver A callback object to receive and handle
+    *                    event notifications from MCC subsystem.
+    * @return CMccInterface* Pointer to the interface object created
+    */
+    IMPORT_C static CMccInterface* NewL( MMccCtrlObserver& aObserver );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CMccInterface();
+
+public: // New functions
+
+    /**
+    * Creates a new MCC session. The session is needed to create
+    * links and streams into MCC. A single session may have any
+    * number of links.
+    * @param aSessionID ID of the new session if successful
+    * @return KErrNone if success; otherwise system wide error code.
+    */
+    IMPORT_C TInt CreateSession( TUint32& aSessionId );
+
+    /**
+    * Closes MCC session. All links and streams of the session are also
+    * closed.
+    * @param aSessionId session ID
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt CloseSession( TUint32 aSessionId );
+
+    /**
+    * Creates a new MCC link with a remote participant. Link creates
+    * new RTP session with given network settings.
+    * @param aSessionId session ID
+    * @param aLinkType Defines is stream Up- or Downlink
+    * @param aLinkId ID of new link
+    * @param aNetSettings network settings for the link
+    * @return KErrNone if success; otherwise system wide error code.
+    */
+    IMPORT_C TInt CreateLink( TUint32 aSessionId,
+                              TInt aLinkType,
+                              TUint32& aLinkId,
+                              TMccNetSettings& aNetSettings );
+
+    /**
+    * Closes MCC link. All streams of the link are also closed.
+    * @param aSessionId session ID
+    * @param aLinkId link ID
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt CloseLink( TUint32 aSessionId, TUint32 aLinkId );
+
+    /**
+    * Creates a stream into a MCC link. Constructs the datapath
+    * for stream, but no media resources reserved yet.
+    * @param aSessionId session where stream is created to
+    * @param aLinkId link ID where stream is created to
+    * @param aStreamId Stream ID for the stream created.
+    * @param aStreamType type of the stream
+    * @param aCodecInformation Codec information for the stream.
+    * @return KErrNone if success; otherwise system wide error code.
+    */
+    IMPORT_C TInt CreateStream( TUint32 aSessionId, TUint32 aLinkId,
+                                TUint32& aStreamId, TInt aStreamType,
+                                CMccCodecInformation& aCodecInformation );
+
+    /**
+    * Prepares a stream so that it is ready to be started. Media resources
+    * are reserved and RTP stream is created.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID where stream belongs to
+    * @param aStreamId ID identifying stream to be prepared
+    * @param aEndpointId ID identifying endpoint of the stream to be prepared.
+    *         If value 0, both endpoints prepared.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt PrepareStream( TUint32 aSessionId, TUint32 aLinkId, 
+                                 TUint32 aStreamId, TUint32 aEndpointId = 0 );
+
+    /**
+    * Starts to send/receive media stream in a given session.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be started
+    * @param aPaused ETrue, if stream paused after start
+    * @param aEndpointId ID identifying endpoint of the stream to be started.
+    *         If value 0, both endpoints started.
+    * @param aEnableRTCP ETrue, if RTCP sent.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt StartStream( TUint32 aSessionId, TUint32 aLinkId, 
+                               TUint32 aStreamId, TUint32 aEndpointId = 0,
+                               TBool aPaused = EFalse, TBool aEnableRTCP = ETrue );
+
+    /**
+    * Pauses media stream in a given session. No RTP packets are 
+    * sent/received anymore. However, RTCP packets may still be sent and
+    * received.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be paused
+    * @param aEndpointId ID identifying endpoint of the stream to be paused.
+    *         If value 0, both endpoints paused.
+    * @param aEnableRTCP ETrue, if RTCP sent while paused.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt PauseStream( TUint32 aSessionId, TUint32 aLinkId, 
+                               TUint32 aStreamId, TUint32 aEndpointId = 0,
+                               TBool aEnableRTCP = ETrue );
+
+    /**
+    * Resumes paused media stream in a given session.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId Stream ID identifying stream to be resumed
+    * @param aEndpointId ID identifying endpoint of the stream to be resumed.
+    *         If value 0, both endpoints resumed.
+    * @param aEnableRTCP ETrue, if RTCP sent while playing.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt ResumeStream( TUint32 aSessionId, TUint32 aLinkId, 
+                                TUint32 aStreamId, TUint32 aEndpointId = 0,
+                                TBool aEnableRTCP = ETrue );
+
+    /**
+    * Stops sending/receiving media stream in a given session.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId Stream ID identifying stream to be stopped
+    * @param aEndpointId ID identifying endpoint of the stream to be stopped.
+    *         If value 0, both endpoints stopped.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt StopStream( TUint32 aSessionId, TUint32 aLinkId, 
+                               TUint32 aStreamId, TUint32 aEndpointId = 0 );
+
+    /**
+    * Deletes media stream in a given session.
+    * @param aSessionId  session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId  Stream ID identifying stream to be deleted
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt DeleteStream( TUint32 aSessionId, TUint32 aLinkId, 
+                                TUint32 aStreamId  );
+
+    /**
+    * Starts inactivity timer for a stream in a given session.
+    * If RTP data is not received in given tive, inactivy
+    * event is sent to client. In case of timeout, inactivity
+    * timer is stopped. Client may restart the timer is needed.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId Stream ID identifying stream
+    * @param aTimeoutTime timeout value in microseconds
+    * @param aEndpointId ID identifying endpoint of the stream to be monitored.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt StartInactivityTimer( TUint32 aSessionId,
+                                        TUint32 aLinkId, TUint32 aStreamId,
+                                        TUint32 aTimeoutTime, TUint32 aEndpointId = 0 );
+
+    /**
+    * Stops inactivity timer for a stream in a given session.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId Stream ID identifying stream
+    * @param aEndpointId ID identifying endpoint of the stream where monitoring stopped.
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt StopInactivityTimer( TUint32 aSessionId, TUint32 aLinkId,
+                                       TUint32 aStreamId, TUint32 aEndpointId = 0 );
+
+    /**
+    * Set remote IP address and port number for a given session.
+    * @param aSessionId session ID
+    * @param aLinkId link ID
+    * @param aRemoteAddr Remote address to set
+    * @param aRemoteRtcpPort Remote RTCP port to set, if not RTP port +1
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt SetRemoteAddress( TUint32 aSessionId, TUint32 aLinkId,
+                                    const TInetAddr& aRemoteAddr, TUint aRemoteRtcpPort = 0 );
+
+
+    /**
+    * Gets current codec used in a given stream.
+    * @param aSessionId session ID
+    * @param aLinkId Link ID
+    * @param aStreamId Stream ID
+    * @return Current codec used with the specified stream, ownership is transferred.
+    */
+    IMPORT_C CMccCodecInformation* CodecL( TUint32 aSessionId,
+                                           TUint32 aLinkId,
+                                           TUint32 aStreamId );
+
+    /**
+    * Sets codec to be used in a given stream.
+    * @param aSessionId session ID
+    * @param aLinkId Link ID
+    * @param aStreamId Stream ID
+    * @param aCodec Codec to be used
+    * @return One of the standard system-wide error codes.
+    */
+    IMPORT_C TInt SetCodec( TUint32 aSessionId, TUint32 aLinkId,
+                            TUint32 aStreamId,
+                            CMccCodecInformation& aCodecInformation );
+    
+    
+    /**
+    * Get supported codecs by the system. Certain sinks and sources
+    * however may have limitations on which codecs they support, hence
+    * all these codecs may not allowed in all streams.
+    * @param aCodecs An array to be filled with FourCC codes
+    * @return One of the standard system-wide error codes.
+    */
+    TInt GetSupportedCodecs( RArray<TFourCC>& aCodecs );
+                            
+    /**
+    * Returns array of supported codecs in the system with their default values.
+    * Note that data that the aCapabilities contains before calling this function 
+    * will be lost during the excecution of this function. Note also that the client
+    * is responsible for the destruction of the objects contained in the
+    * parameter array.
+    * @param aCapabilities Codec capabilities
+    * @return KErrNone if successful
+    */
+    IMPORT_C TInt GetCapabilities(
+            RPointerArray<CMccCodecInformation>& aCapabilities ) const;
+
+    /**
+    * Returns array of supported codecs of specific sink or source. Note that data that
+    * the aCapabilities contains before calling this function will be
+    * lost during the excecution of this function. Note also that the client
+    * is responsible for the destruction of the objects contained in the
+    * parameter array.
+    * @param aType, type identifier of source or sink
+    * @param aStreamType type of the stream
+    * @param aParam, source or sink specific param
+    * @param aCapabilities Codec capabilities
+    * @return KErrNone if successful
+    */
+    IMPORT_C TInt GetCapabilities( const TUid aType, TInt aStreamType, const TDesC8& aParam,
+            RPointerArray<CMccCodecInformation>& aCapabilities );
+         
+    /**
+    * Get Synchronization source identifier.
+    * @param aSessionId session ID
+    * @param aLinkId Link ID
+    * @param aStreamId Stream ID
+    * @param aEndpointId ID identifying endpoint of the stream.
+    * @param aSSRC SSRC value
+    * @return One of the standard system-wide error codes.
+    */   
+    IMPORT_C TInt GetSSRC ( TUint32 aSessionId,
+                            TUint32 aLinkId,
+                            TUint32 aStreamId,
+                            TUint32 aEndpointId,
+                            TUint32& aSSRC );
+
+    /**
+    * Sends media signal (e.g. DTMF,RTCP) to uplink if possible.
+    * @param aEvent Event to be sent
+    * @return void
+    */
+    IMPORT_C void SendMediaSignalL( const TMccEvent& aEvent );
+    
+    /**
+    * Adds new sink to the session. User must later
+    * call CreateStream to connect this sink to some stream.
+    * @param aSinkType type identifier of the sink.
+    * @param aParam initialization parameters of the sink.
+    * @param aEndpointId idenfier of the created sink on return.
+    * @return KErrNotFound, if sink type not found
+    */
+    IMPORT_C TInt AddDataSink( const TUid aSinkType, const TDesC8& aParam, 
+                               TUint32& aEndpointId );
+
+    /**
+    * Adds new source to the session. User must later
+    * call CreateStream to connect this source to some stream.
+    * @param aSourceType type identifier of the source.
+    * @param aParam initialization parameters of the source.
+    * @param aEndpointId idenfier of the created source on return.
+    * @return KErrNotFound, if source type not found
+    */
+    IMPORT_C TInt AddDataSource( const TUid aSourceType, const TDesC8& aParam,
+                                 TUint32& aEndpointId );
+    
+    /**
+    * Checks if link already exists based on local port
+    * @param aSessionId session ID
+    * @param aLinkId ID of the link
+    * @param aNetSettings network settings for the link
+    * @return ETrue if found; otherwise EFalse.
+    */
+    IMPORT_C TBool LinkExists( TUint32 aSessionId,
+                               TUint32& aLinkId,
+                               const TMccNetSettings& aNetSettings );
+
+    /**
+    * Checks if link contains streams
+    * @param aSessionId session ID
+    * @param aLinkId ID of the link
+    * @return ETrue if found; otherwise EFalse.
+    */
+    IMPORT_C TBool StreamsExists( TUint32 aSessionId,
+                                  TUint32 aLinkId );
+
+    /** 
+    * Gets sink or source parameter
+    * @param aSessionId session where sink or source belongs to
+    * @param aLinkId link ID where sink or source belongs to
+    * @param aStreamId stream ID where sink or source belongs to
+    * @param aEndpointId endpoint ID identifying sink or source.
+    * @param aParam a parameter to get
+    * @param aVal on return will contain parameter value in TPkgBuf structure
+    * @return KErrNotFound if parameter was not found, KErrNone otherwise
+    */
+    IMPORT_C TInt GetParameter( TUint32 aSessionId, TUint32 aLinkId, 
+                                TUint32 aStreamId, TUint32 aEndpointId,
+                                TUint32 aParam, TDes8& aVal );
+
+    /** 
+    * Sets sink or source parameter
+    * @param aSessionId session where sink or source belongs to
+    * @param aLinkId link ID where sink or source belongs to
+    * @param aStreamId stream ID where sink or source belongs to
+    * @param aEndpointId endpoint ID identifying sink or source.
+    * @param aParam a parameter to get
+    * @param aVal on return will contain parameter value in TPkgBuf structure
+    * @return KErrNotFound if parameter was not found, KErrNone otherwise
+    */
+    IMPORT_C TInt SetParameter( TUint32 aSessionId, TUint32 aLinkId, 
+                                TUint32 aStreamId, TUint32 aEndpointId,
+                                TUint32 aParam, const TDesC8& aVal );
+
+    /**
+    * Updates sink of the stream.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be updated.
+    * @param aParam initialization parameters of the sink.
+    * @return KErrNotFound, if sink type not found
+    */
+    IMPORT_C TInt UpdateDataSink( TUint32 aSessionId, TUint32 aLinkId, 
+                               TUint32 aStreamId, TUint32 aEndpointId,
+                               const TDesC8& aParam );
+
+    /**
+    * Updates source of the stream. 
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be updated.
+    * @param aParam initialization parameters of the source.
+    * @return KErrNotFound, if source type not found
+    */
+    IMPORT_C TInt UpdateDataSource( TUint32 aSessionId, TUint32 aLinkId, 
+                                 TUint32 aStreamId, TUint32 aEndpointId,
+                                 const TDesC8& aParam );
+
+    /**
+    * Removes sink from MCC.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be updated.
+    * @return KErrNotFound, if sink type not found
+    */
+    IMPORT_C TInt RemoveDataSink( TUint32 aSessionId, TUint32 aLinkId, 
+                                  TUint32 aStreamId, TUint32 aEndpointId );
+
+    /**
+    * Removes source from MCC. 
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be updated.
+    * @return KErrNotFound, if source type not found
+    */
+    IMPORT_C TInt RemoveDataSource( TUint32 aSessionId, TUint32 aLinkId, 
+                                    TUint32 aStreamId, TUint32 aEndpointId );
+
+    /**
+    * Reuses sink or source of the stream. Reused sink or source may be
+    * simultaneously shared by two or more stream. It is also possible,that only one stream 
+    * can use it at a time. User must later call CreateStream to connect this sink or source
+    * to some stream.
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be reused.
+    * @return KErrNotFound, if endpoint not found
+    */
+    IMPORT_C TInt Reuse( TUint32 aSessionId, TUint32 aLinkId, 
+                         TUint32 aStreamId, TUint32 aEndpointId );
+
+    /**
+    * Get the reference count of given sink or source. 
+    * @param aSessionId session where stream belongs to
+    * @param aLinkId link ID
+    * @param aStreamId ID identifying stream to be updated
+    * @param aEndpointId ID identifying endpoint of the stream to be updated.
+    * @param aCount number of references using this sink or source.
+    * @return KErrNotFound, if endpoint not found
+    */
+    IMPORT_C TInt ReferenceCount( TUint32 aSessionId, TUint32 aLinkId, 
+                                  TUint32 aStreamId, TUint32 aEndpointId,
+                                  TUint& aCount );
+
+    /**
+    * Get the reference count of given sink or source. 
+    * @param aSessionId session where stream belongs to
+    * @param aBundle new bundle to be added in the session.
+    * @param aBundleId identifier of the added bundle on return.
+    * @return KErrNone if successful
+    */
+    IMPORT_C TInt AddBundle( TUint32 aSessionId, TMccStreamBundle& aBundle, TUint32& aBundleId );
+
+    /**
+    * Get the reference count of given sink or source. 
+    * @param aSessionId session where stream belongs to
+    * @param aBundleId identifier of the removed bundle.
+    * @return KErrNotFound, if bundle not found
+    */
+    IMPORT_C TInt RemoveBundle( TUint32 aSessionId, TUint32 aBundleId );
+
+    /**
+    * Get the reference count of given sink or source. 
+    * @param aSessionId session where stream belongs to
+    * @param aBundles an array of bundles in given session.
+    * @return KErrNone if successful
+    */
+    IMPORT_C TInt GetBundles( TUint32 aSessionId, RArray<TMccStreamBundle>& aBundles);
+
+    /**
+    * Transcodes media file in non-realtime. Progress of transcoding
+    * can be monitored through MMccCtrlObserver::MccEventReceived.
+    * @param aSourceFile source file for transcoding
+    * @param aDestFile destination file for transcoding
+    * @param aQuality requested quality for transcoding
+    * @param aSessionId session identifier for transcoding
+    * @param aVideoCodec requested video parameters for transcoding, overrides aQuality parameter.
+    *         Ownership is not transferred.    
+    * @param aAudioCodec requested audio parameters for transcoding, overrides aQuality parameter.
+    *         Ownership is not transferred.    
+    * @return ETrue if succesfull; otherwise EFalse.
+    */
+    IMPORT_C TInt TranscodeFile( const TDesC8& aSourceFile, const TDesC8& aDestFile,
+                                 TUint32 aQuality, TUint32& aSessionId,  
+                                 const CMccCodecInformation* aVideoCodec = 0,
+                                 const CMccCodecInformation* aAudioCodec = 0 );
+
+    /**
+    * Cancels transcoding of media file.
+    * @param aSessionId session identifier for transcoding
+    * @return ETrue if succesfull; otherwise EFalse.
+    */
+    IMPORT_C TInt CancelTranscodeFile( TUint32 aSessionId );
+        
+    /**
+     * Requests media quality reports from an endpoint. 
+     * This request is synchronous. When given media quality level triggers
+     * in specified endpoint the client receives media quality report via
+     * asynchronous event.
+     * If the given config is not valid, KErrArgument is returned.
+     * The request can be cancelled with function CancelMediaQualityRequestL,
+     * @since Series 60 3.2
+     * @param aConfig Media quality request configuration
+     * @return Error code
+     */
+    IMPORT_C TInt MediaQualityRequest( const TMccMediaQualityConfig& aConfig );
+
+    /**
+     * Cancels an outstanding media quality report.
+     * If the given media quality request data contains false data, this
+     * function will return KErrArgument.
+     * @since Series 60 3.2
+     * @param aConfig Configuration to find a outstanding media quality 
+     *                request
+     * @return Error code
+     */
+    IMPORT_C TInt CancelMediaQualityRequest( 
+        const TMccMediaQualityConfig& aConfig );
+     
+    /**
+     * Returns the reference to handle to controller plugin which interface
+     * use for sending custom commands.
+     * Client representation of a controller plugin for
+     * the Multimedia Framework.
+     * @since Series 60 3.2
+     * @param aController  Controller. 
+     * @return void
+     */
+    void GetController( RMMFController& aController );
+      
+private:
+
+    /**
+    * C++ default constructor.
+    */
+    CMccInterface();
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL( MMccCtrlObserver& aObserver );
+
+private:   
+
+   /**
+    * Open controller.
+    * @param aControllerUid Controller uid to open.
+    * @return One of the standard system-wide error codes.
+    */
+    void OpenControllerL( const TUid& aControllerUid );
+    
+    /**
+    * Gets supported codecs from controller.
+    * @return One of the standard system-wide error codes.
+    */
+    void CapabilitiesL();
+
+    /**
+    * Gets supported bit rates from the codec of the specified stream
+    * @return One of the standard system-wide error codes.
+    */
+    TInt GetSupportedBitrates( TUint32 aSessionId,
+                               TUint32 aLinkId,
+                               TUint32 aStreamId,
+                               RArray<TUint>& aBitrates );
+                               
+    /**
+    */
+    TInt SendRTCPReceiverReport( TUint32 aSessionId,
+                                 TUint32 aLinkId,
+                                 TUint32 aStreamId );
+    /**
+    */
+    TInt SendRTCPSenderReport( TUint32 aSessionId,
+                               TUint32 aLinkId,
+                               TUint32 aStreamId );
+
+    /**
+    */
+    TInt SendRTCPAnyData( TUint32 aSessionId,
+                          TUint32 aLinkId,
+                          TUint32 aStreamId,
+                          const TDesC8& aData );
+                          
+    /**
+    */
+    TInt EnableViewFinder( const TDesC8& aParam );
+    
+    /**
+    */
+    TInt DisableViewFinder();
+	
+	/**
+    */
+	TInt GetViewFinderSettings( TUint32 aParam, TUint32 aEndPointId, TDes8& aVal );
+                          
+    /**
+    */
+    TCameraInfo GetCameraInfoL(TInt aDeviceIndex );
+    
+    /**
+    */
+    TInt GetNumOfCamerasL();
+    
+    /**
+    */
+    TInt GetCameraParameter( TUint32 aParam, TInt& aVal );
+
+    /**
+    */
+    TInt SetCameraParameter( TUint32 aParam, TInt aVal );
+    
+    /**
+    */
+    TInt GetCameraParameter( TUint32 aParam, TReal& aVal );
+    
+    /**
+    */
+    TInt SetCameraParameter(TUint32 aParam, TReal aVal);
+    
+    /**
+    */
+	TInt SetEndpointParameter( TUint32 aParam, 
+	                           TUint32 aSessionId,
+                               TUint32 aLinkId,
+                               TUint32 aStreamId,
+                               TUint32 aEndPointId, 
+                               const TDesC8& aVal );
+	
+	/**
+	*/
+	TInt GetEndpointParameter( TUint32 aParam, 
+	                           TUint32 aSessionId,
+                               TUint32 aLinkId,
+                               TUint32 aStreamId,
+                               TUint32 aEndPointId, 
+                               TDes8& aVal );
+
+    /**
+    */
+    TInt SetAudioRouting( TUint32 aSessionId, TUint32 aLinkId, 
+                          TUint32 aStreamId, TUint32 aRoutingDestination );
+
+
+    /**
+    */
+    TInt AudioRouting( TUint32 aSessionId, TUint32 aLinkId, 
+                       TUint32 aStreamId, TUint32& aRoutingDestination );
+                       
+    /**
+    */
+    TInt Volume( TInt& aVolume ) const;
+
+
+    /**
+    */
+    TInt MaxVolume( TUint32 aSessionId, 
+                    TUint32 aLinkId, 
+                    TUint32 aStreamId, 
+                    TInt& aMaxVolume );
+                    
+    /**
+    */
+    TInt SetVolume( TInt aVolume );
+
+    /**
+    */
+	TInt Balance( TUint32 aSessionId, 
+                  TUint32 aLinkId, 
+                  TUint32 aStreamId, 
+                  TInt& aBalance,
+                  TMccDevice aStreamType ); 
+
+    /**
+    */
+	TInt SetBalance( TUint32 aSessionId, 
+                     TUint32 aLinkId, 
+                     TUint32 aStreamId, 
+                     TInt aBalance,
+                     TMccDevice aStreamType );
+          
+          
+          
+    /**
+    */
+	TInt GetGain( TInt& aGain ) const;
+
+    /**
+    */
+	TInt SetGain( TInt aGain );
+
+    /**
+    */
+	TInt MaxGain( TUint32 aSessionId, 
+	              TUint32 aLinkId, 
+	              TUint32 aStreamId, 
+	              TInt& aMaxGain );
+	              
+	TInt StoreEndpointInfo( TUint32 aEndpointId, 
+	                        const TMMFMessageDestination& aHandleInfo );
+	
+	TMMFMessageDestination FindEndpointInfo( TUint32 aEndpointId, TInt& aError );
+	                       
+	TInt RemoveEndpointInfo( TUint32 aEndpointId ); 
+                                                                    
+private:    // Data
+
+    class TMccEndpointInfo
+        {
+        public:
+        
+            TUint32 iEndpointId;
+            TMMFMessageDestination iHandleInfo;
+        };
+        
+    static TBool EndpointInfoMatch( const TMccEndpointInfo& aInfo1, 
+                                    const TMccEndpointInfo& aInfo2 );
+
+    // Reserved for future extensions
+    TAny* iReserved1;
+    TInt  iReserved2;    
+
+private:    // Data
+
+    // Notifies about events happened in MCC plugin
+    CMccEvent* iMccEvent;
+
+    // Handle to the controller plugin for sending custom commands
+    RMMFController iController;
+
+    // Contains unique ID of controller interface
+    TMMFMessageDestinationPckg iMessageDest;
+
+    // For easier access to Audio Play Device functionality
+    RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCustomCommands;
+
+    // For easier access to Audio Record Device functionality
+    RMMFAudioRecordDeviceCustomCommands iAudioRecordDeviceCustomCommands;
+
+    // Array for codec capabilities
+    RPointerArray<CMccCodecInformation> iCodecInformation;    
+    
+    // Array for endpoint infos
+    RArray<TMccEndpointInfo> iEndpointInfos;
+
+private:
+    #ifdef TEST_EUNIT
+    friend class UT_CMccInterface;
+    #endif
+};
+
+#endif /* MMCCINTERFACE_H */
+
+// End of File