Exemplo n.º 1
0
        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;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Processes and integrates a frame from an XEF file
        /// </summary>
        /// <param name="ev">the depth event recieved from the listener</param>
        public unsafe void ProcessEvent(KStudioEvent ev)
        {
            if (ev.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Depth)
            {
                _logger.Info($"Processing frame new frame...");
                this.FrameSelector.IncrementFrame();
                if (!FrameSelector.IsDesiredFrame)
                {
                    { _logger.Info($"Rejecting frame {FrameSelector.CurrentFrameNum}. Threshold is {FrameSelector.InitialFrame}"); }
                }
                else
                {
                    var pixels = new ushort[KinectSettings.DEPTH_HEIGHT * KinectSettings.DEPTH_WIDTH];
                    fixed(ushort *p = pixels)
                    {
                        IntPtr ptr = (IntPtr)p;

                        ev.CopyEventDataToBuffer((uint)pixels.Length * 2, ptr);
                    }

                    _logger.Info($"Integrating frame {FrameSelector.CurrentFrameNum}...");
                    AddDoseFrame(pixels);
                    _logger.Info($"Processing completed on {FrameSelector.CurrentFrameNum}...");
                }
            }
        }
Exemplo n.º 3
0
        private void HandleEvent(KStudioEvent eventObj, EventTypePluginData data, EventType eventType)
        {
            if ((eventObj != null) && (data != null))
            {
                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.BodyIndex) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.BodyIndexMonitor))
                {
                    bool doDataEvent    = false;
                    bool doVisibleEvent = false;

                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent            = isSelectedData && (newSharedFrame == null) != (data.sharedBodyIndexFrame == null);
                        data.sharedBodyIndexFrame = newSharedFrame;

                        uint newWidth  = nui.Constants.STREAM_BODY_INDEX_WIDTH;
                        uint newHeight = nui.Constants.STREAM_BODY_INDEX_HEIGHT;

                        if ((data.rawBodyIndexTexture == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth  = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            if (context != null)
                            {
                                BodyIndexPlugin.CreateTextures(data, context);
                            }
                        }

                        if (BodyIndexPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData;
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelBodyIndex");
                    }
                }
            }
        }
        public void HandleEvent(EventType eventType, KStudioEvent eventObj)
        {
            switch (eventType)
            {
                case EventType.Monitor:
                    this.HandleEvent(eventType, eventObj, this.monitorData);
                    break;

                case EventType.Inspection:
                    this.HandleEvent(eventType, eventObj, this.inspectionData);
                    break;
            }
        }
Exemplo n.º 5
0
        public void HandleEvent(EventType eventType, KStudioEvent eventObj)
        {
            switch (eventType)
            {
            case EventType.Monitor:
                this.HandleEvent(eventObj, this.monitorData, eventType);
                break;

            case EventType.Inspection:
                this.HandleEvent(eventObj, this.inspectionData, eventType);
                break;
            }
        }
