internal override void DisableBufferUsage() { BufferUsageDisabled = true; while (VideoBufferInUse || DepthBufferInUse) { BufferReleaseARE.WaitOne(100); } }
internal override void Destroy() { if (!Destroyed) { FPSTimer.Dispose(); XKinect.LED.Color = LEDColor.BlinkGreen; XKinect.Close(); StopARE.Dispose(); BufferReleaseARE.Dispose(); Destroyed = true; } }
void DataReceived(object sender, BaseCamera.DataReceivedEventArgs e) { if (!BufferUsageDisabled) { VideoBufferInUse = true; switch (Mode) { case Modes.IR1024: case Modes.IR480: VideoTextureBuffer.SetData(e.Data.Data); break; case Modes.RGB1024: case Modes.RGB480: case Modes.Depth480: ConvertColorData(e.Data.Data, Prebuffer); VideoTextureBuffer.SetData(Prebuffer); break; } if (Mode != Modes.Depth480) { FrameCounter++; } VideoBufferInUse = false; } else { BufferReleaseARE.Set(); } FrameID++; OnRawFrameIn(e.Data.Data, FrameTypes.Color); if (RawSaveDataNext) { string path = RawSavePath + ".rwc"; try { File.WriteAllBytes(path, e.Data.Data); SendIOEvent(new IOEventArgs(path, true, null)); } catch (Exception t) { SendIOEvent(new IOEventArgs(path, false, t.Message)); } RawSaveDataNext = false; } }
void DepthDataReceived(object sender, BaseCamera.DataReceivedEventArgs e) { if (!BufferUsageDisabled) { DepthBufferInUse = true; switch (Mode) { case Modes.Depth480: if (DepthMeasurementWindow != null) { int x1 = DepthMeasurementWindow.Value.X, y1 = DepthMeasurementWindow.Value.Y; int x2 = DepthMeasurementWindow.Value.Width + x1, y2 = DepthMeasurementWindow.Value.Height + y1; int n, dmax = 10000, w = x2 - x1 + 1, h = y2 - y1 + 1, pos, x; byte[] data = e.Data.Data; for (int i = x1; i <= x2; i++) { n = 0; for (int j = y1; j <= y2; j++) { pos = (j * DepthWidth + i) * 2; x = data[pos + 1] << 8; x += data[pos]; n += x; } n /= h; if (n < dmax) { dmax = n; } } Depth = dmax; DepthCount++; DepthSum += Depth; DepthAverage = (double)DepthSum / DepthCount; } FrameCounter++; DepthTextureBuffer.SetData(e.Data.Data); break; } DepthBufferInUse = false; } else { BufferReleaseARE.Set(); } OnRawFrameIn(e.Data.Data, FrameTypes.Depth); if (RawSaveDepthNext) { string path = RawSavePath + ".rwd"; try { File.WriteAllBytes(path, e.Data.Data); SendIOEvent(new IOEventArgs(path, true, null)); } catch (Exception t) { SendIOEvent(new IOEventArgs(path, false, t.Message)); } RawSaveDepthNext = false; } }