blob: 7f7f2f0011eeefc4697035276ca75d2d01d1caea [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_
#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_
#include "typedefs.h"
#include "rtp_rtcp.h"
#include "rtp_rtcp_defines.h"
#include "udp_transport.h"
class TestLoadGenerator;
namespace webrtc {
class CriticalSectionWrapper;
class EventWrapper;
class ThreadWrapper;
}
using namespace webrtc;
#define MAX_BITRATE_KBPS 50000
class SendRecCB
{
public:
virtual void OnOnNetworkChanged(const WebRtc_UWord32 bitrateTarget,
const WebRtc_UWord8 fractionLost,
const WebRtc_UWord16 roundTripTimeMs,
const WebRtc_UWord16 bwEstimateKbitMin,
const WebRtc_UWord16 bwEstimateKbitMax) = 0;
virtual ~SendRecCB() {};
};
class TestSenderReceiver : public RtpFeedback, public RtpData, public UdpTransportData, public RtpVideoFeedback
{
public:
TestSenderReceiver (void);
~TestSenderReceiver (void);
void SetCallback (SendRecCB *cb) { _sendRecCB = cb; };
WebRtc_Word32 Start();
WebRtc_Word32 Stop();
bool ProcLoop();
/////////////////////////////////////////////
// Receiver methods
WebRtc_Word32 InitReceiver (const WebRtc_UWord16 rtpPort,
const WebRtc_UWord16 rtcpPort = 0,
const WebRtc_Word8 payloadType = 127);
WebRtc_Word32 ReceiveBitrateKbps ();
WebRtc_Word32 SetPacketTimeout(const WebRtc_UWord32 timeoutMS);
bool timeOutTriggered () { return (_timeOut); };
// Inherited from RtpFeedback
virtual WebRtc_Word32 OnInitializeDecoder(const WebRtc_Word32 id,
const WebRtc_Word8 payloadType,
const WebRtc_Word8 payloadName[RTP_PAYLOAD_NAME_SIZE],
const WebRtc_UWord32 frequency,
const WebRtc_UWord8 channels,
const WebRtc_UWord32 rate) { return(0);};
virtual void OnPacketTimeout(const WebRtc_Word32 id);
virtual void OnReceivedPacket(const WebRtc_Word32 id,
const RtpRtcpPacketType packetType);
virtual void OnPeriodicDeadOrAlive(const WebRtc_Word32 id,
const RTPAliveType alive) {};
virtual void OnIncomingSSRCChanged( const WebRtc_Word32 id,
const WebRtc_UWord32 SSRC) {};
virtual void OnIncomingCSRCChanged( const WebRtc_Word32 id,
const WebRtc_UWord32 CSRC,
const bool added) {};
// Inherited from RtpData
virtual WebRtc_Word32 OnReceivedPayloadData(const WebRtc_UWord8* payloadData,
const WebRtc_UWord16 payloadSize,
const webrtc::WebRtcRTPHeader* rtpHeader);
// Inherited from UdpTransportData
virtual void IncomingRTPPacket(const WebRtc_Word8* incomingRtpPacket,
const WebRtc_Word32 rtpPacketLength,
const WebRtc_Word8* fromIP,
const WebRtc_UWord16 fromPort);
virtual void IncomingRTCPPacket(const WebRtc_Word8* incomingRtcpPacket,
const WebRtc_Word32 rtcpPacketLength,
const WebRtc_Word8* fromIP,
const WebRtc_UWord16 fromPort);
/////////////////////////////////
// Sender methods
WebRtc_Word32 InitSender (const WebRtc_UWord32 startBitrateKbps,
const WebRtc_Word8* ipAddr,
const WebRtc_UWord16 rtpPort,
const WebRtc_UWord16 rtcpPort = 0,
const WebRtc_Word8 payloadType = 127);
WebRtc_Word32 SendOutgoingData(const WebRtc_UWord32 timeStamp,
const WebRtc_UWord8* payloadData,
const WebRtc_UWord32 payloadSize,
const webrtc::FrameType frameType = webrtc::kVideoFrameDelta);
WebRtc_Word32 SetLoadGenerator(TestLoadGenerator *generator);
WebRtc_UWord32 BitrateSent() { return (_rtp->BitrateSent()); };
// Inherited from RtpVideoFeedback
virtual void OnReceivedIntraFrameRequest(const WebRtc_Word32 id,
const WebRtc_UWord8 message = 0) {};
virtual void OnNetworkChanged(const WebRtc_Word32 id,
const WebRtc_UWord32 minBitrateBps,
const WebRtc_UWord32 maxBitrateBps,
const WebRtc_UWord8 fractionLost,
const WebRtc_UWord16 roundTripTimeMs,
const WebRtc_UWord16 bwEstimateKbitMin,
const WebRtc_UWord16 bwEstimateKbitMax);
private:
RtpRtcp* _rtp;
UdpTransport* _transport;
webrtc::CriticalSectionWrapper* _critSect;
webrtc::EventWrapper *_eventPtr;
webrtc::ThreadWrapper* _procThread;
bool _running;
WebRtc_Word8 _payloadType;
TestLoadGenerator* _loadGenerator;
bool _isSender;
bool _isReceiver;
bool _timeOut;
SendRecCB * _sendRecCB;
WebRtc_UWord32 _lastBytesReceived;
WebRtc_Word64 _lastTime;
};
#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_