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);
				}
			}
示例#2
0
            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);
                }
            }