#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>
#include "exceptions.h"
+#include "types.h"
class Film;
class EncodedData;
namespace libdcp {
class MonoPictureAsset;
class MonoPictureAssetWriter;
+ class StereoPictureAsset;
+ class StereoPictureAssetWriter;
+ class PictureAsset;
+ class PictureAssetWriter;
class SoundAsset;
class SoundAssetWriter;
}
int size;
/** frame index */
int frame;
+ Eyes eyes;
};
bool operator< (QueueItem const & a, QueueItem const & b);
bool operator== (QueueItem const & a, QueueItem const & b);
-class Writer : public ExceptionStore
+class Writer : public ExceptionStore, public boost::noncopyable
{
public:
Writer (boost::shared_ptr<const Film>, boost::shared_ptr<Job>);
bool can_fake_write (int) const;
- void write (boost::shared_ptr<const EncodedData>, int);
- void fake_write (int);
+ void write (boost::shared_ptr<const EncodedData>, int, Eyes);
+ void fake_write (int, Eyes);
void write (boost::shared_ptr<const AudioBuffers>);
- void repeat (int f);
+ void repeat (int f, Eyes);
void finish ();
private:
void thread ();
void check_existing_picture_mxf ();
+ bool check_existing_picture_mxf_frame (FILE *, int, Eyes);
+ bool have_sequenced_image_at_queue_head () const;
/** our Film */
boost::shared_ptr<const Film> _film;
/** condition to manage thread wakeups */
boost::condition _condition;
/** the data of the last written frame, or 0 if there isn't one */
- boost::shared_ptr<const EncodedData> _last_written;
+ boost::shared_ptr<const EncodedData> _last_written[EYES_COUNT];
/** the index of the last written frame */
int _last_written_frame;
+ Eyes _last_written_eyes;
/** maximum number of frames to hold in memory, for when we are managing
ordering
*/
*/
int _pushed_to_disk;
- boost::shared_ptr<libdcp::MonoPictureAsset> _picture_asset;
- boost::shared_ptr<libdcp::MonoPictureAssetWriter> _picture_asset_writer;
+ boost::shared_ptr<libdcp::PictureAsset> _picture_asset;
+ boost::shared_ptr<libdcp::PictureAssetWriter> _picture_asset_writer;
boost::shared_ptr<libdcp::SoundAsset> _sound_asset;
boost::shared_ptr<libdcp::SoundAssetWriter> _sound_asset_writer;
};