New versions are released through GitHub, so the reference page is the GitHub Releases page.


This release adds experimental support for real-time filters thanks to @agrawalsuneet. Please read the documentation page for usage instructions.

  • New: Real-time filters support ([#527][527])
  • New: Add filters through XML (#535)
  • New: Map filter controls to scroll/pinch gestures (#537)…v2.1.0


  • Fix: bug with picture recorder (#521)
  • Fix: video snapshots appearing black (#528)
  • Fix: video snapshots exceptions and audio issues ([#530][530])…v2.0.0


  • Fix: crashes when stopping video snapshots (#513)
  • Fix: dependencies missing, leading to runtime crashes (#517)…v2.0.0-rc2


This is likely to be the last release before v2.0.0.

  • New: support for watermarks and animated overlays (docs), thanks to @RAN3000 (#502, #421)
  • New: added onVideoRecordingStart() to be notified when video recording starts, thanks to @agrawalsuneet (#498)
  • New: added onVideoRecordingEnd() to be notified when video recording ends (#506)
  • New: added Audio.MONO and Audio.STEREO to control the channel count for videos and video snapshots (#506)
  • New: added cameraUseDeviceOrientation to choose whether picture and video outputs should consider the device orientation or not (#497)
  • Improvement: improved Camera2 stability and various bugs fixed (e.g. #501)
  • Improvement: improved video snapshots speed, quality and stability (#506)…v2.0.0-rc1


  • New: Full featured Camera2 integration! Use cameraExperimental="true" and cameraEngine="camera2" to test this out. (#490)
  • Improvement: we now choose a video recording profile that is compatible with the chosen size. Should fix some video recording issues. (#477)
  • Improvement: most internals are now open to be accessed by subclassing. Feel free to open PRs with more protected methods to be overriden. ([#494][494])
  • Breaking change: some public classes have been moved to different packages. See table here. (#482)
  • Breaking change: the listener methods onFocusStart and onFocusEnd are now called onAutoFocusStart and onAutoFocusEnd. (#484)
  • Breaking change: the gesture actions focus and focusWithMarker have been removed and replaced by autoFocus, which shows no marker. (#484)
  • New: new API called setAutoFocusMarker() lets you choose your own marker. (#484)

If you were using focus, just switch to autoFocus.

If you were using focusWithMarker, you can add back the old marker.…v2.0.0-beta06


  • Fixed FrameProcessor freeze and release behavior, was broken (#431)
  • New: new api setAutoFocusResetDelay to control the delay to reset the focus after autofocus was performed, thanks to @cneuwirt (#435)
  • Faster camera preview on layout changes (#403)
  • A few bug fixes (#471)…v2.0.0-beta05


  • Renames setPreviewSize to setPreviewStreamSize (previewSize suggests it is related to the view size but it’s not) (#393)
  • Added new APIs setSnapshotMaxWidth and setSnapshotMaxHeight (#393). You can now have a good looking preview but still take low-res snapshots using these snapshot constraints. Before this, the two sizes were coupled.…v2.0.0-beta04


  • Fixed a few bugs (#392)
  • Important fixes to video snapshot recording (#374)…v2.0.0-beta03


  • Fixed important bugs (#356)
  • Picture snapshots are now flipped when front camera is used (#360)
  • Added PictureResult.getFacing() and VideoResult.getFacing() (#360)…v2.0.0-beta02


This is the first beta release. For changes with respect to v1, please take a look at the migration guide.


This is the last release before v2.

  • Fixed: crash when using TextureView in API 28, thanks to @Keyrillanskiy (#297)
  • Fixed: restore Frame Processor callbacks after taking videos, thanks to @stefanJi (#344)
  • Enhancement: when horizontal, camera now uses the last available orientation, thanks to @aartikov (#290)
  • Changed: we now swallow exceptions during autoFocus that were happening unpredictably on some devices, thanks to @mahdi-ninja (#332)…v1.6.1


  • Lifecycle support. Use setLifecycleOwner instead of calling start, stop and destroy (#265)
  • Enhancement: provide synchronous version of CameraUtils.decodeBitmap thanks to @athornz (#224)
  • Enhancement: prevent possible context leak thanks to @MatFl (#245)
  • Bug: fix crash when using default VideoCodec thanks to @Namazed (#264)
  • Enhancement: CameraException.getReason() gives some insight about the error (#265)
  • Enhancement: Common crashes are now being posted to the error callback instead of crashing the app (#265)…v1.6.0


  • Bug: byte array length for Frames was incorrect thanks to @ssakhavi (#205)
  • Bug: gestures were crashing in some conditions (#222)
  • Bug: import correctly the ExifInterface library (#222)
  • Updated dependencies thanks to @caleb-allen (#190)…v1.5.1


  • New: set encoder for video recordings with cameraVideoCodec (#174)
  • New: set max duration for videos with cameraVideoMaxDuration (#172)
  • Enhancement: reduced lag with continuous gestures (ev, zoom) (#170)
  • Bug: tap to focus was crashing on some devices (#167)
  • Bug: capturePicture was breaking if followed by another event soon after (#173)…v1.5.0


  • Add prefix to XML resources so they don’t collide, thanks to @RocketRider (#162)
  • Add videoMaxSize API and XML attribute, to set max size video in bytes, thanks to @chaitanyaraghav (#104)
  • Improved the preview size selection, thanks to @YeungKC (#133)
  • Improved the playSounds attribute, was playing incorrectly, thanks to @xp-vit (#143)…v1.4.2


  • Fixed a bug that would flip the front camera preview on some devices (#112)
  • Two new CameraOptions APIs: o.getSupportedPictureSizes() and o.getSupportedPictureAspectRatios() (#101)
  • Most controls (video quality, hdr, grid, session type, audio, white balance, flash, facing) now inherit from a base Control class (#105). This let us add new APIs:

    • CameraView.set(Control): sets the control to the given value, e.g. set(Flash.AUTO)
    • CameraOptions.supports(Control): returns true if the control is supported
    • CameraOptions.getSupportedControls(Class<? extends Control>): returns list of supported controls of a given kind…v1.4.1


  • CameraView is now completely thread-safe. All actions are asynchronous. (#97) This has some breaking drawbacks. Specifically, the get methods (e.g., getWhiteBalance) might not return the correct value while it is being changed. So don’t trust them right after you have changed the value. Instead, always check the CameraOptions to see if the value you want is supported.
  • Added error handling (#97) in CameraListener.onCameraError(CameraException). At the moment, all exceptions there are unrecoverable. When the method is called, the camera is showing a black preview. This is a good moment to show an error dialog to the user. You can also try to start() again but that is not guaranteed to work.
  • Long requested ability to set the picture output size (#99). Can be done through CameraView.setPictureSize() or through new XML attributes starting with cameraPictureSize. Please refer to docs about it.
  • Deprecated toggleFacing. It was unreliable and will be removed.
  • Deprecated getCaptureSize. Use getPictureSize instead.
  • Fixed bugs.…v1.4.0


  • Fixed a memory leak thanks to @andrewmunn (#92)
  • Reduced memory usage when using cropOutput thanks to @RobertoMorelos (#93)
  • Improved efficiency for Frame processors, recycle buffers and Frames (#94)…v1.3.2


  • Fixed a bug that would make setFacing and other APIs freeze the camera (#86)
  • Fixed ConcurrentModificationExceptions during CameraListener callbacks (#88)…v1.3.1


  • Ability to inject frame processors to do your own visual tasks (barcodes, facial recognition etc.) (#82)
  • Ability to inject external loggers (e.g. Crashlytics) to listen for internal logging events (#80)
  • Improved CameraUtils.decodeBitmap, you can now pass maxWidth and maxHeight to avoid OOM (#83)
  • Updated dependencies thanks to @v-gar (#73)…v1.3.0