*/
#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;
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,
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,