X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fwriter.cc;h=48f40334ab98825478545412a60d309da6ea98dd;hb=4cb18d1e0b8fdedf6bb38e1d4187a2d782957022;hp=d0f0825f13a3a5390fbe166fe37e461885114d2b;hpb=698e3ac8863d264237003b49750ae074d612f451;p=dcpomatic.git diff --git a/src/lib/writer.cc b/src/lib/writer.cc index d0f0825f1..48f40334a 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -63,6 +63,7 @@ using boost::weak_ptr; using boost::dynamic_pointer_cast; using boost::optional; using dcp::Data; +using namespace dcpomatic; Writer::Writer (shared_ptr film, weak_ptr j) : _film (film) @@ -216,16 +217,14 @@ Writer::fake_write (Frame frame, Eyes eyes) size_t const reel = video_reel (frame); Frame const reel_frame = frame - _reels[reel].start (); - FILE* file = fopen_boost (_film->info_file(_reels[reel].period()), "rb"); - if (!file) { - throw ReadFileError (_film->info_file(_reels[reel].period())); - } - dcp::FrameInfo info = _reels[reel].read_frame_info (file, reel_frame, eyes); - fclose (file); - QueueItem qi; qi.type = QueueItem::FAKE; - qi.size = info.size; + + { + shared_ptr info_file = _film->info_file_handle(_reels[reel].period(), true); + qi.size = _reels[reel].read_frame_info(info_file, reel_frame, eyes).size; + } + qi.reel = reel; qi.frame = reel_frame; if (_film->three_d() && eyes == EYES_BOTH) { @@ -270,8 +269,11 @@ Writer::write (shared_ptr audio, DCPTime const time) /* Easy case: we can write all the audio to this reel */ _audio_reel->write (audio); t = end; + } else if (_audio_reel->period().to <= t) { + /* This reel is entirely before the start of our audio; just skip the reel */ + ++_audio_reel; } else { - /* Split the audio into two and write the first part */ + /* This audio is over a reel boundary; split the audio into two and write the first part */ DCPTime part_lengths[2] = { _audio_reel->period().to - t, end - _audio_reel->period().to @@ -558,6 +560,7 @@ Writer::finish () meta.set_issue_date_now (); cpl->set_metadata (meta); + cpl->set_ratings (vector_to_list(_film->ratings())); shared_ptr signer; if (_film->is_signed ()) { @@ -584,7 +587,7 @@ Writer::write_cover_sheet () boost::filesystem::path const cover = _film->file ("COVER_SHEET.txt"); FILE* f = fopen_boost (cover, "w"); if (!f) { - throw OpenFileError (cover, errno, false); + throw OpenFileError (cover, errno, OpenFileError::WRITE); } string text = Config::instance()->cover_sheet (); @@ -777,4 +780,7 @@ Writer::set_digest_progress (Job* job, float progress) } job->set_progress (min_progress); + + Waker waker; + waker.nudge (); }