public void OnPreviewFrame(IntPtr data, Camera camera) { using (var fastArray = new FastJavaByteArray(data)) { OnPreviewFrameReady?.Invoke(this, fastArray); camera.AddCallbackBuffer(fastArray); } }
public void OnPreviewFrame(byte[] data, Camera camera) { OnPreviewFrameReady?.Invoke(this, data); }
public void OnSurfaceTextureUpdated(SurfaceTexture surface) { if (OnPreviewFrameReady == null) { return; } CameraAnalyzer.cameraFPSCounter.Report(); var dfps = 1; switch (MainActivity.SavedDataStore.DetectionFPS) { case Classes.SaveData.DetectorFPS.FPS1: dfps = 1; break; case Classes.SaveData.DetectorFPS.FPS5: dfps = 5; break; case Classes.SaveData.DetectorFPS.FPS10: dfps = 10; break; case Classes.SaveData.DetectorFPS.FPS15: dfps = 15; break; case Classes.SaveData.DetectorFPS.FPS30: dfps = 30; break; case Classes.SaveData.DetectorFPS.FPS60: dfps = 60; break; } TimeSpan pace = new TimeSpan(0, 0, 0, 0, 1000 / dfps); // in milliseconds, classification will not repeat faster than this value var currentDate = DateTime.Now; var interval = currentDate - lastAnalysis; // control the pace of the machine vision to protect battery life if (interval >= pace) { lastAnalysis = currentDate; } else { return; // don't run the classifier more often than we need } if (CameraAnalyzer.canAnalyze) { _ = Task.Factory.StartNew(() => { using (var frame = Bitmap.CreateBitmap(owner.mTextureView.Width, owner.mTextureView.Height, Bitmap.Config.Argb8888)) { owner.mTextureView.GetBitmap(frame); using (var bmpframe = frame.ToSKBitmap()) { var info = new SKImageInfo((int)(bmpframe.Width * 0.5), (int)(bmpframe.Height * 0.5)); using (var resized = bmpframe.Resize(info, SKFilterQuality.Low)) { OnPreviewFrameReady.Invoke(resized.GetPixels(), info.Width, info.Height); } } } }); } }