#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;
+
+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.
+ */
+#define SERVER_LINK_VERSION 2
+
+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_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
+};
-typedef int64_t ContentAudioFrame;
-typedef int ContentVideoFrame;
-typedef int64_t Time;
-#define TIME_MAX INT64_MAX
-#define TIME_HZ 96000
-typedef int64_t OutputAudioFrame;
-typedef int OutputVideoFrame;
+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.
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<cxml::Node>);
/** Number of pixels to remove from the left-hand side */
int left;
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)
- {}
-
- Rect (int x_, int y_, int w_, int h_)
- : x (x_)
- , y (y_)
- , width (w_)
- , height (h_)
+ 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)
{}
+
+ 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;
-
- Position position () const {
- return Position (x, y);
- }
-
- libdcp::Size size () const {
- return libdcp::Size (width, height);
- }
-
- Rect intersection (Rect const & other) const;
+extern bool operator== (Crop const & a, Crop const & b);
+extern bool operator!= (Crop const & a, Crop const & b);
- bool contains (Position) const;
+enum Resolution {
+ RESOLUTION_2K,
+ RESOLUTION_4K
};
+std::string resolution_to_string (Resolution);
+Resolution string_to_resolution (std::string);
+
#endif