2017-10-12 5 views
0

J'ai mis en œuvre la capture d'image en rafale avec camera2 Api, son fonctionnement bien en prenant 6 fps..bt mon problème est quand sa prise de vue il déclenche la mise au point c'est pourquoi l'aperçu est verrouillé pour une petite quantité de temps , je veux supprimer ce verrou de prévisualisation, je veux l'aperçu permet toujours, voici ma rafale capture encore, je suivais googles camera2 exempleAperçu verrouillé lors de la capture d'image camera2

private void captuteStillImage() { 
    try { 
     count = 0; 
     CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); 

     int rotation = getWindowManager().getDefaultDisplay().getRotation(); 
     captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation)); 

     CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() { 
      @Override 
      public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) { 
       super.onCaptureCompleted(session, request, result); 
       //unlockFocus(); 
       count++; 
       Log.e("count",count+""); 
       runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        tv_count.setText(count+""); 

       } 
      }); 

       if (count >= MAX_CAPTURE) { 
        unlockFocus(); 
       } 
       Log.e("Image Capture", "Successfully"); 
      } 
     }; 

     // mCameraCaptureSession.capture(captureBuilder.build(), captureCallback, null); 

     List<CaptureRequest> captureList = new ArrayList<CaptureRequest>(); 
     captureBuilder.addTarget(mImageReader.getSurface()); 
     for (int i = 0; i < MAX_CAPTURE; i++) { 
      captureList.add(captureBuilder.build()); 
     } 
     //mCameraCaptureSession.stopRepeating(); 
     mCameraCaptureSession.captureBurst(captureList, captureCallback, null); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

Répondre

1

j'ai expérimenté peu avec cela sur camera2basic (https://github.com/googlesamples/android-Camera2Basic) et ont conclu que je Je pourrais récupérer la prévisualisation beaucoup plus rapidement si j'appelais déverrouiller juste après l'acquisition de l'image et avant de l'enregistrer - J'ai également supprimé l'appel d'origine à unLockFocus dans le captureCallback.

/** 
    * This a callback object for the {@link ImageReader}. "onImageAvailable" will be called when a 
    * still image is ready to be saved. 
    */ 
    private final ImageReader.OnImageAvailableListener mOnImageAvailableListener 
      = new ImageReader.OnImageAvailableListener() { 

     @Override 
     public void onImageAvailable(ImageReader reader) { 
      Log.d(TAG,"onImageAvailable"); 

      //Get the image 
      Image cameraImage = reader.acquireNextImage(); 

      //Now unlock the focus so the UI does not look locked - note that this is a much earlier point than in the 
      //original Camera2Basic example from google as the original place was causing the preview to lock during any 
      //image manipulation and saving. 
      unlockFocus(); 

      //Save the image file in the background - note check you have permissions granted by user or this will cause an exception. 
      mBackgroundHandler.post(new ImageSaver(getActivity().getApplicationContext(), cameraImage, outputPicFile); 

     } 

    }; 

Cependant, Camera2Basic a beaucoup callbacks et je trouve que lorsque vous commencer à tester avec des scénarios où est mis en pause l'activité ou le fragment et repris, et surtout si votre application a d'autres callbacks asynchrones aussi, il est très facile pour entrer dans des conditions de course qui peuvent provoquer un comportement inattendu ou des accidents.

Si vous voulez juste un exemple simple d'une caméra qui retourne l'aperçu plus rapide lorsque vous prenez une photo, puis l'exemple de Fotoapparat de base pourrait être intéressant de regarder aussi:

+0

je peux ne pas enregistrer le fichier image obtenu à partir du lecteur car il sera fermé comme une nouvelle image est capturée .. Je suis en train de capturer 6 image rafale donc, j'avais. J'ai essayé cela, j'essayais de sauver les images dans un tableau puis quand la capture a fini alors essayant de sauver un par un bt il se bloque car l'image est déjà fermée @Mick –