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.
- "La superficie ha sido liberada" dentro de "surfaceCreated"
- Programación con SurfaceView y estrategia de hilos para el desarrollo de juegos
- Android: graba y reproduce video en el mismo SurfaceView
- ¿Puedo usar lockCanvas () en onPreviewFrame callback?
- ¿Es esto posible tener la opinión de la textura para la cámara en forma circular para el androide?
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(); } }
- Vista superficial en capas en un FrameLayout en Android
- SurfaceView se retrasa si está en ScrollView
- Android SurfaceView no muestra onDraw
- El video de la API de MediaCodec de Android se reproduce demasiado rápido
- Cambiar tamaño de Android personalizado SurfaceView
- Dibujar SurfaceView desde el diseño xml
- SurfaceView UpdateWindow () - NullpointerException
- Android: Cámara Asynctask con devolución de llamada de vista previa
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