private void Vision_OnObjectClassified(object sender, ClassificationResultArgs e) { // Display the top guess for the dominant object on the image _text.text = e.observations.First().identifier; // Release the native object _cvPixelBuffer.Dispose(); }
public override void DidOutputSampleBuffer(AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection) { if (ready) { ready = false; CVPixelBuffer cVPixelBuffer = (CVPixelBuffer)sampleBuffer.GetImageBuffer(); cVPixelBuffer.Lock(CVPixelBufferLock.ReadOnly); nint dataSize = cVPixelBuffer.DataSize; width = cVPixelBuffer.Width; height = cVPixelBuffer.Height; IntPtr baseAddress = cVPixelBuffer.BaseAddress; bpr = cVPixelBuffer.BytesPerRow; cVPixelBuffer.Unlock(CVPixelBufferLock.ReadOnly); buffer = NSData.FromBytes(baseAddress, (nuint)dataSize); cVPixelBuffer.Dispose(); queue.DispatchAsync(ReadTask); } sampleBuffer.Dispose(); }
public override void DidOutputSampleBuffer(AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection) { if (ready) { ready = false; pixelBuffer = (CVPixelBuffer)sampleBuffer.GetImageBuffer(); pixelBuffer.Lock(CVPixelBufferLock.None); width = pixelBuffer.Width; height = pixelBuffer.Height; bytesPerRow = pixelBuffer.BytesPerRow; context = new CGBitmapContext(pixelBuffer.BaseAddress, width, height, 8, bytesPerRow, colorSpace, CGImageAlphaInfo.PremultipliedFirst); cgImage = context.ToImage(); uiImage = new UIImage(cgImage); pixelBuffer.Unlock(CVPixelBufferLock.None); pixelBuffer.Dispose(); queue.DispatchAsync(ReadTask); } sampleBuffer.Dispose(); }
public virtual void DidOutputSampleBuffer(AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection) { CVPixelBuffer pixelBuffer = null; VNImageRequestHandler imageRequestHandler = null; try { pixelBuffer = sampleBuffer.GetImageBuffer() as CVPixelBuffer; if (pixelBuffer == null) { return; } // TODO See if this causes issues disposing directly after bufferOutputhandler.Invoke(pixelBuffer); } catch (Exception x) { Console.WriteLine(x.Message); } finally { if (sampleBuffer != null) { sampleBuffer.Dispose(); } if (pixelBuffer != null) { pixelBuffer.Dispose(); } if (imageRequestHandler != null) { imageRequestHandler.Dispose(); } } }
public override void StartVideoCompositionRequest(AVAsynchronousVideoCompositionRequest asyncVideoCompositionRequest) { renderingQueue.DispatchAsync(() => { if (shouldCancelAllRequests) { asyncVideoCompositionRequest.FinishCancelledRequest(); } else { NSError error = null; CVPixelBuffer resultPixels = newRenderedPixelBufferForRequest(asyncVideoCompositionRequest, out error); if (resultPixels != null) { asyncVideoCompositionRequest.FinishWithComposedVideoFrame(resultPixels); resultPixels.Dispose(); } else { asyncVideoCompositionRequest.FinishWithError(error); } } }); }