chore: move CameraView logic to itself

This commit is contained in:
2026-01-23 08:42:58 +03:00
parent 8896629ce2
commit d4e7c300f4
8 changed files with 100 additions and 139 deletions
+31 -5
View File
@@ -72,7 +72,7 @@ class VkRenderer
SType = StructureType.FenceCreateInfo
};
context.Api.CreateFence(context.Device, &fenceInfo, null, out var fence).ThrowOnError();
var (importImage, importMemoryReqirements, importMemory) = ImportImage(fdDup, width, height, stride);
var (exportImage, exportMemoryReqirements, exportMemory) = CreateExportImage(width, height);
@@ -380,6 +380,7 @@ public partial class CameraView : Control
private bool _compositionRequested;
private VkRenderer? _renerer;
private VkImage? _latestImage;
private System.Timers.Timer? _updateTimer;
public CameraView()
{ }
@@ -388,11 +389,40 @@ public partial class CameraView : Control
{
base.OnAttachedToVisualTree(e);
Initialize();
if (!_initialized)
return;
int i = 0;
_updateTimer = new System.Timers.Timer(100)
{
AutoReset = true
};
_updateTimer.Elapsed += async (_, _) =>
{
await Dispatcher.UIThread.InvokeAsync(async () =>
{
var viewModel = DataContext as CameraViewModel;
if (viewModel is null)
return;
var result = await viewModel.CaptureImage(i++);
if (result is not null)
{
var (frameBuffer, streamConfiguration) = result.Value;
if (frameBuffer.Metadata.Status == FrameMetadata.StatusEnum.FrameSuccess)
Update(frameBuffer, streamConfiguration);
}
});
};
_updateTimer.Start();
}
protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e)
{
if (_initialized)
{
_updateTimer?.Stop();
_updateTimer?.Dispose();
Surface?.Dispose();
}
_initialized = false;
base.OnDetachedFromLogicalTree(e);
@@ -425,10 +455,6 @@ public partial class CameraView : Control
_visual.Size = new Vector(Bounds.Width, Bounds.Height);
Update();
}
if (change.Property == DataContextProperty)
{
(DataContext as CameraViewModel)?.Update += (_, ea) => Update(ea.FrameBuffer, ea.StreamConfiguration);
}
base.OnPropertyChanged(change);
}