public interface

CameraControlInternal

implements CameraControl

 androidx.camera.core.impl.CameraControlInternal

Subclasses:

Camera2CameraControlImpl

Gradle dependencies

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

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

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

Overview

The CameraControlInternal Interface.

CameraControlInternal is used for global camera operations like zoom, focus, flash and triggering AF/AE.

Summary

Fields
public static final CameraControlInternalDEFAULT_EMPTY_INSTANCE

Methods
public voidaddInteropConfig(Config config)

Adds the Interop configuration.

public voidaddZslConfig(Size resolution, SessionConfig.Builder sessionConfigBuilder)

Adds zero-shutter lag config to SessionConfig.

public voidclearInteropConfig()

Clears the Interop configuration set previously.

public intgetFlashMode()

Returns the current flash mode.

public ConfiggetInteropConfig()

Gets the Interop configuration.

public RectgetSensorRect()

Gets the full sensor rect.

public SessionConfiggetSessionConfig()

Gets the current SessionConfig.

public voidsetFlashMode(int flashMode)

Sets current flash mode

public voidsetZslDisabled(boolean disabled)

Sets zsl disabled or not.

public <any>submitStillCaptureRequests(java.util.List<CaptureConfig> captureConfigs, int captureMode, int flashType)

Performs still capture requests with the desired capture mode.

Fields

public static final CameraControlInternal DEFAULT_EMPTY_INSTANCE

Methods

public int getFlashMode()

Returns the current flash mode.

public void setFlashMode(int flashMode)

Sets current flash mode

Parameters:

flashMode: the ImageCapture.FlashMode.

public void addZslConfig(Size resolution, SessionConfig.Builder sessionConfigBuilder)

Adds zero-shutter lag config to SessionConfig.

Parameters:

resolution: surface resolution.
sessionConfigBuilder: session config builder.

public void setZslDisabled(boolean disabled)

Sets zsl disabled or not.

Parameters:

disabled: True if zero-shutter lag should be disabled. Otherwise, should not be disabled. However, enabling zero-shutter lag needs other conditions e.g. flash mode OFF, so setting to false doesn't guarantee zero-shutter lag to be always ON.

public <any> submitStillCaptureRequests(java.util.List<CaptureConfig> captureConfigs, int captureMode, int flashType)

Performs still capture requests with the desired capture mode.

Parameters:

captureConfigs: capture configuration used for creating CaptureRequest
captureMode: the mode to capture the image, possible value is ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY or ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY
flashType: the options when flash is required for taking a picture.

Returns:

ListenableFuture that would be completed while all the captures are completed. It would fail with a ImageCapture.ERROR_CAMERA_CLOSED when the capture was canceled, or a ImageCapture.ERROR_CAPTURE_FAILED when the capture was failed.

public SessionConfig getSessionConfig()

Gets the current SessionConfig.

When the SessionConfig is changed, CameraControlInternal.ControlUpdateCallback.onCameraControlUpdateSessionConfig() will be called to notify the change.

public Rect getSensorRect()

Gets the full sensor rect.

public void addInteropConfig(Config config)

Adds the Interop configuration.

public void clearInteropConfig()

Clears the Interop configuration set previously.

public Config getInteropConfig()

Gets the Interop configuration.

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.impl;

import static androidx.camera.core.ImageCapture.FLASH_MODE_OFF;

import android.graphics.Rect;
import android.util.Size;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.camera.core.CameraControl;
import androidx.camera.core.FocusMeteringAction;
import androidx.camera.core.FocusMeteringResult;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCapture.CaptureMode;
import androidx.camera.core.ImageCapture.FlashMode;
import androidx.camera.core.ImageCapture.FlashType;
import androidx.camera.core.impl.utils.futures.Futures;

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

import java.util.Collections;
import java.util.List;

/**
 * The CameraControlInternal Interface.
 *
 * <p>CameraControlInternal is used for global camera operations like zoom, focus, flash and
 * triggering
 * AF/AE.
 */
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public interface CameraControlInternal extends CameraControl {

    /** Returns the current flash mode. */
    @FlashMode
    int getFlashMode();

    /**
     * Sets current flash mode
     *
     * @param flashMode the {@link FlashMode}.
     */
    void setFlashMode(@FlashMode int flashMode);

    /**
     * Adds zero-shutter lag config to {@link SessionConfig}.
     * @param resolution surface resolution.
     * @param sessionConfigBuilder session config builder.
     */
    void addZslConfig(
            @NonNull Size resolution,
            @NonNull SessionConfig.Builder sessionConfigBuilder);

    /**
     * Sets zsl disabled or not.
     *
     * @param disabled True if zero-shutter lag should be disabled. Otherwise, should not be
     *                 disabled. However, enabling zero-shutter lag needs other conditions e.g.
     *                 flash mode OFF, so setting to false doesn't guarantee zero-shutter lag to
     *                 be always ON.
     */
    void setZslDisabled(boolean disabled);

    /**
     * Performs still capture requests with the desired capture mode.
     *
     * @param captureConfigs capture configuration used for creating CaptureRequest
     * @param captureMode the mode to capture the image, possible value is
     * {@link ImageCapture#CAPTURE_MODE_MINIMIZE_LATENCY} or
     * {@link ImageCapture#CAPTURE_MODE_MAXIMIZE_QUALITY}
     * @param flashType the options when flash is required for taking a picture.
     * @return ListenableFuture that would be completed while all the captures are completed. It
     * would fail with a {@link androidx.camera.core.ImageCapture#ERROR_CAMERA_CLOSED} when the
     * capture was canceled, or a {@link androidx.camera.core.ImageCapture#ERROR_CAPTURE_FAILED}
     * when the capture was failed.
     */
    @NonNull
    ListenableFuture<List<Void>> submitStillCaptureRequests(
            @NonNull List<CaptureConfig> captureConfigs,
            @CaptureMode int captureMode,
            @FlashType int flashType);

    /**
     * Gets the current SessionConfig.
     *
     * <p>When the SessionConfig is changed,
     * {@link ControlUpdateCallback#onCameraControlUpdateSessionConfig()} will be called to
     * notify the change.
     */
    @NonNull
    SessionConfig getSessionConfig();

    /**
     * Gets the full sensor rect.
     */
    @NonNull
    Rect getSensorRect();

    /**
     * Adds the Interop configuration.
     */
    void addInteropConfig(@NonNull Config config);

    /**
     * Clears the Interop configuration set previously.
     */
    void clearInteropConfig();

    /**
     * Gets the Interop configuration.
     */
    @NonNull
    Config getInteropConfig();

    CameraControlInternal DEFAULT_EMPTY_INSTANCE = new CameraControlInternal() {
        @FlashMode
        @Override
        public int getFlashMode() {
            return FLASH_MODE_OFF;
        }

        @Override
        public void setFlashMode(@FlashMode int flashMode) {
        }

        @Override
        public void setZslDisabled(boolean disabled) {
        }

        @Override
        public void addZslConfig(@NonNull Size resolution,
                @NonNull SessionConfig.Builder sessionConfigBuilder) {
        }

        @NonNull
        @Override
        public ListenableFuture<Void> enableTorch(boolean torch) {
            return Futures.immediateFuture(null);
        }

        @NonNull
        @Override
        public ListenableFuture<Integer> setExposureCompensationIndex(int exposure) {
            return Futures.immediateFuture(0);
        }

        @NonNull
        @Override
        public ListenableFuture<List<Void>> submitStillCaptureRequests(
                @NonNull List<CaptureConfig> captureConfigs,
                @CaptureMode int captureMode,
                @FlashType int flashType) {
            return Futures.immediateFuture(Collections.emptyList());
        }

        @NonNull
        @Override
        public SessionConfig getSessionConfig() {
            return SessionConfig.defaultEmptySessionConfig();
        }

        @NonNull
        @Override
        public Rect getSensorRect() {
            return new Rect();
        }

        @NonNull
        @Override
        public ListenableFuture<FocusMeteringResult> startFocusAndMetering(
                @NonNull FocusMeteringAction action) {
            return Futures.immediateFuture(FocusMeteringResult.emptyInstance());
        }

        @NonNull
        @Override
        public ListenableFuture<Void> cancelFocusAndMetering() {
            return Futures.immediateFuture(null);
        }

        @NonNull
        @Override
        public ListenableFuture<Void> setZoomRatio(float ratio) {
            return Futures.immediateFuture(null);
        }

        @NonNull
        @Override
        public ListenableFuture<Void> setLinearZoom(float linearZoom) {
            return Futures.immediateFuture(null);
        }

        @Override
        public void addInteropConfig(@NonNull Config config) {
        }

        @Override
        public void clearInteropConfig() {
        }

        @NonNull
        @Override
        public Config getInteropConfig() {
            return null;
        }
    };

    /** Listener called when CameraControlInternal need to notify event. */
    interface ControlUpdateCallback {

        /**
         * Called when CameraControlInternal has updated session configuration.
         *
         * <p>The latest SessionConfig can be obtained by calling {@link #getSessionConfig()}.
         */
        void onCameraControlUpdateSessionConfig();

        /** Called when CameraControlInternal need to send capture requests. */
        void onCameraControlCaptureRequests(@NonNull List<CaptureConfig> captureConfigs);
    }

    /**
     * An exception thrown when the camera control is failed to execute the request.
     */
    final class CameraControlException extends Exception {
        @NonNull
        private CameraCaptureFailure mCameraCaptureFailure;

        public CameraControlException(@NonNull CameraCaptureFailure failure) {
            super();
            mCameraCaptureFailure = failure;
        }

        public CameraControlException(@NonNull CameraCaptureFailure failure,
                @NonNull Throwable cause) {
            super(cause);
            mCameraCaptureFailure = failure;
        }

        @NonNull
        public CameraCaptureFailure getCameraCaptureFailure() {
            return mCameraCaptureFailure;
        }
    }
}