Split Options into encode / decode.
[dcpomatic.git] / src / lib / options.h
index f4381ef684de4798a2e0e68e6c6f56a6dce78ba2..4457969f3399254b89f77be38b3d308ee1c54ce9 100644 (file)
 #include <string>
 #include <iomanip>
 #include <sstream>
+#include <boost/optional.hpp>
 #include "util.h"
 
-/** @class Options
- *  @brief Options for a transcoding operation.
+/** @class EncodeOptions
+ *  @brief EncodeOptions for an encoding operation.
  *
  *  These are settings which may be different, in different circumstances, for
- *  the same film; ie they are options for a particular transcode operation.
+ *  the same film; ie they are options for a particular operation.
  */
-class Options
+class EncodeOptions
 {
 public:
 
-       Options (std::string f, std::string e, std::string m)
+       EncodeOptions (std::string f, std::string e, std::string m)
                : padding (0)
-               , apply_crop (true)
-               , black_after (0)
-               , decode_video_skip (0)
-               , decode_audio (true)
-               , decode_subtitles (false)
+               , video_skip (0)
                , _frame_out_path (f)
                , _frame_out_extension (e)
                , _multichannel_audio_out_path (m)
@@ -53,11 +50,11 @@ 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, std::string e = "") const {
+       std::string frame_out_path (SourceFrame f, bool t, std::string e = "") const {
                if (e.empty ()) {
                        e = _frame_out_extension;
                }
@@ -94,14 +91,17 @@ public:
        }
 
        Size out_size;              ///< size of output images
-       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_skip;      ///< 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.
-       bool decode_audio;          ///< true to decode audio, otherwise false
-       bool decode_subtitles;
+
+       /** Range of video frames to decode */
+       boost::optional<std::pair<SourceFrame, SourceFrame> > video_range;
+       /** Range of audio frames to decode */
+       boost::optional<std::pair<int64_t, int64_t> > audio_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 video_skip; 
 
 private:
        /** Path of the directory to write video frames to */
@@ -111,3 +111,18 @@ private:
        /** Path of the directory to write audio files to */
        std::string _multichannel_audio_out_path;
 };
+
+
+class DecodeOptions
+{
+public:
+       DecodeOptions ()
+               : decode_audio (true)
+               , decode_subtitles (false)
+               , video_sync (true)
+       {}
+       
+       bool decode_audio;
+       bool decode_subtitles;
+       bool video_sync;
+};