Esempio n. 1
0
        public T[] LoadFrame <T>(int desiredFrameNum, Guid eventType, Func <KStudioEvent, T[]> pixelCopyOperation)
        {
            T[] pixels = null;

            using (KStudioClient client = KStudio.CreateClient(KStudioClientFlags.ProcessNotifications))
            {
                KStudioEventStreamSelectorCollection selEvents = new KStudioEventStreamSelectorCollection();
                selEvents.Add(eventType);

                //This is where you will intercept steps in the XEF file
                using (var reader = client.CreateEventReader(_path, selEvents))
                {
                    KStudioEvent ev;
                    reader.GetNextEvent();
                    int frameNum = 0;
                    while ((ev = reader.GetNextEvent()) != null)
                    {
                        if (frameNum == desiredFrameNum)
                        {
                            pixels = pixelCopyOperation(ev);
                            break;
                        }
                        frameNum++;
                    }
                }
            }
            return(pixels);
        }
Esempio n. 2
0
        public int GetNumOfFrames(Guid typeId)
        {
            int numFrames = 0;

            try
            {
                using (KStudioClient client = KStudio.CreateClient(KStudioClientFlags.ProcessNotifications))
                {
                    ManualResetEvent mr = new ManualResetEvent(false);
                    KStudioEventStreamSelectorCollection selEvents = new KStudioEventStreamSelectorCollection();
                    selEvents.Add(typeId);
                    //This is where you will intercept steps in the XEF file
                    using (var reader = client.CreateEventReader(_path, selEvents))
                    {
                        KStudioEvent ev;
                        reader.GetNextEvent();
                        while ((ev = reader.GetNextEvent()) != null)
                        {
                            numFrames++;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                if (e.Message == "Operation is not valid due to the current state of the object.")
                {
                    throw new Exception($"No events of type {typeId} in this XEF file!");
                }
            }
            return(numFrames);
        }
Esempio n. 3
0
        public DepthProcessor LoadDepthFrame(int desiredFrameNum, int numberOfDepthSmooths)
        {
            var dProcessor = new DepthProcessor();

            dProcessor.FrameSelector = new FrameSelector(desiredFrameNum, numberOfDepthSmooths);

            using (KStudioClient client = KStudio.CreateClient(KStudioClientFlags.ProcessNotifications))
            {
                ManualResetEvent mr = new ManualResetEvent(false);
                KStudioEventStreamSelectorCollection selEvents = new KStudioEventStreamSelectorCollection();
                selEvents.Add(KStudioEventStreamDataTypeIds.Depth);

                //This is where you will intercept steps in the XEF file
                KStudioEventReader reader = client.CreateEventReader(_path, selEvents);

                KStudioEvent ev;
                while ((ev = reader.GetNextEvent()) != null && !dProcessor.FrameSelector.AreAllFramesCaptured)
                {
                    dProcessor.ProcessEvent(ev);
                }
                reader.Dispose();
            }
            return(dProcessor);
        }