From d00c6074cc14cea7f9d08253fe29b8e56fd04fb7 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Mon, 3 Aug 2026 11:33:38 -0400 Subject: [PATCH] Move FFmpeg runtime to frontend --- docs/PROJECT-STRUCTURE.md | 7 ++++--- docs/remake-architecture-and-roadmap.md | 15 +++++++++++---- .../Age.Engine.Frontend}/FfmpegMovieDecoder.cs | 0 .../Age.Engine.Frontend}/FfmpegMovieNative.cs | 0 .../Properties/AssemblyInfo.cs | 1 + engine/Age.Engine.Tests/Age.Engine.Tests.csproj | 2 -- .../movie-corpus-gate/Age.MovieCorpusGate.csproj | 2 +- 7 files changed, 17 insertions(+), 10 deletions(-) rename {godot => engine/Age.Engine.Frontend}/FfmpegMovieDecoder.cs (100%) rename {godot => engine/Age.Engine.Frontend}/FfmpegMovieNative.cs (100%) diff --git a/docs/PROJECT-STRUCTURE.md b/docs/PROJECT-STRUCTURE.md index f32c35b..8fae564 100644 --- a/docs/PROJECT-STRUCTURE.md +++ b/docs/PROJECT-STRUCTURE.md @@ -119,7 +119,7 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ layout-3 numbered state/history/gfx, DAT/STH pair + BMP codec, │ and profile-owned state │ ├── Age.Engine.Frontend/ platform-neutral frontend support: diagnostics/options, page - │ location, performance logging, movie decoder/runtime contracts, + │ location, performance logging, movie runtime/FFmpeg decoding, │ audio alignment, surface registry, and WAV sanitization │ └── Age.Engine.Text.Windows/ optional exact Windows GDI gray-4 reference backend; kept │ outside the platform-neutral VM/runtime core @@ -156,8 +156,9 @@ through project references rather than compiling duplicate linked sources. The f `PageLocatorState`, `GodotTimelineLog`, `GodotTraceSink`, `StepLimitDiagnosticFormatter`, `GodotVmOptions`, `PerformanceFrameLog`, and `WindowLaunchOptions`. It also owns the internal movie decoder boundary/runtime, audio-timeline alignment, movie-surface registry, and RIFF/WAVE sanitizer; only the `Himegari` and -`Age.Engine.Tests` assemblies receive explicit friend access to that internal API. FFmpeg interop and decoder -implementation remain under `godot/` until their separate ownership slice. +`Age.Engine.Tests` assemblies receive explicit friend access to that internal API. FFmpeg native interop and the +asynchronous/paced decoder also live here; the `Age.MovieCorpusGate` tool receives friend access to the native +frame-source seam and references this project rather than compiling an interop source link. `godot/GodotAdvHost.cs` retains cross-domain host coordination. Its partial-class companion `godot/GodotAdvHost.AdvText.cs` owns live/retained ADV text, surface glyph rasterization and caching, diff --git a/docs/remake-architecture-and-roadmap.md b/docs/remake-architecture-and-roadmap.md index d4a4996..6a1bfeb 100644 --- a/docs/remake-architecture-and-roadmap.md +++ b/docs/remake-architecture-and-roadmap.md @@ -841,6 +841,13 @@ do not mix mechanical moves with semantic changes. in Godot while implementing the moved boundary through that friend access. Both solution builds and runtime validation remain green. + The third bounded build-graph slice moved the unchanged FFmpeg native interop and asynchronous/paced decoder + from `godot/` into `Age.Engine.Frontend`. The two remaining movie test source links and the corpus tool's native + source link were replaced by project references. Friend access now also names only the `Age.MovieCorpusGate` + assembly required by the native frame-source seam; native ABI resolution, decoder pacing, seek/audio behavior, + failure handling, and teardown remain unchanged. Engine, Godot, and corpus-gate builds plus runtime validation + remain green. + 5. **Close repository-policy and storage gaps.** Add an explicit project license, third-party notices and checksums/provenance for committed binaries, consistent editor/build policy, a pinned .NET SDK, and a CI entry point built on the same validation driver. Remove the empty workspace-root `.git` directory and @@ -1195,9 +1202,9 @@ layer's rendering diverges from ADV; save layout. ## 8. Immediate next step Begin step 4 of the **codebase consolidation** maintenance slice: make the build graph express source ownership -without changing behavior. Move `FfmpegMovieNative.cs` and `FfmpegMovieDecoder.cs` from `godot/` into -`Age.Engine.Frontend` next. Replace both test source links and the movie corpus gate's native-source link with -project references, granting narrowly scoped friend access to the corpus-gate assembly while preserving native -ABI, decoder pacing, failure, and teardown behavior. +without changing behavior. Move the reusable `MovieCorpusGate.cs` implementation from +`tools/movie-corpus-gate/` into `Age.Engine.Frontend` next. Leave the tool's `Program.cs` as its command-line entry +point, remove the final test source link, preserve the internal friend boundary, and verify that no production +`.cs` files are compiled through cross-project links. Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does not replace Phase B gameplay validation or the open cross-platform gates. diff --git a/godot/FfmpegMovieDecoder.cs b/engine/Age.Engine.Frontend/FfmpegMovieDecoder.cs similarity index 100% rename from godot/FfmpegMovieDecoder.cs rename to engine/Age.Engine.Frontend/FfmpegMovieDecoder.cs diff --git a/godot/FfmpegMovieNative.cs b/engine/Age.Engine.Frontend/FfmpegMovieNative.cs similarity index 100% rename from godot/FfmpegMovieNative.cs rename to engine/Age.Engine.Frontend/FfmpegMovieNative.cs diff --git a/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs b/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs index 223b7b5..626ea33 100644 --- a/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs +++ b/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Age.Engine.Tests")] +[assembly: InternalsVisibleTo("Age.MovieCorpusGate")] [assembly: InternalsVisibleTo("Himegari")] diff --git a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj index beaa608..4744193 100644 --- a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj +++ b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj @@ -24,8 +24,6 @@ - - diff --git a/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj b/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj index 63b46a3..47a00b0 100644 --- a/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj +++ b/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj @@ -8,6 +8,6 @@ - +