diff options
Diffstat (limited to 'third_party/libwebrtc/webrtc/api/video/video_timing.cc')
-rw-r--r-- | third_party/libwebrtc/webrtc/api/video/video_timing.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/third_party/libwebrtc/webrtc/api/video/video_timing.cc b/third_party/libwebrtc/webrtc/api/video/video_timing.cc new file mode 100644 index 0000000000..3ccbe4eae5 --- /dev/null +++ b/third_party/libwebrtc/webrtc/api/video/video_timing.cc @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2017 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. + */ + +#include "api/video/video_timing.h" + +#include <sstream> + +namespace webrtc { + +TimingFrameInfo::TimingFrameInfo() + : rtp_timestamp(0), + capture_time_ms(-1), + encode_start_ms(-1), + encode_finish_ms(-1), + packetization_finish_ms(-1), + pacer_exit_ms(-1), + network_timestamp_ms(-1), + network2_timestamp_ms(-1), + receive_start_ms(-1), + receive_finish_ms(-1), + decode_start_ms(-1), + decode_finish_ms(-1), + render_time_ms(-1), + flags(TimingFrameFlags::kDefault) {} + +int64_t TimingFrameInfo::EndToEndDelay() const { + return capture_time_ms >= 0 ? decode_finish_ms - capture_time_ms : -1; +} + +bool TimingFrameInfo::IsLongerThan(const TimingFrameInfo& other) const { + int64_t other_delay = other.EndToEndDelay(); + return other_delay == -1 || EndToEndDelay() > other_delay; +} + +bool TimingFrameInfo::operator<(const TimingFrameInfo& other) const { + return other.IsLongerThan(*this); +} + +bool TimingFrameInfo::operator<=(const TimingFrameInfo& other) const { + return !IsLongerThan(other); +} + +bool TimingFrameInfo::IsOutlier() const { + return !IsInvalid() && (flags & TimingFrameFlags::kTriggeredBySize); +} + +bool TimingFrameInfo::IsTimerTriggered() const { + return !IsInvalid() && (flags & TimingFrameFlags::kTriggeredByTimer); +} + +bool TimingFrameInfo::IsInvalid() const { + return flags == TimingFrameFlags::kInvalid; +} + +std::string TimingFrameInfo::ToString() const { + std::stringstream out; + if (IsInvalid()) { + out << ""; + } else { + out << rtp_timestamp << ',' << capture_time_ms << ',' << encode_start_ms + << ',' << encode_finish_ms << ',' << packetization_finish_ms << ',' + << pacer_exit_ms << ',' << network_timestamp_ms << ',' + << network2_timestamp_ms << ',' << receive_start_ms << ',' + << receive_finish_ms << ',' << decode_start_ms << ',' + << decode_finish_ms << ',' << render_time_ms << ',' + << IsOutlier() << ',' << IsTimerTriggered(); + } + return out.str(); +} + +} // namespace webrtc |