1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" 15cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 16cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/test/channel_transport/udp_transport.h" 17cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/typedefs.h" 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass TestLoadGenerator; 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass EventWrapper; 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ThreadWrapper; 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc; 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define MAX_BITRATE_KBPS 50000 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass SendRecCB 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 34b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnOnNetworkChanged(const uint32_t bitrateTarget, 35b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t fractionLost, 36b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t roundTripTimeMs, 37b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t bwEstimateKbitMin, 38b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t bwEstimateKbitMax) = 0; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~SendRecCB() {}; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass TestSenderReceiver : public RtpFeedback, public RtpData, public UdpTransportData, public RtpVideoFeedback 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestSenderReceiver (void); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~TestSenderReceiver (void); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetCallback (SendRecCB *cb) { _sendRecCB = cb; }; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 54b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t Start(); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 56b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t Stop(); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool ProcLoop(); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ///////////////////////////////////////////// 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Receiver methods 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t InitReceiver (const uint16_t rtpPort, 64b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t rtcpPort = 0, 65b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int8_t payloadType = 127); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t ReceiveBitrateKbps (); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 69b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t SetPacketTimeout(const uint32_t timeoutMS); 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool timeOutTriggered () { return (_timeOut); }; 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Inherited from RtpFeedback 748f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org virtual int32_t OnInitializeDecoder( 758f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int32_t id, 768f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int8_t payloadType, 778f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int8_t payloadName[RTP_PAYLOAD_NAME_SIZE], 788f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint32_t frequency, 798f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint8_t channels, 808f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint32_t rate) OVERRIDE { 818f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org return 0; 828f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org } 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnPacketTimeout(const int32_t id); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnReceivedPacket(const int32_t id, 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const RtpRtcpPacketType packetType); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 89b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnPeriodicDeadOrAlive(const int32_t id, 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const RTPAliveType alive) {}; 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 928f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org virtual void OnIncomingSSRCChanged(const int32_t id, 938f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint32_t SSRC) OVERRIDE {} 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 958f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org virtual void OnIncomingCSRCChanged(const int32_t id, 968f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint32_t CSRC, 978f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const bool added) OVERRIDE {} 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Inherited from RtpData 1018f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org virtual int32_t OnReceivedPayloadData( 1028f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint8_t* payloadData, 1038f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint16_t payloadSize, 1048f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const webrtc::WebRtcRTPHeader* rtpHeader) OVERRIDE; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Inherited from UdpTransportData 108b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void IncomingRTPPacket(const int8_t* incomingRtpPacket, 1098f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int32_t rtpPacketLength, 1108f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int8_t* fromIP, 1118f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint16_t fromPort) OVERRIDE; 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void IncomingRTCPPacket(const int8_t* incomingRtcpPacket, 1148f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int32_t rtcpPacketLength, 1158f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const int8_t* fromIP, 1168f32b7902e97cbd04d2606b8a90987342692b5f8henrikg@webrtc.org const uint16_t fromPort) OVERRIDE; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ///////////////////////////////// 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sender methods 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 123b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t InitSender (const uint32_t startBitrateKbps, 124b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int8_t* ipAddr, 125b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t rtpPort, 126b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t rtcpPort = 0, 127b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int8_t payloadType = 127); 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 129b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t SendOutgoingData(const uint32_t timeStamp, 130b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t* payloadData, 131b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t payloadSize, 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const webrtc::FrameType frameType = webrtc::kVideoFrameDelta); 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int32_t SetLoadGenerator(TestLoadGenerator *generator); 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 136b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t BitrateSent() { return (_rtp->BitrateSent()); }; 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Inherited from RtpVideoFeedback 140b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnReceivedIntraFrameRequest(const int32_t id, 141b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t message = 0) {}; 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 143b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnNetworkChanged(const int32_t id, 144b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t minBitrateBps, 145b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t maxBitrateBps, 146b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t fractionLost, 147b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t roundTripTimeMs, 148b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t bwEstimateKbitMin, 149b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t bwEstimateKbitMax); 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtpRtcp* _rtp; 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org UdpTransport* _transport; 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::CriticalSectionWrapper* _critSect; 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::EventWrapper *_eventPtr; 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::ThreadWrapper* _procThread; 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _running; 158b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int8_t _payloadType; 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestLoadGenerator* _loadGenerator; 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _isSender; 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _isReceiver; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _timeOut; 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SendRecCB * _sendRecCB; 164b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t _lastBytesReceived; 165b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org int64_t _lastTime; 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_TEST_BWESTANDALONE_TESTSENDERRECEIVER_H_ 170