Using the CameraPreview example and doing some image processing I
found a strange slow behavior in the Emulator. I have little
experience with java and Android (C/C++ background) so I do not know
if it is a true issue of the emulator or some strange memory/thread
handling that I am not aware.
When the application starts after the emulator starts, the application
is very slow (228 ms per frame).
If I press the "Back" button and then press the application icon, The
applications is about 4 times faster (64ms per frame).
This fast framerate will continue to work and will not go back to the
slow behavior.
I tried launching the emulator from Eclipse and stand alone. Also in
Windows and OSX and the behavior is always the same and happens every
time.
To recreate the slow behavior I just added a couple of lines (intense
CPU usage) to the CameraPreview sample provided by the SDK.The
modified run() part is:
Using java Syntax Highlighting
- @Override
- public void run() {
- // We first open the CameraDevice and configure it.
- CameraDevice camera = CameraDevice.open();
- if (camera != null) {
- CameraDevice.CaptureParams param = new
- CameraDevice.CaptureParams();
- param.type = 1; // preview
- param.srcWidth = 1280;
- param.srcHeight = 960;
- param.leftPixel = 0;
- param.topPixel = 0;
- param.outputWidth = 320;
- param.outputHeight = 240;
- param.dataFormat = 2; // RGB_565
- camera.setCaptureParams(param);
- }
- // This is our main acquisition thread's loop, we go until
- // asked to quit.
- SurfaceHolder holder = mHolder;
- //
- ===========================================================
- // Added to check strange behavior
- //
- ===========================================================
- long timeMillis = java.lang.System.currentTimeMillis();
- Paint paint = new Paint();
- paint.setTextSize(20);
- paint.setARGB(255, 255, 0, 0);
- while (!mDone) {
- // Lock the surface, this returns a Canvas that can
- // be used to render into.
- Canvas canvas = holder.lockCanvas();
- // Capture directly into the Surface
- if (camera != null) {
- camera.capture(canvas);
- //
- ===========================================================
- // Added to check strange behavior
- //
- ===========================================================
- int b=3;
- for(int i=0; i<100000; i++)
- b=b+1;
- long timeNew = java.lang.System.currentTimeMillis();
- canvas.drawText("ms=" + (timeNew - timeMillis), 10, 20,
- paint);
- timeMillis = timeNew;
- }
- // And finally unlock and post the surface.
- holder.unlockCanvasAndPost(canvas);
- }
- // Make sure to release the CameraDevice
- if (camera != null)
- camera.close();
- }
Parsed in 0.040 seconds, using GeSHi 1.0.8.4
Can someone test it and see if the results are the same? Any ideas?
Thanks
Franco

