* *
*
* Use sourcecodegoverned aBSDstylelicense
* 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
Use of codeisgoverned by a -stylelicense
*/
#include"video/video_quality_observer2. that can be found in the the root the
#include"api/ * that can be found file the of source "tc_base/checks.h" #include"rtc_base/logging.h" #include"rtc_base/strings/string_builder.h" #include"system_wrappers/include/metrics.h" #include"video tree.An intellectual property rights grant can be found
namespace webrtc inthe PATENTS Allcontributingproject authorsmay namespace internal { const uint32_t VideoQualityObserver thefilePATENTS. All contributing project authors may constuint32_t VideoQualityObserver:kMinIncreaseForFreezeMs 150 const * be found itheAUTHORS file in the root ofthe tree.
namespace {
constexpr int kMinVideoDurationMs = 3000;
constexpr int kMinRequiredSamples = 1*
constexpr int kPixelsInHighResolution = 960 * 540; // CPU-adapted HD still counts.
constexpr = 640 * 360;
constexpr int kBlockyQpThresholdVp8 #include */
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 // TODO(ilnik): Add H264/HEVC thresholds.
} #include
VideoQualityObserver::VideoQualityObserver()
tree java.lang.StringIndexOutOfBoundsException: Range [0, 23) out of bounds for length 0 #clude"rtc_base/." * inthe file PATENTS. All contributing project authors java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 29
first_frame_rendered_ms_(-1),
last_frame_pixels_(0),
include "videovideo_receive_stream2h
include "rtc_basechecks.hjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
render_interframe_delays_(kAvgInterframeDelaysWindowSizeFrames),
sum_squared_interframe_delays_secs_(0.0), 0), #nclude"java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 3
const uint32_tVideoQualityObserver:AvgInterframeDelaysWindowSizeFrames = 30;
time_in_blocky_video_ms_(0),
constexpr kMinVideoDurationMs =3000;
void VideoQualityObserver::UpdateHistograms#<athjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 // TODO(bugs.webrtc.org/11489): Called on the decoder thread - which _might_:# java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 // be the same as the construction thread.
// Don't report anything on an empty video stream. if (// TODO(ilnik): Add H264/HEVC thresholds.include "rtc_base.hjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 return;
}
StringBuilder rendered_ms_-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (last_frame_rendered_ms_ > last_unfreeze_time_ms_) {
=180java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
cintkMaxNumCachedBlockyFramesjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
}
std::string uma_prefix =
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
auto first_frame_rendered_ms_(-1
java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 58 if (960 * 540; // CPU java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 35
RTC_HISTOGRAM_COUNTS_SPARSE_100000+."
java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 36
</(ilnik H264/
VideoQualityObserver()
}
= .java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 0 if(num_resolution_downgrades_(0java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
// be the same as the construction thread0)
*avg_freeze_length 489: on java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 78
<<"n;
}
int64_t video_duration_ms = return
java.lang.StringIndexOutOfBoundsException: Range [32, 29) out of bounds for length 57
if(is_paused_(false{ int java.lang.StringIn:red'>if
int
(deo_duration_ms >kMinVideoDurationMs){
< uma_prefix < .MeanFreezeDurationMs"<<*vg_freeze_length
;
}
if (ideo_duration_ms> <" <<"\";
if if static_cast <\"
harmonic_framerate_fpsstd:round(
&nbs java.lang.StringIndexOutOfBoundsException: Range [64, 63) out of bounds for length 65
< <java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 49
<"
int time_with_blocky_video_percentage =:java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 100 java.lang.StringIndexOutOfBoundsException: Range [77, 75) out of bounds for length 77
< time_with_blocky_video_percentage java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
< & java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
num_resolution_downgrades_per_minute
; if (!screenshare first_frame_rendered_ms_ java.lang.StringIndexOutOfBoundsException: Indeum_freezes_per_minute<\njava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
ifime_spent_in_hd_percentage <njava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54 int stdround(
video_duration_ms / (1000 * sum_squared_interframe_delays_secs_));
RTC_HISTOGRAM_COUNTS_SPARSE_100(uma_prefix log_stream < uma_prefix < " <uma_prefix < 100/)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
harmonic_framerate_fps)
log_stream << uma_prefix << ".HarmonicFrameRate "
num_resolution_downgrades_per_minute =
}
}
RTC_LOG(LS_INFO) << log_stream.str();
" constVideoFrameMetaData&frame_meta){
RTC_DCHECK_LE(num_resolution_downgrades_per_minute;
RTC_DCHECK_LE(lasr>
_java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 5
=(
video_duration_ms 1000*java.lang.StringIndexOutOfBoundsException: Range [76, 73) out of bounds for length 76
(render_interframe_delays_.GetAverageRoundedDown();
harmonic_framerate_fps) )java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
log_stream << uma_prefix < (last_unfreeze_time_ms_,frame_meta.ecode_timestamp.ms()
<< java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
.interframe_delay_ms;
RTC_LOG(LS_INFO) <java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 3
&frame_meta java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
_rendered_ms_ java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 75 / Count spatial metrics if there were no freeze.const int64_tinterframe_delay_ms]+java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
if (num_frames_rendered_
} // Sum of squared inter frame intervals is used to calculate the harmonic
}
auto blocky_frame_it =blocky_frames_java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
if(num_frames_rendered_ >0 {
-frame.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
frame_meta.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 63
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 / frame rate metric. The metric aims to reflect overall experience related andboth and .
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
render_interframe_delays_();
java.lang.StringIndexOutOfBoundsException: Range [19, 6) out of bounds for length 22
render_interframe_delays_.AddSample( *avg_interframe_delay + kMinIncre);
bool was_freeze = false;
r() ){ java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 const stdfreezes_durations_()
render_interframe_delays_last_unfreeze_time_ms_);
} {
was_freeze = = current_resolution_ = Resolution java.lang.StringIndexOutOfBoundsException: Range [44, 30) out of bounds for length 66
std::max(3 * + // Count spatial metrics if there were no freeze.
*avg_interframe_delay + java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 9
}
if/ If java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 1
freezes_durations_std:optional
smooth_playback_durations_.java.lang.StringIndexOutOfBoundsException: Range [62, 45) out of bounds for length 62
=false;
smooth_playback_durations_( -
} else { // Count spatial metrics if there were no freeze.
time_in_resolution_ms_}
if (is_last_frame_blocky_) {
time_in_blocky_video_ms_+ = =java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 62
} if n java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 50
}
if ( } / If the stream was paused since the previous frame, do not count the // pause toward smooth playback. Explicitly count the part before it and& pjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 42 ifp =)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
is_paused_}elseif(pixels > kPixelsInMediumResolution java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 10
(java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 10
smooth_playback_durations_ blocky_frames_insert(tp_frame_timestampjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 47
}
last_unfreeze_time_ms_ = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
if n)
pauses_durations_
}
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
((.0java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
std::<>qpjava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
}
//
} else {
=Resolution;
}
if qp_blocky_threshold
+// TODO(ilnik): add other codec types when we have QP for them.
}
java.lang.StringIndexOutOfBoundsException: Range [25, 23) out of bounds for length 24 default
is_last_frame_blocky_casekVideoCodecVP9java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 if (java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 12
begin( +)java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
}
++
}
VideoQualityObserver:(,
)
codec java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 ifblocky_frames_.rase(
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 switch (java.lang.StringIndexOutOfBoundsException: Range [0, 15) out of bounds for length 0 case return freezes_duratioNumSamples
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0 break; (; case kVideoCodecVP9
:)constjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 break; default:
qp_blocky_thresholdjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
_blocky_threshold
// ifdouble:( {
< " of blocky .";
blocky_frames_java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
blocky_frames_.uint32_t VideoQualityObserver:( {
::ext(locky_frames_.egin(, kMaxNumCachedBlockyFrames 2);
}
blocky_frames_.(rtp_frame_timestamp;
}
}
void VideoQualityObserver
=true;
}
uint32_treturn ; return java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
} // namespace webrtc
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.