diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-06-03 15:31:21 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-06-03 15:31:21 +0100 |
| commit | f98caf4af896e9be943046b84586da5c2e103f18 (patch) | |
| tree | 993f719e293667c432c95026dc2bfd53d5b84982 /src/lib | |
| parent | 92c377d1b9e781fbb4b1f1b7a76ca7dba0bd637f (diff) | |
Make show audio work on the whole DCP, not individual content.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/analyse_audio_job.cc | 15 | ||||
| -rw-r--r-- | src/lib/analyse_audio_job.h | 12 | ||||
| -rw-r--r-- | src/lib/audio_content.cc | 27 | ||||
| -rw-r--r-- | src/lib/audio_content.h | 3 | ||||
| -rw-r--r-- | src/lib/film.cc | 24 | ||||
| -rw-r--r-- | src/lib/film.h | 3 | ||||
| -rw-r--r-- | src/lib/md5_digester.cc | 6 | ||||
| -rw-r--r-- | src/lib/md5_digester.h | 2 |
8 files changed, 43 insertions, 49 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index cdf623876..31b9dccae 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -34,9 +34,9 @@ using boost::shared_ptr; int const AnalyseAudioJob::_num_points = 1024; -AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> f, shared_ptr<AudioContent> c) +AnalyseAudioJob::AnalyseAudioJob (shared_ptr<const Film> f, shared_ptr<const Playlist> p) : Job (f) - , _content (c) + , _playlist (p) , _done (0) , _samples_per_point (1) , _overall_peak (0) @@ -60,14 +60,7 @@ AnalyseAudioJob::json_name () const void AnalyseAudioJob::run () { - shared_ptr<AudioContent> content = _content.lock (); - if (!content) { - return; - } - - shared_ptr<Playlist> playlist (new Playlist); - playlist->add (content); - shared_ptr<Player> player (new Player (_film, playlist)); + shared_ptr<Player> player (new Player (_film, _playlist)); player->set_ignore_video (); int64_t const len = _film->length().frames (_film->audio_frame_rate()); @@ -84,7 +77,7 @@ AnalyseAudioJob::run () } _analysis->set_peak (_overall_peak, DCPTime::from_frames (_overall_peak_frame, _film->audio_frame_rate ())); - _analysis->write (content->audio_analysis_path ()); + _analysis->write (_film->audio_analysis_path (_playlist)); set_progress (1); set_state (FINISHED_OK); diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h index ec61c0d39..cc913e1f3 100644 --- a/src/lib/analyse_audio_job.h +++ b/src/lib/analyse_audio_job.h @@ -26,19 +26,19 @@ #include "types.h" class AudioBuffers; -class AudioContent; +class Playlist; /** @class AnalyseAudioJob - * @brief A job to analyse the audio of a piece of AudioContent and make a note of its + * @brief A job to analyse the audio of a playlist and make a note of its * broad peak and RMS levels. * - * After computing the peak and RMS levels over the length of the content, the job - * will write a file to Content::audio_analysis_path. + * After computing the peak and RMS levels the job will write a file + * to Playlist::audio_analysis_path. */ class AnalyseAudioJob : public Job { public: - AnalyseAudioJob (boost::shared_ptr<const Film>, boost::shared_ptr<AudioContent>); + AnalyseAudioJob (boost::shared_ptr<const Film>, boost::shared_ptr<const Playlist>); std::string name () const; std::string json_name () const; @@ -47,7 +47,7 @@ public: private: void analyse (boost::shared_ptr<const AudioBuffers>); - boost::weak_ptr<AudioContent> _content; + boost::shared_ptr<const Playlist> _playlist; int64_t _done; int64_t _samples_per_point; std::vector<AudioPoint> _current; diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index b6749d20b..46b80a21c 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -25,6 +25,7 @@ #include "config.h" #include "frame_rate_change.h" #include "raw_convert.h" +#include "playlist.h" #include <libcxml/cxml.h> #include <boost/foreach.hpp> @@ -129,32 +130,6 @@ AudioContent::set_audio_delay (int d) signal_changed (AudioContentProperty::AUDIO_DELAY); } -boost::signals2::connection -AudioContent::analyse_audio (boost::function<void()> finished) -{ - shared_ptr<const Film> film = _film.lock (); - DCPOMATIC_ASSERT (film); - - shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, dynamic_pointer_cast<AudioContent> (shared_from_this()))); - boost::signals2::connection c = job->Finished.connect (finished); - JobManager::instance()->add (job); - - return c; -} - -boost::filesystem::path -AudioContent::audio_analysis_path () const -{ - shared_ptr<const Film> film = _film.lock (); - if (!film) { - return boost::filesystem::path (); - } - - boost::filesystem::path p = film->audio_analysis_dir (); - p /= digest() + "_" + audio_mapping().digest(); - return p; -} - string AudioContent::technical_summary () const { diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h index 63ce3d0fa..df6527ed0 100644 --- a/src/lib/audio_content.h +++ b/src/lib/audio_content.h @@ -62,13 +62,10 @@ public: AudioMapping audio_mapping () const; void set_audio_mapping (AudioMapping); - boost::filesystem::path audio_analysis_path () const; int resampled_audio_frame_rate () const; bool has_rate_above_48k () const; std::vector<std::string> audio_channel_names () const; - boost::signals2::connection analyse_audio (boost::function<void()>); - void set_audio_gain (double); void set_audio_delay (int); diff --git a/src/lib/film.cc b/src/lib/film.cc index 90bfad6a2..590acedfd 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -42,6 +42,7 @@ #include "environment_info.h" #include "raw_convert.h" #include "audio_processor.h" +#include "md5_digester.h" #include <libcxml/cxml.h> #include <dcp/cpl.h> #include <dcp/signer.h> @@ -247,9 +248,28 @@ Film::filename_safe_name () const } boost::filesystem::path -Film::audio_analysis_dir () const +Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const { - return dir ("analysis"); + boost::filesystem::path p = dir ("analysis"); + + MD5Digester digester; + BOOST_FOREACH (shared_ptr<Content> i, playlist->content ()) { + shared_ptr<AudioContent> ac = dynamic_pointer_cast<AudioContent> (i); + if (!ac) { + continue; + } + + digester.add (ac->digest ()); + digester.add (ac->audio_mapping().digest ()); + digester.add (ac->audio_gain ()); + } + + if (audio_processor ()) { + digester.add (audio_processor()->id ()); + } + + p /= digester.get (); + return p; } /** Add suitable Jobs to the JobManager to create a DCP for this Film */ diff --git a/src/lib/film.h b/src/lib/film.h index 6008160cd..b0f1a8685 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -68,7 +68,8 @@ public: boost::filesystem::path j2c_path (int, Eyes, bool) const; boost::filesystem::path internal_video_mxf_dir () const; boost::filesystem::path internal_video_mxf_filename () const; - boost::filesystem::path audio_analysis_dir () const; + + boost::filesystem::path audio_analysis_path (boost::shared_ptr<const Playlist>) const; void send_dcp_to_tms (); void make_dcp (); diff --git a/src/lib/md5_digester.cc b/src/lib/md5_digester.cc index 1d4d1974a..df73a6945 100644 --- a/src/lib/md5_digester.cc +++ b/src/lib/md5_digester.cc @@ -43,6 +43,12 @@ MD5Digester::add (void const * data, size_t size) MD5_Update (&_context, data, size); } +void +MD5Digester::add (string const & s) +{ + add (s.c_str (), s.length ()); +} + string MD5Digester::get () const { diff --git a/src/lib/md5_digester.h b/src/lib/md5_digester.h index 981334e28..8ae7e81cf 100644 --- a/src/lib/md5_digester.h +++ b/src/lib/md5_digester.h @@ -34,6 +34,8 @@ public: void add (T data) { add (&data, sizeof (T)); } + + void add (std::string const & s); std::string get () const; |
