Preview windows changes
This commit is contained in:
@@ -11,6 +11,6 @@
|
||||
"autoReload": true,
|
||||
"maxTemporalHistoryFrames": 12,
|
||||
"previewEnabled": true,
|
||||
"previewFps": 30,
|
||||
"previewFps": 59.94,
|
||||
"enableExternalKeying": true
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ Currently consumed fields:
|
||||
- `previewFps`
|
||||
- `enableExternalKeying`
|
||||
|
||||
When `previewEnabled` is true, the preview window runs on `PreviewWindowThread`. It paints BGRA8 system-memory frames with Win32/GDI after render readback has already completed, so it does not bind GL and does not consume frames from DeckLink output.
|
||||
When `previewEnabled` is true, the preview window runs on `PreviewWindowThread`. It paints BGRA8 system-memory frames with Win32/GDI after render readback has already completed, so it does not bind GL and does not consume frames from DeckLink output. `previewFps` controls the preview repaint cadence; the default is 60 fps and `config/runtime-host.json` tracks the shipped 59.94 output cadence.
|
||||
|
||||
The loaded config is treated as a read-only startup snapshot. Subsystems that need config should receive this snapshot or a narrowed config struct from app orchestration; they should not reload files independently.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
namespace RenderCadenceCompositor
|
||||
{
|
||||
constexpr double kDefaultPreviewFps = 30.0;
|
||||
constexpr double kDefaultPreviewFps = 60.0;
|
||||
constexpr double kMinimumPreviewFps = 1.0;
|
||||
|
||||
struct PreviewWindowConfig
|
||||
|
||||
@@ -210,6 +210,10 @@ void PreviewWindowThread::Paint(HWND window)
|
||||
frame.height > 0;
|
||||
if (canPaintFrame)
|
||||
{
|
||||
const int previousStretchMode = SetStretchBltMode(dc, HALFTONE);
|
||||
POINT previousBrushOrigin = {};
|
||||
SetBrushOrgEx(dc, 0, 0, &previousBrushOrigin);
|
||||
|
||||
BITMAPINFO bitmapInfo = {};
|
||||
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
bitmapInfo.bmiHeader.biWidth = static_cast<LONG>(frame.width);
|
||||
@@ -232,6 +236,10 @@ void PreviewWindowThread::Paint(HWND window)
|
||||
&bitmapInfo,
|
||||
DIB_RGB_COLORS,
|
||||
SRCCOPY);
|
||||
|
||||
if (previousStretchMode != 0)
|
||||
SetStretchBltMode(dc, previousStretchMode);
|
||||
SetBrushOrgEx(dc, previousBrushOrigin.x, previousBrushOrigin.y, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -99,7 +99,7 @@ void TestPreviewDefaultsAreOptIn()
|
||||
|
||||
const AppConfig config = DefaultAppConfig();
|
||||
Expect(!config.previewEnabled, "preview is disabled by default");
|
||||
Expect(config.previewFps == 30.0, "preview fps default is 30");
|
||||
Expect(config.previewFps == 60.0, "preview fps default is 60");
|
||||
}
|
||||
|
||||
void TestHelpers()
|
||||
|
||||
@@ -19,6 +19,7 @@ void TestTimerIntervalUsesConfiguredFps()
|
||||
{
|
||||
Expect(RenderCadenceCompositor::PreviewTimerIntervalMilliseconds(25.0) == 40, "25 fps maps to 40 ms");
|
||||
Expect(RenderCadenceCompositor::PreviewTimerIntervalMilliseconds(50.0) == 20, "50 fps maps to 20 ms");
|
||||
Expect(RenderCadenceCompositor::PreviewTimerIntervalMilliseconds(59.94) == 16, "59.94 fps maps to 16 ms");
|
||||
}
|
||||
|
||||
void TestInvalidFpsUsesDefault()
|
||||
|
||||
Reference in New Issue
Block a user