Delete VCMJitterBuffer::IncomingRateStatistics
Bug: webrtc:7408 Change-Id: I2da20bca053bb757957aec56e1fc7f7f915a0b55 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/130102 Reviewed-by: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27378}
This commit is contained in:
@ -228,11 +228,6 @@ VCMJitterBuffer::VCMJitterBuffer(Clock* clock,
|
|||||||
incomplete_frames_(),
|
incomplete_frames_(),
|
||||||
last_decoded_state_(),
|
last_decoded_state_(),
|
||||||
first_packet_since_reset_(true),
|
first_packet_since_reset_(true),
|
||||||
incoming_frame_rate_(0),
|
|
||||||
incoming_frame_count_(0),
|
|
||||||
time_last_incoming_frame_count_(0),
|
|
||||||
incoming_bit_count_(0),
|
|
||||||
incoming_bit_rate_(0),
|
|
||||||
num_consecutive_old_packets_(0),
|
num_consecutive_old_packets_(0),
|
||||||
num_packets_(0),
|
num_packets_(0),
|
||||||
num_duplicated_packets_(0),
|
num_duplicated_packets_(0),
|
||||||
@ -272,11 +267,6 @@ VCMJitterBuffer::~VCMJitterBuffer() {
|
|||||||
void VCMJitterBuffer::Start() {
|
void VCMJitterBuffer::Start() {
|
||||||
rtc::CritScope cs(&crit_sect_);
|
rtc::CritScope cs(&crit_sect_);
|
||||||
running_ = true;
|
running_ = true;
|
||||||
incoming_frame_count_ = 0;
|
|
||||||
incoming_frame_rate_ = 0;
|
|
||||||
incoming_bit_count_ = 0;
|
|
||||||
incoming_bit_rate_ = 0;
|
|
||||||
time_last_incoming_frame_count_ = clock_->TimeInMilliseconds();
|
|
||||||
|
|
||||||
num_consecutive_old_packets_ = 0;
|
num_consecutive_old_packets_ = 0;
|
||||||
num_packets_ = 0;
|
num_packets_ = 0;
|
||||||
@ -334,65 +324,6 @@ int VCMJitterBuffer::num_duplicated_packets() const {
|
|||||||
return num_duplicated_packets_;
|
return num_duplicated_packets_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate framerate and bitrate.
|
|
||||||
void VCMJitterBuffer::IncomingRateStatistics(unsigned int* framerate,
|
|
||||||
unsigned int* bitrate) {
|
|
||||||
assert(framerate);
|
|
||||||
assert(bitrate);
|
|
||||||
rtc::CritScope cs(&crit_sect_);
|
|
||||||
const int64_t now = clock_->TimeInMilliseconds();
|
|
||||||
int64_t diff = now - time_last_incoming_frame_count_;
|
|
||||||
if (diff < 1000 && incoming_frame_rate_ > 0 && incoming_bit_rate_ > 0) {
|
|
||||||
// Make sure we report something even though less than
|
|
||||||
// 1 second has passed since last update.
|
|
||||||
*framerate = incoming_frame_rate_;
|
|
||||||
*bitrate = incoming_bit_rate_;
|
|
||||||
} else if (incoming_frame_count_ != 0) {
|
|
||||||
// We have received frame(s) since last call to this function
|
|
||||||
|
|
||||||
// Prepare calculations
|
|
||||||
if (diff <= 0) {
|
|
||||||
diff = 1;
|
|
||||||
}
|
|
||||||
// we add 0.5f for rounding
|
|
||||||
float rate = 0.5f + ((incoming_frame_count_ * 1000.0f) / diff);
|
|
||||||
if (rate < 1.0f) {
|
|
||||||
rate = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate frame rate
|
|
||||||
// Let r be rate.
|
|
||||||
// r(0) = 1000*framecount/delta_time.
|
|
||||||
// (I.e. frames per second since last calculation.)
|
|
||||||
// frame_rate = r(0)/2 + r(-1)/2
|
|
||||||
// (I.e. fr/s average this and the previous calculation.)
|
|
||||||
*framerate = (incoming_frame_rate_ + static_cast<unsigned int>(rate)) / 2;
|
|
||||||
incoming_frame_rate_ = static_cast<unsigned int>(rate);
|
|
||||||
|
|
||||||
// Calculate bit rate
|
|
||||||
if (incoming_bit_count_ == 0) {
|
|
||||||
*bitrate = 0;
|
|
||||||
} else {
|
|
||||||
*bitrate =
|
|
||||||
10 * ((100 * incoming_bit_count_) / static_cast<unsigned int>(diff));
|
|
||||||
}
|
|
||||||
incoming_bit_rate_ = *bitrate;
|
|
||||||
|
|
||||||
// Reset count
|
|
||||||
incoming_frame_count_ = 0;
|
|
||||||
incoming_bit_count_ = 0;
|
|
||||||
time_last_incoming_frame_count_ = now;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// No frames since last call
|
|
||||||
time_last_incoming_frame_count_ = clock_->TimeInMilliseconds();
|
|
||||||
*framerate = 0;
|
|
||||||
*bitrate = 0;
|
|
||||||
incoming_frame_rate_ = 0;
|
|
||||||
incoming_bit_rate_ = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns immediately or a |max_wait_time_ms| ms event hang waiting for a
|
// Returns immediately or a |max_wait_time_ms| ms event hang waiting for a
|
||||||
// complete frame, |max_wait_time_ms| decided by caller.
|
// complete frame, |max_wait_time_ms| decided by caller.
|
||||||
VCMEncodedFrame* VCMJitterBuffer::NextCompleteFrame(uint32_t max_wait_time_ms) {
|
VCMEncodedFrame* VCMJitterBuffer::NextCompleteFrame(uint32_t max_wait_time_ms) {
|
||||||
@ -618,7 +549,6 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
|
|||||||
frame->InsertPacket(packet, now_ms, frame_data);
|
frame->InsertPacket(packet, now_ms, frame_data);
|
||||||
|
|
||||||
if (buffer_state > 0) {
|
if (buffer_state > 0) {
|
||||||
incoming_bit_count_ += packet.sizeBytes << 3;
|
|
||||||
if (first_packet_since_reset_) {
|
if (first_packet_since_reset_) {
|
||||||
latest_received_sequence_number_ = packet.seqNum;
|
latest_received_sequence_number_ = packet.seqNum;
|
||||||
first_packet_since_reset_ = false;
|
first_packet_since_reset_ = false;
|
||||||
@ -647,7 +577,6 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
|
|||||||
}
|
}
|
||||||
case kCompleteSession: {
|
case kCompleteSession: {
|
||||||
if (previous_state != kStateComplete) {
|
if (previous_state != kStateComplete) {
|
||||||
CountFrame(*frame);
|
|
||||||
if (continuous) {
|
if (continuous) {
|
||||||
// Signal that we have a complete session.
|
// Signal that we have a complete session.
|
||||||
frame_event_->Set();
|
frame_event_->Set();
|
||||||
@ -1057,11 +986,6 @@ bool VCMJitterBuffer::RecycleFramesUntilKeyFrame() {
|
|||||||
return key_frame_found;
|
return key_frame_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be called under the critical section |crit_sect_|.
|
|
||||||
void VCMJitterBuffer::CountFrame(const VCMFrameBuffer& frame) {
|
|
||||||
incoming_frame_count_++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VCMJitterBuffer::UpdateAveragePacketsPerFrame(int current_number_packets) {
|
void VCMJitterBuffer::UpdateAveragePacketsPerFrame(int current_number_packets) {
|
||||||
if (frame_counter_ > kFastConvergeThreshold) {
|
if (frame_counter_ > kFastConvergeThreshold) {
|
||||||
average_packets_per_frame_ =
|
average_packets_per_frame_ =
|
||||||
|
|||||||
@ -128,9 +128,6 @@ class VCMJitterBuffer {
|
|||||||
// Gets number of duplicated packets received.
|
// Gets number of duplicated packets received.
|
||||||
int num_duplicated_packets() const;
|
int num_duplicated_packets() const;
|
||||||
|
|
||||||
// Statistics, Calculate frame and bit rates.
|
|
||||||
void IncomingRateStatistics(unsigned int* framerate, unsigned int* bitrate);
|
|
||||||
|
|
||||||
// Wait |max_wait_time_ms| for a complete frame to arrive.
|
// Wait |max_wait_time_ms| for a complete frame to arrive.
|
||||||
// If found, a pointer to the frame is returned. Returns nullptr otherwise.
|
// If found, a pointer to the frame is returned. Returns nullptr otherwise.
|
||||||
VCMEncodedFrame* NextCompleteFrame(uint32_t max_wait_time_ms);
|
VCMEncodedFrame* NextCompleteFrame(uint32_t max_wait_time_ms);
|
||||||
@ -251,12 +248,6 @@ class VCMJitterBuffer {
|
|||||||
// completely full. Returns true if a key frame was found.
|
// completely full. Returns true if a key frame was found.
|
||||||
bool RecycleFramesUntilKeyFrame() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
|
bool RecycleFramesUntilKeyFrame() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
|
||||||
|
|
||||||
// Updates the frame statistics.
|
|
||||||
// Counts only complete frames, so decodable incomplete frames will not be
|
|
||||||
// counted.
|
|
||||||
void CountFrame(const VCMFrameBuffer& frame)
|
|
||||||
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
|
|
||||||
|
|
||||||
// Update rolling average of packets per frame.
|
// Update rolling average of packets per frame.
|
||||||
void UpdateAveragePacketsPerFrame(int current_number_packets_);
|
void UpdateAveragePacketsPerFrame(int current_number_packets_);
|
||||||
|
|
||||||
@ -303,12 +294,6 @@ class VCMJitterBuffer {
|
|||||||
VCMDecodingState last_decoded_state_ RTC_GUARDED_BY(crit_sect_);
|
VCMDecodingState last_decoded_state_ RTC_GUARDED_BY(crit_sect_);
|
||||||
bool first_packet_since_reset_;
|
bool first_packet_since_reset_;
|
||||||
|
|
||||||
// Latest calculated frame rates of incoming stream.
|
|
||||||
unsigned int incoming_frame_rate_;
|
|
||||||
unsigned int incoming_frame_count_;
|
|
||||||
int64_t time_last_incoming_frame_count_;
|
|
||||||
unsigned int incoming_bit_count_;
|
|
||||||
unsigned int incoming_bit_rate_;
|
|
||||||
// Number of packets in a row that have been too old.
|
// Number of packets in a row that have been too old.
|
||||||
int num_consecutive_old_packets_;
|
int num_consecutive_old_packets_;
|
||||||
// Number of packets received.
|
// Number of packets received.
|
||||||
|
|||||||
@ -196,12 +196,6 @@ void VCMReceiver::ReleaseFrame(VCMEncodedFrame* frame) {
|
|||||||
jitter_buffer_.ReleaseFrame(frame);
|
jitter_buffer_.ReleaseFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VCMReceiver::ReceiveStatistics(uint32_t* bitrate, uint32_t* framerate) {
|
|
||||||
assert(bitrate);
|
|
||||||
assert(framerate);
|
|
||||||
jitter_buffer_.IncomingRateStatistics(framerate, bitrate);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VCMReceiver::SetNackMode(VCMNackMode nackMode,
|
void VCMReceiver::SetNackMode(VCMNackMode nackMode,
|
||||||
int64_t low_rtt_nack_threshold_ms,
|
int64_t low_rtt_nack_threshold_ms,
|
||||||
int64_t high_rtt_nack_threshold_ms) {
|
int64_t high_rtt_nack_threshold_ms) {
|
||||||
|
|||||||
@ -48,7 +48,6 @@ class VCMReceiver {
|
|||||||
VCMEncodedFrame* FrameForDecoding(uint16_t max_wait_time_ms,
|
VCMEncodedFrame* FrameForDecoding(uint16_t max_wait_time_ms,
|
||||||
bool prefer_late_decoding);
|
bool prefer_late_decoding);
|
||||||
void ReleaseFrame(VCMEncodedFrame* frame);
|
void ReleaseFrame(VCMEncodedFrame* frame);
|
||||||
void ReceiveStatistics(uint32_t* bitrate, uint32_t* framerate);
|
|
||||||
|
|
||||||
// NACK.
|
// NACK.
|
||||||
void SetNackMode(VCMNackMode nackMode,
|
void SetNackMode(VCMNackMode nackMode,
|
||||||
|
|||||||
Reference in New Issue
Block a user