Home | History | Annotate | Download | only in source
      1 /*
      2  *  Copyright (c) 2012 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 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_HELP_H_
     12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_HELP_H_
     13 
     14 #include <list>
     15 #include <vector>
     16 
     17 #include "webrtc/base/constructormagic.h"
     18 #include "webrtc/base/scoped_ptr.h"
     19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"  // RTCPReportBlock
     20 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
     21 #include "webrtc/modules/rtp_rtcp/source/tmmbr_help.h"
     22 #include "webrtc/typedefs.h"
     23 
     24 namespace webrtc {
     25 namespace rtcp {
     26 class TransportFeedback;
     27 }
     28 namespace RTCPHelp
     29 {
     30 
     31 class RTCPReportBlockInformation
     32 {
     33 public:
     34     RTCPReportBlockInformation();
     35     ~RTCPReportBlockInformation();
     36 
     37     // Statistics
     38     RTCPReportBlock remoteReceiveBlock;
     39     uint32_t        remoteMaxJitter;
     40 
     41     // RTT
     42     int64_t  RTT;
     43     int64_t  minRTT;
     44     int64_t  maxRTT;
     45     int64_t  avgRTT;
     46     uint32_t numAverageCalcs;
     47 };
     48 
     49 class RTCPPacketInformation
     50 {
     51 public:
     52     RTCPPacketInformation();
     53     ~RTCPPacketInformation();
     54 
     55     void AddVoIPMetric(const RTCPVoIPMetric*  metric);
     56 
     57     void AddApplicationData(const uint8_t* data,
     58                             const uint16_t size);
     59 
     60     void AddNACKPacket(const uint16_t packetID);
     61     void ResetNACKPacketIdArray();
     62 
     63     void AddReportInfo(const RTCPReportBlockInformation& report_block_info);
     64 
     65     uint32_t  rtcpPacketTypeFlags; // RTCPPacketTypeFlags bit field
     66     uint32_t  remoteSSRC;
     67 
     68     std::list<uint16_t> nackSequenceNumbers;
     69 
     70     uint8_t   applicationSubType;
     71     uint32_t  applicationName;
     72     uint8_t*  applicationData;
     73     uint16_t  applicationLength;
     74 
     75     ReportBlockList report_blocks;
     76     int64_t rtt;
     77 
     78     uint32_t  interArrivalJitter;
     79 
     80     uint8_t   sliPictureId;
     81     uint64_t  rpsiPictureId;
     82     uint32_t  receiverEstimatedMaxBitrate;
     83 
     84     uint32_t ntp_secs;
     85     uint32_t ntp_frac;
     86     uint32_t rtp_timestamp;
     87 
     88     uint32_t xr_originator_ssrc;
     89     bool xr_dlrr_item;
     90     RTCPVoIPMetric*  VoIPMetric;
     91 
     92     rtc::scoped_ptr<rtcp::TransportFeedback> transport_feedback_;
     93 
     94 private:
     95     RTC_DISALLOW_COPY_AND_ASSIGN(RTCPPacketInformation);
     96 };
     97 
     98 class RTCPReceiveInformation
     99 {
    100 public:
    101     RTCPReceiveInformation();
    102     ~RTCPReceiveInformation();
    103 
    104     void VerifyAndAllocateBoundingSet(const uint32_t minimumSize);
    105     void VerifyAndAllocateTMMBRSet(const uint32_t minimumSize);
    106 
    107     void InsertTMMBRItem(const uint32_t senderSSRC,
    108                          const RTCPUtility::RTCPPacketRTPFBTMMBRItem& TMMBRItem,
    109                          const int64_t currentTimeMS);
    110 
    111     // get
    112     int32_t GetTMMBRSet(const uint32_t sourceIdx,
    113                         const uint32_t targetIdx,
    114                         TMMBRSet* candidateSet,
    115                         const int64_t currentTimeMS);
    116 
    117     int64_t lastTimeReceived;
    118 
    119     // FIR
    120     int32_t lastFIRSequenceNumber;
    121     int64_t lastFIRRequest;
    122 
    123     // TMMBN
    124     TMMBRSet        TmmbnBoundingSet;
    125 
    126     // TMMBR
    127     TMMBRSet        TmmbrSet;
    128 
    129     bool            readyForDelete;
    130 private:
    131     std::vector<int64_t> _tmmbrSetTimeouts;
    132 };
    133 
    134 }  // end namespace RTCPHelp
    135 }  // namespace webrtc
    136 
    137 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_RECEIVER_HELP_H_
    138