rtp/rtpstack/inc/rtptranstream.h
changeset 0 307788aac0a8
child 19 b5e99d8877c7
--- /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