static void log_frame_info(struct obs_output *output) { uint32_t video_frames = video_output_get_total_frames(output->video); uint32_t video_skipped = video_output_get_skipped_frames(output->video); uint32_t total = video_frames - output->starting_frame_count; uint32_t skipped = video_skipped - output->starting_skipped_frame_count; int dropped = obs_output_get_frames_dropped(output); double percentage_skipped = (double)skipped / (double)total * 100.0; blog(LOG_INFO, "Output '%s': stopping", output->context.name); blog(LOG_INFO, "Output '%s': Total frames: %"PRIu32, output->context.name, total); if (total) blog(LOG_INFO, "Output '%s': Number of skipped frames: " "%"PRIu32" (%g%%)", output->context.name, skipped, percentage_skipped); if (dropped) { double percentage_dropped; percentage_dropped = (double)dropped / (double)total * 100.0; blog(LOG_INFO, "Output '%s': Number of dropped frames: " "%d (%g%%)", output->context.name, dropped, percentage_dropped); } }
static void log_frame_info(struct obs_output *output) { struct obs_core_video *video = &obs->video; uint32_t video_frames = video_output_get_total_frames(output->video); uint32_t video_skipped = video_output_get_skipped_frames(output->video); uint32_t total = video_frames - output->starting_frame_count; uint32_t skipped = video_skipped - output->starting_skipped_frame_count; uint32_t drawn = video->total_frames - output->starting_drawn_count; uint32_t lagged = video->lagged_frames - output->starting_lagged_count; int dropped = obs_output_get_frames_dropped(output); double percentage_skipped = 0.0f; double percentage_lagged = 0.0f; double percentage_dropped = 0.0f; if (total) { percentage_skipped = (double)skipped / (double)total * 100.0; percentage_dropped = (double)dropped / (double)total * 100.0; } if (drawn) percentage_lagged = (double)lagged / (double)drawn * 100.0; blog(LOG_INFO, "Output '%s': stopping", output->context.name); blog(LOG_INFO, "Output '%s': Total encoded frames: %"PRIu32, output->context.name, total); blog(LOG_INFO, "Output '%s': Total drawn frames: %"PRIu32, output->context.name, drawn); if (total && skipped) blog(LOG_INFO, "Output '%s': Number of skipped frames due " "to encoding lag: %"PRIu32" (%0.1f%%)", output->context.name, skipped, percentage_skipped); if (drawn && lagged) blog(LOG_INFO, "Output '%s': Number of lagged frames due " "to rendering lag/stalls: %"PRIu32" (%0.1f%%)", output->context.name, lagged, percentage_lagged); if (total && dropped) blog(LOG_INFO, "Output '%s': Number of dropped frames due " "to insufficient bandwidth/connection stalls: " "%d (%0.1f%%)", output->context.name, dropped, percentage_dropped); }
bool obs_output_start(obs_output_t output) { bool success; if (!output) return false; success = output->info.start(output->context.data); if (success && output->video) { output->starting_frame_count = video_output_get_total_frames(output->video); output->starting_skipped_frame_count = video_output_get_skipped_frames(output->video); } return success; }
void OBSBasicStatusBar::Activate() { if (!active) { refreshTimer = new QTimer(this); connect(refreshTimer, SIGNAL(timeout()), this, SLOT(UpdateStatusBar())); int skipped = video_output_get_skipped_frames(obs_get_video()); int total = video_output_get_total_frames(obs_get_video()); totalSeconds = 0; lastSkippedFrameCount = 0; startSkippedFrameCount = skipped; startTotalFrameCount = total; refreshTimer->start(1000); active = true; } }
void OBSBasicStatusBar::UpdateStatusBar() { UpdateBandwidth(); UpdateSessionTime(); UpdateDroppedFrames(); int skipped = video_output_get_skipped_frames(obs_get_video()); int total = video_output_get_total_frames(obs_get_video()); skipped -= startSkippedFrameCount; total -= startTotalFrameCount; int diff = skipped - lastSkippedFrameCount; double percentage = double(skipped) / double(total) * 100.0; if (diff && percentage >= 0.1f) showMessage(QTStr("HighResourceUsage"), 4000); lastSkippedFrameCount = skipped; }
bool obs_output_actual_start(obs_output_t *output) { bool success = false; output->stopped = false; if (output->context.data) success = output->info.start(output->context.data); if (success && output->video) { output->starting_frame_count = video_output_get_total_frames(output->video); output->starting_skipped_frame_count = video_output_get_skipped_frames(output->video); } if (output->delay_restart_refs) os_atomic_dec_long(&output->delay_restart_refs); return success; }
bool obs_output_actual_start(obs_output_t *output) { bool success = false; os_event_wait(output->stopping_event); output->stop_code = 0; if (output->context.data) success = output->info.start(output->context.data); if (success && output->video) { output->starting_frame_count = video_output_get_total_frames(output->video); output->starting_skipped_frame_count = video_output_get_skipped_frames(output->video); output->starting_drawn_count = obs->video.total_frames; output->starting_lagged_count = obs->video.lagged_frames; } if (os_atomic_load_long(&output->delay_restart_refs)) os_atomic_dec_long(&output->delay_restart_refs); return success; }