From: Steinar H. Gunderson Date: Mon, 12 Jun 2017 18:04:36 +0000 (+0200) Subject: Fix a crash on getting metrics after switching file. X-Git-Tag: 1.6.1~57 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=c0961059aa9335a88feb00a667ee32d95a7a888e Fix a crash on getting metrics after switching file. --- diff --git a/quicksync_encoder.cpp b/quicksync_encoder.cpp index 1821f5b..8eef63d 100644 --- a/quicksync_encoder.cpp +++ b/quicksync_encoder.cpp @@ -64,6 +64,15 @@ using namespace std::placeholders; class QOpenGLContext; class QSurface; +namespace { + +// These need to survive several QuickSyncEncoderImpl instances, +// so they are outside. +bool mux_metrics_inited = false; +LatencyHistogram mixer_latency_histogram, qs_latency_histogram; + +} // namespace + #define CHECK_VASTATUS(va_status, func) \ if (va_status != VA_STATUS_SUCCESS) { \ fprintf(stderr, "%s:%d (%s) failed with %d\n", __func__, __LINE__, func, va_status); \ @@ -1561,8 +1570,11 @@ QuickSyncEncoderImpl::QuickSyncEncoderImpl(const std::string &filename, Resource memset(&slice_param, 0, sizeof(slice_param)); } - mixer_latency_histogram.init("mixer"); - qs_latency_histogram.init("quick_sync"); + if (!mux_metrics_inited) { + mixer_latency_histogram.init("mixer"); + qs_latency_histogram.init("quick_sync"); + mux_metrics_inited = true; + } storage_thread = thread(&QuickSyncEncoderImpl::storage_task_thread, this); diff --git a/quicksync_encoder_impl.h b/quicksync_encoder_impl.h index f8243ff..917420c 100644 --- a/quicksync_encoder_impl.h +++ b/quicksync_encoder_impl.h @@ -222,7 +222,6 @@ private: int frame_height_mbaligned; DiskSpaceEstimator *disk_space_estimator; - LatencyHistogram mixer_latency_histogram, qs_latency_histogram; }; #endif // !defined(_QUICKSYNC_ENCODER_IMPL_H)