
R=stefan@webrtc.org BUG= Review URL: https://webrtc-codereview.appspot.com/33489004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7811 4adac7df-926f-26a2-2b94-8c16560cd09d
86 lines
3.0 KiB
C++
86 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) 2013 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.
|
|
*/
|
|
|
|
#ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INTER_ARRIVAL_H_
|
|
#define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INTER_ARRIVAL_H_
|
|
|
|
#include <cstddef>
|
|
|
|
#include "webrtc/base/constructormagic.h"
|
|
#include "webrtc/typedefs.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// Helper class to compute the inter-arrival time delta and the size delta
|
|
// between two timestamp groups. A timestamp is a 32 bit unsigned number with
|
|
// a client defined rate.
|
|
class InterArrival {
|
|
public:
|
|
// A timestamp group is defined as all packets with a timestamp which are at
|
|
// most timestamp_group_length_ticks older than the first timestamp in that
|
|
// group.
|
|
InterArrival(uint32_t timestamp_group_length_ticks,
|
|
double timestamp_to_ms_coeff,
|
|
bool enable_burst_grouping);
|
|
|
|
// This function returns true if a delta was computed, or false if the current
|
|
// group is still incomplete or if only one group has been completed.
|
|
// |timestamp| is the timestamp.
|
|
// |arrival_time_ms| is the local time at which the packet arrived.
|
|
// |packet_size| is the size of the packet.
|
|
// |timestamp_delta| (output) is the computed timestamp delta.
|
|
// |arrival_time_delta_ms| (output) is the computed arrival-time delta.
|
|
// |packet_size_delta| (output) is the computed size delta.
|
|
bool ComputeDeltas(uint32_t timestamp,
|
|
int64_t arrival_time_ms,
|
|
size_t packet_size,
|
|
uint32_t* timestamp_delta,
|
|
int64_t* arrival_time_delta_ms,
|
|
int* packet_size_delta);
|
|
|
|
private:
|
|
struct TimestampGroup {
|
|
TimestampGroup()
|
|
: size(0),
|
|
first_timestamp(0),
|
|
timestamp(0),
|
|
complete_time_ms(-1) {}
|
|
|
|
bool IsFirstPacket() const {
|
|
return complete_time_ms == -1;
|
|
}
|
|
|
|
size_t size;
|
|
uint32_t first_timestamp;
|
|
uint32_t timestamp;
|
|
int64_t complete_time_ms;
|
|
};
|
|
|
|
// Returns true if the packet with timestamp |timestamp| arrived in order.
|
|
bool PacketInOrder(uint32_t timestamp);
|
|
|
|
// Returns true if the last packet was the end of the current batch and the
|
|
// packet with |timestamp| is the first of a new batch.
|
|
bool NewTimestampGroup(int64_t arrival_time_ms, uint32_t timestamp) const;
|
|
|
|
bool BelongsToBurst(int64_t arrival_time_ms, uint32_t timestamp) const;
|
|
|
|
const uint32_t kTimestampGroupLengthTicks;
|
|
TimestampGroup current_timestamp_group_;
|
|
TimestampGroup prev_timestamp_group_;
|
|
double timestamp_to_ms_coeff_;
|
|
bool burst_grouping_;
|
|
|
|
DISALLOW_IMPLICIT_CONSTRUCTORS(InterArrival);
|
|
};
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INTER_ARRIVAL_H_
|