@ -10,6 +10,7 @@ New versions are released through GitHub, so the reference page is the [GitHub R
### v2.0.0-beta06 (to be released)
### v2.0.0-beta06 (to be released)
- New: Full featured Camera2 integration! Use `cameraExperimental="true"` and `cameraEngine="camera2"` to test this out. ([#490][490])
- Improvement: we now choose a video recording profile that is compatible with the chosen size. Should fix some video recording issues. ([#477][477])
- Improvement: we now choose a video recording profile that is compatible with the chosen size. Should fix some video recording issues. ([#477][477])
- **Breaking change**: some public classes have been moved to different packages. See [table here](../extra/v1-migration-guide.html#repackaging). ([#482][482])
- **Breaking change**: some public classes have been moved to different packages. See [table here](../extra/v1-migration-guide.html#repackaging). ([#482][482])
- **Breaking change**: the listener methods `onFocusStart` and `onFocusEnd` are now called `onAutoFocusStart` and `onAutoFocusEnd`. ([#484][484])
- **Breaking change**: the listener methods `onFocusStart` and `onFocusEnd` are now called `onAutoFocusStart` and `onAutoFocusEnd`. ([#484][484])
@ -62,3 +63,4 @@ This is the first beta release. For changes with respect to v1, please take a lo
subtitle: "Camera engine and preview implementations"
description: "Camera preview implementations"
description: "Camera engine and preview implementations"
category: docs
category: docs
order: 6
order: 6
date: 2018-12-20 21:58:16
date: 2018-12-20 21:58:16
disqus: 1
disqus: 1
---
---
### Engine
CameraView can interact with the camera sensor through the old Android interface typically referred
as `CAMERA1`, and more recently, also through the more modern interface called `CAMERA2`, for API level 21 (Lollipop).
Being more recent, the latter received less testing and feedback. As such, to enable it, you
are required to also set the experimental flag on: `app:cameraExperimental="true"`. On devices older
than Lollipop, the engine will always be `Engine.CAMERA1`.
|Engine|API Level|Info|
|------|---------|----|
|`Engine.CAMERA1`|All|Highly tested and reliable. Currently supports the full set of features.|
|`Engine.CAMERA2`|API 21+|Experimental, but will be the key focus for the future. New controls might be available only for this engine.|
### Previews
CameraView supports different types of previews, configurable either through the `cameraPreview`
CameraView supports different types of previews, configurable either through the `cameraPreview`
XML attribute or programmatically with the `Preview` control class.
XML attribute or programmatically with the `Preview` control class.
This defaults to the new `GL_SURFACE` and it is highly recommended that you do not change this
All previews are supported in all conditions, regardless, for example, of the `Engine` that you
to use all the features available. However, experienced user might prefer a different solution.
choose.
### Options
This parameter defaults to the OpenGL `GL_SURFACE` and it is highly recommended that you do not change this
to use all the features available. However, experienced user might prefer a different solution.
|Preview|Backed by|Info|
|Preview|Backed by|Info|
|-------|---------|----|
|-------|---------|----|
|`Preview.SURFACE`|A `SurfaceView`|This might be better for battery, but will not work well (AFAIR) with dynamic layout changes and similar things. No support for video snapshots.|
|`Preview.SURFACE`|A `SurfaceView`|Can be good for battery, but will not work well with dynamic layout changes and similar things. No support for video snapshots.|
|`Preview.TEXTURE`|A `TextureView`|Better. Requires hardware acceleration. No support for video snapshots.|
|`Preview.TEXTURE`|A `TextureView`|Better. Requires hardware acceleration. No support for video snapshots.|
|`Preview.GL_SURFACE`|A `GLSurfaceView`|Supports video snapshots. Might support GL real time filters in the future.|
|`Preview.GL_SURFACE`|A `GLSurfaceView`|Recommended. Supports video snapshots. Might support GL real time filters in the future.|
The GL surface, as an extra benefit, has a much more efficient way of capturing picture snapshots,
The GL surface, as an extra benefit, has a much more efficient way of capturing picture snapshots,
that avoids OOM errors, rotating the image on the fly, reading EXIF, and other horrible things belonging to v1.
that avoids OOM errors, rotating the image on the fly, reading EXIF, and other horrible things belonging to v1.
@ -32,6 +50,7 @@ These picture snapshots will also work while taking videos.
```xml
```xml
<com.otaliastudios.cameraview.CameraView
<com.otaliastudios.cameraview.CameraView
app:cameraEngine="camera1|camera2"
app:cameraPreview="surface|texture|glSurface"/>
app:cameraPreview="surface|texture|glSurface"/>
```
```
@ -40,6 +59,9 @@ These picture snapshots will also work while taking videos.
The preview method should only be called once and if the `CameraView` was never added to a window,
The preview method should only be called once and if the `CameraView` was never added to a window,
for example if you just created it programmatically. Otherwise, it has no effect.
for example if you just created it programmatically. Otherwise, it has no effect.
The engine method should only be called when the `CameraView` is closed. Otherwise, it has no effect.
|Method|Description|
|Method|Description|
|------|-----------|
|------|-----------|
|`setPreview(Preview)`|Sets the preview implementation.|
|`setPreview(Preview)`|Sets the preview implementation.|
|`setEngine(Engine)`|Sets the engine implementation.|