X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_video_frame.h;h=4ceb07d2649905a87a80ebf9daa6712e97fc8d96;hb=605355f3335d189f6243be42bf254df2ba0442f2;hp=9acf50692990269ecd78c41f2b67a8f553e9bdf9;hpb=a44032f5e1c8218dcd58b053ebc4703fb3239988;p=dcpomatic.git diff --git a/src/lib/dcp_video_frame.h b/src/lib/dcp_video_frame.h index 9acf50692..4ceb07d26 100644 --- a/src/lib/dcp_video_frame.h +++ b/src/lib/dcp_video_frame.h @@ -19,18 +19,19 @@ */ #include +#include #include "util.h" /** @file src/dcp_video_frame.h * @brief A single frame of video destined for a DCP. */ -class FilmState; -class Options; -class Server; +class Film; +class ServerDescription; class Scaler; class Image; class Log; +class Subtitle; /** @class EncodedData * @brief Container for J2K-encoded data. @@ -38,24 +39,16 @@ class Log; class EncodedData { public: - /** @param d Data (will not be freed by this class, but may be by subclasses) - * @param s Size of data, in bytes. - */ - EncodedData (uint8_t* d, int s) - : _data (d) - , _size (s) - {} + /** @param s Size of data, in bytes */ + EncodedData (int s); - virtual ~EncodedData () {} + EncodedData (std::string f); -#ifdef DVDOMATIC_POSIX - void send (int); -#endif - void write (boost::shared_ptr, int); + virtual ~EncodedData (); -#ifdef DEBUG_HASH - void hash (std::string) const; -#endif + void send (boost::shared_ptr socket); + void write (boost::shared_ptr, int) const; + void write_info (boost::shared_ptr, int, libdcp::FrameInfo) const; /** @return data */ uint8_t* data () const { @@ -70,6 +63,10 @@ public: protected: uint8_t* _data; ///< data int _size; ///< data size in bytes + +private: + /* No copy construction */ + EncodedData (EncodedData const &); }; /** @class LocallyEncodedData @@ -80,12 +77,10 @@ protected: class LocallyEncodedData : public EncodedData { public: - /** @param d Data (which will not be freed by this class) + /** @param d Data (which will be copied by this class) * @param s Size of data, in bytes. */ - LocallyEncodedData (uint8_t* d, int s) - : EncodedData (d, s) - {} + LocallyEncodedData (uint8_t* d, int s); }; /** @class RemotelyEncodedData @@ -96,7 +91,6 @@ class RemotelyEncodedData : public EncodedData { public: RemotelyEncodedData (int s); - ~RemotelyEncodedData (); }; /** @class DCPVideoFrame @@ -111,11 +105,15 @@ public: class DCPVideoFrame { public: - DCPVideoFrame (boost::shared_ptr, Size, int, Scaler const *, int, float, std::string, int, int, Log *); + DCPVideoFrame ( + boost::shared_ptr, boost::shared_ptr, libdcp::Size, + int, int, float, Scaler const *, int, int, std::string, int, int, boost::shared_ptr + ); + virtual ~DCPVideoFrame (); boost::shared_ptr encode_locally (); - boost::shared_ptr encode_remotely (Server const *); + boost::shared_ptr encode_remotely (ServerDescription const *); int frame () const { return _frame; @@ -123,19 +121,21 @@ public: private: void create_openjpeg_container (); - void write_encoded (boost::shared_ptr, uint8_t *, int); - boost::shared_ptr _input; ///< the input image - Size _out_size; ///< the required size of the output, in pixels + boost::shared_ptr _input; ///< the input image + boost::shared_ptr _subtitle; ///< any subtitle that should be on the image + libdcp::Size _out_size; ///< the required size of the output, in pixels int _padding; + int _subtitle_offset; + float _subtitle_scale; Scaler const * _scaler; ///< scaler to use - int _frame; ///< frame index within the Film - int _frames_per_second; ///< Frames per second that we will use for the DCP (rounded) + int _frame; ///< frame index within the DCP's intrinsic duration + int _frames_per_second; ///< Frames per second that we will use for the DCP std::string _post_process; ///< FFmpeg post-processing string to use - int _colour_lut_index; ///< Colour look-up table to use (see Config::colour_lut_index ()) - int _j2k_bandwidth; ///< J2K bandwidth to use (see Config::j2k_bandwidth ()) + int _colour_lut; ///< Colour look-up table to use + int _j2k_bandwidth; ///< J2K bandwidth to use - Log* _log; ///< log + boost::shared_ptr _log; ///< log opj_image_cmptparm_t _cmptparm[3]; ///< libopenjpeg's opj_image_cmptparm_t opj_image* _image; ///< libopenjpeg's image container