+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)
+
+/** A film of F seconds at f FPS will be Ff frames;
+ Consider some delta FPS d, so if we run the same
+ film at (f + d) FPS it will last F(f + d) seconds.
+
+ Hence the difference in length over the length of the film will
+ be F(f + d) - Ff frames
+ = Ff + Fd - Ff frames
+ = Fd frames
+ = Fd/f seconds
+
+ So if we accept a difference of 1 frame, ie 1/f seconds, we can
+ say that
+
+ 1/f = Fd/f
+ ie 1 = Fd
+ ie d = 1/F
+
+ So for a 3hr film, ie F = 3 * 60 * 60 = 10800, the acceptable
+ FPS error is 1/F ~= 0.0001 ~= 1e-4
+*/
+#define VIDEO_FRAME_RATE_EPSILON (1e-4)
+
+/** Port on which EncodeServer listens for frame encoding requests */
+#define ENCODE_FRAME_PORT (Config::instance()->server_port_base())
+/** Port on which EncodeServer listens for DCPOMATIC_HELLO from masters */
+#define HELLO_PORT (Config::instance()->server_port_base()+1)
+/** Port on which EncodeServerFinder listens for replies to DCPOMATIC_HELLO from servers */
+#define SERVER_PRESENCE_PORT (Config::instance()->server_port_base()+2)
+/** Port on which batch converter listens for job requests */
+#define BATCH_JOB_PORT (Config::instance()->server_port_base()+3)
+
+typedef std::vector<boost::shared_ptr<Content> > ContentList;
+typedef std::vector<boost::shared_ptr<FFmpegContent> > FFmpegContentList;
+
+typedef int64_t Frame;
+
+enum VideoFrameType
+{
+ VIDEO_FRAME_TYPE_2D,
+ /** `True' 3D content, e.g. 3D DCPs */
+ VIDEO_FRAME_TYPE_3D,
+ 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
+};
+
+std::string video_frame_type_to_string (VideoFrameType);
+VideoFrameType string_to_video_frame_type (std::string);
+
+enum Eyes
+{
+ EYES_BOTH,
+ EYES_LEFT,
+ EYES_RIGHT,
+ EYES_COUNT
+};