SHA256
Implement Filter-Before-Capture Structure
This commit is contained in:
1 parent
379c0360d7
commit
ec06f99603
4 files changed
+70
-38
No files matched your search
+21
-12
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user