Commit f21dfc57 authored by 16이상민's avatar 16이상민

Extract class because class 'CoordinateMapperManager' has more than 2 features.

Create module because class 'SourceBuffer' and class 'KinectAccessManager' access
Since I have extracted the class, correct the test code for class 'SourceBuffer'
Create the test code for class 'KinectAccessManager'
parent 36e20b59
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using KinectModule;
public class KinectAccessManagerTests
{
KinectAccessManager _KinectAccessManager = new KinectAccessManager();
[Test]
public void KinectAccessManagerTestsSimplePasses()
{
// Use the Assert class to test conditions.
_KinectAccessManager.Access();
Assert.IsTrue(_KinectAccessManager.IsAccess, "Kinect Access Error.");
_KinectAccessManager.Dispose();
Assert.IsFalse(_KinectAccessManager.IsAccess, "Kinect Dispose Error.");
}
// A UnityTest behaves like a coroutine in PlayMode
// and allows you to yield null to skip a frame in EditMode
[UnityTest]
public IEnumerator KinectAccessManagerTestsWithEnumeratorPasses()
{
// Use the Assert class to test conditions.
// yield to skip a frame
yield return null;
}
}
fileFormatVersion: 2
guid: 815a622fd2160ac4c9f35d4d3954c0a0
timeCreated: 1515328105
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
......@@ -3,9 +3,11 @@ using NUnit.Framework;
using System.Collections;
using Windows.Kinect;
using System.Runtime.InteropServices;
using KinectModule;
public class SourceBufferTests
{
KinectAccessManager _KinectAccessManager = new KinectAccessManager();
SourceBuffer _SourceBuffer = new SourceBuffer();
[Test]
......@@ -13,29 +15,18 @@ public class SourceBufferTests
{
// Use the Assert class to test conditions.
var sensor = KinectSensor.GetDefault();
Assert.IsNotNull(sensor, "No ready kinect found.");
sensor.Open();
Assert.IsTrue(sensor.IsOpen, "Kinect sensor has problem.");
var coordinateMapper = sensor.CoordinateMapper;
using (var sourceFrameReader = sensor.OpenMultiSourceFrameReader(
FrameSourceTypes.Color |
FrameSourceTypes.Depth |
FrameSourceTypes.BodyIndex |
FrameSourceTypes.Body))
{
while (sourceFrameReader == null) ;
var sourceFrame = sourceFrameReader.AcquireLatestFrame();
_KinectAccessManager.Access();
Assert.IsTrue(_KinectAccessManager.IsAccess, "Kinect Access Error.");
var sourceFrame = _KinectAccessManager.SourceFrame;
_SourceBuffer.UpdateBuffers(sourceFrame);
ColorBufferTest(sourceFrame);
BodyIndexBufferTest(sourceFrame);
}
DepthBufferTest(sourceFrame);
BodyBufferTest(sourceFrame);
sensor.Close();
_KinectAccessManager.Dispose();
}
private void ColorBufferTest(MultiSourceFrame sourceFrame)
......@@ -66,7 +57,7 @@ public class SourceBufferTests
Assert.AreEqual(bodyIndexBuffer, _SourceBuffer.BodyIndexBuffer, "BodyIndexBufferTest failed.");
}
private void UpdateDepthBuffer(MultiSourceFrame sourceFrame)
private void DepthBufferTest(MultiSourceFrame sourceFrame)
{
var depthBuffer = new ushort[SourceBuffer.DepthWidth * SourceBuffer.DepthHeight];
using (var depthFrame = sourceFrame.DepthFrameReference.AcquireFrame())
......@@ -80,7 +71,7 @@ public class SourceBufferTests
Assert.AreEqual(depthBuffer, _SourceBuffer.DepthBuffer, "DepthBufferTest failed.");
}
private void UpdateBodyBuffer(MultiSourceFrame sourceFrame)
private void BodyBufferTest(MultiSourceFrame sourceFrame)
{
var bodyBuffer = new Body[SourceBuffer.BodyCount];
using (var bodyFrame = sourceFrame.BodyFrameReference.AcquireFrame())
......
using UnityEngine;
using Windows.Kinect;
using System.Runtime.InteropServices;
using System;
public class CoordinateMapperManager : MonoBehaviour
{
private KinectSensor _Sensor;
private CoordinateMapper _CoordinateMapper;
private MultiSourceFrameReader _SourceFrameReader;
private DepthSpacePoint[] _DepthCoordinates;
private SourceBuffer _SourceBuffer;
private KinectModule.SourceBuffer _SourceBuffer;
private KinectModule.KinectAccessManager _KinectAccessManager;
long frameCount = 0;
......@@ -31,11 +30,11 @@ public class CoordinateMapperManager : MonoBehaviour
void Awake()
{
_ColorRGBX = new Texture2D (SourceBuffer.ColorWidth, SourceBuffer.ColorHeight, TextureFormat.RGBA32, false);
_ColorRGBX = new Texture2D (KinectModule.SourceBuffer.ColorWidth, KinectModule.SourceBuffer.ColorHeight, TextureFormat.RGBA32, false);
_DepthCoordinates = new DepthSpacePoint[SourceBuffer.ColorWidth * SourceBuffer.ColorHeight];
_DepthCoordinates = new DepthSpacePoint[KinectModule.SourceBuffer.ColorWidth * KinectModule.SourceBuffer.ColorHeight];
InitializeDefaultSensor ();
_KinectAccessManager.Access();
}
void OnGUI ()
......@@ -46,39 +45,12 @@ public class CoordinateMapperManager : MonoBehaviour
GUI.Box (new Rect(10, 50, 200, 30), "NULL MSFR Frame");
}
void InitializeDefaultSensor()
{
_Sensor = KinectSensor.GetDefault();
if (_Sensor == null)
{
//TODO: Popup Modal Window
Debug.LogError("No ready Kinect found!");
Application.Quit();
}
_CoordinateMapper = _Sensor.CoordinateMapper;
_Sensor.Open();
if (!_Sensor.IsOpen)
{
//TODO: Popup Modal Window
Debug.LogError("Kinect sensor has problem!");
Application.Quit();
}
_SourceFrameReader = _Sensor.OpenMultiSourceFrameReader(
FrameSourceTypes.Color |
FrameSourceTypes.Depth |
FrameSourceTypes.BodyIndex |
FrameSourceTypes.Body);
}
void ProcessFrame()
{
var DepthData = GCHandle.Alloc(_SourceBuffer.DepthBuffer, GCHandleType.Pinned);
var pDepthCoordinatesData = GCHandle.Alloc(_DepthCoordinates, GCHandleType.Pinned);
_CoordinateMapper.MapColorFrameToDepthSpaceUsingIntPtr(
_KinectAccessManager.CoordinateMapper.MapColorFrameToDepthSpaceUsingIntPtr(
DepthData.AddrOfPinnedObject(),
(uint)_SourceBuffer.DepthBuffer.Length * sizeof(ushort),
pDepthCoordinatesData.AddrOfPinnedObject(),
......@@ -107,10 +79,7 @@ public class CoordinateMapperManager : MonoBehaviour
{
GetFPS();
if (_SourceFrameReader == null)
return;
var sourceFrame = _SourceFrameReader.AcquireLatestFrame();
var sourceFrame = _KinectAccessManager.SourceFrame;
if ((nullFrame = sourceFrame == null))
return;
......@@ -123,22 +92,14 @@ public class CoordinateMapperManager : MonoBehaviour
{
_DepthCoordinates = null;
if (_SourceFrameReader != null)
{
_SourceFrameReader.Dispose();
_SourceFrameReader = null;
}
if (_Sensor != null)
{
_Sensor.Close();
_Sensor = null;
}
_KinectAccessManager.Dispose();
}
}
public class SourceBuffer
namespace KinectModule
{
public class SourceBuffer
{
public const int DepthWidth = 512;
public const int DepthHeight = 424;
public const int ColorWidth = 1920;
......@@ -161,10 +122,10 @@ public class SourceBuffer
public void UpdateBuffers(MultiSourceFrame sourceFrame)
{
UpdateColorBuffer (sourceFrame);
UpdateColorBuffer(sourceFrame);
UpdateBodyIndexBuffer(sourceFrame);
UpdateDepthBuffer (sourceFrame);
UpdateBodyBuffer (sourceFrame);
UpdateDepthBuffer(sourceFrame);
UpdateBodyBuffer(sourceFrame);
}
private void UpdateColorBuffer(MultiSourceFrame sourceFrame)
......@@ -206,4 +167,93 @@ public class SourceBuffer
if (bodyFrame != null)
bodyFrame.GetAndRefreshBodyData(_BodyBuffer);
}
}
public class KinectAccessManager : IDisposable
{
private KinectSensor _Sensor;
private CoordinateMapper _CoordinateMapper;
private MultiSourceFrameReader _SourceFrameReader;
private bool _IsSensorOpen = false;
private bool _IsFrameReaderOpen = false;
public bool IsAccess
{ get { return _IsSensorOpen && _IsFrameReaderOpen; } }
public CoordinateMapper CoordinateMapper
{ get { return IsAccess ? _CoordinateMapper : null; } }
public MultiSourceFrame SourceFrame
{ get { return IsAccess ? _SourceFrameReader.AcquireLatestFrame() : null; } }
public void Access()
{
OpenSensor();
OpenFrameReader();
_CoordinateMapper = _Sensor.CoordinateMapper;
}
private void OpenSensor()
{
if (_IsSensorOpen)
return;
_Sensor = KinectSensor.GetDefault();
if (_Sensor == null)
{
//TODO: Popup Modal Window
Debug.LogError("No ready Kinect found!");
return;
}
_Sensor.Open();
if (!_Sensor.IsOpen)
{
//TODO: Popup Modal Window
Debug.LogError("Kinect sensor has problem!");
CloseSensor();
return;
}
_IsSensorOpen = true;
}
private void OpenFrameReader()
{
if (_IsFrameReaderOpen)
return;
_SourceFrameReader = _Sensor.OpenMultiSourceFrameReader(
FrameSourceTypes.Color |
FrameSourceTypes.Depth |
FrameSourceTypes.BodyIndex |
FrameSourceTypes.Body);
_IsSensorOpen = (_SourceFrameReader != null);
}
public void Dispose()
{
CloseFrameReader();
CloseSensor();
}
private void CloseSensor()
{
if (_IsSensorOpen)
{
_Sensor.Close();
_IsSensorOpen = false;
}
}
private void CloseFrameReader()
{
if (_IsFrameReaderOpen)
{
_SourceFrameReader.Dispose();
_IsFrameReaderOpen = false;
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment