Move FFmpeg runtime to frontend

This commit is contained in:
gamer147
2026-08-03 11:33:38 -04:00
parent c5d32b600f
commit d00c6074cc
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, │ layout-3 numbered state/history/gfx, DAT/STH pair + BMP codec,
│ and profile-owned state │ and profile-owned state
│ ├── Age.Engine.Frontend/ platform-neutral frontend support: diagnostics/options, page │ ├── 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 │ audio alignment, surface registry, and WAV sanitization
│ └── Age.Engine.Text.Windows/ optional exact Windows GDI gray-4 reference backend; kept │ └── Age.Engine.Text.Windows/ optional exact Windows GDI gray-4 reference backend; kept
│ outside the platform-neutral VM/runtime core │ 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`, `PageLocatorState`, `GodotTimelineLog`, `GodotTraceSink`, `StepLimitDiagnosticFormatter`, `GodotVmOptions`,
`PerformanceFrameLog`, and `WindowLaunchOptions`. It also owns the internal movie decoder boundary/runtime, `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 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 `Age.Engine.Tests` assemblies receive explicit friend access to that internal API. FFmpeg native interop and the
implementation remain under `godot/` until their separate ownership slice. 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.cs` retains cross-domain host coordination. Its partial-class companion
`godot/GodotAdvHost.AdvText.cs` owns live/retained ADV text, surface glyph rasterization and caching, `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 in Godot while implementing the moved boundary through that friend access. Both solution builds and runtime
validation remain green. 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 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 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 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 ## 8. Immediate next step
Begin step 4 of the **codebase consolidation** maintenance slice: make the build graph express source ownership 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 without changing behavior. Move the reusable `MovieCorpusGate.cs` implementation from
`Age.Engine.Frontend` next. Replace both test source links and the movie corpus gate's native-source link with `tools/movie-corpus-gate/` into `Age.Engine.Frontend` next. Leave the tool's `Program.cs` as its command-line entry
project references, granting narrowly scoped friend access to the corpus-gate assembly while preserving native point, remove the final test source link, preserve the internal friend boundary, and verify that no production
ABI, decoder pacing, failure, and teardown behavior. `.cs` files are compiled through cross-project links.
Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does 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. not replace Phase B gameplay validation or the open cross-platform gates.

View File

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

View File

@@ -24,8 +24,6 @@
<ProjectReference Include="..\Age.Engine\Age.Engine.csproj" /> <ProjectReference Include="..\Age.Engine\Age.Engine.csproj" />
<ProjectReference Include="..\Age.Engine.Frontend\Age.Engine.Frontend.csproj" /> <ProjectReference Include="..\Age.Engine.Frontend\Age.Engine.Frontend.csproj" />
<ProjectReference Include="..\Age.Engine.Text.Windows\Age.Engine.Text.Windows.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" /> <Compile Include="..\..\tools\movie-corpus-gate\MovieCorpusGate.cs" Link="MovieCorpusGate.cs" />
</ItemGroup> </ItemGroup>

View File

@@ -8,6 +8,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\engine\Age.Engine\Age.Engine.csproj" /> <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> </ItemGroup>
</Project> </Project>