proxy: isolate proxies from export renders and improve proxy workflow

- FootageJob::should_use_proxy() centralizes the proxy decision; worker
  pre-decode now honors the render mode so exports always decode the
  original media (previously every frame was pre-decoded from proxies)
- global Tools > Use Proxy Media toggle with footage invalidation
- ffmpeg -progress parsing for real percentage feedback while generating
- divider mode (1/2, 1/4, 1/8 of source resolution) with UI, proxy
  filename tags and per-footage persistence (pdivider)
- Media Offline warning slat rendered for missing footage
- regression tests: export isolation, relink invalidation, offline slat,
  progress parsing, divider arguments
This commit is contained in:
2026-07-19 21:43:58 +08:00
parent bb40b4923e
commit 0c02ff0d77
21 changed files with 494 additions and 25 deletions
+10
View File
@@ -361,6 +361,15 @@ MainMenu::MainMenu(MainWindow *parent)
tools_menu_->addSeparator();
tools_use_proxy_item_ = new QAction(this);
Menu::conform_item(tools_use_proxy_item_, "useproxymedia");
tools_use_proxy_item_->setCheckable(true);
tools_use_proxy_item_->setChecked(
Config::current()[QStringLiteral("UseProxyMedia")].toBool());
connect(tools_use_proxy_item_, &QAction::triggered, Core::instance(),
&Core::set_use_proxy_media);
tools_menu_->addAction(tools_use_proxy_item_);
tools_proxy_settings_item_ = new QAction(this);
Menu::conform_item(tools_proxy_settings_item_, "proxysettings");
connect(tools_proxy_settings_item_, &QAction::triggered, this, [this]() {
@@ -892,6 +901,7 @@ void MainMenu::retranslate()
tools_add_item_->setText(tr("Add Tool"));
tools_record_item_->setText(tr("Record Tool"));
tools_snapping_item_->setText(tr("Enable Snapping"));
tools_use_proxy_item_->setText(tr("Use Proxy Media"));
tools_proxy_settings_item_->setText(tr("Proxy Settings..."));
tools_preferences_item_->setText(tr("Preferences"));
tools_add_item_menu_->setTitle(tr("Add Tool Item"));