X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=x264_speed_control.h;h=bd58dcbf8773c6624706f23e6775ce2bc758bf0a;hb=e284d1c7a2e18ee7e4aea082c4a57a3504a0f5e8;hp=7add8fdd4c2c2a3c9386d74a0854aa2389bc9e41;hpb=a89f0c565d3410cfd9b266dd661a934408a01028;p=nageru diff --git a/x264_speed_control.h b/x264_speed_control.h index 7add8fd..bd58dcb 100644 --- a/x264_speed_control.h +++ b/x264_speed_control.h @@ -43,16 +43,18 @@ // one does not need to patch x264 to use it in Nageru. It still could do with // some cleanup, but it's much, much better than just using a static preset. -#include #include -#include -#include +#include +#include #include extern "C" { -#include "x264.h" +#include } +#include "metrics.h" +#include "x264_dynamic.h" + class X264SpeedControl { public: // x264: Encoding object we are using; must be opened. Assumed to be @@ -96,16 +98,17 @@ private: void set_buffer_size(int new_buffer_size); int dither_preset(float f); void apply_preset(int new_preset); - int64_t mdate(); // Current time in microseconds. + + X264Dynamic dyn; // Not owned by us. x264_t *x264; float f_speed; - // all times are in usec - int64_t timestamp; // when was speedcontrol last invoked - int64_t cpu_time_last_frame = 0; // time spent encoding the previous frame + // all times that are not std::chrono::* are in usec + std::chrono::steady_clock::time_point timestamp; // when was speedcontrol last invoked + std::chrono::steady_clock::duration cpu_time_last_frame{std::chrono::seconds{0}}; // time spent encoding the previous frame int64_t buffer_size; // assumed application-side buffer of frames to be streamed (measured in microseconds), int64_t buffer_fill; // where full = we don't have to hurry int64_t compensation_period; // how quickly we try to return to the target buffer fullness @@ -126,4 +129,11 @@ private: } stat; std::function override_func = nullptr; + + // Metrics. + Histogram metric_x264_speedcontrol_preset_used_frames; + std::atomic metric_x264_speedcontrol_buffer_available_seconds{0.0}; + std::atomic metric_x264_speedcontrol_buffer_size_seconds{0.0}; + std::atomic metric_x264_speedcontrol_idle_frames{0}; + std::atomic metric_x264_speedcontrol_late_frames{0}; };