X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_video_frame.h;h=e4006d98683af8c9ff58e9d0eafc9040686d9c56;hb=c96637d181be25d58fb6935236e22cb1d6d10b3f;hp=da4e0c30168da272dbab043abc76655ed147fb86;hpb=737c3392039740f7a22a9ff922f8492905173b9c;p=dcpomatic.git diff --git a/src/lib/dcp_video_frame.h b/src/lib/dcp_video_frame.h index da4e0c301..e4006d986 100644 --- a/src/lib/dcp_video_frame.h +++ b/src/lib/dcp_video_frame.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2014 Carl Hetherington Taken from code Copyright (C) 2010-2011 Terrence Meiczinger This program is free software; you can redistribute it and/or modify @@ -19,41 +19,38 @@ */ #include +#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 Film; class ServerDescription; class Scaler; class Image; class Log; +class Subtitle; +class PlayerVideoFrame; /** @class EncodedData * @brief Container for J2K-encoded data. */ -class EncodedData +class EncodedData : public boost::noncopyable { 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 (boost::filesystem::path); - void send (boost::shared_ptr socket); - 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, Eyes) const; + void write_info (boost::shared_ptr, int, Eyes, libdcp::FrameInfo) const; /** @return data */ uint8_t* data () const { @@ -67,7 +64,7 @@ public: protected: uint8_t* _data; ///< data - int _size; ///< data size in bytes + int _size; ///< data size in bytes }; /** @class LocallyEncodedData @@ -78,12 +75,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 @@ -94,7 +89,6 @@ class RemotelyEncodedData : public EncodedData { public: RemotelyEncodedData (int s); - ~RemotelyEncodedData (); }; /** @class DCPVideoFrame @@ -106,38 +100,30 @@ public: * Objects of this class are used for the queue that we keep * of images that require encoding. */ -class DCPVideoFrame +class DCPVideoFrame : public boost::noncopyable { public: - DCPVideoFrame (boost::shared_ptr, Size, int, Scaler const *, int, float, std::string, int, int, Log *); - virtual ~DCPVideoFrame (); + DCPVideoFrame (boost::shared_ptr, int, int, int, Resolution, boost::shared_ptr); + DCPVideoFrame (boost::shared_ptr, boost::shared_ptr, boost::shared_ptr); boost::shared_ptr encode_locally (); - boost::shared_ptr encode_remotely (ServerDescription const *); + boost::shared_ptr encode_remotely (ServerDescription); - int frame () const { - return _frame; + int index () const { + return _index; } + + Eyes eyes () const; 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 - int _padding; - 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) - 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 ()) - - Log* _log; ///< log - - opj_image_cmptparm_t _cmptparm[3]; ///< libopenjpeg's opj_image_cmptparm_t - opj_image* _image; ///< libopenjpeg's image container - opj_cparameters_t* _parameters; ///< libopenjpeg's parameters - opj_cinfo_t* _cinfo; ///< libopenjpeg's opj_cinfo_t - opj_cio_t* _cio; ///< libopenjpeg's opj_cio_t + + void add_metadata (xmlpp::Element *) const; + + boost::shared_ptr _frame; + int _index; ///< frame index within the DCP's intrinsic duration + int _frames_per_second; ///< Frames per second that we will use for the DCP + int _j2k_bandwidth; ///< J2K bandwidth to use + Resolution _resolution; ///< Resolution (2K or 4K) + + boost::shared_ptr _log; ///< log };