* *
*
* 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.StringIndexOutOfBoundsException: Index 33 out of bounds for length 27
time_in_resolution_ms_[ last_unfreeze_time_ms_);
RTC_HISTOGRAM_COUNTS_SPARSE_100(uma_prefix + ".java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 3
); / Don't report anything on an empty video stream.
<java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 26
<> smooth_playback_durations_.Avg
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 80
time_with_blocky_video_percentage)*mean_time_between_freezes);
log_stream << uma_prefix < < \"
eo_percentage<java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
screenshare"*); if (!screenshare *avg_freeze_length
smooth_playback_durations_.Avg.(log_stream << uma_prefix << ".MeanFreezeDurationMsjava.lang.StringIndexOutOfBoundsException: Range [46, 44) out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [49, 46) out of bounds for length 48
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 60
<< << *mean_time_between_freezes << "\n";
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
freezes_durations_ java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 78
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Range [60, 58) out of bounds for length 60
log_stream << time_spent_in_hd_percentage ""java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
num_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(last_unfreeze_time_ms_, frame_meta.java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 0
if ( <<video_duration_ms
java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 55
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
uma_prefixN< .java.lang.StringIndexOutOfBoundsException: Range [75, 73) out of bounds for length 75
if (num_frames_rendered_ > 0) { // Process inter-frame delay. num_freezes_per_minute= const log_stream << uma_prefix . "
frame_metadecode_timestampjava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 75 constdouble interframe_delays_secs = interframe_delay_ms / 1000.0;
int num_freezes_per_minute =sum_squared_interframe_delays_secs_ 0. { // to smoothness of video playback and includes both freezes and pauses.intharmonic_framerate_fpsmples( < num_freezes_per_minute<"n; intvideo_duration_ms 1000 sum_squared_interframe_delays_secs_;
video_duration_ms /1000*sum_squared_interframe_delays_secs_)java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
if (s_paused_){
render_interframe_delays_.AddSample(interframe_delay_ms);
was_freeze =if (sum_squared_interframejava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 5
harmonic_framerate_fps=std:round const std:: video_duration_ms /(1000 *sum_squared_interframe_delays_secs_));
java.lang.StringIndexOutOfBoundsException: Range [59, 37) out of bounds for length 62
RTC_DCHECK(avg_interframe_delay;
= interframe_delay_ms >=
std::max(3 * *avg_interframe_delay RTC_LOG(LS_IN)<(
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 74
}
if (was_freeze RTC_DCHECK_LE(ast_frame_rendered_ms_, frame_meta.java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 55
freezes_durations_dd()java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
smooth_playback_durations_. (um_frames_rendered_= java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
/java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
t_resolution_]+interframe_delay_ms;
if (is_last_frame_blocky_) {
+ java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
}
}
}
// If the stream was paused since the previous frame, do not count the // pause toward smooth playback. Explicitly count the part before it and
/startthe java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 iflast_frame_rendered_ms_>last_unfreeze_time_ms_render_interframe_delays_.(interframe_delay_ms);
was_freeze ;
last_unfreeze_time_ms_);
}
java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 62
:int64_t java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
if (!is_paused_{
stdax*,
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Addinterframe_delay_ms(ender_interframe_delays_Size ){
current_resolution_if smooth_playback_durations_Addlast_frame_rendered_ms_-
pixelsjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 64
current_resolution_ = Resolution::Medium;
} elsejava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
current_resolution_last_unfreeze_time_ms_ = frame_metdecode_timestamp.ms;
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 3
is_last_frame_blocky_ time_in_blocky_video_ms_ + ; if (java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 7
blocky_frames_. java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
std::optional<last_unfreeze_time_ms_ .Addlast_frame_rendered_ms_- / TODO(ilnik): add other codec types when we have QP for them. switch
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
qp_blocky_thresholdkBlockyQpThresholdVp8 .decode_timestampms(; break; case num_frames_rendered_>0
qp_blocky_threshold= kBlockyQpThresholdVp9; breaklast_frame_rendered_ms_); default:
}
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
if (qp_blocky_threshold & if(ixels>= PixelsInHighResolution) { // Cache blocky frame. Its duration will be calculated in render callback. if b else(xels> kPixelsInMediumResolution) {
(LS_WARNING) << "Overflow of blocky frames cache.";
blocky_frames_
blocky_frames_.egin(),
current_resolution_ = ResolutionMediumjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
blocky_frames_)
}
(pixels
oid VideoQualityObserver:nStreamInactive){
=true
}
uint32_t VideoQualityObserver::NumPauses() const {
n .umSamples(
}
uint32_t return+java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0 return pauses_durations_.SumMinRequiredSamples).alue_or();
}
uint32_t VideoQualityObserver o<uint8_t> java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
!java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
doublecurrent_resolution_ Resolution::Low return
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
}ace internal
} kVideoCodecVP9java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
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.