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:
{
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
}
return s.str ();
-#endif
}
/** @return The path to the directory to write video frame info files to */
{
boost::filesystem::path p;
p /= "analysis";
- p /= "XXX";//content_digest();
+ p /= _playlist->audio_digest();
return file (p.string ());
}
*/
#include <boost/shared_ptr.hpp>
+#include <boost/lexical_cast.hpp>
#include "playlist.h"
#include "sndfile_content.h"
#include "sndfile_decoder.h"
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)
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());
+}
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;