refactor(plugin): de-Qt oakplugin and wrap it in a pure C ABI

- de-Qt src/plugin/src (olivehost/oliveplugininstance/oliveclip/
  paraminstance/image/pluginprogressreporter); QMessageBox/
  QApplication replaced by facade callbacks
- new C ABI in include/plugin/{error,host,instance}.h with
  refcounted OakPluginInstance value handle
- paraminstance bridges via oaknode C ABI (OakNodeNode value handle,
  oaknode_node_identity registry); undo via oakundo C ABI
- oliveclip textures are OakRenderTexture value handles; oakrender
  gains texture/copier/ticket C API additions
- oaknode gains get_input_at_time/set_input_at_time_undoable/
  node_identity/sequence_from_node/sequence_set_default_parameters/
  find_input_footage
- move avframeptr.h to src/common/src (shared by codec and render)
- node transition pluginSupport stubs bridge the real oakplugin
  headers; all oaknode-building standalone trees add src/plugin and
  link oakplugin into their test binaries
- plugin tests self-sufficient (ipc shim, OfxHost force_load,
  PRE_TEST discovery, OCIO env); timeline standalone gains
  render/c_api
- restore ffmpegdecoder.cpp in src/codec/src/ffmpeg/CMakeLists.txt
  (dropped in 3d004c081, caused jump-to-0 in decoder/encoder tests)

All six standalone trees green: codec 22, audio 40, task 110,
render 49, timeline 121, plugin 100.
This commit is contained in:
2026-08-07 22:18:36 +08:00
parent 0462842f8c
commit fd2111d560
54 changed files with 6014 additions and 324 deletions
+2 -11
View File
@@ -1,12 +1,3 @@
#pragma once
// Transitional stub for engine/pluginSupport/olivehost.h (still Qt-based).
// Only the surface oaknode uses. M9 replaces this with the real plugin
// boundary.
#include <string>
#include "ofxhImageEffectAPI.h"
#include "ofxhPluginCache.h"
namespace olive {
namespace plugin {
inline void load_plugins(const std::string &) {}
}
}
// M9 收尾:桥接到 oakplugin 真身
#include "../../../plugin/src/olivehost.h"
@@ -1,30 +1,3 @@
#pragma once
// Minimal syntax-check stub for engine/pluginSupport/oliveplugininstance.h
// (real header is Qt-based, handled in a later milestone). Not in repo.
#include <memory>
#include "ofxhImageEffect.h"
namespace olive
{
namespace plugin
{
class PluginNode;
}
class OlivePluginInstance : public OFX::Host::ImageEffect::Instance {
public:
void setNode(std::shared_ptr<plugin::PluginNode> node)
{
node_ = node;
}
std::shared_ptr<plugin::PluginNode> node() const
{
return node_;
}
private:
std::shared_ptr<plugin::PluginNode> node_;
};
}
// M9 收尾:桥接到 oakplugin 真身
#include "../../../plugin/src/oliveplugininstance.h"