]> git.sesse.net Git - nageru/blobdiff - x264_speed_control.h
Release Nageru 1.7.2.
[nageru] / x264_speed_control.h
index af4513ea5a037ab596e7a016ed98fee1e1acf73b..bd58dcbf8773c6624706f23e6775ce2bc758bf0a 100644 (file)
 // 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 <stdio.h>
 #include <stdint.h>
-#include <string.h>
-#include <math.h>
+#include <atomic>
 #include <chrono>
 #include <functional>
 
 extern "C" {
-#include "x264.h"
+#include <x264.h>
 }
 
+#include "metrics.h"
+#include "x264_dynamic.h"
+
 class X264SpeedControl {
 public:
        // x264: Encoding object we are using; must be opened. Assumed to be
@@ -98,6 +99,8 @@ private:
        int dither_preset(float f);
        void apply_preset(int new_preset);
 
+       X264Dynamic dyn;
+
        // Not owned by us.
        x264_t *x264;
 
@@ -126,4 +129,11 @@ private:
        } stat;
 
        std::function<void(x264_param_t *)> override_func = nullptr;
+
+       // Metrics.
+       Histogram metric_x264_speedcontrol_preset_used_frames;
+       std::atomic<double> metric_x264_speedcontrol_buffer_available_seconds{0.0};
+       std::atomic<double> metric_x264_speedcontrol_buffer_size_seconds{0.0};
+       std::atomic<int64_t> metric_x264_speedcontrol_idle_frames{0};
+       std::atomic<int64_t> metric_x264_speedcontrol_late_frames{0};
 };