Various fixes to still-image mode.
[dcpomatic.git] / src / lib / j2k_still_encoder.cc
index dd6ef49b2a414fdf9c3567a06012aeb4f353ed8b..968257691bdbe5deba66b21eb202e9d10ce82075 100644 (file)
@@ -42,7 +42,7 @@ using std::string;
 using std::pair;
 using boost::shared_ptr;
 
-J2KStillEncoder::J2KStillEncoder (shared_ptr<const Film> f, shared_ptr<const Options> o)
+J2KStillEncoder::J2KStillEncoder (shared_ptr<const Film> f, shared_ptr<const EncodeOptions> o)
        : Encoder (f, o)
 {
        
@@ -64,19 +64,32 @@ J2KStillEncoder::do_process_video (shared_ptr<Image> yuv, shared_ptr<Subtitle> s
        }
 
        string const real = _opt->frame_out_path (0, false);
-       for (int i = 1; i < (_film->still_duration() * 24); ++i) {
+       string const real_hash = _opt->hash_out_path (0, false);
+       for (int i = 1; i < (_film->still_duration() * _film->frames_per_second()); ++i) {
+
                if (!boost::filesystem::exists (_opt->frame_out_path (i, false))) {
-                       string const link = _opt->frame_out_path (i, false);
+                       link (real, _opt->frame_out_path (i, false));
+               }
+               
+               if (!boost::filesystem::exists (_opt->hash_out_path (i, false))) {
+                       link (real_hash, _opt->hash_out_path (i, false));
+               }
+               
+               frame_done ();
+       }
+}
+
+void
+J2KStillEncoder::link (string a, string b) const
+{
 #ifdef DVDOMATIC_POSIX                 
-                       int const r = symlink (real.c_str(), link.c_str());
-                       if (r) {
-                               throw EncodeError ("could not create symlink");
-                       }
+       int const r = symlink (a.c_str(), b.c_str());
+       if (r) {
+               throw EncodeError ("could not create symlink");
+       }
 #endif
+       
 #ifdef DVDOMATIC_WINDOWS
-                       boost::filesystem::copy_file (real, link);
+       boost::filesystem::copy_file (a, b);
 #endif                 
-               }
-               frame_done ();
-       }
 }