summaryrefslogtreecommitdiff
path: root/src/lib/writer.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-12-16 01:58:57 +0100
committerCarl Hetherington <cth@carlh.net>2024-12-26 17:20:25 +0100
commit24728b74693bb84d79474e014cdb952abc8a79f2 (patch)
treeb18a95441b7fcf53232958b364c84bcee67f1695 /src/lib/writer.cc
parentd7f6ab91208cb4a562ccd668ca2cc8135f124053 (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.cc16
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: