private void OnMediaFrameArrived(MediaFrameReader sender, MediaFrameArrivedEventArgs args)
        {
            bool getFrame = false;

            lock (stateLock)
            {
                getFrame = (State == CameraState.CapturingContinuous || State == CameraState.CapturingSingle);

                // quickly handle state changes here (only changes if we're capturing a single image)
                if (State == CameraState.CapturingSingle)
                {
                    State = CameraState.Ready;
                }
            }

            CameraFrameInternal frame = null;

            if (getFrame)
            {
                frame = GetFrameFromMediaFrameReader(sender);
            }

            if (frame != null)
            {
                // clean up state after frame
                if (CaptureMode == CaptureMode.SingleLowLatency)
                {
                    // release previous frame and addref current frame
                    if (latestFrame != null)
                    {
                        latestFrame.Release();
                    }

                    // add ref for the camera
                    frame.AddRef();
                    latestFrame = frame;
                }

                // callback any registered listeners
                OnFrameCaptured?.Invoke(this, frame);
            }
        }
Esempio n. 2
0
 private void Encoder_FrameEncoded(byte[] frameData)
 {
     OnFrameCaptured?.Invoke(this, frameData);
 }