diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-02-11 13:10:48 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-02-11 22:55:27 +0100 |
| commit | 527093fa643049d370f4daee8206349981edbf95 (patch) | |
| tree | f2d8e39174c64a059545c109beadce44369d857b /src/lib | |
| parent | 4d49c6e02b5226147058ca8015acf0ad1f440e9b (diff) | |
Fix apparently ineffective processors when analysing audio (#2671).
A whole film ("DCP side") analysis would behave the same as a
single piece of content analysis if the film only had one piece
of content.
Here we also clarify that audio analysis of the whole film is different
to that for a single piece of content; for the whole film we use processors,
and for single pieces of content we do not.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/analyse_audio_job.cc | 13 | ||||
| -rw-r--r-- | src/lib/analyse_audio_job.h | 3 | ||||
| -rw-r--r-- | src/lib/audio_analyser.cc | 10 | ||||
| -rw-r--r-- | src/lib/audio_analyser.h | 2 |
4 files changed, 18 insertions, 10 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index ca0f49f57..a6ce5dcc8 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -47,12 +47,16 @@ using namespace boost::placeholders; #endif -/** @param from_zero true to analyse audio from time 0 in the playlist, otherwise begin at Playlist::start */ -AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool from_zero) +/** @param whole_film true to analyse the whole film' audio (i.e. start from time 0 and use processors), false + * to analyse just the single piece of content in the playlist (i.e. start from Playlist::start() and do not + * use processors. + */ +AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool whole_film) : Job (film) - , _analyser (film, playlist, from_zero, boost::bind(&Job::set_progress, this, _1, false)) + , _analyser(film, playlist, whole_film, boost::bind(&Job::set_progress, this, _1, false)) , _playlist (playlist) , _path (film->audio_analysis_path(playlist)) + , _whole_film(whole_film) { LOG_DEBUG_AUDIO_ANALYSIS_NC("AnalyseAudioJob::AnalyseAudioJob"); } @@ -89,6 +93,9 @@ AnalyseAudioJob::run () player->set_fast (); player->set_play_referenced (); player->Audio.connect (bind(&AudioAnalyser::analyse, &_analyser, _1, _2)); + if (!_whole_film) { + player->set_disable_audio_processor(); + } bool has_any_audio = false; for (auto c: _playlist->content()) { diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h index 2b749da6b..afd52c304 100644 --- a/src/lib/analyse_audio_job.h +++ b/src/lib/analyse_audio_job.h @@ -50,7 +50,7 @@ class Filter; class AnalyseAudioJob : public Job { public: - AnalyseAudioJob (std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool from_zero); + AnalyseAudioJob(std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool whole_film); ~AnalyseAudioJob (); std::string name () const override; @@ -70,6 +70,7 @@ private: std::shared_ptr<const Playlist> _playlist; /** playlist's audio analysis path when the job was created */ boost::filesystem::path _path; + bool _whole_film; static const int _num_points; }; diff --git a/src/lib/audio_analyser.cc b/src/lib/audio_analyser.cc index df76932de..6e7b9fa86 100644 --- a/src/lib/audio_analyser.cc +++ b/src/lib/audio_analyser.cc @@ -52,7 +52,7 @@ using namespace dcpomatic; static auto constexpr num_points = 1024; -AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool from_zero, std::function<void (float)> set_progress) +AudioAnalyser::AudioAnalyser(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool whole_film, std::function<void (float)> set_progress) : _film (film) , _playlist (playlist) , _set_progress (set_progress) @@ -71,7 +71,7 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play _current = std::vector<AudioPoint>(_film->audio_channels()); - if (!from_zero) { + if (!whole_film) { _start = _playlist->start().get_value_or(DCPTime()); } @@ -87,7 +87,9 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play }; auto content = _playlist->content(); - if (content.size() == 1 && content[0]->audio) { + if (whole_film) { + _leqm_channels = film->audio_channels(); + } else { _leqm_channels = 0; for (auto channel: content[0]->audio->mapping().mapped_output_channels()) { /* This means that if, for example, a file only maps C we will @@ -96,8 +98,6 @@ AudioAnalyser::AudioAnalyser (shared_ptr<const Film> film, shared_ptr<const Play */ _leqm_channels = std::min(film->audio_channels(), channel + 1); } - } else { - _leqm_channels = film->audio_channels(); } /* XXX: is this right? Especially for more than 5.1? */ diff --git a/src/lib/audio_analyser.h b/src/lib/audio_analyser.h index 4708f517a..3d40f8026 100644 --- a/src/lib/audio_analyser.h +++ b/src/lib/audio_analyser.h @@ -39,7 +39,7 @@ class Playlist; class AudioAnalyser { public: - AudioAnalyser (std::shared_ptr<const Film> film, std::shared_ptr<const Playlist> playlist, bool from_zero, std::function<void (float)> set_progress); + AudioAnalyser(std::shared_ptr<const Film> film, std::shared_ptr<const Playlist> playlist, bool whole_film, std::function<void (float)> set_progress); AudioAnalyser (AudioAnalyser const&) = delete; AudioAnalyser& operator= (AudioAnalyser const&) = delete; |
