private void HandleEvent(EventType eventType, KStudioEvent eventObj, EventTypePluginData data) { Debug.Assert(data != null); if (eventObj != null) { if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Body) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.BodyMonitor)) { lock (this.lockObj) { data.sharedBodyFrame = eventObj.GetRetainableEventDataBuffer(); uint bufferSize; IntPtr bufferPtr; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out bufferPtr); if (Marshal.SizeOf(typeof(nui.BODY_FRAME)) == bufferSize) { data.body.UpdateData(bufferPtr); data.bodiesValid = true; } } } } }
public void HandleEvent(EventType eventType, KStudioEvent eventObj) { if ((eventType == EventType.Monitor) && (eventObj != null)) { if ((eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.SystemAudio) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.SystemAudioMonitor) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.TitleAudio) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.TitleAudioMonitor)) { lock (this.lockObj) { this.sharedAudioFrame = null; this.beamConfidence = 0.0f; this.beamAngle = 0.0f; this.frameTime = TimeSpan.Zero; uint bufferSize; IntPtr bufferPtr; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out bufferPtr); if (bufferSize >= cAudioFrameSizeMinimum) { this.sharedAudioFrame = eventObj.GetRetainableEventDataBuffer(); this.frameTime = eventObj.RelativeTime; unsafe { nui.AUDIO_FRAME * pFrame = (nui.AUDIO_FRAME *)bufferPtr.ToPointer(); nui.AUDIO_SUBFRAME * pSubFrame = &(pFrame->FirstSubFrame); nui.AUDIO_BEAM_FRAME_HEADER *pBeamHeader = &(pSubFrame->BeamFrameHeader); this.beamConfidence = pBeamHeader->BeamAngleConfidence; this.beamAngle = pBeamHeader->BeamAngle; for (int i = 0; i < pFrame->SubFrameCount; ++i) { UpdateChartSubFrame(pSubFrame + i); } } } } } } }
// instance for accessory should be locked private static void HandleEvent(KStudioEvent eventObj, viz.Accessory accessory) { if (eventObj != null) { if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Body) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.BodyMonitor)) { if (accessory != null) { uint bufferSize; IntPtr bufferPtr; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out bufferPtr); if (bufferSize >= AccessoryPlugin.cMinimumBodyFrameSize) { viz.Vector floorPlane; viz.Vector upVector; unsafe { float *pFloats = (float *)((bufferPtr + AccessoryPlugin.cFloorClipPlaneOffset).ToPointer()); if (pFloats[3] == 0.0f) { // if W is 0, assume no real floor plane floorPlane = new viz.Vector(0.0f, 0.0f, 0.0f, 0.0f); } else { floorPlane = new viz.Vector(pFloats[0], pFloats[1], pFloats[2], pFloats[3]); } pFloats = (float *)((bufferPtr + AccessoryPlugin.cUpVectorOffset).ToPointer()); upVector = new viz.Vector(0.0f, 0.0f, 0.0f, 0.0f); // never use up vector for visualizing the floor accessory.UpdateFloorPlaneAndUpVector(floorPlane, upVector); } } } } } }
public void HandleEvent(EventType eventType, KStudioEvent eventObj) { DebugHelper.AssertUIThread(); EventTypePluginData data = null; switch (eventType) { case EventType.Monitor: data = this.monitorData; break; case EventType.Inspection: data = this.inspectionData; break; } if ((eventObj != null) && (data != null)) { if ((eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.Calibration) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.CalibrationMonitor)) { if (data.registration != null) { data.registration.Dispose(); data.registration = null; } uint bufferSize; IntPtr buffer; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out buffer); data.registration = new nui.Registration(buffer, bufferSize); } else if (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.SystemInfo) { if (data.registration != null) { data.registration.Dispose(); data.registration = null; } uint bufferSize; IntPtr buffer; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out buffer); if (this.depthIrEngine != null) { data.registration = this.depthIrEngine.GetCalibrationFromSysInfo(buffer, bufferSize); } } if (this.plugins != null) { foreach (IEventHandlerPlugin eventHandlerPlugin in this.plugins.OfType <IEventHandlerPlugin>()) { eventHandlerPlugin.HandleEvent(eventType, eventObj); } } } }
public static HGlobalBuffer GetRetainableEventDataBuffer(this KStudioEvent eventObj) { HGlobalBuffer value = null; if (eventObj != null) { lock (KStudioEventExtensions.buffers) { // this list should be short (at max a couple dozen); if it starts to get longer than that, // something is probably saving more large raw event data than it should be or the GC isn't kicking in. Debug.Assert(KStudioEventExtensions.buffers.Count < 100); List <int> toRemove = new List <int>(); for (int i = 0; i < KStudioEventExtensions.buffers.Count; ++i) { WeakReferenceTuple tuple = KStudioEventExtensions.buffers[i]; KStudioEvent eventKey; if (tuple.EventReference.TryGetTarget(out eventKey)) { HGlobalBuffer bufferValue; if (tuple.BufferReference.TryGetTarget(out bufferValue)) { if (eventKey == eventObj) { value = bufferValue; break; } } else { toRemove.Insert(0, i); } } else { toRemove.Insert(0, i); } } foreach (int i in toRemove) { KStudioEventExtensions.buffers.RemoveAt(i); } if (value == null) { uint bufferSize; IntPtr buffer; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out buffer); if (bufferSize != 0) { value = new HGlobalBuffer(bufferSize); UnsafeNativeMethods.RtlMoveMemory(value.Buffer, buffer, bufferSize); WeakReferenceTuple newTuple = new WeakReferenceTuple(eventObj, value); KStudioEventExtensions.buffers.Insert(0, newTuple); } } } } return(value); }
public void HandleEvent(EventType eventType, KStudioEvent eventObj) { if ((eventType == EventType.Monitor) && (eventObj != null)) { if ((eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.SystemAudio) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.SystemAudioMonitor) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.TitleAudio) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.TitleAudioMonitor)) { lock (this.lockObj) { this.sharedAudioFrame = null; this.beamConfidence = 0.0f; this.beamAngle = 0.0f; this.frameTime = TimeSpan.Zero; uint bufferSize; IntPtr bufferPtr; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out bufferPtr); if (bufferSize >= cAudioFrameSizeMinimum) { this.sharedAudioFrame = eventObj.GetRetainableEventDataBuffer(); this.frameTime = eventObj.RelativeTime; unsafe { nui.AUDIO_FRAME* pFrame = (nui.AUDIO_FRAME*)bufferPtr.ToPointer(); nui.AUDIO_SUBFRAME* pSubFrame = &(pFrame->FirstSubFrame); nui.AUDIO_BEAM_FRAME_HEADER* pBeamHeader = &(pSubFrame->BeamFrameHeader); this.beamConfidence = pBeamHeader->BeamAngleConfidence; this.beamAngle = pBeamHeader->BeamAngle; for (int i = 0; i < pFrame->SubFrameCount; ++i) { UpdateChartSubFrame(pSubFrame + i); } } } } } } }
// instance for accessory should be locked private static void HandleEvent(KStudioEvent eventObj, viz.Accessory accessory) { if (eventObj != null) { if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Body) || (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.BodyMonitor)) { if (accessory != null) { uint bufferSize; IntPtr bufferPtr; eventObj.AccessUnderlyingEventDataBuffer(out bufferSize, out bufferPtr); if (bufferSize >= AccessoryPlugin.cMinimumBodyFrameSize) { viz.Vector floorPlane; viz.Vector upVector; unsafe { float* pFloats = (float*)((bufferPtr + AccessoryPlugin.cFloorClipPlaneOffset).ToPointer()); if (pFloats[3] == 0.0f) { // if W is 0, assume no real floor plane floorPlane = new viz.Vector(0.0f, 0.0f, 0.0f, 0.0f); } else { floorPlane = new viz.Vector(pFloats[0], pFloats[1], pFloats[2], pFloats[3]); } pFloats = (float*)((bufferPtr + AccessoryPlugin.cUpVectorOffset).ToPointer()); upVector = new viz.Vector(0.0f, 0.0f, 0.0f, 0.0f); // never use up vector for visualizing the floor accessory.UpdateFloorPlaneAndUpVector(floorPlane, upVector); } } } } } }