X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ftypes.h;h=d0f4ec1f8955d20421aecabda5a1b720849be6eb;hb=bdbe925a467f9b7149322ad8d1c090d4c1e6d5c3;hp=f9e9b2f4b6668e62328014a19da6ba8eb9cf07f8;hpb=454a961e1a03f60cf05040b832c4f8f01b481fa7;p=dcpomatic.git diff --git a/src/lib/types.h b/src/lib/types.h index f9e9b2f4b..d0f4ec1f8 100644 --- a/src/lib/types.h +++ b/src/lib/types.h @@ -20,16 +20,69 @@ #ifndef DCPOMATIC_TYPES_H #define DCPOMATIC_TYPES_H -#include +#include "position.h" +#include "rect.h" +#include #include -#include +#include +#include class Content; +class VideoContent; +class AudioContent; +class SubtitleContent; +class FFmpegContent; + +namespace cxml { + class Node; +} + +namespace xmlpp { + class Node; +} + +/** The version number of the protocol used to communicate + * with servers. Intended to be bumped when incompatibilities + * are introduced. v2 uses 64+n + */ +#define SERVER_LINK_VERSION (64+0) typedef std::vector > ContentList; -typedef int64_t ContentAudioFrame; -typedef int ContentVideoFrame; -typedef double Time; +typedef std::vector > VideoContentList; +typedef std::vector > AudioContentList; +typedef std::vector > SubtitleContentList; +typedef std::vector > FFmpegContentList; + +typedef int64_t Frame; + +enum VideoFrameType +{ + VIDEO_FRAME_TYPE_2D, + 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 +{ + EYES_BOTH, + EYES_LEFT, + EYES_RIGHT, + EYES_COUNT +}; + +enum Part +{ + PART_LEFT_HALF, + PART_RIGHT_HALF, + PART_TOP_HALF, + PART_BOTTOM_HALF, + PART_WHOLE +}; /** @struct Crop * @brief A description of the crop of an image or video. @@ -37,6 +90,8 @@ typedef double Time; 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) {} + Crop (boost::shared_ptr); /** Number of pixels to remove from the left-hand side */ int left; @@ -46,65 +101,54 @@ 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); + dcp::Size apply (dcp::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) - {} + if (s.width < minimum) { + s.width = minimum; + } - Position (int x_, int y_) - : x (x_) - , y (y_) - {} + if (s.height < minimum) { + s.height = minimum; + } + + return s; + } - /** x coordinate */ - int x; - /** y coordinate */ - int y; + void as_xml (xmlpp::Node *) const; }; -/** @struct Rect - * @brief A rectangle. - */ -struct Rect +struct CPLSummary { - Rect () - : x (0) - , y (0) - , width (0) - , height (0) + CPLSummary (std::string d, std::string i, std::string a, boost::filesystem::path f) + : dcp_directory (d) + , cpl_id (i) + , cpl_annotation_text (a) + , cpl_file (f) {} - Rect (int x_, int y_, int w_, int h_) - : x (x_) - , y (y_) - , width (w_) - , height (h_) - {} + std::string dcp_directory; + std::string cpl_id; + std::string cpl_annotation_text; + boost::filesystem::path cpl_file; +}; - int x; - int y; - int width; - int height; +extern bool operator== (Crop const & a, Crop const & b); +extern bool operator!= (Crop const & a, Crop const & b); - Position position () const { - return Position (x, y); - } +enum Resolution { + RESOLUTION_2K, + RESOLUTION_4K +}; - libdcp::Size size () const { - return libdcp::Size (width, height); - } +std::string resolution_to_string (Resolution); +Resolution string_to_resolution (std::string); - Rect intersection (Rect const & other) const; +enum Protocol { + PROTOCOL_SCP, + PROTOCOL_FTP }; #endif