Skip to content

Commit

Permalink
FloatVectorPacket - replace list by array
Browse files Browse the repository at this point in the history
- list is slow
  • Loading branch information
mgarbade committed Sep 27, 2022
1 parent f743821 commit 69302b1
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace Mediapipe
{
public class FloatVectorPacket : Packet<List<float>>
public class FloatVectorPacket : Packet<float[]>
{
/// <summary>
/// Creates an empty <see cref="FloatVectorPacket" /> instance.
Expand All @@ -25,17 +25,15 @@ public FloatVectorPacket() : base(true) { }
[UnityEngine.Scripting.Preserve]
public FloatVectorPacket(IntPtr ptr, bool isOwner = true) : base(ptr, isOwner) { }

public FloatVectorPacket(List<float> valuesAsList) : base()
public FloatVectorPacket(float[] value) : base()
{
var value = valuesAsList.ToArray();
UnsafeNativeMethods.mp__MakeFloatVectorPacket__PA_i(value, value.Length, out var ptr).Assert();
this.ptr = ptr;
_vectorLength = value.Length;
}

public FloatVectorPacket(List<float> valuesAsList, Timestamp timestamp) : base()
public FloatVectorPacket(float[] value, Timestamp timestamp) : base()
{
var value = valuesAsList.ToArray();
UnsafeNativeMethods.mp__MakeFloatVectorPacket_At__PA_i_Rt(value, value.Length, timestamp.mpPtr, out var ptr).Assert();
GC.KeepAlive(timestamp);
this.ptr = ptr;
Expand All @@ -48,8 +46,10 @@ public FloatVectorPacket At(Timestamp timestamp)
return packet;
}

public override List<float> Get()
public override float[] Get()
{
UnsafeNativeMethods.mp_Packet__GetFloatVector(mpPtr, out var floatFrameVector).Assert();
GC.KeepAlive(this);
if (_vectorLength < 0)
{
throw new InvalidOperationException("The array's length is unknown, set Length first");
Expand All @@ -59,26 +59,18 @@ public override List<float> Get()

unsafe
{
var src = (float*)GetArrayPtr();
var src = (float*)floatFrameVector;

for (var i = 0; i < result.Length; i++)
{
result[i] = *src++;
}
}

return result.ToList();
}

private IntPtr GetArrayPtr()
{
UnsafeNativeMethods.mp_Packet__GetFloatVector(mpPtr, out var floatFrameVector).Assert();
GC.KeepAlive(this);

return floatFrameVector;
return result;
}

public override StatusOr<List<float>> Consume()
public override StatusOr<float[]> Consume()
{
throw new NotSupportedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class FloatVectorPacketTest
[Test]
public void Ctor_ShouldInstantiatePacket_When_CalledWithValue()
{
var floatVector = new List<float>(new float[6] { 10, 11, 12, 13, 14, 15 });
var floatVector = new float[6] { 10, 11, 12, 13, 14, 15 };
using (var packet = new FloatVectorPacket(floatVector))
{
Assert.True(packet.ValidateAsType().Ok());
Expand Down Expand Up @@ -80,7 +80,7 @@ public void At_ShouldReturnNewPacketWithTimestamp()
{
using (var timestamp = new Timestamp(1))
{
var floatVector = new List<float>(new float[6] { 10, 11, 12, 13, 14, 15 });
var floatVector = new float[6] { 10, 11, 12, 13, 14, 15 };
var packet = new FloatVectorPacket(floatVector).At(timestamp);
Assert.AreEqual(floatVector, packet.Get());
Assert.AreEqual(timestamp, packet.Timestamp());
Expand Down

0 comments on commit 69302b1

Please sign in to comment.