diff -r 000000000000 -r 307788aac0a8 rtp/rtpstack/inc/rtptranstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtp/rtpstack/inc/rtptranstream.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2004-2005 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: +* +*/ + + + + + +#ifndef RtpTranStream_H +#define RtpTranStream_H + +#include "rtpstream.h" + + +/** +* Derived class for RTP transmit stream. +* +* @lib RtpService.dll +*/ +class CRtpTranStream : public CRtpStream + { + #if defined( _DEBUG ) && defined( RTP_UNIT_TEST ) + //Friend class used for testing + friend class CRtpUtRtpStream; + #endif + public: + static CRtpTranStream* NewL( const TRtpPayloadType aPayloadType, + const TRtpId aSessionID, + const TRtpId aTranStreamID, + const TRtpSSRC aSSRC, + MRtcpObserver* aObserver, + const TUint32* aProfileRTPTimeRates ); + ~CRtpTranStream(); + + TInt BuildRtpPacket( const TRtpSendHeader& aHeaderInfo, + const TDesC8& aPayloadData, + TRtpSequence aSeqNum, + TBool aSetSeqNum, + CRtpPacket* aPktSnd ); + + TInt BuildRtcpBYEPacket( const TDesC8& aReason, + CRtpPacket* aPktRtcpSnd ); + + TInt BuildRtcpAPPPacket( const TRtcpApp& aApp, + CRtpPacket* aPktRtcpSnd ); + + inline TBool SentRTPPackets() const { return iFlagSentRTPPackets; }; + inline void SetSentRTPPackets( TBool aFlag ) + { + iFlagSentRTPPackets = aFlag; + }; + + inline TBool SentRtcpReport() { return iFSentRtcpReport; }; + inline void SetRtcpReportFlag() { iFSentRtcpReport = ETrue; }; + inline void ResetRtcpReportFlag() { iFSentRtcpReport = EFalse; }; + inline void SetBandwidth( TUint32 aBandwidth ) + { + iRtcpStats.iRtcpReceiverStats.iTxBandwidth = aBandwidth; + }; + + public: // from CRtpStream + TInt ResetStreamStat(); + TInt GetStreamStat( TRtpPeerStat& aStat ); + TRtpRtcpEnum RtpStreamProcessRtcpReportSectionL( CRtpPacket* aPkt ); + void RtpStreamCreateRtcpReportSection( CRtpPacket* aPkt ); + + private: + CRtpTranStream( const TRtpPayloadType aPayloadType, + const TRtpId aSessionId, + const TRtpId aStreamId, + const TRtpSSRC aSSRC, + MRtcpObserver* aRtcpObserver, + const TUint32* aProfileRTPTimeRates ); + void ConstructL(); + + inline void IncCumNumOctetsSent( TUint32 aInc ) + { + iCumNumOctetsSent += aInc; + iSN_size[iSeqNum % KSNMaxArray] = iCumNumOctetsSent; + }; + + void RtpStreamSyncInit( TRtpTimeStamp initTimeStamp ); + TUint32 RtpStreamSyncGetRoundTripDelay( TUint32 lastSRTimeStamp, + TUint32 delaySinceLSR ); + void RtpStreamSyncCurrent( TRtpTimeSync* aSyncInfoCurrent ); + + /** + * Makes an estimate of the Tx and Rx bandwidths. + * NOTE: This is just a simple estimate, which assumes the following: + * - this is an end-to-end session + * - the sessions and streams are set up before traffic starts + * - the payload bitrate is constant + * The result of this estimation should not be used in any other + * contexts. + */ + void EstimateBandWidths( TUint32 aCurrentTime ); + + private: + // flag to indicate if a packet was sent since last RTCP packet + TBool iFlagSentRTPPackets; + + // time of previous RTCP packet sent + TUint32 iPreviousTime; + + // remote bandwidth + TUint32 iRemoteBandwidth; + + // previous remote sequence number + TUint32 iPreviousRemoteSN; + + // time of previous RTCP packet received + TUint32 iPrevRemoteTime; + + // number of bytes sent + TUint32 iCumNumOctetsSent; + + // keeps track of how many bytes were received by the receiver + TUint32 iCumNumOctetsReceived; + + // previous value of cumNumOctetsSent + TUint32 iCumNumOctetsSent_last; + + // keeps track of the total bytes sent + TUint32 iSN_size[KSNMaxArray]; + + // if ETrue, then packet sequence number is given by application + TBool iFSetSeqNum; + + // flag that indicates if an RTCP Packet has been sent + TBool iFSentRtcpReport; + private: + #ifdef EUNIT_TESTING + friend class UT_CRtpSession; + friend class UT_CRtpStream; + friend class UT_CRtpSessionSrtp; + #endif + + }; + + +#endif // RtpTranStream_H