X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Faudio_panel.cc;h=7efdeb8ac88de1acd7c63cda135f8d0f87db6b01;hp=f25af27f740f231fbbf36a961f05f422b5a198f8;hb=1c9a65e90d05f02e1fd4914268435a9c2274459e;hpb=530f42305826fa96dc8fd807f44ac83a5b7866c4 diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc index f25af27f7..7efdeb8ac 100644 --- a/src/wx/audio_panel.cc +++ b/src/wx/audio_panel.cc @@ -57,6 +57,9 @@ using namespace boost::placeholders; using namespace dcpomatic; +std::map AudioPanel::_peak_cache; + + AudioPanel::AudioPanel (ContentPanel* p) : ContentSubPanel (p, _("Audio")) { @@ -445,8 +448,18 @@ AudioPanel::peak () const auto playlist = make_shared(); playlist->add (_parent->film(), sel.front()); try { - auto analysis = make_shared(_parent->film()->audio_analysis_path(playlist)); - peak_dB = linear_to_db(analysis->overall_sample_peak().first.peak) + analysis->gain_correction(playlist); + /* Loading the audio analysis file is slow, and this ::peak() is called a few times when + * the content selection is changed, so cache it. + */ + auto const path = _parent->film()->audio_analysis_path(playlist); + auto cached = _peak_cache.find(path); + if (cached != _peak_cache.end()) { + peak_dB = cached->second; + } else { + auto analysis = make_shared(path); + peak_dB = linear_to_db(analysis->overall_sample_peak().first.peak) + analysis->gain_correction(playlist); + _peak_cache[path] = *peak_dB; + } } catch (...) { }