Implement Filter-Before-Capture Structure

This commit is contained in:
copecone committed 2026-05-28 11:33:47 +09:00
1 parent 379c0360d7
commit ec06f99603
4 files changed
+70 -38

No files matched your search

+21 -12
View File
@@ -219,7 +219,10 @@ namespace ADOFAIRenderer.Component
}
PassCount = 0;
IsRenderCancelled = false;
RenderMod.IsRenderCancelled = false;
RenderMod.FrameCountForVideo = 0;
RenderMod.LastVideoFrameIndex = -1;
RenderMod.LastRequestedVideoFrameIndex = -1;
RenderMod.RenderCheck = true;
RenderMod.SkipCount = 0;
EndRequested = false;
@@ -254,17 +257,13 @@ namespace ADOFAIRenderer.Component
{
try
{
var quotient = targetFps / videoFps;
var isMultiple = Math.Abs(quotient - Math.Round(quotient)) < 1e-9;
var workingFps = isMultiple ? videoFps : targetFps;
var videoFFmpeg = new VideoFFmpeg(Configuration.RenderWidth, Configuration.RenderHeight, workingFps, videoFps, selectedCodec);
var effectiveVideoFps = Math.Min(videoFps, targetFps);
var videoFFmpeg = new VideoFFmpeg(Configuration.RenderWidth, Configuration.RenderHeight, effectiveVideoFps, videoFps, selectedCodec);
SetupCaptureDirectory();
videoFFmpeg.Start(_currentOutPath, bitrate);
var num = isMultiple ? (long)Math.Round(quotient) : 1L;
while (true)
{
byte[]? buffer = null;
@@ -273,11 +272,17 @@ namespace ADOFAIRenderer.Component
if (ImageQueue.Count > 0)
{
var firstKey = ImageQueue.Keys[0];
if (firstKey > PassCount && !RenderMod.IsCapturing)
{
PassCount = firstKey;
}
if (firstKey == PassCount)
{
buffer = ImageQueue[firstKey];
ImageQueue.RemoveAt(0);
PassCount += num;
PassCount++;
}
}
}
@@ -293,19 +298,17 @@ namespace ADOFAIRenderer.Component
continue;
}
if (IsRenderCancelled)
if (IsRenderCancelled || RenderMod.IsRenderCancelled)
{
break;
}
if (EndRequested)
{
bool hasMore;
lock (ImageQueue)
if (PassCount > RenderMod.LastRequestedVideoFrameIndex)
{
hasMore = ImageQueue.Count > 0;
break;
}
if (!hasMore) break;
}
Thread.Sleep(1);
@@ -327,6 +330,7 @@ namespace ADOFAIRenderer.Component
{
RenderMod.IsRendering = RenderMod.IsCapturing = false;
IsRenderCancelled = true;
RenderMod.IsRenderCancelled = true;
StopFFmpeg(false);
EndRender();
@@ -335,6 +339,11 @@ namespace ADOFAIRenderer.Component
private void StopFFmpeg(bool success)
{
EndRequested = true;
if (!success)
{
IsRenderCancelled = true;
RenderMod.IsRenderCancelled = true;
}
SkipPressToStart = false;
_renderSetup = false;
if (_escapeHandlerObj)