diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccrtpsourcesink/inc/mccrtpdatasink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccrtpsourcesink/inc/mccrtpdatasink.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,405 @@ +/* +* Copyright (c) 2002-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: RTP Datasink +* +*/ + + + + + +#ifndef MCCRTPDATASINK_H +#define MCCRTPDATASINK_H + +// INCLUDES +#include "rtpapi.h" +#include "mccdatasink.h" +#include "mccrtpinterface.h" +#include "rtpdatasink.h" +#include "mccrtpsender.h" + +#ifdef FTD_ENABLED +#include +#include "Mccstreamstats.h" +#endif + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class MDataSource; + +// CLASS DECLARATION + +/** +* Mcc RTP DataSink send RTP packet using to RtpAPI +* +* @lib MccRtpSourceSink.dll +* @since Series 60 3.0 +*/ +class CMccRtpDataSink : public CMccDataSink, + public MMccRtpInterface, + public MMccRtpDataSink, + public MMccRtpSenderObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. Virtual function from MDataSink + */ + static MDataSink* NewSinkL( TUid aImplementationUid, + const TDesC8& aInitData ); + + /** + * Destructor. + */ + virtual ~CMccRtpDataSink(); + + public: // New functions + + /** + * Returns Synchronization source. + * @since Series 60 3.0 + * @param None + * @return Synchronization source value + */ + inline TRtpSSRC GetSSRC() const + { + return iSSRC; + } + + /** + * Sets rtp media clock instance for data sink. Instance is forwarded + * to rtp keep alive sender. + * + * @since Series 60 3.0 + * @param aRtpMediaClock media clock instance + * @return void + */ + virtual void SetMediaClock( CMccRtpMediaClock& aRtpMediaClock ); + + /** + * Mutes/Unmutes RTP sink. When mute is enabled, only packets with + * exception payload type are sent. + * + * @since Series 60 3.2 + * @param aMuteOn When ETrue mute is enabled + * @param aExceptionPt Payload to send regardless of mute state + */ + virtual void Mute( TBool aMuteOn, TUint8 aExceptionPt ); + + public: // From CMccDataSink + + virtual void SetCurrentUser( MAsyncEventHandler* aEventHandler ); + + public: // From MDataSink + + /** + * From MDataSink. Pure virtual function that must be implemented. + * Out of usage. Leave KErrNotSupported. + * @since Series 60 3.0 + * @param "aBuffer" Out of usage + * @param "aSupplier" Out of usage + * @param "aMediaId" Out of usage + * @return void + */ + void EmptyBufferL( CMMFBuffer* aBuffer, + MDataSource* aSupplier, + TMediaId aMediaId ); + + /** + * From MDataSink Method to 'logon' the data source to + * the same thread that source will be supplying data in. + * @since Series 60 3.0 + * @param aEventHandler for send event to datasource when buffer is embtied. + * @return KErrNone if successful, otherwise a system wide error code. + */ + TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * From MDataSink Method to 'logoff' the data source from + * the same thread that source supplies data in. + * @since Series 60 3.0 + * @param None + * @return void + */ + void SinkThreadLogoff(); + + /** + * From MDataSink pure virtual function that must be implemented. + * Returns the data type as a fourCC code of the data sink. + * @since Series 60 3.0 + * @param "aMediaId" This identifies the type of media eg audio and the stream id. + * This parameter is required in cases where the sink can accept data + * of more than one media type. + * @return the datatype code ( codec ). + */ + TFourCC SinkDataTypeCode( TMediaId aMediaId ); + + /** + * From MDataSink pure virtual function that must be implemented. + * Sets the data type as a fourCC code for the data sink. + * @since Series 60 3.0 + * @param "aSinkFourCC" This specifies the data type as a fourCC code to set the sink to + * @param "aMediaId" This identifies the type of media eg audio and the stream id. + * @return KErrNone if successful. + * @return KErrLocked if Sink thread locked. Codec must to be set before thread logon. + * @return KErrNotSupported if the sink does not support media type. + */ + TInt SetSinkDataTypeCode( TFourCC aCodec, TMediaId aMedia ); + + /** + * From MDataSink pure virtual function that must be implemented. + * Out of usage. Function leaves with KErrNotSupported. + * @since Series 60 3.0 + * @param "aCodec" Out of usage + * @param aMedia Out of usage + * @return void + */ + void BufferFilledL( CMMFBuffer* aBuffer ); + + /** + * From MDataSink pure virtual function that must be implemented. + * Method to indicate whether the data sink can create a buffer. + * @deprecated + * + * @since Series 60 3.0 + * @param "aBuffer" Out of usage + * @return False + */ + TBool CanCreateSinkBuffer(); + + /** + * From MDataSink pure virtual function that must be implemented. + * Out of usage. Function leaves with KErrNotSupported. + * @deprecated + * + * @since Series 60 3.0 + * @param "aMediaId" Out of usage. + * @param "aReference" Out of useage. + * @return + */ + CMMFBuffer* CreateSinkBufferL( TMediaId /*aMediaId*/, + TBool& aReference ); + + /** + * From MDataSink. This is a virtual function that a derived data sink + * can implement if any data sink specific 'priming' is required + * @since Series 60 3.0 + * @param None + * @return void + */ + void SinkPrimeL(); + + /** + * From MDataSink. This is a virtual function that a derived data sink can implement if + * any data sink specific action is required prior to 'playing'ie the + * start of data transfer + * @since Series 60 3.0 + * @param None + * @return void + */ + void SinkPlayL(); + + /** + * From MDataSink. This is a virtual function that a derived data sink can implement if + * any data sink specific action is required to 'pause' + * @since Series 60 3.0 + * @param None + * @return void + */ + void SinkPauseL(); + + /** + * From MDataSink. This is a virtual function that a derived data sink can implement if + * any data sink specific action is required to 'stop' + * @since Series 60 3.0 + * @param None + * @return void + */ + void SinkStopL(); + + /** + * From MDataSink. Used for custom command receiving. + * @since Series 60 3.0 + * @param aMessage The message specifying the custom command. + * @return void + */ + void SinkCustomCommand( TMMFMessage& aMessage ); + + + + public: // From MMccRtpInterface + + + /** + * From CRtpInterface Sends media signals (RTCP) + * @since Series 60 3.0 + * @param aSignal Signal to be sent + * @return void + */ + virtual void SendMediaSignallingL( const TMccEvent& aEvent ); + + /** + * Sends Non-RTCP data + * @param aData - [input] Data to send + * @return One of the standard system-wide error codes. + */ + virtual void SendRTCPDataL( const TDesC8& aData ); + + virtual TBool HandleBySsrc( const TRtpSSRC& aSsrc ); + + TRtpId RtpStreamId(); + + virtual TBool IsSink() const; + + virtual TBool IsSending() const; + + void DoCreateSrtpStreamL(); + + + public: // From MMccRtpDataSink + + /** + * From MMccRtpDataSink. Empties specified buffer. + * + * @since Series 60 3.0 + * @param aBuffer Buffer containing the RTP packet + * @param aSupplier Data source to notify when buffer is emptied + * @param aMediaId Identifies the media type of a particular stream + * @param aHeaderInfo RTP packet header + * @return void + */ + void EmptyBufferL( CMMFBuffer* aBuffer, + MDataSource* aSupplier, + TMediaId aMediaId, + TRtpSendHeader& aHeaderInfo ); + + + protected: // Functions from base classes + + /** + * Method to perform any sink construction dependant on the sink construction + * initialisation data aInitData + * + * This is a pure virtual function that a derrived data sink must implement + * + * @param "aInitData" + * Sink specific initialisation data required for sink construction + */ + void ConstructSinkL( const TDesC8& aInitData ); + + protected: // From CMccRtpInterface + + /** + * From CMccRtpInterface + */ + void DoCreateStreamL(); + + protected: // From MMccRtpSenderObserver + + void SendErrorOccured( TInt aError ); + + private: + + /** + * C++ default constructor. + */ + CMccRtpDataSink(); + + void SendStreamEventToClient( TMccEventType aEventType, + TInt aError = KErrNone ); + + TMccRtpUser* FindRtpUserEntryForCurrent( MAsyncEventHandler& aEventHandler ); + + void RemoveCurrentRtpUser(); + + static TBool RtpUserMatch( const TMccRtpUser& aUser1, + const TMccRtpUser& aUser2 ); + + TBool SendingAllowed( const TRtpSendHeader& aHeaderInfo ) const; + + private: // From MSRTPReKeyingObserver + + /** + * FROM SRTP API + * + * This function is called by SRTP when a master key is stale and + * needs to be refreshed. + */ + void SRTPMasterKeyStaleEvent(const CSRTPStream& aStream); + + /** + * FROM SRTP API + * + * This function is called by SRTP Stream initiated with + * CSRTPSession when a master key is stale and + * needs to be refreshed. + */ + void SRTPMasterKeyStaleEvent(const CSRTPSession& aSession ); + + private: // Data + + // Pointer to buffer, which datapath has requested to be emptied + CMMFDataBuffer* iBufferToBeEmptied; // Uses + + // Pointer to datasource for notify when buffer is emptied + MDataSource* iDataSource; // Uses + + // Synchronization source identifier. + TRtpSSRC iSSRC; + + // Stream ID for media packets + TRtpId iRtpStreamId; + + // Registered users for sink + RArray iUsers; + + // flag for secure key expired + TBool iSecureKeyExpired; + + // flag indicating is mute enabled + TBool iMuteOn; + + // payload to sent regardless of mute state + TUint8 iExceptionPt; + + CMccRtpSender* iSender; + + TMediaId iMedia; + +#ifdef FTD_ENABLED + + // Message queue carrying stream statistics + RMsgQueue iStreamStatsQueue; + + // Number of packets sent + TUint32 iPacketsSent; + +#endif + + #ifdef TEST_EUNIT + public: + friend class UT_CMccRtpDataSink; + #endif + }; + +#endif // MCCRTPDATASINK_H + +// End of File