-
Notifications
You must be signed in to change notification settings - Fork 1
/
InputProvider.cs
94 lines (80 loc) · 2.55 KB
/
InputProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Timers;
using System.Windows;
using Multitouch.Contracts;
namespace KinectProvider
{
/// <summary>
/// Implementation of the multitouchvista provider interface
/// </summary>
/// <author>Christopher-Eyk Hrabia - www.ceh-photo.de</author>
[AddIn("KinectProvider", Publisher = "Christopher-Eyk Hrabia", Description = "Provides input from Kinect based on OpenNI", Version = VERSION)]
[Export(typeof(IProvider))]
public class InputProvider : IProvider
{
internal const string VERSION = "1.0.0.0";
public event EventHandler<NewFrameEventArgs> NewFrame;
KinectManager deviceManager;
Queue<Contact> contactsQueue;
public InputProvider()
{
contactsQueue = new Queue<Contact>();
SendEmptyFrames = false;
}
public bool SendImageType(ImageType imageType, bool isEnable)
{
return false;
}
public void Start()
{
deviceManager = new KinectManager(this);
}
public void Stop()
{
if (deviceManager != null)
{
deviceManager.Dispose();
deviceManager = null;
}
}
public bool IsRunning
{
get { return deviceManager != null; }
}
/// <summary>
/// Will be called by an updating thread
/// </summary>
public void raiseFrame(long timestamp)
{
lock (contactsQueue)
{
if (SendEmptyFrames || contactsQueue.Count > 0)
{
EventHandler<NewFrameEventArgs> eventHandler = NewFrame;
if (eventHandler != null)
eventHandler(this, new NewFrameEventArgs(timestamp, contactsQueue, null));
contactsQueue.Clear();
}
}
}
internal void EnqueueContact(HandContact contact)
{
lock (contactsQueue)
{
contactsQueue.Enqueue((HandContact)contact.Clone());
}
}
public UIElement GetConfiguration()
{
return new ConfigurationWindow();
}
public bool HasConfiguration
{
get { return true; }
}
public bool SendEmptyFrames { get; set; }
}
}