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.
- Android: graba y reproduce video en el mismo SurfaceView
- Haga un SurfaceView más grande que la pantalla (Ajuste de una vista previa de cámara a un SurfaceView más grande que la pantalla)
- "La superficie ha sido liberada" dentro de "surfaceCreated"
- Cómo tomar una captura de pantalla de SurfaceView con una vista previa de la cámara
- Filtro en vivo de la cámara Android
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(); } }
- El nuevo procesamiento de gms.maps.MapView se retrasa un poco cuando está en un ListView?
- Fragmentos - El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
- Adición de vista de texto a la vista de superficie
- Android: FPS bajo que dibuja muchos mapas de bits en una vista de superficie
- Cómo hacer que una clase que extiende SurfaceView iniciar una actividad?
- Ejecutar una tarea larga en glThread sin bloquear el hilo de la interfaz de usuario en Android
- ¿Es esto posible tener la opinión de la textura para la cámara en forma circular para el androide?
- ¿Cómo tomar una captura de pantalla de la vista de superficie de Android?
En lugar de crear una nueva instancia de CaptureRequest.Builder, simplemente añada la Superficie del ImageReader al destino de salida del mPreviewRequestBuilder.
- Android: ANR en Google Analytics
- Establecer LayoutParams de ListView cuando se utiliza DrawerLayout con fragmentos