X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ftypes.h;h=d4d66387d0c5c17c08183b1f04aecfe6ce2cebff;hb=8cc0d5e6eceeafaeba2490e941b1ff73230aa4e5;hp=c2bb9d8531d2ee1f8c5761ebd2f1827119a5d372;hpb=cd4a82d90677cec80e891ac190000cb70767446f;p=dcpomatic.git diff --git a/src/lib/types.h b/src/lib/types.h index c2bb9d853..d4d66387d 100644 --- a/src/lib/types.h +++ b/src/lib/types.h @@ -21,14 +21,55 @@ #define DCPOMATIC_TYPES_H #include +#include #include #include class Content; +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 > ContentList; -typedef int64_t ContentAudioFrame; -typedef int ContentVideoFrame; + +template +struct TimedAudioBuffers +{ + TimedAudioBuffers () + : time (0) + {} + + TimedAudioBuffers (boost::shared_ptr a, T t) + : audio (a) + , time (t) + {} + + boost::shared_ptr audio; + T time; +}; + +enum VideoFrameType +{ + VIDEO_FRAME_TYPE_2D, + VIDEO_FRAME_TYPE_3D_LEFT_RIGHT +}; + +enum Eyes +{ + EYES_BOTH, + EYES_LEFT, + EYES_RIGHT, + EYES_COUNT +}; /** @struct Crop * @brief A description of the crop of an image or video. @@ -36,6 +77,7 @@ typedef int ContentVideoFrame; struct Crop { Crop () : left (0), right (0), top (0), bottom (0) {} + Crop (int l, int r, int t, int b) : left (l), right (r), top (t), bottom (b) {} /** Number of pixels to remove from the left-hand side */ int left; @@ -45,65 +87,32 @@ struct Crop int top; /** Number of pixels to remove from the bottom */ int bottom; -}; -extern bool operator== (Crop const & a, Crop const & b); -extern bool operator!= (Crop const & a, Crop const & b); + libdcp::Size apply (libdcp::Size s, int minimum = 4) const { + s.width -= left + right; + s.height -= top + bottom; -/** @struct Position - * @brief A position. - */ -struct Position -{ - Position () - : x (0) - , y (0) - {} - - Position (int x_, int y_) - : x (x_) - , y (y_) - {} - - /** x coordinate */ - int x; - /** y coordinate */ - int y; -}; - -/** @struct Rect - * @brief A rectangle. - */ -struct Rect -{ - Rect () - : x (0) - , y (0) - , width (0) - , height (0) - {} + if (s.width < minimum) { + s.width = minimum; + } - Rect (int x_, int y_, int w_, int h_) - : x (x_) - , y (y_) - , width (w_) - , height (h_) - {} - - int x; - int y; - int width; - int height; - - Position position () const { - return Position (x, y); + if (s.height < minimum) { + s.height = minimum; + } + + return s; } +}; - libdcp::Size size () const { - return libdcp::Size (width, height); - } +extern bool operator== (Crop const & a, Crop const & b); +extern bool operator!= (Crop const & a, Crop const & b); - Rect intersection (Rect const & other) const; +enum Resolution { + RESOLUTION_2K, + RESOLUTION_4K }; +std::string resolution_to_string (Resolution); +Resolution string_to_resolution (std::string); + #endif