Skip to content

Commit 52b0c60

Browse files
committed
Update all simd conversion functions to have a scalar and vector path for all architectures. Revert the indi wait for change calls added in a previous commit.
1 parent 451de96 commit 52b0c60

10 files changed

Lines changed: 426 additions & 558 deletions

File tree

src/LumiSky.Core/Devices/IndiCamera.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public void Disconnect()
113113

114114
// Transfer format and binning are common for all indi camera devices.
115115
tasks.Add(_device.Change("CCD_TRANSFER_FORMAT", [("FORMAT_FITS", true), ("FORMAT_NATIVE", false)]));
116-
tasks.Add(_device.WaitForChange("CCD_TRANSFER_FORMAT", token: token));
117116
tasks.Add(SetBinning(parameters.Binning, token));
118117
tasks.Add(SetGain(parameters.Gain, token));
119118
tasks.Add(SetOffset(parameters.Offset, token));
@@ -246,10 +245,10 @@ private async Task SetValueFromMapping(string mapping, double value, Cancellatio
246245
{
247246
var clampedValue = Math.Clamp(value, field.Min, field.Max);
248247
await _device.Change(parameterName, [(fieldName, clampedValue)], token: token);
249-
await _device.WaitForChange(parameterName, token: token);
250248
}
251249
}
252250
}
251+
catch (OperationCanceledException) { }
253252
catch (Exception e)
254253
{
255254
Log.Warning(e, "Could not set mapping {Mapping} to {Value}", mapping, value);
@@ -281,7 +280,6 @@ private async Task SetBinning(int binning, CancellationToken token)
281280
var max = fields["HOR_BIN"].Max;
282281
var value = Math.Clamp(binning, min, max);
283282
await _device.Change("CCD_BINNING", [("HOR_BIN", value), ("VER_BIN", value)], token: token);
284-
await _device.WaitForChange("CCD_BINNING", token: token);
285283
}
286284

287285
private async Task SetCustomProperties(CancellationToken token)
@@ -306,7 +304,6 @@ private async Task SetCustomProperties(CancellationToken token)
306304
.ToList();
307305

308306
tasks.Add(_device.Change(group.Key, valuesToSend, timeout: TimeSpan.FromSeconds(1), token: token));
309-
tasks.Add(_device.WaitForChange(group.Key, token: token));
310307
}
311308

312309
await Task.WhenAll(tasks);

