Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
             }
         }
     });
 }