Merge master.
[dcpomatic.git] / src / lib / types.h
index d6136fc3e2778d08dbbba65392827e704a2c3bc3..35c7a91f9785865e1dada8d2449fa725f4149ae4 100644 (file)
 #include <vector>
 #include <stdint.h>
 #include <boost/shared_ptr.hpp>
-#include <libdcp/util.h>
+#include <dcp/util.h>
+#include "dcpomatic_time.h"
+#include "position.h"
 
 class Content;
+class VideoContent;
+class AudioContent;
+class SubtitleContent;
+class FFmpegContent;
+class AudioBuffers;
+
+/** The version number of the protocol used to communicate
+ *  with servers.  Intended to be bumped when incompatibilities
+ *  are introduced.
+ */
+#define SERVER_LINK_VERSION 1
 
-typedef int64_t Time;
-#define TIME_MAX INT64_MAX
-#define TIME_HZ         ((Time) 96000)
-typedef int64_t OutputAudioFrame;
-typedef int    OutputVideoFrame;
 typedef std::vector<boost::shared_ptr<Content> > ContentList;
+typedef std::vector<boost::shared_ptr<VideoContent> > VideoContentList;
+typedef std::vector<boost::shared_ptr<AudioContent> > AudioContentList;
+typedef std::vector<boost::shared_ptr<SubtitleContent> > SubtitleContentList;
+typedef std::vector<boost::shared_ptr<FFmpegContent> > FFmpegContentList;
+
+typedef int64_t VideoFrame;
+typedef int64_t AudioFrame;
+
+/* XXX -> DCPAudio */
+struct TimedAudioBuffers
+{
+       TimedAudioBuffers ()
+               : time (0)
+       {}
+       
+       TimedAudioBuffers (boost::shared_ptr<AudioBuffers> a, DCPTime t)
+               : audio (a)
+               , time (t)
+       {}
+       
+       boost::shared_ptr<AudioBuffers> audio;
+       DCPTime time;
+};
 
 enum VideoFrameType
 {
        VIDEO_FRAME_TYPE_2D,
-       VIDEO_FRAME_TYPE_3D_LEFT_RIGHT
+       VIDEO_FRAME_TYPE_3D_LEFT_RIGHT,
+       VIDEO_FRAME_TYPE_3D_TOP_BOTTOM,
+       VIDEO_FRAME_TYPE_3D_ALTERNATE,
+       /** This content is all the left frames of some 3D */
+       VIDEO_FRAME_TYPE_3D_LEFT,
+       /** This content is all the right frames of some 3D */
+       VIDEO_FRAME_TYPE_3D_RIGHT
 };
 
 enum Eyes
@@ -64,6 +101,21 @@ struct Crop
        int top;
        /** Number of pixels to remove from the bottom */
        int bottom;
+
+       dcp::Size apply (dcp::Size s, int minimum = 4) const {
+               s.width -= left + right;
+               s.height -= top + bottom;
+
+               if (s.width < minimum) {
+                       s.width = minimum;
+               }
+
+               if (s.height < minimum) {
+                       s.height = minimum;
+               }
+               
+               return s;
+       }
 };
 
 extern bool operator== (Crop const & a, Crop const & b);