public virtual void run() { bool dropFrame = outerInstance.view.Width == 0 || outerInstance.view.Height == 0; // Only capture the view if the dimensions have been established if (!dropFrame) { // Draw view into bitmap backed canvas int measuredWidth = View.MeasureSpec.makeMeasureSpec(outerInstance.view.Width, View.MeasureSpec.EXACTLY); int measuredHeight = View.MeasureSpec.makeMeasureSpec(outerInstance.view.Height, View.MeasureSpec.EXACTLY); outerInstance.view.measure(measuredWidth, measuredHeight); outerInstance.view.layout(0, 0, outerInstance.view.MeasuredWidth, outerInstance.view.MeasuredHeight); Bitmap viewBitmap = Bitmap.createBitmap(outerInstance.view.Width, outerInstance.view.Height, Bitmap.Config.ARGB_8888); Canvas viewCanvas = new Canvas(viewBitmap); outerInstance.view.draw(viewCanvas); // Extract the frame from the bitmap int bytes = viewBitmap.ByteCount; ByteBuffer buffer = ByteBuffer.allocate(bytes); viewBitmap.copyPixelsToBuffer(buffer); sbyte[] array = buffer.array(); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final long captureTimeNs = java.util.concurrent.TimeUnit.MILLISECONDS.toNanos(android.os.SystemClock.elapsedRealtime()); long captureTimeNs = TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime()); // Create video frame VideoDimensions dimensions = new VideoDimensions(outerInstance.view.Width, outerInstance.view.Height); VideoFrame videoFrame = new VideoFrame(array, dimensions, 0, captureTimeNs); // Notify the listener if (outerInstance.started.get()) { outerInstance.videoCapturerListener.onFrameCaptured(videoFrame); } } // Schedule the next capture if (outerInstance.started.get()) { outerInstance.handler.postDelayed(this, VIEW_CAPTURER_FRAMERATE_MS); } }