Name audio analyses with stream ID so that you can see analyses
authorCarl Hetherington <cth@carlh.net>
Sat, 8 Mar 2014 19:09:46 +0000 (19:09 +0000)
committerCarl Hetherington <cth@carlh.net>
Sat, 8 Mar 2014 19:09:46 +0000 (19:09 +0000)
for different streams correctly.

Reported-by: Markus Raab
ChangeLog
src/lib/audio_content.cc
src/lib/audio_content.h
src/lib/ffmpeg_content.cc
src/lib/ffmpeg_content.h
src/lib/film.cc
src/lib/film.h

index 0bfcdd4d928df5f6055bb6346ee4e249e009c514..674e08e0b00b90fc8a0c855da845514599ef0c6f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2014-03-08  Carl Hetherington  <cth@carlh.net>
 
+       * Fix incorrect audio analyses on multiple-stream content.
+
        * Support for unsigned 8-bit audio (hmm!).
 
 2014-03-06  Carl Hetherington  <cth@carlh.net>
index b4c4f34b6f064aaa71e822869728e266c488bdf0..b96300e15eb6c8c362f5964814a7ad1d4213eda8 100644 (file)
@@ -141,7 +141,9 @@ AudioContent::audio_analysis_path () const
                return boost::filesystem::path ();
        }
 
-       return film->audio_analysis_path (dynamic_pointer_cast<const AudioContent> (shared_from_this ()));
+       boost::filesystem::path p = film->audio_analysis_dir ();
+       p /= digest ();
+       return p;
 }
 
 string
index ca4a1f2348fea78b788632a38a6da5a058c091f1..d30db02d775709d270eb75eed7a421aa1c877907 100644 (file)
@@ -57,9 +57,9 @@ public:
        virtual int output_audio_frame_rate () const = 0;
        virtual AudioMapping audio_mapping () const = 0;
        virtual void set_audio_mapping (AudioMapping) = 0;
+       virtual boost::filesystem::path audio_analysis_path () const;
 
        boost::signals2::connection analyse_audio (boost::function<void()>);
-       boost::filesystem::path audio_analysis_path () const;
 
        void set_audio_gain (float);
        void set_audio_delay (int);
index 4ae5546c2c2daa38a76a07c770eba837f572047a..47fe4f8079416cbc6894dea5bd323bbab58df42c 100644 (file)
@@ -477,3 +477,23 @@ FFmpegContent::identifier () const
        return s.str ();
 }
 
+boost::filesystem::path
+FFmpegContent::audio_analysis_path () const
+{
+       shared_ptr<const Film> film = _film.lock ();
+       if (!film) {
+               return boost::filesystem::path ();
+       }
+
+       /* We need to include the stream ID in this path so that we get different
+          analyses for each stream.
+       */
+
+       boost::filesystem::path p = film->audio_analysis_dir ();
+       string name = digest ();
+       if (audio_stream ()) {
+               name += "_" + audio_stream()->identifier ();
+       }
+       p /= name;
+       return p;
+}
index 6dbff41d1f43a306cb88976ef50636d3d3394447..9600666b3bf88aa48ae1e72724c4fdb6a6ef70fe 100644 (file)
@@ -150,6 +150,7 @@ public:
        int output_audio_frame_rate () const;
        AudioMapping audio_mapping () const;
        void set_audio_mapping (AudioMapping);
+       boost::filesystem::path audio_analysis_path () const;
 
        void set_filters (std::vector<Filter const *> const &);
        
index 1b724b27edc025d60c549c9e5e2ad1b6ca54a605..da48bc9b2656184a004dd3193e84d32fe6e9c8b2 100644 (file)
@@ -232,11 +232,9 @@ Film::filename_safe_name () const
 }
 
 boost::filesystem::path
-Film::audio_analysis_path (shared_ptr<const AudioContent> c) const
+Film::audio_analysis_dir () const
 {
-       boost::filesystem::path p = dir ("analysis");
-       p /= c->digest();
-       return p;
+       return dir ("analysis");
 }
 
 /** Add suitable Jobs to the JobManager to create a DCP for this Film */
index 7e65ecb16346107efe63da496176f5cf2f014adf..e5840621a1f7475ad1040cbe61fe932858ce7648 100644 (file)
@@ -63,7 +63,7 @@ public:
        boost::filesystem::path info_path (int, Eyes) const;
        boost::filesystem::path internal_video_mxf_dir () const;
        boost::filesystem::path internal_video_mxf_filename () const;
-       boost::filesystem::path audio_analysis_path (boost::shared_ptr<const AudioContent>) const;
+       boost::filesystem::path audio_analysis_dir () const;
 
        boost::filesystem::path video_mxf_filename () const;
        boost::filesystem::path audio_mxf_filename () const;