]> git.sesse.net Git - nageru/blobdiff - x264_encoder.h
Fix an issue where the mixer lagging too much behind CEF would cause us to display...
[nageru] / x264_encoder.h
index 19ce1dfb7ac2e946ad00b921675267fcd1be6cf0..687bf718679c316a3b2e6a24a41c8e449d79c776 100644 (file)
@@ -33,6 +33,7 @@ extern "C" {
 #include <movit/image_format.h>
 
 #include "defs.h"
+#include "metrics.h"
 #include "print_latency.h"
 #include "x264_dynamic.h"
 
@@ -76,6 +77,9 @@ private:
        void init_x264();
        void encode_frame(QueuedFrame qf);
 
+       // bitrate_kbit can be 0 for no change.
+       static void speed_control_override_func(unsigned bitrate_kbit, movit::YCbCrLumaCoefficients coefficients, x264_param_t *param);
+
        // One big memory chunk of all 50 (or whatever) frames, allocated in
        // the constructor. All data functions just use pointers into this
        // pool.
@@ -94,8 +98,6 @@ private:
        x264_t *x264;
        std::unique_ptr<X264SpeedControl> speed_control;
 
-       std::function<void(x264_param_t *)> bitrate_override_func;
-
        std::atomic<unsigned> new_bitrate_kbit{0};  // 0 for no change.
 
        // Protects everything below it.
@@ -114,18 +116,6 @@ private:
 
        // Key is the pts of the frame.
        std::unordered_map<int64_t, ReceivedTimestamps> frames_being_encoded;
-
-       // Metrics.
-       std::atomic<int64_t> metric_x264_queued_frames{0};
-       std::atomic<int64_t> metric_x264_max_queued_frames{X264_QUEUE_LENGTH};
-       std::atomic<int64_t> metric_x264_dropped_frames{0};
-       std::atomic<int64_t> metric_x264_output_frames_i{0};
-       std::atomic<int64_t> metric_x264_output_frames_p{0};
-       std::atomic<int64_t> metric_x264_output_frames_b{0};
-
-       static constexpr size_t crf_buckets = 50;
-       std::atomic<int64_t> metric_x264_crf[crf_buckets]{{0}};
-        std::atomic<double> metric_x264_crf_sum{0.0};
 };
 
 #endif  // !defined(_X264ENCODE_H)