* The clients shall implement CvCameraViewListener.
*/
public abstract class CameraBridgeViewBase extends SurfaceView implements SurfaceHolder.Callback {
-//TODO: add method to control the format in which the frames will be delivered to CvCameraViewListener
+ private static final String TAG = "CameraBridge";
private static final int MAX_UNSPECIFIED = -1;
-
private static final int STOPPED = 0;
private static final int STARTED = 1;
- private static final String TAG = "CameraBridge";
+ private int mState = STOPPED;
+ private Bitmap mCacheBitmap;
+ private CvCameraViewListener mListener;
+ private boolean mSurfaceExist;
+ private Object mSyncObject = new Object();
protected int mFrameWidth;
protected int mFrameHeight;
-
protected int mMaxHeight;
protected int mMaxWidth;
-
protected int mPreviewFormat = Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA;
protected int mCameraIndex = -1;
- private boolean mEnabled;
-
- private Bitmap mCacheBitmap;
+ protected boolean mEnabled;
protected FpsMeter mFpsMeter = null;
- private CvCameraViewListener mListener;
- private int mState = STOPPED;
-
- private boolean mSurfaceExist;
-
- private Object mSyncObject = new Object();
-
public CameraBridgeViewBase(Context context, int cameraId) {
super(context);
mCameraIndex = cameraId;
int count = attrs.getAttributeCount();
Log.d(TAG, "Attr count: " + Integer.valueOf(count));
- TypedArray tmp = getContext().obtainStyledAttributes(attrs, R.styleable.CameraBridgeViewBase);
- if (tmp.getBoolean(R.styleable.CameraBridgeViewBase_show_fps, false))
+ TypedArray styledAttrs = getContext().obtainStyledAttributes(attrs, R.styleable.CameraBridgeViewBase);
+ if (styledAttrs.getBoolean(R.styleable.CameraBridgeViewBase_show_fps, false))
enableFpsMeter();
- mCameraIndex = tmp.getInt(R.styleable.CameraBridgeViewBase_camera_id, -1);
+ mCameraIndex = styledAttrs.getInt(R.styleable.CameraBridgeViewBase_camera_id, -1);
getHolder().addCallback(this);
mMaxWidth = MAX_UNSPECIFIED;
canvas.drawBitmap(mCacheBitmap, (canvas.getWidth() - mCacheBitmap.getWidth()) / 2, (canvas.getHeight() - mCacheBitmap.getHeight()) / 2, null);
if (mFpsMeter != null) {
mFpsMeter.measure();
- mFpsMeter.draw(canvas, 0, 0);
+ mFpsMeter.draw(canvas, 20, 30);
}
getHolder().unlockCanvasAndPost(canvas);
}
import android.util.Log;
public class FpsMeter {
- private static final String TAG = "OCVSample::FpsMeter";
- int step;
- int framesCouner;
- double freq;
- long prevFrameTime;
- String strfps;
- DecimalFormat twoPlaces = new DecimalFormat("0.00");
- Paint paint;
- boolean isInitialized = false;
+ 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() {
- step = 20;
- framesCouner = 0;
- freq = Core.getTickFrequency();
- prevFrameTime = Core.getTickCount();
- strfps = "";
+ mFramesCouner = 0;
+ mFrequency = Core.getTickFrequency();
+ mprevFrameTime = Core.getTickCount();
+ mStrfps = "";
- paint = new Paint();
- paint.setColor(Color.BLUE);
- paint.setTextSize(50);
+ mPaint = new Paint();
+ mPaint.setColor(Color.BLUE);
+ mPaint.setTextSize(20);
}
public void measure() {
- if (!isInitialized) {
+ if (!mIsInitialized) {
init();
- isInitialized = true;
+ mIsInitialized = true;
} else {
- framesCouner++;
- if (framesCouner % step == 0) {
+ mFramesCouner++;
+ if (mFramesCouner % STEP == 0) {
long time = Core.getTickCount();
- double fps = step * freq / (time - prevFrameTime);
- prevFrameTime = time;
- DecimalFormat twoPlaces = new DecimalFormat("0.00");
+ double fps = STEP * mFrequency / (time - mprevFrameTime);
+ mprevFrameTime = time;
if (mWidth != 0 && mHeight != 0)
- strfps = twoPlaces.format(fps) + " FPS@" + Integer.valueOf(mWidth) + "x" + Integer.valueOf(mHeight);
+ mStrfps = FPS_FORMAT.format(fps) + " FPS@" + Integer.valueOf(mWidth) + "x" + Integer.valueOf(mHeight);
else
- strfps = twoPlaces.format(fps) + " FPS";
- Log.i(TAG, strfps);
+ mStrfps = FPS_FORMAT.format(fps) + " FPS";
+ Log.i(TAG, mStrfps);
}
}
}
}
public void draw(Canvas canvas, float offsetx, float offsety) {
- Log.d(TAG, strfps);
- canvas.drawText(strfps, 20 + offsetx, 10 + 50 + offsety, paint);
+ Log.d(TAG, mStrfps);
+ canvas.drawText(mStrfps, offsetx, offsety, mPaint);
}
}