Clean up a few bits.
[dcpomatic.git] / src / lib / film_state.cc
index 16378086c1fcd878e4781ff73192da02b33634cf..29bf71db332be8045f2c290823b8c469718d2742 100644 (file)
@@ -92,6 +92,7 @@ FilmState::write_metadata (ofstream& f) const
        f << "audio_channels " << audio_channels << "\n";
        f << "audio_sample_rate " << audio_sample_rate << "\n";
        f << "audio_sample_format " << audio_sample_format_to_string (audio_sample_format) << "\n";
+       f << "content_digest " << content_digest << "\n";
 }
 
 /** Read state from a key / value pair.
@@ -161,6 +162,13 @@ FilmState::read_metadata (string k, string v)
                audio_sample_rate = atoi (v.c_str ());
        } else if (k == "audio_sample_format") {
                audio_sample_format = audio_sample_format_from_string (v);
+       } else if (k == "content_digest") {
+               content_digest = v;
+       }
+       
+       /* Itsy bitsy hack: compute digest here if don't have one (for backwards compatibility) */
+       if (content_digest.empty() && !content.empty()) {
+               content_digest = md5_digest (content_path ());
        }
 }
 
@@ -182,10 +190,14 @@ string
 FilmState::thumb_file_for_frame (int n) const
 {
        stringstream s;
-       s << dir ("thumbs") << "/";
        s.width (8);
        s << setfill('0') << n << ".tiff";
-       return s.str ();
+       
+       filesystem::path p;
+       p /= dir ("thumbs");
+       p /= s.str ();
+               
+       return p.string ();
 }
 
 
@@ -213,19 +225,21 @@ FilmState::cropped_size (Size s) const
 string
 FilmState::dir (string d) const
 {
-       stringstream s;
-       s << directory << "/" << d;
-       filesystem::create_directories (s.str ());
-       return s.str ();
+       filesystem::path p;
+       p /= directory;
+       p /= d;
+       filesystem::create_directories (p);
+       return p.string ();
 }
 
 /** Given a file or directory name, return its full path within the Film's directory */
 string
 FilmState::file (string f) const
 {
-       stringstream s;
-       s << directory << "/" << f;
-       return s.str ();
+       filesystem::path p;
+       p /= directory;
+       p /= f;
+       return p.string ();
 }
 
 string
@@ -252,3 +266,18 @@ FilmState::content_type () const
 
        return VIDEO;
 }
+
+/** @return Number of bytes per sample of a single channel */
+int
+FilmState::bytes_per_sample () const
+{
+       switch (audio_sample_format) {
+       case AV_SAMPLE_FMT_S16:
+               return 2;
+       default:
+               assert (false);
+       }
+
+       assert (false);
+       return 0;
+}