Exemplo n.º 6
0
        private void HandleEvent(KStudioEvent eventObj, EventTypePluginData data, EventType eventType)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.UncompressedColor) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.UncompressedColorMonitor) ||
                    (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.CompressedColor) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.CompressedColorMonitor))
                {
                    lock (this.lockObj)
                    {
                        data.needsUpdate = true;

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();

                        data.visibleChanged = (newSharedFrame == null) != (data.sharedColorFrame == null);

                        data.sharedColorFrame = newSharedFrame;

                        data.doDecompress =
                            (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.CompressedColor) ||
                            (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.CompressedColorMonitor);

                        uint newWidth  = nui.Constants.STREAM_COLOR_WIDTH;
                        uint newHeight = nui.Constants.STREAM_COLOR_HEIGHT;

                        if ((newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth  = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            ColorPlugin.CreateTextures(data, context);
                        }

                        if (!data.timer.IsEnabled)
                        {
                            data.timer.Start();
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        public void HandleEvent(EventType eventType, KStudioEvent eventObj)
        {
            lock (this.lockObj)
            {
                switch (eventType)
                {
                case EventType.Monitor:
                    AccessoryPlugin.HandleEvent(eventObj, this.monitorAccessory);
                    break;

                case EventType.Inspection:
                    AccessoryPlugin.HandleEvent(eventObj, this.inspectionAccessory);
                    break;
                }
            }
        }
Exemplo n.º 8
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Processes and integrates a frame from an XEF file
        /// </summary>
        /// <param name="ev">the depth event recieved from the listener</param>
        public unsafe void ProcessEvent(KStudioEvent ev)
        {
            if (ev.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.UncompressedColor)
            {
                _logger.Info($"Processing frame new frame...");
                this.FrameSelector.IncrementFrame();
                if (!FrameSelector.IsDesiredFrame)
                {
                    { _logger.Info($"Rejecting frame {FrameSelector.CurrentFrameNum}. Threshold is {FrameSelector.InitialFrame}"); }
                }

                //Stored internally as YUY2 format, need to convert to RGBA
                _logger.Info($"Updating last frame {FrameSelector.CurrentFrameNum}...");
                ev.CopyEventDataToArray(_yuy2_image, 0);

                //  UpdateFrame(pixels);
                _logger.Info($"Processing completed on {FrameSelector.CurrentFrameNum}...");
            }
        }
Exemplo n.º 10
0
        // 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);
                            }
                        }
                    }
                }
            }
        }
        private void HandleEvent(KStudioEvent eventObj, EventTypePluginData data, EventType eventType)
        {
            if ((eventObj != null) && (data != null))
            {
                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.BodyIndex) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.BodyIndexMonitor))
                {
                    bool doDataEvent = false;
                    bool doVisibleEvent = false;

                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent =  isSelectedData && (newSharedFrame == null) != (data.sharedBodyIndexFrame == null);
                        data.sharedBodyIndexFrame = newSharedFrame;

                        uint newWidth = nui.Constants.STREAM_BODY_INDEX_WIDTH;
                        uint newHeight = nui.Constants.STREAM_BODY_INDEX_HEIGHT;

                        if ((data.rawBodyIndexTexture == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            if (context != null)
                            {
                                BodyIndexPlugin.CreateTextures(data, context);
                            }
                        }

                        if (BodyIndexPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData; 
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelBodyIndex");
                    }
                }
            }
        }
Exemplo n.º 12
0
        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);
                    }
                }
            }
        }
