- _film->log()->log (String::compose ("Writer writes %1 to MXF", encoded.second));
- if (encoded.first) {
- _picture_asset_writer->write (encoded.first->data(), encoded.first->size());
- encoded.first->write_hash (_film, encoded.second);
- _last_written = encoded.first;
- } else {
- _picture_asset_writer->write (_last_written->data(), _last_written->size());
- _last_written->write_hash (_film, encoded.second);
+ switch (qi.type) {
+ case QueueItem::FULL:
+ {
+ _film->log()->log (String::compose ("Writer FULL-writes %1 to MXF", qi.frame));
+ if (!qi.encoded) {
+ qi.encoded.reset (new EncodedData (_film->j2c_path (qi.frame, false)));
+ }
+ libdcp::FrameInfo const fin = _picture_asset_writer->write (qi.encoded->data(), qi.encoded->size());
+ qi.encoded->write_info (_film, qi.frame, fin);
+ _last_written = qi.encoded;
+ ++_full_written;
+ break;
+ }
+ case QueueItem::FAKE:
+ _film->log()->log (String::compose ("Writer FAKE-writes %1 to MXF", qi.frame));
+ _picture_asset_writer->fake_write (qi.size);
+ _last_written.reset ();
+ ++_fake_written;
+ break;
+ case QueueItem::REPEAT:
+ {
+ _film->log()->log (String::compose ("Writer REPEAT-writes %1 to MXF", qi.frame));
+ libdcp::FrameInfo const fin = _picture_asset_writer->write (_last_written->data(), _last_written->size());
+ _last_written->write_info (_film, qi.frame, fin);
+ ++_repeat_written;
+ break;
+ }