diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-12-16 01:58:57 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-12-26 17:20:25 +0100 |
| commit | 24728b74693bb84d79474e014cdb952abc8a79f2 (patch) | |
| tree | b18a95441b7fcf53232958b364c84bcee67f1695 /src/lib/writer.cc | |
| parent | d7f6ab91208cb4a562ccd668ca2cc8135f124053 (diff) | |
Give ownership of info files to ReelWriters (#2912).v2.18.2
The motivation here is to stop a pattern where we create a file, close
it, and then re-open it (many times) as I think there are problems on
Windows when a virus scanner sees the new file, opens it for checking,
and then we can't re-open it.
This also makes things a fair bit simpler, as a lock is removed and we
don't try to differentiate read/write cases by opening the file in
different ways; it's now always writeable.
Diffstat (limited to 'src/lib/writer.cc')
| -rw-r--r-- | src/lib/writer.cc | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 971085046..138873cc3 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -92,7 +92,7 @@ Writer::Writer(weak_ptr<const Film> weak_film, weak_ptr<Job> weak_job, boost::fi int reel_index = 0; auto const reels = film()->reels(); for (auto p: reels) { - _reels.push_back(ReelWriter(weak_film, p, job, reel_index++, reels.size(), text_only, _output_dir)); + _reels.emplace_back(weak_film, p, job, reel_index++, reels.size(), text_only, _output_dir); } _last_written.resize (reels.size()); @@ -237,17 +237,13 @@ Writer::fake_write (Frame frame, Eyes eyes) _full_condition.wait (lock); } - size_t const reel = video_reel (frame); - Frame const frame_in_reel = frame - _reels[reel].start (); + DCPOMATIC_ASSERT((film()->three_d() && eyes != Eyes::BOTH) || (!film()->three_d() && eyes == Eyes::BOTH)); QueueItem qi; qi.type = QueueItem::Type::FAKE; - qi.info = J2KFrameInfo(film()->info_file_handle(_reels[reel].period(), true), frame_in_reel, eyes); - - DCPOMATIC_ASSERT((film()->three_d() && eyes != Eyes::BOTH) || (!film()->three_d() && eyes == Eyes::BOTH)); - + auto const reel = video_reel(frame); qi.reel = reel; - qi.frame = frame_in_reel; + qi.frame = frame - _reels[reel].start(); qi.eyes = eyes; _queue.push_back(qi); @@ -416,7 +412,7 @@ try if (i.type == QueueItem::Type::FULL) { LOG_WARNING (N_("- type FULL, frame %1, eyes %2"), i.frame, (int) i.eyes); } else { - LOG_WARNING (N_("- type FAKE, size %1, frame %2, eyes %3"), i.info.size, i.frame, (int) i.eyes); + LOG_WARNING(N_("- type FAKE, frame %1, eyes %2"), i.frame, static_cast<int>(i.eyes)); } } } @@ -447,7 +443,7 @@ try break; case QueueItem::Type::FAKE: LOG_DEBUG_ENCODE (N_("Writer FAKE-writes %1"), qi.frame); - reel.fake_write(qi.info); + reel.fake_write(qi.frame, qi.eyes); ++_fake_written; break; case QueueItem::Type::REPEAT: |
