summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-06-03 15:31:21 +0100
committerCarl Hetherington <cth@carlh.net>2015-06-03 15:31:21 +0100
commitf98caf4af896e9be943046b84586da5c2e103f18 (patch)
tree993f719e293667c432c95026dc2bfd53d5b84982 /src/lib
parent92c377d1b9e781fbb4b1f1b7a76ca7dba0bd637f (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.cc15
-rw-r--r--src/lib/analyse_audio_job.h12
-rw-r--r--src/lib/audio_content.cc27
-rw-r--r--src/lib/audio_content.h3
-rw-r--r--src/lib/film.cc24
-rw-r--r--src/lib/film.h3
-rw-r--r--src/lib/md5_digester.cc6
-rw-r--r--src/lib/md5_digester.h2
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;