Exemplo n.º 13
0
        private void HandleEvent(EventType eventType, KStudioEvent eventObj, EventTypePluginData data)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                bool doDataEvent    = false;
                bool doVisibleEvent = false;

                if (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.RawIr)
                {
                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent      = isSelectedData && (newSharedFrame == null) != (data.sharedRawFrame == null);
                        data.sharedRawFrame = newSharedFrame;

                        uint newWidth  = nui.Constants.STREAM_IR_WIDTH;
                        uint newHeight = nui.Constants.STREAM_IR_HEIGHT;

                        if ((data.rawIrTexture == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth  = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;

                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            RawIrPlugin.CreateTextures(data, context);
                        }

                        DepthIrEngine depthIrEngine = this.pluginService.DepthIrEngine;

                        if ((depthIrEngine != null) && (data.depthFrame != null) && (data.irFrame != null))
                        {
                            unsafe
                            {
                                fixed(ushort *pDepthFrame = &data.depthFrame[0], pIrFrame = &data.irFrame[0])
                                {
                                    depthIrEngine.HandleEvent(data.sharedRawFrame.Buffer, data.sharedRawFrame.Size, pDepthFrame, pIrFrame, data.imageWidth, data.imageHeight);

                                    uint imageDataSize = data.imageWidth * data.imageHeight * sizeof(ushort);

                                    if (data.rawIrTexture != null)
                                    {
                                        data.rawIrTexture.UpdateData((byte *)pIrFrame, imageDataSize);
                                    }

                                    if (data.depthMap != null)
                                    {
                                        data.depthMap.UpdateData(pDepthFrame, imageDataSize);
                                    }
                                }
                            }
                        }

                        if (RawIrPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData;
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelIrIntensity");
                        this.RaisePropertyChanged("Selected2DPixelDepth");
                    }
                }
            }
        }
        private void HandleEvent(EventType eventType, KStudioEvent eventObj, EventTypePluginData data)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                bool doDataEvent = false;
                bool doVisibleEvent = false;

                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Depth) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.DepthMonitor))
                {
                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent = isSelectedData && (newSharedFrame == null) != (data.sharedDepthFrame == null);
                        data.sharedDepthFrame = newSharedFrame;

                        uint newWidth = nui.Constants.STREAM_DEPTH_WIDTH;
                        uint newHeight = nui.Constants.STREAM_DEPTH_HEIGHT;

                        if ((data.depthMap == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            data.imageWidth = newWidth;
                            data.imageHeight = newHeight;

                            DepthPlugin.CreateTextures(data, context);
                        }

                        if (data.sharedDepthFrame != null)
                        {
                            unsafe
                            {
                                data.depthMap.UpdateData((ushort*)data.sharedDepthFrame.Buffer, data.sharedDepthFrame.Size);
                            }
                        }

                        if (DepthPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData;
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelDepth");
                    }
                }
            }
        }
        private void HandleEvent(KStudioEvent eventObj, EventTypePluginData data, EventType eventType)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.UncompressedColor) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.UncompressedColorMonitor) ||
                    (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.CompressedColor) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.CompressedColorMonitor))
                {
                    lock (this.lockObj)
                    {
                        data.needsUpdate = true;

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();

                        data.visibleChanged = (newSharedFrame == null) != (data.sharedColorFrame == null);

                        data.sharedColorFrame = newSharedFrame;

                        data.doDecompress =
                            (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.CompressedColor) ||
                            (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.CompressedColorMonitor);

                        uint newWidth = nui.Constants.STREAM_COLOR_WIDTH;
                        uint newHeight = nui.Constants.STREAM_COLOR_HEIGHT;

                        if ((newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            ColorPlugin.CreateTextures(data, context);
                        }

                        if (!data.timer.IsEnabled)
                        {
                            data.timer.Start();
                        }
                    }
                }
            }
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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 WeakReferenceTuple(KStudioEvent eventObj, HGlobalBuffer buffer)
 {
     EventReference = new WeakReference<KStudioEvent>(eventObj);
     BufferReference = new WeakReference<HGlobalBuffer>(buffer);
 }
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 20
0
        public override void Extract(string outputPath)
        {
            KStudioSeekableEventStream         stream  = (KStudioSeekableEventStream)_stream;
            IReadOnlyList <KStudioEventHeader> headers = stream.EventHeaders;

            int frameCount = (int)stream.EventCount;

            double[]  audioTiming    = new double[frameCount];
            const int eventFrameSize = 14432; // Size for a single audio event frame
            const int frameSize      = 1024;  // The size of the actual audio data in an event frame
            int       dataSize       = 0;
            int       bytePos        = 0;

            // DEBUG
            int                missedFrames   = 0;
            double             cumulativeTime = 0;
            double             lDiff          = 0;
            KStudioEventHeader lHeader        = null;

            // END DEBUG

            // Hacky counting of total data size
            for (int i = 0; i < frameCount; i++)
            {
                KStudioEventHeader header = headers[i];
                int    j          = eventFrameSize;
                double missedTime = 0;
                double diff       = header.RelativeTime.TotalMilliseconds;

                /* DEBUG */
                if (lHeader != null)
                {
                    diff = header.RelativeTime.TotalMilliseconds - lHeader.RelativeTime.TotalMilliseconds;
                    if (diff > lDiff)
                    {
                        lDiff = diff;
                    }
                }

                lHeader = header;
                /* END DEBUG */

                do
                {
                    dataSize   += frameSize;
                    j          += eventFrameSize - 16;
                    missedTime += 16;
                } while (j <= (int)header.EventDataSize);

                missedTime      = diff - missedTime;
                cumulativeTime += missedTime;
                while (cumulativeTime > 16)
                {
                    cumulativeTime -= 16;
                    missedFrames++;
                }
            }

            // Calculate additional bytes needed
            //int numBytes = (int) totalMissedTime / 16 * 1024;
            int numBytes = missedFrames * frameSize;

            if (numBytes > 0)
            {
                dataSize += numBytes;
            }

            // DEBUG
            missedFrames   = 0;
            cumulativeTime = 0;
            KStudioEvent lEvent = null;

            // END DEBUG

            byte[] rawAudio = new byte[dataSize];

            for (uint i = 0; i < frameCount; i++)
            {
                int    j          = eventFrameSize;
                var    currEvent  = stream.ReadEvent(i);
                byte[] rawBuffer  = new byte[currEvent.EventDataSize];
                int    offset     = 96;
                double diff       = currEvent.RelativeTime.TotalMilliseconds;
                double missedTime = 0;

                if (lEvent != null)
                {
                    diff = currEvent.RelativeTime.TotalMilliseconds - lEvent.RelativeTime.TotalMilliseconds;
                    if (diff > lDiff)
                    {
                        lDiff = diff;
                    }
                }

                lEvent = currEvent;

                audioTiming[i] = currEvent.RelativeTime.TotalMilliseconds;
                currEvent.CopyEventDataToArray(rawBuffer, 0);

                do
                {
                    Array.Copy(rawBuffer, offset, rawAudio, bytePos, frameSize);
                    bytePos    += frameSize;
                    j          += eventFrameSize - 16;
                    offset     += eventFrameSize - 16;
                    missedTime += 16;
                } while (j <= (int)currEvent.EventDataSize);

                // If there is any missed time, add it here.
                missedTime      = diff - missedTime;
                cumulativeTime += missedTime;
                while (cumulativeTime > 16)
                {
                    cumulativeTime -= 16;
                    missedFrames++;
                    bytePos += frameSize;
                }

                // Update progress
                OnProgressUpdated(new KinectFileProgressChangedEventArgs {
                    Progress   = (int)((float)(i + 1) / frameCount * 100),
                    StatusName = Name
                });
            }

            string filepath = outputPath + "/Kinect_Output";

            Directory.CreateDirectory(filepath);
            File.WriteAllBytes(filepath + "/raw_audio.wav", rawAudio);

            // Write timings
            Utils.WriteTimingToFile(filepath + "/audio_timing.txt", audioTiming);
        }
        public void HandleEvent(EventType eventType, KStudioEvent eventObj)
        {
            lock (this.lockObj)
            {
                switch (eventType)
                {
                    case EventType.Monitor:
                        AccessoryPlugin.HandleEvent(eventObj, this.monitorAccessory);
                        break;

                    case EventType.Inspection:
                        AccessoryPlugin.HandleEvent(eventObj, this.inspectionAccessory);
                        break;
                }
            }
        }
        // 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);
                            }
                        }
                    }
                }
            }
        }
        private void HandleEvent(EventType eventType, KStudioEvent eventObj, EventTypePluginData data)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                bool doDataEvent = false;
                bool doVisibleEvent = false;

                if (eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.RawIr)
                {
                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent = isSelectedData && (newSharedFrame == null) != (data.sharedRawFrame == null);
                        data.sharedRawFrame = newSharedFrame;

                        uint newWidth = nui.Constants.STREAM_IR_WIDTH;
                        uint newHeight = nui.Constants.STREAM_IR_HEIGHT;

                        if ((data.rawIrTexture == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            data.imageWidth = newWidth;
                            data.imageHeight = newHeight;

                            viz.Context context = null;

                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            RawIrPlugin.CreateTextures(data, context);
                        }

                        DepthIrEngine depthIrEngine = this.pluginService.DepthIrEngine;

                        if ((depthIrEngine != null) && (data.depthFrame != null) && (data.irFrame != null))
                        {
                            unsafe
                            {
                                fixed (ushort* pDepthFrame = &data.depthFrame[0], pIrFrame = &data.irFrame[0])
                                {
                                    depthIrEngine.HandleEvent(data.sharedRawFrame.Buffer, data.sharedRawFrame.Size, pDepthFrame, pIrFrame, data.imageWidth, data.imageHeight);

                                    uint imageDataSize = data.imageWidth * data.imageHeight * sizeof(ushort);
                                    if (data.rawIrTexture != null)
                                    {
                                        data.rawIrTexture.UpdateData((byte*)pIrFrame, imageDataSize);
                                    }

                                    if (data.depthMap != null)
                                    {
                                        data.depthMap.UpdateData(pDepthFrame, imageDataSize);
                                    }
                                }
                            }
                        }

                        if (RawIrPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData;
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelIrIntensity");
                        this.RaisePropertyChanged("Selected2DPixelDepth");
                    }
                }
            }
        }
