From: Carl Hetherington Date: Wed, 26 Aug 2015 21:50:23 +0000 (+0100) Subject: Small optimisations to audio analysis. X-Git-Tag: v2.1.47~18 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=d44e39b0f03a4e90aab6fca20bd2819a39b42e69 Small optimisations to audio analysis. --- diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index 0660d8f20..164c57b14 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -43,12 +43,18 @@ AnalyseAudioJob::AnalyseAudioJob (shared_ptr film, shared_ptrlength().frames_round (_film->audio_frame_rate()); _samples_per_point = max (int64_t (1), len / _num_points); - _current.resize (_film->audio_channels ()); + delete[] _current; + _current = new AudioPoint[_film->audio_channels ()]; _analysis.reset (new AudioAnalysis (_film->audio_channels ())); bool has_any_audio = false; @@ -109,19 +116,19 @@ AnalyseAudioJob::run () void AnalyseAudioJob::analyse (shared_ptr b) { - for (int i = 0; i < b->frames(); ++i) { - for (int j = 0; j < b->channels(); ++j) { + int const frames = b->frames (); + int const channels = b->channels (); + + for (int i = 0; i < frames; ++i) { + for (int j = 0; j < channels; ++j) { float s = b->data(j)[i]; - if (fabsf (s) < 10e-7) { + float as = fabsf (s); + if (as < 10e-7) { /* SafeStringStream can't serialise and recover inf or -inf, so prevent such values by replacing with this (140dB down) */ - s = 10e-7; + s = as = 10e-7; } _current[j][AudioPoint::RMS] += pow (s, 2); - _current[j][AudioPoint::PEAK] = max (_current[j][AudioPoint::PEAK], fabsf (s)); - - float const as = fabs (s); - _current[j][AudioPoint::PEAK] = max (_current[j][AudioPoint::PEAK], as); if (as > _overall_peak) { @@ -132,7 +139,6 @@ AnalyseAudioJob::analyse (shared_ptr b) if ((_done % _samples_per_point) == 0) { _current[j][AudioPoint::RMS] = sqrt (_current[j][AudioPoint::RMS] / _samples_per_point); _analysis->add_point (j, _current[j]); - _current[j] = AudioPoint (); } } diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h index c255d9caa..4273c19ed 100644 --- a/src/lib/analyse_audio_job.h +++ b/src/lib/analyse_audio_job.h @@ -39,6 +39,7 @@ class AnalyseAudioJob : public Job { public: AnalyseAudioJob (boost::shared_ptr, boost::shared_ptr); + ~AnalyseAudioJob (); std::string name () const; std::string json_name () const; @@ -51,7 +52,7 @@ private: int64_t _done; int64_t _samples_per_point; - std::vector _current; + AudioPoint* _current; float _overall_peak; Frame _overall_peak_frame; diff --git a/src/lib/audio_point.h b/src/lib/audio_point.h index 3dfe4701f..f699233cb 100644 --- a/src/lib/audio_point.h +++ b/src/lib/audio_point.h @@ -39,7 +39,7 @@ public: void as_xml (xmlpp::Element *) const; - float& operator[] (int t) { + inline float& operator[] (int t) { return _data[t]; }