public interface

Camera

 androidx.camera.core.Camera

Subclasses:

LifecycleCamera, CameraUseCaseAdapter, CameraInternal

Gradle dependencies

compile group: 'androidx.camera', name: 'camera-core', version: '1.5.0-alpha01'

  • groupId: androidx.camera
  • artifactId: camera-core
  • version: 1.5.0-alpha01

Artifact androidx.camera:camera-core:1.5.0-alpha01 it located at Google repository (https://maven.google.com/)

Overview

The camera interface is used to control the flow of data to use cases, control the camera via the CameraControl, and publish the state of the camera via CameraInfo.

An example of how to obtain an instance of this class can be found in the androidx.camera.lifecycle package.

Summary

Methods
public CameraControlgetCameraControl()

Returns the CameraControl for the Camera.

public CameraInfogetCameraInfo()

Returns information about this camera.

public CameraConfiggetExtendedConfig()

Get the currently set extended config of the Camera.

public booleanisUseCasesCombinationSupported(boolean withStreamSharing, UseCase useCases[])

Checks whether the use cases combination is supported.

public booleanisUseCasesCombinationSupported(UseCase useCases[])

Checks whether the use cases combination is supported.

public booleanisUseCasesCombinationSupportedByFramework(UseCase useCases[])

Checks whether the use cases combination is supported by camera framework.

Methods

public CameraControl getCameraControl()

Returns the CameraControl for the Camera.

The CameraControl provides various asynchronous operations like zoom, focus and metering. CameraControl is ready to start operations immediately after use cases are bound to the Camera. When all UseCases are unbound, or when camera is closing or closed because lifecycle onStop happens, the CameraControl will reject all operations.

Each method of CameraControl returns a which apps can use to check the asynchronous result. If the operation is not allowed in current state, the returned will fail immediately with CameraControl.OperationCanceledException.

public CameraInfo getCameraInfo()

Returns information about this camera.

The returned information can be used to query static camera characteristics or observe the runtime state of the camera.

Returns:

the CameraInfo.

public CameraConfig getExtendedConfig()

Get the currently set extended config of the Camera.

public boolean isUseCasesCombinationSupported(UseCase useCases[])

Checks whether the use cases combination is supported.

Parameters:

useCases: to be checked whether can be supported.

Returns:

whether the use cases combination is supported by the camera.

public boolean isUseCasesCombinationSupportedByFramework(UseCase useCases[])

Checks whether the use cases combination is supported by camera framework.

This method verify whether the given use cases can be supported solely by the surface configurations they require. It doesn't consider the optimization done by CameraX such as StreamSharing.

Parameters:

useCases: to be checked whether can be supported.

Returns:

whether the use cases combination is supported by the camera.

public boolean isUseCasesCombinationSupported(boolean withStreamSharing, UseCase useCases[])

Checks whether the use cases combination is supported.

Parameters:

withStreamSharing: true if StreamSharing feature is considered, otherwise false.
useCases: to be checked whether can be supported.

Returns:

whether the use cases combination is supported by the camera.

Source

/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.camera.core;

import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.camera.core.impl.CameraConfig;

import com.google.common.util.concurrent.ListenableFuture;

/**
 * The camera interface is used to control the flow of data to use cases, control the
 * camera via the {@link CameraControl}, and publish the state of the camera via {@link CameraInfo}.
 *
 * <p>{@linkplain androidx.camera.lifecycle.ProcessCameraProvider#bindToLifecycle(
 *androidx.lifecycle.LifecycleOwner, CameraSelector, UseCase...) An example} of how to obtain an
 * instance of this class can be found in the {@link androidx.camera.lifecycle} package.
 */
public interface Camera {

    /**
     * Returns the {@link CameraControl} for the {@link Camera}.
     *
     * <p>The {@link CameraControl} provides various asynchronous operations like zoom, focus and
     * metering. {@link CameraControl} is ready to start operations immediately after use cases
     * are bound to the {@link Camera}. When all {@link UseCase}s are unbound, or when camera is
     * closing or closed because lifecycle onStop happens, the {@link CameraControl} will reject
     * all operations.
     *
     * <p>Each method of {@link CameraControl} returns a {@link ListenableFuture} which apps can
     * use to check the asynchronous result. If the operation is not allowed in current state,
     * the returned {@link ListenableFuture} will fail immediately with
     * {@link CameraControl.OperationCanceledException}.
     */
    @NonNull
    CameraControl getCameraControl();

    /**
     * Returns information about this camera.
     *
     * <p>The returned information can be used to query static camera
     * characteristics or observe the runtime state of the camera.
     *
     * @return the {@link CameraInfo}.
     */
    @NonNull
    CameraInfo getCameraInfo();

    /**
     * Get the currently set extended config of the Camera.
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
    @NonNull
    CameraConfig getExtendedConfig();

    /**
     * Checks whether the use cases combination is supported.
     *
     * @param useCases to be checked whether can be supported.
     * @return whether the use cases combination is supported by the camera.
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
    default boolean isUseCasesCombinationSupported(@NonNull UseCase... useCases) {
        return isUseCasesCombinationSupported(true, useCases);
    }

    /**
     * Checks whether the use cases combination is supported by camera framework.
     *
     * <p>This method verify whether the given use cases can be supported solely by the surface
     * configurations they require. It doesn't consider the optimization done by CameraX such as
     * {@link androidx.camera.core.streamsharing.StreamSharing}.
     *
     * @param useCases to be checked whether can be supported.
     * @return whether the use cases combination is supported by the camera.
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
    default boolean isUseCasesCombinationSupportedByFramework(@NonNull UseCase... useCases) {
        return isUseCasesCombinationSupported(false, useCases);
    }

    /**
     * Checks whether the use cases combination is supported.
     *
     * @param withStreamSharing {@code true} if
     * {@link androidx.camera.core.streamsharing.StreamSharing} feature is considered, otherwise
     * {@code false}.
     * @param useCases to be checked whether can be supported.
     * @return whether the use cases combination is supported by the camera.
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
    default boolean isUseCasesCombinationSupported(boolean withStreamSharing,
            @NonNull UseCase... useCases) {
        return true;
    }
}