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

Side by Side Diff: webrtc/modules/audio_coding/neteq/packet_buffer.h

Issue 1903043003: WIP: Adding a centralized NetEq Clock (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@neteq-remove-type-param
Patch Set: Created 4 years, 8 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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_ 11 #ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_
12 #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_ 12 #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_
13 13
14 #include "webrtc/base/constructormagic.h" 14 #include "webrtc/base/constructormagic.h"
15 #include "webrtc/modules/audio_coding/neteq/packet.h" 15 #include "webrtc/modules/audio_coding/neteq/packet.h"
16 #include "webrtc/typedefs.h" 16 #include "webrtc/typedefs.h"
17 17
18 namespace webrtc { 18 namespace webrtc {
19 19
20 // Forward declaration. 20 // Forward declarations.
21 class DecoderDatabase; 21 class DecoderDatabase;
22 class TickTimer;
22 23
23 // This is the actual buffer holding the packets before decoding. 24 // This is the actual buffer holding the packets before decoding.
24 class PacketBuffer { 25 class PacketBuffer {
25 public: 26 public:
26 enum BufferReturnCodes { 27 enum BufferReturnCodes {
27 kOK = 0, 28 kOK = 0,
28 kFlushed, 29 kFlushed,
29 kNotFound, 30 kNotFound,
30 kBufferEmpty, 31 kBufferEmpty,
31 kInvalidPacket, 32 kInvalidPacket,
32 kInvalidPointer 33 kInvalidPointer
33 }; 34 };
34 35
35 // Constructor creates a buffer which can hold a maximum of 36 // Constructor creates a buffer which can hold a maximum of
36 // |max_number_of_packets| packets. 37 // |max_number_of_packets| packets.
37 PacketBuffer(size_t max_number_of_packets); 38 PacketBuffer(size_t max_number_of_packets, const TickTimer& tick_timer);
38 39
39 // Deletes all packets in the buffer before destroying the buffer. 40 // Deletes all packets in the buffer before destroying the buffer.
40 virtual ~PacketBuffer(); 41 virtual ~PacketBuffer();
41 42
42 // Flushes the buffer and deletes all packets in it. 43 // Flushes the buffer and deletes all packets in it.
43 virtual void Flush(); 44 virtual void Flush();
44 45
45 // Returns true for an empty buffer. 46 // Returns true for an empty buffer.
46 virtual bool Empty() const; 47 virtual bool Empty() const;
47 48
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 110
110 // Returns the number of packets in the buffer, including duplicates and 111 // Returns the number of packets in the buffer, including duplicates and
111 // redundant packets. 112 // redundant packets.
112 virtual size_t NumPacketsInBuffer() const; 113 virtual size_t NumPacketsInBuffer() const;
113 114
114 // Returns the number of samples in the buffer, including samples carried in 115 // Returns the number of samples in the buffer, including samples carried in
115 // duplicate and redundant packets. 116 // duplicate and redundant packets.
116 virtual size_t NumSamplesInBuffer(DecoderDatabase* decoder_database, 117 virtual size_t NumSamplesInBuffer(DecoderDatabase* decoder_database,
117 size_t last_decoded_length) const; 118 size_t last_decoded_length) const;
118 119
119 // Increase the waiting time counter for every packet in the buffer by |inc|.
120 // The default value for |inc| is 1.
121 virtual void IncrementWaitingTimes(int inc = 1);
122
123 virtual void BufferStat(int* num_packets, int* max_num_packets) const; 120 virtual void BufferStat(int* num_packets, int* max_num_packets) const;
124 121
125 // Static method that properly deletes the first packet, and its payload 122 // Static method that properly deletes the first packet, and its payload
126 // array, in |packet_list|. Returns false if |packet_list| already was empty, 123 // array, in |packet_list|. Returns false if |packet_list| already was empty,
127 // otherwise true. 124 // otherwise true.
128 static bool DeleteFirstPacket(PacketList* packet_list); 125 static bool DeleteFirstPacket(PacketList* packet_list);
129 126
130 // Static method that properly deletes all packets, and their payload arrays, 127 // Static method that properly deletes all packets, and their payload arrays,
131 // in |packet_list|. 128 // in |packet_list|.
132 static void DeleteAllPackets(PacketList* packet_list); 129 static void DeleteAllPackets(PacketList* packet_list);
133 130
134 // Static method returning true if |timestamp| is older than |timestamp_limit| 131 // Static method returning true if |timestamp| is older than |timestamp_limit|
135 // but less than |horizon_samples| behind |timestamp_limit|. For instance, 132 // but less than |horizon_samples| behind |timestamp_limit|. For instance,
136 // with timestamp_limit = 100 and horizon_samples = 10, a timestamp in the 133 // with timestamp_limit = 100 and horizon_samples = 10, a timestamp in the
137 // range (90, 100) is considered obsolete, and will yield true. 134 // range (90, 100) is considered obsolete, and will yield true.
138 // Setting |horizon_samples| to 0 is the same as setting it to 2^31, i.e., 135 // Setting |horizon_samples| to 0 is the same as setting it to 2^31, i.e.,
139 // half the 32-bit timestamp range. 136 // half the 32-bit timestamp range.
140 static bool IsObsoleteTimestamp(uint32_t timestamp, 137 static bool IsObsoleteTimestamp(uint32_t timestamp,
141 uint32_t timestamp_limit, 138 uint32_t timestamp_limit,
142 uint32_t horizon_samples) { 139 uint32_t horizon_samples) {
143 return IsNewerTimestamp(timestamp_limit, timestamp) && 140 return IsNewerTimestamp(timestamp_limit, timestamp) &&
144 (horizon_samples == 0 || 141 (horizon_samples == 0 ||
145 IsNewerTimestamp(timestamp, timestamp_limit - horizon_samples)); 142 IsNewerTimestamp(timestamp, timestamp_limit - horizon_samples));
146 } 143 }
147 144
148 private: 145 private:
149 size_t max_number_of_packets_; 146 size_t max_number_of_packets_;
150 PacketList buffer_; 147 PacketList buffer_;
148 const TickTimer& tick_timer_;
151 RTC_DISALLOW_COPY_AND_ASSIGN(PacketBuffer); 149 RTC_DISALLOW_COPY_AND_ASSIGN(PacketBuffer);
152 }; 150 };
153 151
154 } // namespace webrtc 152 } // namespace webrtc
155 #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_ 153 #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_PACKET_BUFFER_H_
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/packet.cc ('k') | webrtc/modules/audio_coding/neteq/packet_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698