Restore digests for content.
authorCarl Hetherington <cth@carlh.net>
Thu, 11 Apr 2013 23:19:53 +0000 (00:19 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 11 Apr 2013 23:19:53 +0000 (00:19 +0100)
src/lib/content.h
src/lib/film.cc
src/lib/playlist.cc
src/lib/playlist.h

index fc2672c954bbf875761b0e3443dab5fe2c48709d..c8aa6b0e076b1d6a27594ef3f9048870ddcd4fee 100644 (file)
@@ -51,6 +51,11 @@ public:
                return _file;
        }
 
+       std::string digest () const {
+               boost::mutex::scoped_lock lm (_mutex);
+               return _digest;
+       }
+
        boost::signals2::signal<void (boost::weak_ptr<Content>, int)> Changed;
 
 protected:
index 5f1b89d0c9b505f7fa2fc8fde495dd83c8cfc6b9..6ab6551dad9d76931f1664f2a4125567cb39ecf3 100644 (file)
@@ -192,15 +192,11 @@ Film::video_state_identifier () const
 {
        assert (format ());
 
-       return "XXX";
-
-#if 0  
-
        pair<string, string> f = Filter::ffmpeg_strings (filters());
 
        stringstream s;
        s << format()->id()
-         << "_" << content_digest()
+         << "_" << _playlist->video_digest()
          << "_" << crop().left << "_" << crop().right << "_" << crop().top << "_" << crop().bottom
          << "_" << _dcp_frame_rate
          << "_" << f.first << "_" << f.second
@@ -214,7 +210,6 @@ Film::video_state_identifier () const
        }
 
        return s.str ();
-#endif 
 }
          
 /** @return The path to the directory to write video frame info files to */
@@ -245,7 +240,7 @@ Film::audio_analysis_path () const
 {
        boost::filesystem::path p;
        p /= "analysis";
-       p /= "XXX";//content_digest();
+       p /= _playlist->audio_digest();
        return file (p.string ());
 }
 
index f346cb6e03d0377eb9403d0d29cbc0a4f1835434..58086d02b67cd3e57b3526d878829f71196f8fb9 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include <boost/shared_ptr.hpp>
+#include <boost/lexical_cast.hpp>
 #include "playlist.h"
 #include "sndfile_content.h"
 #include "sndfile_decoder.h"
@@ -32,9 +33,11 @@ using std::cout;
 using std::vector;
 using std::min;
 using std::max;
+using std::string;
 using boost::shared_ptr;
 using boost::weak_ptr;
 using boost::dynamic_pointer_cast;
+using boost::lexical_cast;
 
 Playlist::Playlist ()
        : _audio_from (AUDIO_FFMPEG)
@@ -251,3 +254,44 @@ Playlist::default_audio_mapping () const
 
        return m;
 }
+
+string
+Playlist::audio_digest () const
+{
+       string t;
+       
+       switch (_audio_from) {
+       case AUDIO_FFMPEG:
+               for (list<shared_ptr<const VideoContent> >::const_iterator i = _video.begin(); i != _video.end(); ++i) {
+                       shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (*i);
+                       if (fc) {
+                               t += (*i)->digest ();
+                               t += lexical_cast<string> (fc->audio_stream()->id);
+                       }
+               }
+               break;
+       case AUDIO_SNDFILE:
+               for (list<shared_ptr<const SndfileContent> >::const_iterator i = _sndfile.begin(); i != _sndfile.end(); ++i) {
+                       t += (*i)->digest ();
+               }
+               break;
+       }
+
+       return md5_digest (t.c_str(), t.length());
+}
+
+string
+Playlist::video_digest () const
+{
+       string t;
+       
+       for (list<shared_ptr<const VideoContent> >::const_iterator i = _video.begin(); i != _video.end(); ++i) {
+               t += (*i)->digest ();
+               shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (*i);
+               if (fc) {
+                       t += fc->subtitle_stream()->id;
+               }
+       }
+
+       return md5_digest (t.c_str(), t.length());
+}
index 6384dce1c5d7d78ca6491150a87ebf8d6797fd94..d1f766d555e223e8783ebe75f8d6f4c45455244a 100644 (file)
@@ -72,6 +72,9 @@ public:
                return _sndfile;
        }
 
+       std::string audio_digest () const;
+       std::string video_digest () const;
+
        mutable boost::signals2::signal<void ()> Changed;
        mutable boost::signals2::signal<void (boost::weak_ptr<Content>, int)> ContentChanged;