package org.opencv.android; import java.text.DecimalFormat; import org.opencv.core.Core; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; public class FpsMeter { private static final String TAG = "FpsMeter"; private static final int STEP = 20; private static final DecimalFormat FPS_FORMAT = new DecimalFormat("0.00"); private int mFramesCouner; private double mFrequency; private long mprevFrameTime; private String mStrfps; Paint mPaint; boolean mIsInitialized = false; int mWidth = 0; int mHeight = 0; public void init() { mFramesCouner = 0; mFrequency = Core.getTickFrequency(); mprevFrameTime = Core.getTickCount(); mStrfps = ""; mPaint = new Paint(); mPaint.setColor(Color.BLUE); mPaint.setTextSize(20); } public void measure() { if (!mIsInitialized) { init(); mIsInitialized = true; } else { mFramesCouner++; if (mFramesCouner % STEP == 0) { long time = Core.getTickCount(); double fps = STEP * mFrequency / (time - mprevFrameTime); mprevFrameTime = time; if (mWidth != 0 && mHeight != 0) mStrfps = FPS_FORMAT.format(fps) + " FPS@" + Integer.valueOf(mWidth) + "x" + Integer.valueOf(mHeight); else mStrfps = FPS_FORMAT.format(fps) + " FPS"; Log.i(TAG, mStrfps); } } } public void setResolution(int width, int height) { mWidth = width; mHeight = height; } public void draw(Canvas canvas, float offsetx, float offsety) { Log.d(TAG, mStrfps); canvas.drawText(mStrfps, offsetx, offsety, mPaint); } }