!636 !711 // runnable { import android.app.Activity; import android.widget.*; import android.graphics.*; import android.hardware.Camera; import android.view.*; main { static Activity androidContext; psvm { print "Listing cameras..." androidContext.runOnUiThread(runnable { int n = Camera.getNumberOfCameras(); System.out.println("Cameras: " + n); final Camera cam = Camera.open(0/*n-1*/); Camera.Parameters p = cam.getParameters(); p.setPreviewSize(100, 100); cam.setParameters(p); SurfaceView surfaceView = new SurfaceView(androidContext); SurfaceHolder surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(new CamCallback()); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); androidContext.setContentView(surfaceView); cam.setPreviewDisplay(surfaceHolder); cam.startPreview(); print "Preview started." /*surfaceView.post(runnable { cam.takePicture(null, null, null, new JpegCallback()); }); print "Waiting for callback"*/ }); } static class CamCallback implements SurfaceHolder.Callback { public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { print "surfaceChanged" } public void surfaceCreated (SurfaceHolder holder) { print "surfaceCreated" } public void surfaceDestroyed (SurfaceHolder holder) { print "surfaceDestroyed" } } static class ShutterCallback implements Camera.ShutterCallback { public void onShutter() { print "Shutter!" } } static class JpegCallback implements Camera.PictureCallback { public void onPictureTaken (byte[] data, Camera cam) { TextView tv = new TextView(androidContext); tv.setText("Picture data: " + data.length); androidContext.setContentView(tv); System.out.println("Picture data: " + data.length); cam.release(); print "Camera released." } } }