diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/mccstub/inc/mmccinterface_stub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/mccstub/inc/mmccinterface_stub.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,606 @@ +/* +* 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: Provides an abstraction of the MMF Controller +* +*/ + + + + +#ifndef __MCC_INTERFACE_H__ +#define __MCC_INTERFACE_H__ + +// INCLUDES +#include +#include +#include +#include +#include + +// CONSTANTS +#define K_Mcc_VERSION TVersion( 2, 0, 0 ) + +// FORWARD DECLARATIONS +class CMccCodecInformation; +class CMccEvent; +class CMccCodecInformation; +class CMccCodecAMR; +class CMccCodecG711; +class CMccCodecILBC; +class TCameraInfo; +class CMccControllerStub; + +// CONSTANTS + +const TUid KUidMccFileSink = { 0x102747D7 }; +const TUid KUidMccFileSource = { 0x102747D5 }; +const TUid KUidMccRtpSource = { 0x1020740B }; +const TUid KUidMccRtpSink = { 0x1020740C }; +const TUid KUidMccVideoSource = { 0x102747D6 }; +const TUid KUidMccVideoSink = { 0x102747D8 }; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// CLASS DECLARATION + +/** +* Mcc subsystem client interface. +* +* @lib MccInterface.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& 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& 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& 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& 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 ); + + + private: + + /** + * C++ default constructor. + */ + CMccInterface(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MMccCtrlObserver& aObserver ); + + private: + + /** + * Open controller. + * @since Series 60 3.0 + * @param aControllerUid Controller uid to open. + * @return One of the standard system-wide error codes. + */ + TInt OpenController( const TUid& aControllerUid ); + + /** + * Gets supported codecs from controller. + * @since Series 60 3.0 + * @return One of the standard system-wide error codes. + */ + void CapabilitiesL(); + + /** + * Gets supported bit rates from the codec of the specified stream + * @since Series 60 3.0 + * @return One of the standard system-wide error codes. + */ + TInt GetSupportedBitrates( TUint32 aSessionId, + TUint32 aLinkId, + TUint32 aStreamId, + RArray& aBitrates ); + + private: // Data + // 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 + CMccControllerStub* 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 iCodecInformation; + + private: + #ifdef TEST_EUNIT + friend class UT_CMccInterface; + #endif + }; + +#endif /* __Mcc_INTERFACE_H__ */ + +// End of File