X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fmain.cpp;h=3b6f8e3044b804d637bff98f026b1795db9aaace;hb=b44bf7cfce6a5aaffbcd1e37df39068a163438ad;hp=3efefd5e94a1a279c751e970fa8b27be69485f16;hpb=332647953275fdf1691cded8bbe5d4a8dfe7c675;p=nageru diff --git a/futatabi/main.cpp b/futatabi/main.cpp index 3efefd5..3b6f8e3 100644 --- a/futatabi/main.cpp +++ b/futatabi/main.cpp @@ -34,6 +34,7 @@ extern "C" { #include "shared/post_to_main_thread.h" #include "shared/ref_counted_gl_sync.h" #include "shared/timebase.h" +#include "shared/metrics.h" #include "ui_mainwindow.h" #include "vaapi_jpeg_decoder.h" @@ -69,6 +70,9 @@ mutex frame_mu; vector frames[MAX_STREAMS]; // Under frame_mu. vector frame_filenames; // Under frame_mu. +atomic metric_received_frames[MAX_STREAMS]{{0}}; +Summary metric_received_frame_size_bytes; + namespace { FrameOnDisk write_frame(int stream_idx, int64_t pts, const uint8_t *data, size_t size, DB *db) @@ -208,7 +212,9 @@ int main(int argc, char **argv) } avformat_network_init(); + global_metrics.set_prefix("futatabi"); global_httpd = new HTTPD; + global_metrics.remove("num_connected_multicam_clients"); QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); @@ -453,6 +459,11 @@ void load_existing_frames() void record_thread_func() { + for (unsigned i = 0; i < MAX_STREAMS; ++i) { + global_metrics.add("received_frames", {{ "stream", to_string(i) }}, &metric_received_frames[i]); + } + global_metrics.add("received_frame_size_bytes", &metric_received_frame_size_bytes); + if (global_flags.stream_source.empty() || global_flags.stream_source == "/dev/null") { // Save the user from some repetitive messages. return; @@ -460,7 +471,7 @@ void record_thread_func() pthread_setname_np(pthread_self(), "ReceiveFrames"); - int64_t pts_offset; + int64_t pts_offset = 0; // Needs to be initialized due to a spurious GCC warning. DB db(global_flags.working_directory + "/futatabi.db"); while (!should_quit.load()) { @@ -486,6 +497,12 @@ void record_thread_func() if (av_read_frame(format_ctx.get(), &pkt) != 0) { break; } + if (pkt.stream_index >= MAX_STREAMS) { + continue; + } + + ++metric_received_frames[pkt.stream_index]; + metric_received_frame_size_bytes.count_event(pkt.size); // Convert pts to our own timebase. AVRational stream_timebase = format_ctx->streams[pkt.stream_index]->time_base;