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); } }
private void Encoder_FrameEncoded(byte[] frameData) { OnFrameCaptured?.Invoke(this, frameData); }