Cámara androide2 procesa cada fotograma y muestra su vista previa

Utilizo el https://github.com/googlesamples/android-Camera2Basic , pero intento modificarlo de una manera que podría conseguir el acceso a cada marco antes de que se dibuje en el surfaceview. Entendí, debo añadir superficie adicional (ImageReader.getSurface ()), y leer el marco de ella en esta devolución de llamada:

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Log.d("Img", "onImageAvailable"); mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile)); } }; 

El problema es que esta devolución de llamada se llama sólo cuando la imagen es captura por el usuario y no en el marco eacg que se envía a la pantalla de vista previa de la cámara.

Aquí es lo que intenté agregar:

 private void createCameraPreviewSession() { try { SurfaceTexture texture = mTextureView.getSurfaceTexture(); assert texture != null; // We configure the size of default buffer to be the size of camera preview we want. texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); // This is the output Surface we need to start preview. Surface surface = new Surface(texture); // We set up a CaptureRequest.Builder with the output Surface. mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); mPreviewRequestBuilder.addTarget(surface); // Here, we create a CameraCaptureSession for camera preview. mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession cameraCaptureSession) { // The camera is already closed if (null == mCameraDevice) { return; } // When the session is ready, we start displaying the preview. mCaptureSession = cameraCaptureSession; try { // Auto focus should be continuous for camera preview. mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); // Flash is automatically enabled when necessary. mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); // Finally, we start displaying the camera preview. mPreviewRequest = mPreviewRequestBuilder.build(); mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler); //mPreviewRequestBuilder.addTarget(mImageReader.getSurface()); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) { showToast("Failed"); } }, null ); /**TODO added for capturing aeach frame*/ // This is the CaptureRequest.Builder that we use to take a picture. final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(mImageReader.getSurface()); // Use the same AE and AF modes as the preview. captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); /**end added for capture each frame*/ } catch (CameraAccessException e) { e.printStackTrace(); } } 

En lugar de crear una nueva instancia de CaptureRequest.Builder, simplemente añada la Superficie del ImageReader al destino de salida del mPreviewRequestBuilder.

  • Tomando capturas de pantalla mediante programación no captura el contenido de surfaceVIew
  • SurfaceView UpdateWindow () - NullpointerException
  • Android SurfaceView causando parpadeo de la pantalla
  • El video de la API de MediaCodec de Android se reproduce demasiado rápido
  • Android dibuja usando SurfaceView y el hilo
  • ¿Cómo mostrar la vista previa de la cámara en un SurfaceView?
  • Android: problema SurfaceView (anchura, altura)
  • Extraño problema de rendimiento con Galaxy Tab
  • ¿Mejora el rendimiento de la vista personalizada SurfaceView-dervied?
  • Cómo reproducir varios archivos de video simultáneamente en un diseño lado a lado en diferentes vistas en Android
  • ¿Por qué el bucle de mi SurfaceView no funciona con un FPS decente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.