Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h

Issue 2633923003: Add rtcp::TransportFeedback::GetReceivedPackets() (Closed)
Patch Set: . Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_ 11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_
12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_ 12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_
13 13
14 #include <memory> 14 #include <memory>
15 #include <vector> 15 #include <vector>
16 16
17 #include "webrtc/base/constructormagic.h" 17 #include "webrtc/base/constructormagic.h"
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h" 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 namespace rtcp { 21 namespace rtcp {
22 class CommonHeader; 22 class CommonHeader;
23 23
24 class TransportFeedback : public Rtpfb { 24 class TransportFeedback : public Rtpfb {
25 public: 25 public:
26 class ReceivedPacket {
27 public:
28 ReceivedPacket(uint16_t sequence_number, int16_t delta_ticks)
29 : sequence_number_(sequence_number), delta_ticks_(delta_ticks) {}
30 ReceivedPacket(const ReceivedPacket&) = default;
31 ReceivedPacket& operator=(const ReceivedPacket&) = default;
32
33 uint16_t sequence_number() const { return sequence_number_; }
34 int16_t delta_ticks() const { return delta_ticks_; }
35 int32_t delta_us() const { return delta_ticks_ * kDeltaScaleFactor; }
36
37 private:
38 uint16_t sequence_number_;
minyue-webrtc 2017/01/18 08:25:27 these two vars are const too?
danilchap 2017/01/18 09:20:12 can't declare them const because of assign operato
39 int16_t delta_ticks_;
40 };
26 // TODO(sprang): IANA reg? 41 // TODO(sprang): IANA reg?
27 static constexpr uint8_t kFeedbackMessageType = 15; 42 static constexpr uint8_t kFeedbackMessageType = 15;
28 // Convert to multiples of 0.25ms. 43 // Convert to multiples of 0.25ms.
29 static constexpr int kDeltaScaleFactor = 250; 44 static constexpr int kDeltaScaleFactor = 250;
30 // Maximum number of packets (including missing) TransportFeedback can report. 45 // Maximum number of packets (including missing) TransportFeedback can report.
31 static constexpr size_t kMaxReportedPackets = 0xffff; 46 static constexpr size_t kMaxReportedPackets = 0xffff;
32 47
33 TransportFeedback(); 48 TransportFeedback();
34 ~TransportFeedback() override; 49 ~TransportFeedback() override;
35 50
36 void SetBase(uint16_t base_sequence, // Seq# of first packet in this msg. 51 void SetBase(uint16_t base_sequence, // Seq# of first packet in this msg.
37 int64_t ref_timestamp_us); // Reference timestamp for this msg. 52 int64_t ref_timestamp_us); // Reference timestamp for this msg.
38 void SetFeedbackSequenceNumber(uint8_t feedback_sequence); 53 void SetFeedbackSequenceNumber(uint8_t feedback_sequence);
39 // NOTE: This method requires increasing sequence numbers (excepting wraps). 54 // NOTE: This method requires increasing sequence numbers (excepting wraps).
40 bool AddReceivedPacket(uint16_t sequence_number, int64_t timestamp_us); 55 bool AddReceivedPacket(uint16_t sequence_number, int64_t timestamp_us);
56 const std::vector<ReceivedPacket>& GetReceivedPackets() const;
41 57
42 enum class StatusSymbol { 58 enum class StatusSymbol {
43 kNotReceived, 59 kNotReceived,
44 kReceivedSmallDelta, 60 kReceivedSmallDelta,
45 kReceivedLargeDelta, 61 kReceivedLargeDelta,
46 }; 62 };
47 63
48 uint16_t GetBaseSequence() const; 64 uint16_t GetBaseSequence() const;
49 std::vector<TransportFeedback::StatusSymbol> GetStatusVector() const; 65 std::vector<TransportFeedback::StatusSymbol> GetStatusVector() const;
50 std::vector<int16_t> GetReceiveDeltas() const; 66 std::vector<int16_t> GetReceiveDeltas() const;
(...skipping 18 matching lines...) Expand all
69 PacketReadyCallback* callback) const override; 85 PacketReadyCallback* callback) const override;
70 86
71 size_t BlockLength() const override; 87 size_t BlockLength() const override;
72 88
73 private: 89 private:
74 // Size in bytes of a delta time in rtcp packet. 90 // Size in bytes of a delta time in rtcp packet.
75 // Valid values are 0 (packet wasn't received), 1 or 2. 91 // Valid values are 0 (packet wasn't received), 1 or 2.
76 using DeltaSize = uint8_t; 92 using DeltaSize = uint8_t;
77 // Keeps DeltaSizes that can be encoded into single chunk if it is last chunk. 93 // Keeps DeltaSizes that can be encoded into single chunk if it is last chunk.
78 class LastChunk; 94 class LastChunk;
79 struct ReceivedPacket {
80 ReceivedPacket(uint16_t sequence_number, int16_t delta_ticks)
81 : sequence_number(sequence_number), delta_ticks(delta_ticks) {}
82 uint16_t sequence_number;
83 int16_t delta_ticks;
84 };
85 95
86 // Reset packet to consistent empty state. 96 // Reset packet to consistent empty state.
87 void Clear(); 97 void Clear();
88 98
89 bool AddDeltaSize(DeltaSize delta_size); 99 bool AddDeltaSize(DeltaSize delta_size);
90 100
91 uint16_t base_seq_no_; 101 uint16_t base_seq_no_;
92 uint16_t num_seq_no_; 102 uint16_t num_seq_no_;
93 int32_t base_time_ticks_; 103 int32_t base_time_ticks_;
94 uint8_t feedback_seq_; 104 uint8_t feedback_seq_;
95 105
96 int64_t last_timestamp_us_; 106 int64_t last_timestamp_us_;
97 std::vector<ReceivedPacket> packets_; 107 std::vector<ReceivedPacket> packets_;
98 // All but last encoded packet chunks. 108 // All but last encoded packet chunks.
99 std::vector<uint16_t> encoded_chunks_; 109 std::vector<uint16_t> encoded_chunks_;
100 const std::unique_ptr<LastChunk> last_chunk_; 110 const std::unique_ptr<LastChunk> last_chunk_;
101 size_t size_bytes_; 111 size_t size_bytes_;
102 112
103 RTC_DISALLOW_COPY_AND_ASSIGN(TransportFeedback); 113 RTC_DISALLOW_COPY_AND_ASSIGN(TransportFeedback);
104 }; 114 };
105 115
106 } // namespace rtcp 116 } // namespace rtcp
107 } // namespace webrtc 117 } // namespace webrtc
108 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_ 118 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_TRANSPORT_FEEDBACK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698