X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=x264_encoder.h;h=2f9c81c4f51e91748680bb8f84234b4f313414e1;hb=f7372135dad23d3eee96aa0fa9775f7478bd5e4c;hp=9b6f74d31eb017ee2cdc150ec50f3d524babb4bf;hpb=7c68022d2d22007e0a918f81db87278713659731;p=nageru diff --git a/x264_encoder.h b/x264_encoder.h index 9b6f74d..2f9c81c 100644 --- a/x264_encoder.h +++ b/x264_encoder.h @@ -24,6 +24,7 @@ #include #include #include +#include extern "C" { #include @@ -31,7 +32,10 @@ extern "C" { #include +#include "defs.h" +#include "metrics.h" #include "print_latency.h" +#include "x264_dynamic.h" class Mux; class X264SpeedControl; @@ -45,7 +49,7 @@ public: ~X264Encoder(); // Must be called before first frame. Does not take ownership. - void set_mux(Mux *mux) { this->mux = mux; } + void add_mux(Mux *mux) { muxes.push_back(mux); } // is taken to be raw NV12 data of WIDTHxHEIGHT resolution. // Does not block. @@ -78,7 +82,7 @@ private: // pool. std::unique_ptr frame_pool; - Mux *mux = nullptr; + std::vector muxes; bool wants_global_headers; std::string global_headers; @@ -87,6 +91,7 @@ private: std::thread encoder_thread; std::atomic x264_init_done{false}; std::atomic should_quit{false}; + X264Dynamic dyn; x264_t *x264; std::unique_ptr speed_control; @@ -110,6 +115,16 @@ private: // Key is the pts of the frame. std::unordered_map frames_being_encoded; + + // Metrics. + std::atomic metric_x264_queued_frames{0}; + std::atomic metric_x264_max_queued_frames{X264_QUEUE_LENGTH}; + std::atomic metric_x264_dropped_frames{0}; + std::atomic metric_x264_output_frames_i{0}; + std::atomic metric_x264_output_frames_p{0}; + std::atomic metric_x264_output_frames_b{0}; + Histogram metric_x264_crf; + LatencyHistogram latency_histogram; }; #endif // !defined(_X264ENCODE_H)