55
66import android .content .Context ;
77import android .hardware .Camera ;
8+ import android .view .Gravity ;
89import android .util .Log ;
910import android .view .SurfaceHolder ;
1011import android .view .SurfaceView ;
12+ import android .view .WindowManager ;
1113import processing .core .PApplet ;
1214import processing .core .PConstants ;
1315import processing .core .PImage ;
@@ -18,7 +20,7 @@ public class Capture extends PImage implements PConstants {
1820 private static final boolean DEBUG = true ;
1921 public static void log (String log ) {if (DEBUG ) System .out .println (log );}
2022
21- private Context context ;
23+ private PApplet context ;
2224
2325 private Camera mCamera ;
2426
@@ -40,15 +42,36 @@ public void setCamera(String camera) {
4042 selectedCamera = camerasList .indexOf (camera );
4143 }
4244 log ("Selected camera = " + selectedCamera );
43- try {
45+ createPreviewWindow ();
46+ }
47+
48+ private void createPreviewWindow () {
49+ final WindowManager .LayoutParams params = new WindowManager .LayoutParams (
50+ WindowManager .LayoutParams .TYPE_SYSTEM_OVERLAY ,
51+ WindowManager .LayoutParams .FLAG_NOT_TOUCHABLE |
52+ WindowManager .LayoutParams .FLAG_NOT_FOCUSABLE |
53+ WindowManager .LayoutParams .FLAG_NOT_TOUCH_MODAL |
54+ WindowManager .LayoutParams .FLAG_WATCH_OUTSIDE_TOUCH );
55+
56+ params .gravity = Gravity .TOP | Gravity .LEFT ;
57+ params .height = 1 ;
58+ params .width = 1 ;
59+
60+ try {
4461 mCamera = Camera .open (selectedCamera );
45- CameraPreview mPreview = new CameraPreview (context , mCamera );
46- mCamera .setPreviewCallback (previewCallback );
62+ final WindowManager windowManager = (WindowManager ) context .getSystemService (Context .WINDOW_SERVICE );
63+ context .runOnUiThread (new Runnable () {
64+ @ Override
65+ public void run () {
66+ CameraPreview mPreview = new CameraPreview (context , mCamera );
67+ windowManager .addView (mPreview , params );
68+ mCamera .setPreviewCallback (previewCallback );
69+ }
70+ });
4771 } catch (Exception e ) {
4872 System .err .println ("Camera not avaialble to use." );
4973 e .printStackTrace ();
5074 }
51-
5275 }
5376
5477 public String [] list () {
@@ -74,7 +97,7 @@ public String[] list() {
7497 private Camera .PreviewCallback previewCallback = new Camera .PreviewCallback () {
7598
7699 @ Override
77- public void onPreviewFrame (byte [] arg0 , Camera arg1 ) {
100+ public void onPreviewFrame (byte [] frame , Camera camera ) {
78101 log ("Received Camera frame" );
79102 }
80103 };
0 commit comments