Move FFmpeg runtime to frontend

This commit is contained in:
gamer147
2026-08-03 11:33:38 -04:00
parent 81d063da37
commit 728399cb8b
7 changed files with 17 additions and 10 deletions

View File

@@ -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,

View File

@@ -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.

View File

@@ -1,4 +1,5 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Age.Engine.Tests")]
[assembly: InternalsVisibleTo("Age.MovieCorpusGate")]
[assembly: InternalsVisibleTo("Himegari")]

View File

@@ -24,8 +24,6 @@
<ProjectReference Include="..\Age.Engine\Age.Engine.csproj" />
<ProjectReference Include="..\Age.Engine.Frontend\Age.Engine.Frontend.csproj" />
<ProjectReference Include="..\Age.Engine.Text.Windows\Age.Engine.Text.Windows.csproj" />
<Compile Include="..\..\godot\FfmpegMovieNative.cs" Link="FfmpegMovieNative.cs" />
<Compile Include="..\..\godot\FfmpegMovieDecoder.cs" Link="FfmpegMovieDecoder.cs" />
<Compile Include="..\..\tools\movie-corpus-gate\MovieCorpusGate.cs" Link="MovieCorpusGate.cs" />
</ItemGroup>

View File

@@ -8,6 +8,6 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\engine\Age.Engine\Age.Engine.csproj" />
<Compile Include="..\..\godot\FfmpegMovieNative.cs" Link="FfmpegMovieNative.cs" />
<ProjectReference Include="..\..\engine\Age.Engine.Frontend\Age.Engine.Frontend.csproj" />
</ItemGroup>
</Project>