Home | History | Annotate | Download | only in rtcp_packet
      1 /*
      2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
      3  *
      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  */
     11 
     12 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TMMBN_H_
     13 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TMMBN_H_
     14 
     15 #include <vector>
     16 #include "webrtc/base/basictypes.h"
     17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
     18 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
     19 
     20 namespace webrtc {
     21 namespace rtcp {
     22 
     23 // Temporary Maximum Media Stream Bit Rate Notification (TMMBN) (RFC 5104).
     24 class Tmmbn : public RtcpPacket {
     25  public:
     26   Tmmbn() : RtcpPacket() {
     27     memset(&tmmbn_, 0, sizeof(tmmbn_));
     28   }
     29 
     30   virtual ~Tmmbn() {}
     31 
     32   void From(uint32_t ssrc) {
     33     tmmbn_.SenderSSRC = ssrc;
     34   }
     35   // Max 50 TMMBR can be added per TMMBN.
     36   bool WithTmmbr(uint32_t ssrc, uint32_t bitrate_kbps, uint16_t overhead);
     37 
     38  protected:
     39   bool Create(uint8_t* packet,
     40               size_t* index,
     41               size_t max_length,
     42               RtcpPacket::PacketReadyCallback* callback) const override;
     43 
     44  private:
     45   static const int kMaxNumberOfTmmbrs = 50;
     46 
     47   size_t BlockLength() const {
     48     const size_t kFciLen = 8;
     49     return kCommonFbFmtLength + kFciLen * tmmbn_items_.size();
     50   }
     51 
     52   RTCPUtility::RTCPPacketRTPFBTMMBN tmmbn_;
     53   std::vector<RTCPUtility::RTCPPacketRTPFBTMMBRItem> tmmbn_items_;
     54 
     55   RTC_DISALLOW_COPY_AND_ASSIGN(Tmmbn);
     56 };
     57 
     58 }  // namespace rtcp
     59 }  // namespace webrtc
     60 #endif  // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TMMBN_H_
     61