blob: 66e1c8e6892e15c9f1bb3f8693e58fcea3efb267 [file] [log] [blame]
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +00001/*
mflodman@webrtc.orgf7b60782012-02-16 14:50:24 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +00003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
niklas.enbom@webrtc.orgef629292012-10-31 14:35:11 +000011#ifndef WEBRTC_VIDEO_ENGINE_VIE_REMB_H_
12#define WEBRTC_VIDEO_ENGINE_VIE_REMB_H_
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000013
14#include <list>
mflodman@webrtc.org1b1cd782012-06-28 06:34:08 +000015#include <utility>
mflodman@webrtc.orgf89fb9d2012-11-22 09:41:42 +000016#include <vector>
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000017
pbos@webrtc.orgf5d4cb12013-05-17 13:44:48 +000018#include "webrtc/modules/interface/module.h"
19#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
20#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
21#include "webrtc/system_wrappers/interface/scoped_ptr.h"
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000022
23namespace webrtc {
24
25class CriticalSectionWrapper;
mflodman@webrtc.org9ec883e2012-03-05 17:12:41 +000026class ProcessThread;
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000027class RtpRtcp;
28
stefan@webrtc.orgb5865072013-02-01 14:33:42 +000029class VieRemb : public RemoteBitrateObserver {
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000030 public:
stefan@webrtc.orgb5865072013-02-01 14:33:42 +000031 VieRemb();
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000032 ~VieRemb();
33
34 // Called to add a receive channel to include in the REMB packet.
35 void AddReceiveChannel(RtpRtcp* rtp_rtcp);
36
37 // Removes the specified channel from REMB estimate.
38 void RemoveReceiveChannel(RtpRtcp* rtp_rtcp);
39
mflodman@webrtc.orgf7b60782012-02-16 14:50:24 +000040 // Called to add a module that can generate and send REMB RTCP.
41 void AddRembSender(RtpRtcp* rtp_rtcp);
42
43 // Removes a REMB RTCP sender.
44 void RemoveRembSender(RtpRtcp* rtp_rtcp);
45
mflodman@webrtc.org9ec883e2012-03-05 17:12:41 +000046 // Returns true if the instance is in use, false otherwise.
47 bool InUse() const;
48
stefan@webrtc.org3aece422012-10-18 11:12:39 +000049 // Called every time there is a new bitrate estimate for a receive channel
50 // group. This call will trigger a new RTCP REMB packet if the bitrate
51 // estimate has decreased or if no RTCP REMB packet has been sent for
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000052 // a certain time interval.
53 // Implements RtpReceiveBitrateUpdate.
solenberg@webrtc.org561990f2013-05-22 19:04:19 +000054 virtual void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
stefan@webrtc.org4100b042012-11-19 10:09:20 +000055 unsigned int bitrate);
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000056
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000057 private:
58 typedef std::list<RtpRtcp*> RtpModules;
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000059
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000060 scoped_ptr<CriticalSectionWrapper> list_crit_;
61
62 // The last time a REMB was sent.
63 int64_t last_remb_time_;
mflodman@webrtc.org1fb39ba2012-08-13 17:05:14 +000064 unsigned int last_send_bitrate_;
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000065
66 // All RtpRtcp modules to include in the REMB packet.
67 RtpModules receive_modules_;
68
mflodman@webrtc.orgf7b60782012-02-16 14:50:24 +000069 // All modules that can send REMB RTCP.
70 RtpModules rtcp_sender_;
71
stefan@webrtc.org3aece422012-10-18 11:12:39 +000072 // The last bitrate update.
73 unsigned int bitrate_;
mflodman@webrtc.org84dc3d12011-12-22 10:26:13 +000074};
75
76} // namespace webrtc
77
niklas.enbom@webrtc.orgef629292012-10-31 14:35:11 +000078#endif // WEBRTC_VIDEO_ENGINE_VIE_REMB_H_