X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=decklink_output.cpp;h=544e2edd333017d080b989a859004ba0f04bd6e4;hp=17cc520d25964fca766d511fd653ef8c2e68b2d1;hb=017c260b96736e797fee120107b85c4c7fc81aa1;hpb=35b405f813c4fd4eccf67eb95dce877c9e288421 diff --git a/decklink_output.cpp b/decklink_output.cpp index 17cc520..544e2ed 100644 --- a/decklink_output.cpp +++ b/decklink_output.cpp @@ -3,6 +3,8 @@ #include // Must be above the Xlib includes. #include +#include + #include #include "chroma_subsampler.h" @@ -20,7 +22,7 @@ using namespace std::chrono; namespace { // This class can be deleted during regular use, so make all the metrics static. -bool metrics_inited = false; +once_flag decklink_metrics_inited; LatencyHistogram latency_histogram; atomic metric_decklink_output_width_pixels{-1}; atomic metric_decklink_output_height_pixels{-1}; @@ -49,7 +51,7 @@ DeckLinkOutput::DeckLinkOutput(ResourcePool *resource_pool, QSurface *surface, u { chroma_subsampler.reset(new ChromaSubsampler(resource_pool)); - if (!metrics_inited) { + call_once(decklink_metrics_inited, [](){ latency_histogram.init("decklink_output"); global_metrics.add("decklink_output_width_pixels", &metric_decklink_output_width_pixels, Metrics::TYPE_GAUGE); global_metrics.add("decklink_output_height_pixels", &metric_decklink_output_height_pixels, Metrics::TYPE_GAUGE); @@ -70,9 +72,7 @@ DeckLinkOutput::DeckLinkOutput(ResourcePool *resource_pool, QSurface *surface, u global_metrics.add("decklink_output_completed_frames", {{ "status", "unknown" }}, &metric_decklink_output_completed_frames_unknown); global_metrics.add("decklink_output_scheduled_samples", &metric_decklink_output_scheduled_samples); - - metrics_inited = true; - } + }); } void DeckLinkOutput::set_device(IDeckLink *decklink)