Skip to content

Commit 2602312

Browse files
committed
Ensure transposed buffer data type
1 parent 496951a commit 2602312

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

OpenEphys.Onix/OpenEphys.Onix/AnalogInput.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ public unsafe override IObservable<AnalogInputDataFrame> Generate()
3535
{
3636
var bufferSize = BufferSize;
3737
var dataType = DataType;
38-
var depth = dataType == AnalogIODataType.Volts ? Depth.F32 : Depth.S16;
3938
return Observable.Using(
4039
() => DeviceManager.ReserveDevice(DeviceName),
4140
disposable => disposable.Subject.SelectMany(deviceInfo =>
@@ -48,6 +47,9 @@ public unsafe override IObservable<AnalogInputDataFrame> Generate()
4847
var voltageScale = dataType == AnalogIODataType.Volts
4948
? CreateVoltageScale(bufferSize, ioDeviceInfo.VoltsPerDivision)
5049
: null;
50+
var transposeBuffer = voltageScale != null
51+
? new Mat(AnalogIO.ChannelCount, bufferSize, Depth.S16, 1)
52+
: null;
5153
var analogDataBuffer = new short[AnalogIO.ChannelCount * bufferSize];
5254
var hubSyncCounterBuffer = new ulong[bufferSize];
5355
var clockBuffer = new ulong[bufferSize];
@@ -65,8 +67,9 @@ public unsafe override IObservable<AnalogInputDataFrame> Generate()
6567
analogDataBuffer,
6668
bufferSize,
6769
AnalogIO.ChannelCount,
68-
depth,
69-
voltageScale);
70+
Depth.S16,
71+
voltageScale,
72+
transposeBuffer);
7073
observer.OnNext(new AnalogInputDataFrame(clockBuffer, hubSyncCounterBuffer, analogData));
7174
hubSyncCounterBuffer = new ulong[bufferSize];
7275
clockBuffer = new ulong[bufferSize];

OpenEphys.Onix/OpenEphys.Onix/BufferHelper.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ public static Mat CopyTranspose<TBuffer>(
88
TBuffer[] buffer,
99
int sampleCount,
1010
int channelCount,
11-
Depth depth,
12-
Mat scale = null)
11+
Depth depth)
1312
where TBuffer : unmanaged
1413
{
1514
using var bufferHeader = Mat.CreateMatHeader(
@@ -18,12 +17,34 @@ public static Mat CopyTranspose<TBuffer>(
1817
channelCount,
1918
depth,
2019
channels: 1);
21-
var data = new Mat(bufferHeader.Cols, bufferHeader.Rows, bufferHeader.Depth, 1);
20+
var data = new Mat(bufferHeader.Cols, bufferHeader.Rows, depth, 1);
2221
CV.Transpose(bufferHeader, data);
23-
if (scale != null)
22+
return data;
23+
}
24+
25+
public static Mat CopyTranspose<TBuffer>(
26+
TBuffer[] buffer,
27+
int sampleCount,
28+
int channelCount,
29+
Depth depth,
30+
Mat scale,
31+
Mat transposeBuffer)
32+
where TBuffer : unmanaged
33+
{
34+
if (scale == null)
2435
{
25-
CV.Mul(data, scale, data);
36+
return CopyTranspose(buffer, sampleCount, channelCount, depth);
2637
}
38+
39+
using var bufferHeader = Mat.CreateMatHeader(
40+
buffer,
41+
sampleCount,
42+
channelCount,
43+
depth,
44+
channels: 1);
45+
var data = new Mat(bufferHeader.Cols, bufferHeader.Rows, scale.Depth, 1);
46+
CV.Transpose(bufferHeader, transposeBuffer);
47+
CV.Mul(transposeBuffer, scale, data);
2748
return data;
2849
}
2950
}

0 commit comments

Comments
 (0)