Various range fixes.
[dcpomatic.git] / src / lib / options.h
index 45a1768c2df0bb3a7f54777b0c21deab23dfb029..68786c730cdd4b116f85ceb5f06534506ea5f5bb 100644 (file)
@@ -39,8 +39,9 @@ public:
        Options (std::string f, std::string e, std::string m)
                : padding (0)
                , apply_crop (true)
-               , decode_video_frequency (0)
+               , decode_video_skip (0)
                , decode_audio (true)
+               , decode_subtitles (false)
                , _frame_out_path (f)
                , _frame_out_extension (e)
                , _multichannel_audio_out_path (m)
@@ -51,15 +52,19 @@ public:
                return _frame_out_path;
        }
 
-       /** @param f Frame index.
+       /** @param f Source frame index.
         *  @param t true to return a temporary file path, otherwise a permanent one.
         *  @return The path to write this video frame to.
         */
-       std::string frame_out_path (int f, bool t) const {
+       std::string frame_out_path (SourceFrame f, bool t, std::string e = "") const {
+               if (e.empty ()) {
+                       e = _frame_out_extension;
+               }
+               
                std::stringstream s;
                s << _frame_out_path << "/";
                s.width (8);
-               s << std::setfill('0') << f << _frame_out_extension;
+               s << std::setfill('0') << f << e;
 
                if (t) {
                        s << ".tmp";
@@ -91,9 +96,16 @@ public:
        float ratio;                ///< ratio of the wanted output image (not considering padding)
        int padding;                ///< number of pixels of padding (in terms of the output size) each side of the image
        bool apply_crop;            ///< true to apply cropping
-       int black_after;            ///< first frame for which to output a black frame, rather than the actual video content, or 0 for none
-       int decode_video_frequency; ///< skip frames so that this many are decoded in all (or 0) (for generating thumbnails)
+
+       /** Range of video frames to decode */
+       boost::optional<std::pair<SourceFrame, SourceFrame> > decode_range;
+
+       /** Skip frames such that we don't decode any frame where (index % decode_video_skip) != 0; e.g.
+        *  1 for every frame, 2 for every other frame, etc.
+        */
+       SourceFrame decode_video_skip; 
        bool decode_audio;          ///< true to decode audio, otherwise false
+       bool decode_subtitles;
 
 private:
        /** Path of the directory to write video frames to */