You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Mattia Iavarone 418f1ed662 Use onStopVideo callback for restoring preview 5 years ago
.github Release v2.0.0 (#531) 5 years ago
cameraview Use onStopVideo callback for restoring preview 5 years ago
demo Real-time filters gestures (#537) 5 years ago
docs Release v2.1.0 (#541) 5 years ago
gradle/wrapper Tests + AGP updates (#492) 5 years ago
.gitignore Revert min support to API 19 8 years ago
.travis.yml Fix javadocs 5 years ago
LICENSE Add license info (#68) 7 years ago
README.md Update README.md 5 years ago
build.gradle Fix pom file (#517) 5 years ago
codecov.yml Flip snapshots, add PictureResult.getFacing and VideoResult.getFacing (#360) 6 years ago
gradle.properties Migrate to AndroidX 6 years ago
gradlew Initial commit 8 years ago
gradlew.bat Initial commit 8 years ago
settings.gradle Refactor module name 7 years ago

README.md

Build Status Code Coverage Release Issues Funding

Post-processing videos or want to reduce video size before uploading? Take a look at our Transcoder.

CameraView

CameraView is a well documented, high-level library that makes capturing pictures and videos easy, addressing most of the common issues and needs, and still leaving you with flexibility where needed.

api 'com.otaliastudios:cameraview:2.1.0'
  • Fast & reliable
  • Gestures support [docs]
  • Real-time filters [docs]
  • Camera1 or Camera2 powered engine [docs]
  • Frame processing support [docs]
  • Watermarks & animated overlays [docs]
  • OpenGL powered preview [docs]
  • Take high-quality content with takePicture and takeVideo [docs]
  • Take super-fast snapshots with takePictureSnapshot and takeVideoSnapshot [docs]
  • Smart sizing: create a CameraView of any size [docs]
  • Control HDR, flash, zoom, white balance, exposure, location, grid drawing & more [docs]
  • Lightweight
  • Works down to API level 15
  • Well tested

Read the official website for setup instructions and documentation. You might also be interested in changelog or in the v1 migration guide.

If you like the project, use it with profit, or simply want to thank back, please consider donating to the project now! You can either make a one time donation or become a sponsor, in which case your company logo will immediately show up here.

Thank you for any contribution - it is a nice reward for what has been done until now, and a motivation boost to push the library forward.

<com.otaliastudios.cameraview.CameraView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:cameraPictureSizeMinWidth="@integer/picture_min_width"
    app:cameraPictureSizeMinHeight="@integer/picture_min_height"
    app:cameraPictureSizeMaxWidth="@integer/picture_max_width"
    app:cameraPictureSizeMaxHeight="@integer/picture_max_height"
    app:cameraPictureSizeMinArea="@integer/picture_min_area"
    app:cameraPictureSizeMaxArea="@integer/picture_max_area"
    app:cameraPictureSizeSmallest="false|true"
    app:cameraPictureSizeBiggest="false|true"
    app:cameraPictureSizeAspectRatio="@string/video_ratio"
    app:cameraVideoSizeMinWidth="@integer/video_min_width"
    app:cameraVideoSizeMinHeight="@integer/video_min_height"
    app:cameraVideoSizeMaxWidth="@integer/video_max_width"
    app:cameraVideoSizeMaxHeight="@integer/video_max_height"
    app:cameraVideoSizeMinArea="@integer/video_min_area"
    app:cameraVideoSizeMaxArea="@integer/video_max_area"
    app:cameraVideoSizeSmallest="false|true"
    app:cameraVideoSizeBiggest="false|true"
    app:cameraVideoSizeAspectRatio="@string/video_ratio"
    app:cameraSnapshotMaxWidth="@integer/snapshot_max_width"
    app:cameraSnapshotMaxHeight="@integer/snapshot_max_height"
    app:cameraVideoBitRate="@integer/video_bit_rate"
    app:cameraAudioBitRate="@integer/audio_bit_rate"
    app:cameraGestureTap="none|autoFocus|takePicture"
    app:cameraGestureLongTap="none|autoFocus|takePicture"
    app:cameraGesturePinch="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraGestureScrollHorizontal="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraGestureScrollVertical="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraEngine="camera1|camera2"
    app:cameraPreview="glSurface|surface|texture"
    app:cameraFacing="back|front"
    app:cameraHdr="on|off"
    app:cameraFlash="on|auto|torch|off"
    app:cameraWhiteBalance="auto|cloudy|daylight|fluorescent|incandescent"
    app:cameraMode="picture|video"
    app:cameraAudio="on|off|mono|stereo"
    app:cameraGrid="draw3x3|draw4x4|drawPhi|off"
    app:cameraGridColor="@color/grid_color"
    app:cameraPlaySounds="true|false"
    app:cameraVideoMaxSize="@integer/video_max_size"
    app:cameraVideoMaxDuration="@integer/video_max_duration"
    app:cameraVideoCodec="deviceDefault|h264|h263"
    app:cameraAutoFocusResetDelay="@integer/autofocus_delay"
    app:cameraAutoFocusMarker="@string/cameraview_default_autofocus_marker"
    app:cameraUseDeviceOrientation="true|false"
    app:cameraFilter="@string/real_time_filter"
    app:cameraExperimental="false|true">
    
    <!-- Watermark! -->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:src="@drawable/watermark"
        app:layout_drawOnPreview="true|false"
        app:layout_drawOnPictureSnapshot="true|false"
        app:layout_drawOnVideoSnapshot="true|false"/>
        
</com.otaliastudios.cameraview.CameraView>

Backers

Thanks to all backers! Become a backer.

Sponsors

Thanks to sponsors! Become a sponsor and have your logo here.