summaryrefslogtreecommitdiff
path: root/video_engine/vie_remb.h
diff options
context:
space:
mode:
authorandrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-10-22 18:19:23 +0000
committerandrew@webrtc.org <andrew@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2012-10-22 18:19:23 +0000
commitb015cbede88899f67a53fbbe581b02ce8e327949 (patch)
tree530a64a3cfdbbabacab974c183326517d49e761e /video_engine/vie_remb.h
downloadwebrtc-b015cbede88899f67a53fbbe581b02ce8e327949.tar.gz
Move src/ -> webrtc/
TBR=niklas.enbom@webrtc.org Review URL: https://webrtc-codereview.appspot.com/915006 git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@2963 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/vie_remb.h')
-rw-r--r--video_engine/vie_remb.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/video_engine/vie_remb.h b/video_engine/vie_remb.h
new file mode 100644
index 00000000..43f373e0
--- /dev/null
+++ b/video_engine/vie_remb.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2012 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.
+ */
+
+// 1. Register a RtpRtcp module to include in the REMB packet.
+// 2. When UpdateBitrateEstimate is called for the first time for a SSRC, add it
+// to the map.
+// 3. Send a new REMB every kRembSendIntervallMs or if a lower bitrate estimate
+// for a specified SSRC.
+
+
+#ifndef WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_REMB_H_
+#define WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_REMB_H_
+
+#include <list>
+#include <map>
+#include <utility>
+
+#include "modules/interface/module.h"
+#include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
+#include "modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
+#include "system_wrappers/interface/scoped_ptr.h"
+
+namespace webrtc {
+
+class CriticalSectionWrapper;
+class ProcessThread;
+class RtpRtcp;
+
+class VieRemb : public RemoteBitrateObserver, public Module {
+ public:
+ explicit VieRemb(ProcessThread* process_thread);
+ ~VieRemb();
+
+ // Called to add a receive channel to include in the REMB packet.
+ void AddReceiveChannel(RtpRtcp* rtp_rtcp);
+
+ // Removes the specified channel from REMB estimate.
+ void RemoveReceiveChannel(RtpRtcp* rtp_rtcp);
+
+ // Called to add a module that can generate and send REMB RTCP.
+ void AddRembSender(RtpRtcp* rtp_rtcp);
+
+ // Removes a REMB RTCP sender.
+ void RemoveRembSender(RtpRtcp* rtp_rtcp);
+
+ // Returns true if the instance is in use, false otherwise.
+ bool InUse() const;
+
+ // Called every time there is a new bitrate estimate for a receive channel
+ // group. This call will trigger a new RTCP REMB packet if the bitrate
+ // estimate has decreased or if no RTCP REMB packet has been sent for
+ // a certain time interval.
+ // Implements RtpReceiveBitrateUpdate.
+ virtual void OnReceiveBitrateChanged(unsigned int bitrate);
+
+ // Implements Module.
+ virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 id);
+ virtual WebRtc_Word32 TimeUntilNextProcess();
+ virtual WebRtc_Word32 Process();
+
+ private:
+ typedef std::list<RtpRtcp*> RtpModules;
+
+ ProcessThread* process_thread_;
+ scoped_ptr<CriticalSectionWrapper> list_crit_;
+
+ // The last time a REMB was sent.
+ int64_t last_remb_time_;
+ unsigned int last_send_bitrate_;
+
+ // All RtpRtcp modules to include in the REMB packet.
+ RtpModules receive_modules_;
+
+ // All modules that can send REMB RTCP.
+ RtpModules rtcp_sender_;
+
+ // The last bitrate update.
+ unsigned int bitrate_;
+ int64_t bitrate_update_time_ms_;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_REMB_H_