Various fixes to still-image mode.
[dcpomatic.git] / src / lib / j2k_still_encoder.cc
index 51946372f2fe6695bc96cce73aad6fcaca615176..968257691bdbe5deba66b21eb202e9d10ce82075 100644 (file)
 #include "imagemagick_decoder.h"
 #include "film.h"
 
-using namespace std;
-using namespace boost;
+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)
 {
        
 }
 
 void
-J2KStillEncoder::process_video (shared_ptr<Image> yuv, int frame, shared_ptr<Subtitle> sub)
+J2KStillEncoder::do_process_video (shared_ptr<Image> yuv, shared_ptr<Subtitle> sub)
 {
        pair<string, string> const s = Filter::ffmpeg_strings (_film->filters());
        DCPVideoFrame* f = new DCPVideoFrame (
@@ -63,19 +64,32 @@ J2KStillEncoder::process_video (shared_ptr<Image> yuv, int frame, shared_ptr<Sub
        }
 
        string const real = _opt->frame_out_path (0, false);
-       for (int i = 1; i < (_film->still_duration() * ImageMagickDecoder::static_frames_per_second()); ++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
-                       filesystem::copy_file (real, link);
+       boost::filesystem::copy_file (a, b);
 #endif                 
-               }
-               frame_done (0);
-       }
 }