- config moves into oakcommon as ConfigStore + oakcommon_config_* C
API (INI storage, typed entries, error-handler injection); node and
render call sites keep OAK_CONFIG() macro shape via a local shim
that forwards to the C API; transition config stubs removed
- oakaudio: de-Qt all six classes, C ABI in include/audio with
refcounted handles (processor/manager/waveform/levelmeter/sync,
48 functions); PreviewAudioDevice moved in from render; recording
goes through oakcodec encoder; waveform extract uses probe +
ffmpeg_bridge decode (decode_audio needs M8 task system)
- fix re_sum_samples min/max init bug (values clamped to 0 for
same-sign ranges)
- every C API function has positive + error-path tests; suites:
oakcommon 193, oakaudio 36, oaknode 96, oakrender 42, oakcodec 18
- de-Qt all classes under src/common (std::string/vector/mutex,
std::filesystem, expat-based XmlStreamReader/Writer)
- add pure C ABI in include/common + src/common/c_api: opaque handles,
init returns NULL on failure, free(NULL) is a no-op, out-params with
negative OAKCOMMON_E_* error codes (include/common/error.h)
- remove single-consumer classes from oakcommon (html, jobtime,
otioutils, playbackaudioclock, tohex, util, avframeptr,
crashpadinterface/crashpadutils, autoscroll, digit, range); their
destinations are recorded in docs/zh/plans/riir/notes.md
- add gtest suites under src/common/tests (127 cases), standalone
build driver in src/common/standalone