summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-10-23 21:40:47 +0200
committerCarl Hetherington <cth@carlh.net>2025-10-23 22:30:46 +0200
commitc91f1e6aed0eebe98363ff9d5ba5bf87c6acb48e (patch)
tree806a9d177e76429f67a50363ab2a05c3b6e976f4
parentddd17c51b6810b03826cc7c7b27ffcb9788cf230 (diff)
Make it possible to not write audio analysis files.
-rw-r--r--src/lib/analyse_audio_job.cc10
-rw-r--r--src/lib/analyse_audio_job.h8
-rw-r--r--src/lib/job_manager.cc2
-rw-r--r--test/audio_analysis_test.cc10
-rw-r--r--test/audio_processor_test.cc2
5 files changed, 17 insertions, 15 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc
index 4596bd431..cd6a2bbd6 100644
--- a/src/lib/analyse_audio_job.cc
+++ b/src/lib/analyse_audio_job.cc
@@ -41,6 +41,7 @@ using std::shared_ptr;
using std::string;
using std::vector;
using namespace dcpomatic;
+using boost::optional;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
#endif
@@ -50,11 +51,11 @@ using namespace boost::placeholders;
* 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)
+AnalyseAudioJob::AnalyseAudioJob(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist, bool whole_film, optional<boost::filesystem::path> path)
: Job(film)
, _analyser(film, playlist, whole_film, boost::bind(&Job::set_progress, this, _1, false))
, _playlist(playlist)
- , _path(film->audio_analysis_path(playlist))
+ , _path(path)
, _whole_film(whole_film)
{
LOG_DEBUG_AUDIO_ANALYSIS_NC("AnalyseAudioJob::AnalyseAudioJob");
@@ -111,8 +112,9 @@ AnalyseAudioJob::run()
LOG_DEBUG_AUDIO_ANALYSIS_NC("Loop complete");
_analyser.finish();
- auto analysis = _analyser.get();
- analysis.write(_path);
+ if (_path) {
+ analysis().write(*_path);
+ }
LOG_DEBUG_AUDIO_ANALYSIS_NC("Job finished");
set_progress(1);
diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h
index 5aea9e13d..fe3d9d0b6 100644
--- a/src/lib/analyse_audio_job.h
+++ b/src/lib/analyse_audio_job.h
@@ -50,7 +50,7 @@ class Playlist;
class AnalyseAudioJob : public Job
{
public:
- AnalyseAudioJob(std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool whole_film);
+ AnalyseAudioJob(std::shared_ptr<const Film>, std::shared_ptr<const Playlist>, bool whole_film, boost::optional<boost::filesystem::path> path);
~AnalyseAudioJob();
std::string name() const override;
@@ -60,7 +60,7 @@ public:
return true;
}
- boost::filesystem::path path() const {
+ boost::optional<boost::filesystem::path> path() const {
return _path;
}
@@ -71,8 +71,8 @@ private:
AudioAnalyser _analyser;
std::shared_ptr<const Playlist> _playlist;
- /** playlist's audio analysis path when the job was created */
- boost::filesystem::path _path;
+ /** Path to write analysis file to */
+ boost::optional<boost::filesystem::path> _path;
bool _whole_film;
static const int _num_points;
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index c429dab6e..3c6566727 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -251,7 +251,7 @@ JobManager::analyse_audio(
{
boost::mutex::scoped_lock lm(_mutex);
- job = make_shared<AnalyseAudioJob>(film, playlist, from_zero);
+ job = make_shared<AnalyseAudioJob>(film, playlist, from_zero, film->audio_analysis_path(playlist));
connection = job->Finished.connect(ready);
_jobs.push_back(job);
_schedule_condition.notify_all();
diff --git a/test/audio_analysis_test.cc b/test/audio_analysis_test.cc
index 19555001b..a072c0f88 100644
--- a/test/audio_analysis_test.cc
+++ b/test/audio_analysis_test.cc
@@ -105,7 +105,7 @@ BOOST_AUTO_TEST_CASE (audio_analysis_test)
auto c = make_shared<FFmpegContent>(TestPaths::private_data() / "betty_L.wav");
auto film = new_test_film("audio_analysis_test", { c });
- auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false);
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false, film->audio_analysis_path(film->playlist()));
JobManager::instance()->add (job);
BOOST_REQUIRE (!wait_for_jobs());
}
@@ -118,7 +118,7 @@ BOOST_AUTO_TEST_CASE (audio_analysis_negative_delay_test)
auto film = new_test_film("audio_analysis_negative_delay_test", { c });
c->audio->set_delay (-250);
- auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false);
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false, film->audio_analysis_path(film->playlist()));
JobManager::instance()->add (job);
BOOST_REQUIRE (!wait_for_jobs());
}
@@ -130,7 +130,7 @@ BOOST_AUTO_TEST_CASE (audio_analysis_test2)
auto c = make_shared<FFmpegContent>(TestPaths::private_data() / "3d_thx_broadway_2010_lossless.m2ts");
auto film = new_test_film("audio_analysis_test2", { c });
- auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false);
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false, film->audio_analysis_path(film->playlist()));
JobManager::instance()->add (job);
BOOST_REQUIRE (!wait_for_jobs());
}
@@ -265,11 +265,11 @@ BOOST_AUTO_TEST_CASE(analyse_audio_uses_processor_when_analysing_whole_film)
auto sound = content_factory(TestPaths::private_data() / "betty_stereo.wav")[0];
auto film = new_test_film("analyse_audio_uses_processor_when_analysing_whole_film", { sound });
- auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), true);
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), true, film->audio_analysis_path(film->playlist()));
JobManager::instance()->add(job);
BOOST_REQUIRE(!wait_for_jobs());
- AudioAnalysis analysis(job->path());
+ AudioAnalysis analysis(film->audio_analysis_path(film->playlist()));
BOOST_REQUIRE(analysis.channels() > 2);
bool centre_non_zero = false;
diff --git a/test/audio_processor_test.cc b/test/audio_processor_test.cc
index a87d28bd1..60a30e125 100644
--- a/test/audio_processor_test.cc
+++ b/test/audio_processor_test.cc
@@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE (audio_processor_test)
film->set_audio_processor (AudioProcessor::from_id ("mid-side-decoder"));
/* Analyse the audio and check it doesn't crash */
- auto job = make_shared<AnalyseAudioJob> (film, film->playlist(), false);
+ auto job = make_shared<AnalyseAudioJob>(film, film->playlist(), false, film->audio_analysis_path(film->playlist()));
JobManager::instance()->add (job);
BOOST_REQUIRE (!wait_for_jobs());