src/LumiSky.Core/Imaging/AllSkyImage.Extensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static Mat To8BitMat(this AllSkyImage image)
3030
if (image.Channels == 1)
3131
{
3232
using var data = new Memory2D<byte>(image.Width, image.Height);
33-
ImagingUtil.NormalizedFloatToUInt8(image.Data.GetSpan(), data.GetSpan());
33+
ImagingUtil.FloatToUInt8(image.Data.GetSpan(), data.GetSpan());
3434

3535
unsafe
3636
{
@@ -68,7 +68,7 @@ public static Mat To8BitMat(this AllSkyImage image)
6868
// and LumiSky is a contiguous block with no padding.
6969
var srcSpan = image.Data.GetRowSpan(y, c);
7070
var dstSpan = matSpan.Slice(y * mats[c].Width, mats[c].Width);
71-
ImagingUtil.NormalizedFloatToUInt8(srcSpan, dstSpan);
71+
ImagingUtil.FloatToUInt8(srcSpan, dstSpan);
7272
}
7373
}
7474
}
@@ -126,7 +126,7 @@ public static unsafe void FromMat(this AllSkyImage image, Mat mat)
126126
// and LumiSky is a contiguous block with no padding.
127127
var srcSpan = matSpan.Slice(y * mat.Width, mat.Width);
128128
var dstSpan = image.Data.GetRowSpan(y);
129-
ImagingUtil.UInt16ToNormalizedFloat(srcSpan, dstSpan);
129+
ImagingUtil.UInt16ToFloat(srcSpan, dstSpan);
130130
}
131131
}
132132
else if (mat.ElementSize == sizeof(byte))
@@ -138,7 +138,7 @@ public static unsafe void FromMat(this AllSkyImage image, Mat mat)
138138
// and LumiSky is a contiguous block with no padding.
139139
var srcSpan = matSpan.Slice(y * mat.Width, mat.Width);
140140
var dstSpan = image.Data.GetRowSpan(y);
141-
ImagingUtil.UInt8ToNormalizedFloat(srcSpan, dstSpan);
141+
ImagingUtil.UInt8ToFloat(srcSpan, dstSpan);
142142
}
143143
}
144144
else
@@ -185,7 +185,7 @@ public static unsafe void FromMat(this AllSkyImage image, Mat mat)
185185
// and LumiSky is a contiguous block with no padding.
186186
var srcSpan = matSpan.Slice(y * mats[c].Width, mats[c].Width);
187187
var dstSpan = image.Data.GetRowSpan(y, c);
188-
ImagingUtil.UInt16ToNormalizedFloat(srcSpan, dstSpan);
188+
ImagingUtil.UInt16ToFloat(srcSpan, dstSpan);
189189
}
190190
}
191191
else if (elementSize == sizeof(byte))
@@ -197,7 +197,7 @@ public static unsafe void FromMat(this AllSkyImage image, Mat mat)
197197
// and LumiSky is a contiguous block with no padding.
198198
var srcSpan = matSpan.Slice(y * mats[c].Width, mats[c].Width);
199199
var dstSpan = image.Data.GetRowSpan(y, c);
200-
ImagingUtil.UInt8ToNormalizedFloat(srcSpan, dstSpan);
200+
ImagingUtil.UInt8ToFloat(srcSpan, dstSpan);
201201
}
202202
}
203203
else

src/LumiSky.Core/Imaging/AllSkyImage.Fits.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,30 +75,30 @@ void SaveFloat32(FitsFile fits)
7575
void SaveUInt8Single(FitsFile fits)
7676
{
7777
using var data = new Memory2D<byte>(Width, Height);
78-
ImagingUtil.NormalizedFloatToUInt8(Data.GetSpan(), data.GetSpan());
78+
ImagingUtil.FloatToUInt8(Data.GetSpan(), data.GetSpan());
7979
fits.Write(data);
8080
}
8181

8282
void SaveUInt8Multi(FitsFile fits)
8383
{
8484
using var data = new Memory3D<byte>(Width, Height, Channels);
8585
for (int c = 0; c < Channels; c++)
86-
ImagingUtil.NormalizedFloatToUInt8(Data.GetSpan(c), data.GetSpan(c));
86+
ImagingUtil.FloatToUInt8(Data.GetSpan(c), data.GetSpan(c));
8787
fits.Write(data);
8888
}
8989

9090
void SaveUInt16Single(FitsFile fits)
9191
{
9292
using var data = new Memory2D<ushort>(Width, Height);
93-
ImagingUtil.NormalizedFloatToUInt16(Data.GetSpan(), data.GetSpan());
93+
ImagingUtil.FloatToUInt16(Data.GetSpan(), data.GetSpan());
9494
fits.Write(data);
9595
}
9696

9797
void SaveUInt16Multi(FitsFile fits)
9898
{
9999
using var data = new Memory3D<ushort>(Width, Height, Channels);
100100
for (int c = 0; c < Channels; c++)
101-
ImagingUtil.NormalizedFloatToUInt16(Data.GetSpan(c), data.GetSpan(c));
101+
ImagingUtil.FloatToUInt16(Data.GetSpan(c), data.GetSpan(c));
102102
fits.Write(data);
103103
}
104104
}
@@ -109,7 +109,7 @@ private unsafe static AllSkyImage ReadUInt8SingleChannel(FitsFile fits)
109109
var image = new AllSkyImage(data.Width, data.Height);
110110
var src = data.GetSpan();
111111
var dst = image.Data.GetSpan();
112-
ImagingUtil.UInt8ToNormalizedFloat(src, dst);
112+
ImagingUtil.UInt8ToFloat(src, dst);
113113
return image;
114114
}
115115

