2014-04-25 6 views
0

미리보기에서 모든 프레임 이후 이미지를 처리하기 위해 미리보기 콜백을 사용하는 운영체제 앱이 있습니다 (계산이 진행되는 동안 잠시 동안 미리보기가 일시 중지됨). 그것은 위대한 작품! 하지만 이제 Google Glass에서 미리보기 활성화, 미리보기 콜백 활성화, 계산 활성화와 같은 작업을 수행하려고합니다.Google Glass 카메라 : setPreviewCallback

이 문제는 Camera 정의 방법과 관련이 있습니다 : Camera mCamera = null;

하지만 Camera.open()으로 정의 할 수 없습니다. 실패로 인해 Google Glass에서

프로세스 : com.ead.glasscam.app, PID : 14231 자바 내가 콜백을 정의에 도착하면 따라서, 나는 그것이 NullPointerException이 발생 할 수 있으며, 실제로 나는 다음과 같은 오류 문자열을 얻을 이야기하고있다. lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.ead.glasscam.app/com.ead.glasscam.app.MainActivity} : nullLoop.NullPointerException at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2235)) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2285) at android.app.ActivityThread.access $ 800 (ActivityThread.java:138) at android.app.ActivityThread $ H.handleMessage (ActivityThread.ja) 버지니아 : 1236) android.app.ActivityThread.main에서 android.os.Looper.loop (Looper.java:149) 에서 android.os.Handler.dispatchMessage (Handler.java:102) (ActivityThread.java에서 : 5061) at java.lang.reflect.Method.invokeNative (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run 에 의한 dalvik.system.NativeStart.main (기본 방법) 에서 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:610) 에서 (ZygoteInit.java:794) : java.lang.NullPointerException이 com.ead.glasscam.app.MainActivity.onCreate (MainActivity.java:100) android.app.Activity.performCr android.app.ActivityThread.handleLaunchActivity에서 eate (Activity.java:5236) android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1089)에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2199)에서 (ActivityThread.java:2285) android.app.ActivityThread.access에서 $ 800 (ActivityThread.java:138) android.os.Handler.dispatchMessage에있는 에서 android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1236) (Handler.java:102) android.os.Looper.loop (Looper.java:149) android.app.ActivityThread.main (ActivityThread.java:5061) . 네이티브 메소드 at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. 자바 : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:610에서 794) ) dalvik.system.NativeStart.main (기본 방법)

그래서 코드에서 :

// Attach a callback for preview 
mPreviewCallback camCallback = new mPreviewCallback(); 
mCamera.setPreviewCallback(camCallback); 

mPreviewCallback이란 무엇입니까?:

public class mPreviewCallback implements Camera.PreviewCallback { 

    public void onPreviewFrame(byte[] data, final Camera camera){ 
     Log.i("CAMERA", "Triggered Preview Frame"); 
    } 
} 

Google Glass를 사용하면 Android에서 간단한 과정을 수행하는 방법을 실제로 이해하지 못합니다. 읽어 주셔서 감사합니다.

+0

Camera.open() 사용할 수 있습니다) Glass에서. 확실한 질문이지만 manifest.xml에 카메라 사용 권한을 포함 시켰습니까? –

답변

2

체크 아웃 jaredsburrows에서이 예, 그것은 유리에 카메라 미리보기를 사용하고 난 한때 (그것은 작품!) 프로젝트에 사용

https://github.com/jaredsburrows/OpenQuartz/tree/master/example-apps/OG_CameraApp

public class CameraView extends SurfaceView implements SurfaceHolder.Callback 
{ 
    private SurfaceHolder surfaceHolder = null; 
    private Camera camera = null; 

    @SuppressWarnings("deprecation") 
    public CameraView(Context context) 
    { 
     super(context); 

     surfaceHolder = this.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    /* 
    * (non-Javadoc) 
    * @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder) 
    */ 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) 
    { 
     camera = Camera.open(); 

     // Set the Hotfix for Google Glass 
     this.setCameraParameters(camera); 

     // Show the Camera display 
     try 
     { 
      camera.setPreviewDisplay(holder); 
     } 
     catch (Exception e) 
     { 
      this.releaseCamera(); 
     } 
    } 

    /* 
    * (non-Javadoc) 
    * @see android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder, int, int, int) 
    */ 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
    { 
     // Start the preview for surfaceChanged 
     if (camera != null) 
     { 
      camera.startPreview(); 
     } 
    } 

    /* 
    * (non-Javadoc) 
    * @see android.view.SurfaceHolder.Callback#surfaceDestroyed(android.view.SurfaceHolder) 
    */ 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) 
    { 
     // Do not hold the camera during surfaceDestroyed - view should be gone 
     this.releaseCamera(); 
    } 

    /** 
    * Important HotFix for Google Glass (post-XE11) update 
    * @param camera Object 
    */ 
    public void setCameraParameters(Camera camera) 
    { 
     if (camera != null) 
     { 
      Parameters parameters = camera.getParameters(); 
      parameters.setPreviewFpsRange(30000, 30000); 
      camera.setParameters(parameters); 
     } 
    } 

    /** 
    * Release the camera from use 
    */ 
    public void releaseCamera() 
    { 
     if (camera != null) 
     { 
      camera.release(); 
      camera = null; 
     } 
    } 
}