X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mux.h;h=c6c442100c58b18c481754747693b54c8571bcbc;hb=1836dccf699779d9092a75755cec96cea1734a2a;hp=ddf97fe92a591d86ec6dbebd9614cf32fa9a0846;hpb=cf7b9ee186d4ef8e5da0531b75854c97b821be44;p=nageru diff --git a/mux.h b/mux.h index ddf97fe..c6c4421 100644 --- a/mux.h +++ b/mux.h @@ -9,11 +9,30 @@ extern "C" { } #include +#include #include #include #include +#include #include +struct MuxMetrics { + // “written” will usually be equal video + audio + mux overhead, + // except that there could be buffered packets that count in audio or video + // but not yet in written. + std::atomic metric_video_bytes{0}, metric_audio_bytes{0}, metric_written_bytes{0}; + + // Registers in global_metrics. + void init(const std::vector> &labels); + + void reset() + { + metric_video_bytes = 0; + metric_audio_bytes = 0; + metric_written_bytes = 0; + } +}; + class Mux { public: enum Codec { @@ -24,7 +43,9 @@ public: // Takes ownership of avctx. will be called every time // a write has been made to the video stream (id 0), with the pts of // the just-written frame. (write_callback can be nullptr.) - Mux(AVFormatContext *avctx, int width, int height, Codec video_codec, const std::string &video_extradata, const AVCodecParameters *audio_codecpar, int time_base, std::function write_callback); + // Does not take ownership of ; elements in there, if any, + // will be added to. + Mux(AVFormatContext *avctx, int width, int height, Codec video_codec, const std::string &video_extradata, const AVCodecParameters *audio_codecpar, int time_base, std::function write_callback, const std::vector &metrics); ~Mux(); void add_packet(const AVPacket &pkt, int64_t pts, int64_t dts); @@ -50,6 +71,7 @@ private: AVStream *avstream_video, *avstream_audio; std::function write_callback; + std::vector metrics; }; #endif // !defined(_MUX_H)