X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=x264_speed_control.cpp;h=530feb74b41f375847b6cc28fa4cc571805f2880;hb=96cb6414f85e0ef4d660b7bd56267303e80fcd05;hp=47086829dbf0a239a85a96bf4adeede319fab752;hpb=0556d8cb8416bdc7b432a432c3d58239a94358d2;p=nageru diff --git a/x264_speed_control.cpp b/x264_speed_control.cpp index 4708682..530feb7 100644 --- a/x264_speed_control.cpp +++ b/x264_speed_control.cpp @@ -11,10 +11,13 @@ #include #include "flags.h" +#include "metrics.h" using namespace std; using namespace std::chrono; +#define SC_PRESETS 26 + X264SpeedControl::X264SpeedControl(x264_t *x264, float f_speed, int i_buffer_size, float f_buffer_init) : dyn(load_x264_for_bit_depth(global_flags.x264_bit_depth)), x264(x264), f_speed(f_speed) @@ -36,6 +39,15 @@ X264SpeedControl::X264SpeedControl(x264_t *x264, float f_speed, int i_buffer_siz stat.max_buffer = 0; stat.avg_preset = 0.0; stat.den = 0; + + metric_x264_speedcontrol_buffer_available_seconds = buffer_fill * 1e-6; + metric_x264_speedcontrol_buffer_size_seconds = buffer_size * 1e-6; + metric_x264_speedcontrol_preset_used_frames.init_uniform(SC_PRESETS); + global_metrics.add("x264_speedcontrol_preset_used_frames", &metric_x264_speedcontrol_preset_used_frames); + global_metrics.add("x264_speedcontrol_buffer_available_seconds", &metric_x264_speedcontrol_buffer_available_seconds, Metrics::TYPE_GAUGE); + global_metrics.add("x264_speedcontrol_buffer_size_seconds", &metric_x264_speedcontrol_buffer_size_seconds, Metrics::TYPE_GAUGE); + global_metrics.add("x264_speedcontrol_idle_frames", &metric_x264_speedcontrol_idle_frames); + global_metrics.add("x264_speedcontrol_late_frames", &metric_x264_speedcontrol_late_frames); } X264SpeedControl::~X264SpeedControl() @@ -74,7 +86,6 @@ typedef struct // Note that the two first and the two last are also used for extrapolation // should the desired time be outside the range. Thus, it is disadvantageous if // they are chosen so that the timings are too close to each other. -#define SC_PRESETS 26 static const sc_preset_t presets[SC_PRESETS] = { #define I4 X264_ANALYSE_I4x4 #define I8 X264_ANALYSE_I8x8 @@ -174,6 +185,7 @@ void X264SpeedControl::before_frame(float new_buffer_fill, int new_buffer_size, set_buffer_size(new_buffer_size); } buffer_fill = buffer_size * new_buffer_fill; + metric_x264_speedcontrol_buffer_available_seconds = buffer_fill * 1e-6; steady_clock::time_point t; @@ -216,8 +228,11 @@ void X264SpeedControl::before_frame(float new_buffer_fill, int new_buffer_size, first = false; } buffer_fill = buffer_size; + metric_x264_speedcontrol_buffer_available_seconds = buffer_fill * 1e-6; + ++metric_x264_speedcontrol_idle_frames; } else if (buffer_fill <= 0) { // oops, we're late // fprintf(stderr, "speedcontrol underflow (%.6f sec)\n", buffer_fill/1e6); + ++metric_x264_speedcontrol_late_frames; } { @@ -324,4 +339,6 @@ void X264SpeedControl::apply_preset(int new_preset) } dyn.x264_encoder_reconfig(x264, &p); preset = new_preset; + + metric_x264_speedcontrol_preset_used_frames.count_event(new_preset); }