diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/tsrc/rtpsourcesinkstub/src/MccRtpDataSource_STUB.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/tsrc/rtpsourcesinkstub/src/MccRtpDataSource_STUB.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,636 @@ +/* +* 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 Datasource +* +*/ + + + + +// INCLUDE FILES +#include +#include +#include +#include +#include "rtpapi.h" +#include "mccrtpdatasource.h" +#include "mccinternalevents.h" +#include "formatstatemachine.h" +#include "mccrtpdefs.h" +#include "mmccinterfacedef.h" +#include "mccinternaldef.h" + +// MACROS +#define MCC_RTPSOURCE_ENDPOINT_ID reinterpret_cast( static_cast( this ) ) + + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::CMccRtpDataSource +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMccRtpDataSource::CMccRtpDataSource() : + CMccDataSource( KMccRtpSourceUid ), + MMccRtpInterface(), + iStandByTimerValue( KRtpStandByTimer ), + iRtpStreamId( KNullId ) + { + iCurRecvPayloadType = KMccPTNotDefined; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::ConstructSourceL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::ConstructSourceL( const TDesC8& /*aInitData*/ ) + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::ConstructSourceL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::NewSourceL +// Static constructor. +// ----------------------------------------------------------------------------- +// +MDataSource* CMccRtpDataSource::NewSourceL( TUid /*aImplementationUid*/, + const TDesC8& /*aInitData*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::NewSourceL" ) + + CMccRtpDataSource* self = new ( ELeave ) CMccRtpDataSource(); + return static_cast( self ); + } + + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::~CMccRtpDataSource() +// Destructor. +// ----------------------------------------------------------------------------- +// +CMccRtpDataSource::~CMccRtpDataSource() + { + TRACE_RTP_SOURCE_PRINT2( "CMccRtpDataSource::~CMccRtpDataSource 0x%x", this ) + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::~CMccRtpDataSource RTCP DELETE" ) + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::~CMccRtpDataSource BUFFER DELETE" ) + if ( iReference ) + { + delete iBuffer; + } + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::FillBufferL +// FillBufferL works synchronously. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::FillBufferL( CMMFBuffer* aBuffer, + MDataSink* aConsumer, + TMediaId /*aMediaId*/ ) + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::FillBufferL" ) + + __ASSERT_ALWAYS ( aConsumer, User::Leave( KErrArgument ) ); + + if ( aBuffer ) + { + __ASSERT_ALWAYS ( KUidMmfDataBuffer == aBuffer->Type( ), + User::Leave( KErrNotSupported ) ); + } + + iBufferToFill = static_cast( aBuffer ); + iFillBufferRequester = aConsumer; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::CanCreateSourceBuffer +// NOT SUPPORTED. MDataSource pure virtual function must to be implemented. +// ----------------------------------------------------------------------------- +// +TBool CMccRtpDataSource::CanCreateSourceBuffer() + { + return iCanCreateSourceBuffer; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::CreateSourceBufferL +// NOT SUPPORTED. MDataSource pure virtual function must to be implemented. +// ----------------------------------------------------------------------------- +// +CMMFBuffer* CMccRtpDataSource::CreateSourceBufferL( TMediaId /*aMediaId*/, + TBool& aReference ) + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::CreateSourceBufferL KErrNotSupported" ) + + if ( !iCanCreateSourceBuffer ) + { + User::Leave( KErrNotSupported ); + } + aReference = iReference; + if ( iReference ) + { + delete iBuffer; + } + iBuffer = NULL; + if ( iWrongBufferType ) + { + iBuffer = CMMFYUVBuffer::NewL(); + } + else + { + iBuffer = CMMFDataBuffer::NewL( 100 ); + } + return iBuffer; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RtpPacketReceived +// RTP stack callback function for received RTP packet. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::RtpPacketReceived( TRtpId /*aStreamId*/, + const TRtpRecvHeader& /*aHeaderInfo*/, + const TDesC8& /*aPayloadData*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RtpPacketReceivedL +// RTP stack callback function for received RTP packet. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::RtpPacketReceivedL( TRtpId /*aStreamId*/, + const TRtpRecvHeader& /*aHeaderInfo*/, + const TDesC8& /*aPayloadData*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::RtpPacketReceived" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SetSourceDataTypeCode +// Sets the sources datatype code ( Codec ) +// ----------------------------------------------------------------------------- +// +TInt CMccRtpDataSource::SetSourceDataTypeCode( TFourCC /*aCodec*/, TMediaId /*aMedia*/ ) + { + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceDataTypeCode() +// Sets the datatype code ( codec ) +// ----------------------------------------------------------------------------- +// +TFourCC CMccRtpDataSource::SourceDataTypeCode( TMediaId /*aMediaId*/ ) + { + return TFourCC(); + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::BufferEmptiedL +// CMccRtpDataSource supports only passive mode of operation. +// Thus, Datapath->EmptyBufferL isn't called. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::BufferEmptiedL( CMMFBuffer* /*aBuffer*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::BufferEmptiedL KErrNotSupported" ) + + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceThreadLogon +// +// Method to 'logon' the data source to the same thread that source will be +// consuming data in. Thread specific initialisation is done here. +// ----------------------------------------------------------------------------- +// +TInt CMccRtpDataSource::SourceThreadLogon( MAsyncEventHandler& /*aEventHandler*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourceThreadLogon" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceThreadLogoff +// +// Method to 'logoff' the data source from the same thread that source consumes +// data in. Thread specific releasing of resources is done here. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourceThreadLogoff() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourceThreadLogoff" ) + } + +// --------------------------------------------------------------------------- +// CMccRtpDataSource::SourcePrimeL +// Source must be primed before playing. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourcePrimeL() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourcePrimeL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourcePlayL +// Start receiving RTP packets. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourcePlayL() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourcePlayL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourcePauseL +// Pause RTP packet receiving. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourcePauseL() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourcePauseL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceStopL +// Stop RTP packet receiving. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourceStopL() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SourceStopL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::PlayoutRtpPacketL +// Pass filled buffer to the data sink of RTP data source. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::PlayoutRtpPacketL( const TRtpRecvHeader& /*aHeaderInfo*/, + const TDesC8& /*aPayloadData*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::PlayoutRtpPacketL" ) + __ASSERT_ALWAYS( iBufferToFill, User::Leave( KErrNotReady ) ); + __ASSERT_ALWAYS( iFillBufferRequester, User::Leave( KErrNotReady ) ); + } + + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::DoCreateStreamL +// Creates a receive stream. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::DoCreateStreamL() + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::DoCreateStreamL IN !!!!" ) + + iRtpStreamId = 2; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::NegotiateSourceL +// Derived from MDataSource +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::NegotiateSourceL( MDataSink& aDataSink ) + { + iFillBufferRequester = &aDataSink; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SendMediaSignallingL +// Derived from CRtpInterface +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SendMediaSignallingL( const TMccEvent& /*aEvent*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SendMediaSignallingL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::StartInactivityTimer +// Starts inactivity timer for a stream +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::StartInactivityTimerL( TUint32 /*aTimeoutTime*/ ) + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::StartInactivityTimerL" ) + } + + + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::StopInactivityTimer +// Stops inactivity timer for a stream +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::StopInactivityTimerL( ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::StopInactivityTimerL" ) + } + + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::StandBy +// Stops inactivity timer for a stream +// ----------------------------------------------------------------------------- +// +TInt CMccRtpDataSource::StandBy( TMccStandbyActionType /*aActionType*/, TUint /*aPayloadType*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::StandBy" ) + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::StartRtpStandByTimerL +// Starts rtp StandBy timer +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::StartRtpStandByTimerL( TMccRtpUser* /*aUser*/ ) + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::StartRtpStandByTimerL" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::StopRtpStandByTimers +// Stop rtp StandBy timer +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::StopRtpStandByTimers() + { + TRACE_RTP_SOURCE_PRINT ( "CMccRtpDataSource::StopRtpStandByTimers" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::HandleStandByL +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::HandleStandByL( TMccRtpUser* /*aUser*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::ResetStandBy +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::ResetStandBy() + { + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::DoStandByDecision +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::DoStandByDecision( TMccRtpUser* /*aUser*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::FindUserEntryByPayloadType +// ----------------------------------------------------------------------------- +// +TMccRtpUser* CMccRtpDataSource::FindUserEntryByPayloadType( TUint /*aPayloadType*/ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::FindUserEntryByTimerId +// ----------------------------------------------------------------------------- +// +TMccRtpUser* CMccRtpDataSource::FindUserEntryByTimerId( TMccTimerId /*aTimerId*/ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::FindUserEntryIndex +// ----------------------------------------------------------------------------- +// +TInt CMccRtpDataSource::FindUserEntryIndex( TMccRtpUser* /*aUser*/ ) + { + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RtpUserMatch +// ----------------------------------------------------------------------------- +// +TBool CMccRtpDataSource::RtpUserMatch( const TMccRtpUser& /*aUser1*/, + const TMccRtpUser& /*aUser2*/ ) + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RtpStreamId +// ----------------------------------------------------------------------------- +// +TRtpId CMccRtpDataSource::RtpStreamId() + { + return iRtpStreamId; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::DoCreateSrtpStreamL +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::DoCreateSrtpStreamL() + { + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RegisterPayloadTypesL +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::RegisterPayloadTypesL( const RArray& /*aPayloadTypes*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::RegisterPayloadTypesL" ); + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::UnRegisterPayloadTypes +// Unregisters payload types to accept. +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::UnRegisterPayloadTypes( const RArray& /*aPayloadTypes*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::ValidatePacketL +// Validates the received RTP packet and it's header +// ----------------------------------------------------------------------------- +// +TMccRtpUser* CMccRtpDataSource::ValidatePacketL( const TRtpId /*aStreamId*/, + const TRtpRecvHeader& /*aHeader*/, const TDesC8& /*aData*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::ValidatePacket" ) + return NULL; + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::AddUserL +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::AddUserL( TUint32 /*aStreamId*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SendStreamEventToClient() +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SendStreamEventToClient( + TMccEventType /*aEventType*/, + TInt /*aError*/, + TUint32 /*aTargetPayloadType*/ ) + { + TRACE_RTP_SOURCE_PRINT( "CMccRtpDataSource::SendStreamEventToClient" ) + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SendJitterEvent() +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SendJitterEvent( TMccRtpEventData /*aEvent*/, TInt /*aError*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceCustomCommand() +// +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourceCustomCommand( TMMFMessage& /*aMessage*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::SourceCustomCommandL() +// Worker function for TRAP'ping possible leaves that custom commands may have +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::SourceCustomCommandL( TMMFMessage& /*aMessage*/ ) + { + + } + +// --------------------------------------------------------------------------- +// FROM SRTP API +// This function is called by SRTP Stream initiated with +// MSRTPReKeyingObserver when a master key is stale and needs +// to be refreshed. +// --------------------------------------------------------------------------- +// +void CMccRtpDataSource::SRTPMasterKeyStaleEvent( const CSRTPStream& /*aStream*/ ) + { + TRACE_RTP_INTERFACE_PRINT( "CMccRtpStream::SRTPMasterKeyStaleEvent" ) + } + +// --------------------------------------------------------------------------- +// 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 CMccRtpDataSource::SRTPMasterKeyStaleEvent(const CSRTPSession& /*aSession*/ ) + { + TRACE_RTP_INTERFACE_PRINT( "CMccRtpStream::SRTPMasterKeyStaleEvent" ) + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::TimerExpiredL +// From MMccExpirationHandler +// ----------------------------------------------------------------------------- +// +void CMccRtpDataSource::TimerExpiredL( TMccTimerId /*aTimerId*/, TAny* /*aTimerParam*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CMccRtpDataSource::RateAdaptationRequest +// ----------------------------------------------------------------------------- +// +TInt CMccRtpDataSource::RateAdaptationRequest( const TMccEvent& aInputData, TMccEvent& aOutputData ) + { + TInt error = 0; + #ifdef RATECONTROL + TMccRateAdaptationEventDataPackage inputdatapkg; + inputdatapkg.Copy(aInputData.iEventData); + TMccRateAdaptationEventData inputdata = inputdatapkg(); + TMccRateAdaptationEventData outputdata =TMccRateAdaptationEventData(); + if ( ETrue) + { + TInt bitrate = 127000; + TReal frameRate = 15; + outputdata.iBitrateOriginal = bitrate; + __TRACE_MCC_QOS_CONTROLLER3("CMccRtpDataSource_STUB::RateAdaptationRequest originalBitrate=" , bitrate); + TInt mbitrate = TInt( inputdata.iRateAdaptationAdvice * TReal( bitrate ) ); + if ( mbitrate > 128000 ) + { + mbitrate = 128000; + } + outputdata.iBitrateModified = mbitrate; + __TRACE_MCC_QOS_CONTROLLER3("CMccRtpDataSource_STUB::RateAdaptationRequest modifiedBitrate=" , mbitrate); + #ifdef FRAMERATECONTROL + if ( bitrate > KIPULFrameRate10Limit ) + { + __TRACE_MCC_QOS_CONTROLLER3("CMccRtpDataSource_STUB::RateAdaptationRequest frameRate=" , frameRate); + frameRate = iFrameRate; + } + else if (bitrate < KIPULFrameRate5Limit ) + { + __TRACE_MCC_QOS_CONTROLLER3("CMccRtpDataSource_STUB::RateAdaptationRequest frameRate=" , frameRate); + frameRate = Min( 5.0, iFrameRate ); + } + else + { + __TRACE_MCC_QOS_CONTROLLER3("CMccRtpDataSource_STUB::RateAdaptationRequest frameRate=" , frameRate); + frameRate = Min( 10.0, iFrameRate ); + } + + #else //FRAMERATECONTROL + error = 0; + #endif //FRAMERATECONTROL + + TMccRateAdaptationEventDataPackage temp( outputdata ); + aOutputData.iEventData.Copy( temp ); + __TRACE_MCC_QOS_CONTROLLER1("CMccRtpDataSource_STUB::RateAdaptationRequest end"); + return KErrNone; + } +#else //RATECONTROL + error = aInputData.iErrorCode; //remove warning + error = aOutputData.iErrorCode; +#endif //RATECONTROL + return KErrNotSupported; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File