This section introduces some key concepts about media capturing, and about the Mode
control.
The mode control determines what can be captured with the standard APIs (read below). It can be set through XML
or dynamically changed using cameraView.setMode()
. The current mode value has a few consequences:
takeVideo
will throw an exception.takePicture
will throw an exception.video
session, the record audio permission will be requested.
If this is needed, the audio permission should be added to your manifest or the app will crash.
Please read the permissions page.cameraView.setMode(Mode.PICTURE); // for pictures
cameraView.setMode(Mode.VIDEO); // for video
The library supports 4 capture APIs, two for pictures and two for videos.
takePicture()
and takeVideo()
. These take a high quality picture or video, depending
on the configuration values that were used. The standard APIs must be called in the appropriate Mode
.takePictureSnapshot()
and takeVideoSnapshot()
. These take a super fast, reliable
snapshot of the camera preview. The snapshot APIs can be called in any Mode
(you can snap videos in picture mode).Beyond being extremely fast, and small in size (though low quality), snapshot APIs have the benefit
that the result is automatically cropped to match the view bounds. This means that, if CameraView
is square,
resulting snapshots are square as well, no matter what the sensor available sizes are.
Method | Takes | Quality | Callable in Mode.PICTURE |
Callable in Mode.VIDEO |
Auto crop | Output size |
---|---|---|---|---|---|---|
takePicture() |
Pictures | Standard | yes |
no |
no |
That of setPictureSize |
takeVideo(File) |
Videos | Standard | no |
yes |
no |
That of setVideoSize |
takePictureSnapshot() |
Pictures | Snapshot | yes |
yes |
yes |
That of the preview stream, or less |
takeVideoSnapshot(File) |
Videos | Snapshot | yes |
yes |
yes |
That of the preview stream, or less |
Please note that the video snapshot features require:
- API 18. If called on earlier versions, it throws an
IllegalStateException
- An OpenGL preview (see previews). If not, it throws an
IllegalStateException
This is allowed at the following conditions:
takePictureSnapshot()
is used (no HQ pictures)GL_SURFACE
preview is used (see previews)<com.otaliastudios.cameraview.CameraView
app:cameraMode="picture|video"/>
camera.addCameraListener(new CameraListener() {
@Override
public void onPictureShutter() {
// Picture capture started!
}
@Override
public void onPictureTaken(@NonNull PictureResult result) {
// A Picture was taken!
}
@Override
public void onVideoTaken(@NonNull VideoResult result) {
// A Video was taken!
}
@Override
public void onVideoRecordingStart() {
// Notifies that the actual video recording has started.
// Can be used to show some UI indicator for video recording or counting time.
}
@Override
public void onVideoRecordingEnd() {
// Notifies that the actual video recording has ended.
// Can be used to remove UI indicators added in onVideoRecordingStart.
}
})
Method | Description |
---|---|
setMode() |
Either Mode.VIDEO or Mode.PICTURE . |
isTakingVideo() |
Returns true if the camera is currently recording a video. |
isTakingPicture() |
Returns true if the camera is currently capturing a picture. |
takePicture() |
Takes a high quality picture. |
takeVideo(File) |
Takes a high quality video. |
takeVideo(FileDescriptor) |
Takes a high quality video. |
takeVideo(File, long) |
Takes a high quality video, stopping after the given duration. |
takeVideo(FileDescriptor, long) |
Takes a high quality video, stopping after the given duration. |
takePictureSnapshot() |
Takes a picture snapshot. |
takeVideoSnapshot(File) |
Takes a video snapshot. |
takeVideoSnapshot(File, long) |
Takes a video snapshot, stopping after the given duration. |
getPictureSize() |
Returns the output picture size, accounting for any rotation. Null while in VIDEO mode. |
getVideoSize() |
Returns the output video size, accounting for any rotation. Null while in PICTURE mode. |
getSnapshotSize() |
Returns the size of pictures taken with takePictureSnapshot() or videos taken with takeVideoSnapshot() . Accounts for rotation and cropping. |