diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Framework/PacketGetterExtension.cs b/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Framework/PacketGetterExtension.cs index f7803e1f7..d6deec28c 100644 --- a/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Framework/PacketGetterExtension.cs +++ b/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Framework/PacketGetterExtension.cs @@ -308,7 +308,7 @@ public static void Get(this Packet> packet, List value) foreach (var imagePtr in imageArray.AsReadOnlySpan()) { - value.Add(new Image(imagePtr, false)); + value.Add(new Image(imagePtr, true)); } } diff --git a/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Unity/Annotation/PoseLandmarkerResultAnnotationController.cs b/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Unity/Annotation/PoseLandmarkerResultAnnotationController.cs index 75e635150..874994b2d 100644 --- a/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Unity/Annotation/PoseLandmarkerResultAnnotationController.cs +++ b/Packages/com.github.homuler.mediapipe/Runtime/Scripts/Unity/Annotation/PoseLandmarkerResultAnnotationController.cs @@ -14,6 +14,7 @@ public class PoseLandmarkerResultAnnotationController : AnnotationController annotation.InitMask(maskWidth, maskHeight); @@ -30,7 +31,7 @@ public void DrawNow(PoseLandmarkerResult target) protected void UpdateCurrentTarget(PoseLandmarkerResult newTarget) { - if (IsTargetChanged(newTarget, _currentTarget)) + lock (_currentTargetLock) { newTarget.CloneTo(ref _currentTarget); isStale = true; @@ -39,17 +40,20 @@ protected void UpdateCurrentTarget(PoseLandmarkerResult newTarget) protected override void SyncNow() { - isStale = false; - if (_currentTarget.segmentationMasks != null) + lock (_currentTargetLock) { - ReadMask(_currentTarget.segmentationMasks); - // TODO: stop disposing masks here - foreach (var mask in _currentTarget.segmentationMasks) + isStale = false; + if (_currentTarget.segmentationMasks != null) { - mask.Dispose(); + ReadMask(_currentTarget.segmentationMasks); + // TODO: stop disposing masks here + foreach (var mask in _currentTarget.segmentationMasks) + { + mask.Dispose(); + } } + annotation.Draw(_currentTarget.poseLandmarks, _visualizeZ); } - annotation.Draw(_currentTarget.poseLandmarks, _visualizeZ); } } } diff --git a/mediapipe_api/framework/formats/image.cc b/mediapipe_api/framework/formats/image.cc index f763931c8..656d9f89a 100644 --- a/mediapipe_api/framework/formats/image.cc +++ b/mediapipe_api/framework/formats/image.cc @@ -133,7 +133,7 @@ MpReturnCode mp_Packet__GetImageVector(mediapipe::Packet* packet, mp_api::Struct auto data = new mediapipe::Image*[size]; for (auto i = 0; i < size; ++i) { - data[i] = new mediapipe::Image(std::move(vec[i])); + data[i] = new mediapipe::Image(vec[i].GetImageFrameSharedPtr()); } value_out->data = data; value_out->size = static_cast(size);