From c0961059aa9335a88feb00a667ee32d95a7a888e Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 12 Jun 2017 20:04:36 +0200 Subject: [PATCH] Fix a crash on getting metrics after switching file. --- quicksync_encoder.cpp | 16 ++++++++++++++-- quicksync_encoder_impl.h | 1 - 2 files changed, 14 insertions(+), 3 deletions(-) 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) -- 2.39.2