forked from amkovkov/GranuSightSoftware2
chore: move CameraView logic to itself
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user