Plan recording worker wake decisions

This commit is contained in:
2026-06-05 07:07:28 +02:00
parent c50ea14a2a
commit 942c053c19
8 changed files with 94 additions and 13 deletions

View File

@@ -783,21 +783,30 @@ void App::rec_loop()
{
std::unique_lock<std::mutex> lock(rec_mutex);
rec_cv.wait(lock/*, [this] { return !(rec_frames.empty() && rec_running); }*/);
if (!rec_running)
auto* legacy_canvas = Canvas::I;
auto* canvas_document = canvas ? canvas->m_canvas.get() : nullptr;
auto* encoder = legacy_canvas ? legacy_canvas->m_encoder.get() : nullptr;
const auto plan = pp::app::plan_recording_worker_iteration(
rec_running,
encoder != nullptr,
legacy_canvas != nullptr && canvas_document != nullptr);
if (!plan.continue_running)
break;
if (Canvas::I->m_encoder)
if (plan.encode_frame && legacy_canvas && canvas_document && encoder)
{
canvas->m_canvas->m_dirty_stroke = false;
PBO equirect = Canvas::I->m_layers_merge.gen_equirect_pbo(
Canvas::I->m_encoder->frame_size());
if (plan.clear_dirty_stroke)
canvas_document->m_dirty_stroke = false;
PBO equirect = legacy_canvas->m_layers_merge.gen_equirect_pbo(
encoder->frame_size());
std::this_thread::yield();
ImageRef img;
img.create(equirect.width, equirect.height, equirect.map());
Canvas::I->m_encoder->encode(img);
encoder->encode(img);
equirect.unmap();
LOG("rec frame encoded");
update_rec_frames();
if (plan.update_frame_label)
update_rec_frames();
}
}
}