Exemplo n.º 24
0
 public WeakReferenceTuple(KStudioEvent eventObj, HGlobalBuffer buffer)
 {
     EventReference  = new WeakReference <KStudioEvent>(eventObj);
     BufferReference = new WeakReference <HGlobalBuffer>(buffer);
 }
Exemplo n.º 25
0
        private void HandleEvent(EventType eventType, KStudioEvent eventObj, EventTypePluginData data)
        {
            Debug.Assert(data != null);

            if (eventObj != null)
            {
                bool doDataEvent    = false;
                bool doVisibleEvent = false;

                if ((eventObj.EventStreamDataTypeId == KStudioEventStreamDataTypeIds.Depth) ||
                    (eventObj.EventStreamDataTypeId == HackKStudioEventStreamDataTypeIds.DepthMonitor))
                {
                    lock (this.lockObj)
                    {
                        bool isSelectedData = (this.selectedData == data);

                        HGlobalBuffer newSharedFrame = eventObj.GetRetainableEventDataBuffer();
                        doVisibleEvent        = isSelectedData && (newSharedFrame == null) != (data.sharedDepthFrame == null);
                        data.sharedDepthFrame = newSharedFrame;

                        uint newWidth  = nui.Constants.STREAM_DEPTH_WIDTH;
                        uint newHeight = nui.Constants.STREAM_DEPTH_HEIGHT;

                        if ((data.depthMap == null) || (newWidth != data.imageWidth) || (newHeight != data.imageHeight))
                        {
                            viz.Context context = null;
                            if (this.pluginService != null)
                            {
                                context = this.pluginService.GetContext(eventType);
                            }

                            data.imageWidth  = newWidth;
                            data.imageHeight = newHeight;

                            DepthPlugin.CreateTextures(data, context);
                        }

                        if (data.sharedDepthFrame != null)
                        {
                            unsafe
                            {
                                data.depthMap.UpdateData((ushort *)data.sharedDepthFrame.Buffer, data.sharedDepthFrame.Size);
                            }
                        }

                        if (DepthPlugin.UpdateSelectedPixelValue(data))
                        {
                            doDataEvent = isSelectedData;
                        }
                    }

                    if (doVisibleEvent)
                    {
                        this.RaisePropertyChanged("HasSelected2DPixelData");
                    }

                    if (doDataEvent)
                    {
                        this.RaisePropertyChanged("Selected2DPixelDepth");
                    }
                }
            }
        }
Exemplo n.º 26
0
 public void HandleEvent(KStudioEvent eventObj)
 {
     RandomData++;
 }