@@ -122,7 +122,7 @@ private unsafe static AllSkyImage ReadUInt8MultiChannel(FitsFile fits)
122122
{
123123
var src = data.GetSpan(channel);
124124
var dst = image.Data.GetSpan(channel);
125-
ImagingUtil.UInt8ToNormalizedFloat(src, dst);
125+
ImagingUtil.UInt8ToFloat(src, dst);
126126
}
127127

128128
return image;
@@ -134,7 +134,7 @@ private unsafe static AllSkyImage ReadUInt16SingleChannel(FitsFile fits)
134134
var image = new AllSkyImage(data.Width, data.Height);
135135
var src = data.GetSpan();
136136
var dst = image.Data.GetSpan();
137-
ImagingUtil.UInt16ToNormalizedFloat(src, dst);
137+
ImagingUtil.UInt16ToFloat(src, dst);
138138
return image;
139139
}
140140

@@ -147,7 +147,7 @@ private unsafe static AllSkyImage ReadUInt16MultiChannel(FitsFile fits)
147147
{
148148
var src = data.GetSpan(channel);
149149
var dst = image.Data.GetSpan(channel);
150-
ImagingUtil.UInt16ToNormalizedFloat(src, dst);
150+
ImagingUtil.UInt16ToFloat(src, dst);
151151
}
152152

153153
return image;

src/LumiSky.Core/Imaging/AllSkyImage.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal AllSkyImage(Memory2D<byte> data)
4949
{
5050
ReadOnlySpan<byte> src = data.GetSpan();
5151
Span<float> dst = Data.GetSpan();
52-
ImagingUtil.UInt8ToNormalizedFloat(src, dst);
52+
ImagingUtil.UInt8ToFloat(src, dst);
5353
}
5454

5555
internal AllSkyImage(Memory3D<byte> data)
@@ -59,7 +59,7 @@ internal AllSkyImage(Memory3D<byte> data)
5959
{
6060
ReadOnlySpan<byte> src = data.GetSpan(c);
6161
Span<float> dst = Data.GetSpan(c);
62-
ImagingUtil.UInt8ToNormalizedFloat(src, dst);
62+
ImagingUtil.UInt8ToFloat(src, dst);
6363
}
6464
}
6565

@@ -68,7 +68,7 @@ internal AllSkyImage(Memory2D<ushort> data)
6868
{
6969
ReadOnlySpan<ushort> src = data.GetSpan();
7070
Span<float> dst = Data.GetSpan();
71-
ImagingUtil.UInt16ToNormalizedFloat(src, dst);
71+
ImagingUtil.UInt16ToFloat(src, dst);
7272
}
7373

7474
internal AllSkyImage(Memory3D<ushort> data)
@@ -78,7 +78,7 @@ internal AllSkyImage(Memory3D<ushort> data)
7878
{
7979
ReadOnlySpan<ushort> src = data.GetSpan(c);
8080
Span<float> dst = Data.GetSpan(c);
81-
ImagingUtil.UInt16ToNormalizedFloat(src, dst);
81+
ImagingUtil.UInt16ToFloat(src, dst);
8282
}
8383
}
8484

src/LumiSky.Core/Memory/NativeMemoryAllocator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static IMemoryOwner<T> Allocate(int length)
3030
throw new InvalidOperationException();
3131
#endif
3232
nuint byteCount = (nuint)(length * Unsafe.SizeOf<T>());
33-
void* ptr = NativeMemory.AlignedAlloc(byteCount, Simd.AlignmentSize);
33+
void* ptr = NativeMemory.AlignedAlloc(byteCount, Simd.Constants.AlignmentSize);
3434
NativeMemory.Clear(ptr, byteCount);
3535
return new NativeMemoryAllocator<T>(ptr, length);
3636
}

0 commit comments

Comments
 (0)