Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a6306d4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add support for SessionConfiguration queries"

parents 4e654425 277de173
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -16499,6 +16499,7 @@ package android.hardware.camera2 {
    method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
    method public abstract void createReprocessableCaptureSessionByConfigurations(android.hardware.camera2.params.InputConfiguration, java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
    method public abstract java.lang.String getId();
    method public boolean isSessionConfigurationSupported(android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
    field public static final int TEMPLATE_MANUAL = 6; // 0x6
    field public static final int TEMPLATE_PREVIEW = 1; // 0x1
    field public static final int TEMPLATE_RECORD = 3; // 0x3
@@ -17096,8 +17097,9 @@ package android.hardware.camera2.params {
    field public static final int RED = 0; // 0x0
  }
  public final class SessionConfiguration {
  public final class SessionConfiguration implements android.os.Parcelable {
    ctor public SessionConfiguration(int, java.util.List<android.hardware.camera2.params.OutputConfiguration>, java.util.concurrent.Executor, android.hardware.camera2.CameraCaptureSession.StateCallback);
    method public int describeContents();
    method public java.util.concurrent.Executor getExecutor();
    method public android.hardware.camera2.params.InputConfiguration getInputConfiguration();
    method public java.util.List<android.hardware.camera2.params.OutputConfiguration> getOutputConfigurations();
@@ -17106,6 +17108,8 @@ package android.hardware.camera2.params {
    method public android.hardware.camera2.CameraCaptureSession.StateCallback getStateCallback();
    method public void setInputConfiguration(android.hardware.camera2.params.InputConfiguration);
    method public void setSessionParameters(android.hardware.camera2.CaptureRequest);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.hardware.camera2.params.SessionConfiguration> CREATOR;
    field public static final int SESSION_HIGH_SPEED = 1; // 0x1
    field public static final int SESSION_REGULAR = 0; // 0x0
  }
+30 −0
Original line number Diff line number Diff line
@@ -967,6 +967,36 @@ public abstract class CameraDevice implements AutoCloseable {
    @Override
    public abstract void close();

    /**
     * Checks whether a particular {@link SessionConfiguration} is supported by the camera device.
     *
     * <p>This method performs a runtime check of a given {@link SessionConfiguration}. The result
     * confirms whether or not the passed session configuration can be successfully used to
     * create a camera capture session using
     * {@link CameraDevice#createCaptureSession(SessionConfiguration)}.
     * </p>
     *
     * <p>The method can be called at any point before, during and after active capture session.
     * It must not impact normal camera behavior in any way and must complete significantly
     * faster than creating a regular or constrained capture session.</p>
     *
     * <p>Note that session parameters will be ignored and calls to
     * {@link SessionConfiguration#setSessionParameters} are not required.</p>
     *
     * @return {@code true} if the given session configuration is supported by the camera device
     *         {@code false} otherwise.
     * @throws UnsupportedOperationException if the query operation is not supported by the camera
     *                                       device
     * @throws IllegalArgumentException if the session configuration is invalid
     * @throws CameraAccessException if the camera device is no longer connected or has
     *                               encountered a fatal error
     * @throws IllegalStateException if the camera device has been closed
     */
    public boolean isSessionConfigurationSupported(
            @NonNull SessionConfiguration sessionConfig) throws CameraAccessException {
        throw new UnsupportedOperationException("Subclasses must override this method");
    }

    /**
     * A callback objects for receiving updates about the state of a camera device.
     *
+11 −0
Original line number Diff line number Diff line
@@ -703,6 +703,17 @@ public class CameraDeviceImpl extends CameraDevice
        }
    }

    @Override
    public boolean isSessionConfigurationSupported(
            @NonNull SessionConfiguration sessionConfig) throws CameraAccessException,
            UnsupportedOperationException, IllegalArgumentException {
        synchronized(mInterfaceLock) {
            checkIfCameraClosedOrInError();

            return mRemoteDevice.isSessionConfigurationSupported(sessionConfig);
        }
    }

    /**
     * For use by backwards-compatibility code only.
     */
+21 −0
Original line number Diff line number Diff line
@@ -30,9 +30,11 @@ import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.ICameraDeviceUser;
import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.SessionConfiguration;
import android.hardware.camera2.utils.SubmitInfo;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.view.Surface;

/**
@@ -181,6 +183,25 @@ public class ICameraDeviceUserWrapper {
        }
    }

    public boolean isSessionConfigurationSupported(SessionConfiguration sessionConfig)
            throws CameraAccessException {
        try {
            return mRemoteDevice.isSessionConfigurationSupported(sessionConfig);
        } catch (ServiceSpecificException e) {
            if (e.errorCode == ICameraService.ERROR_INVALID_OPERATION) {
                throw new UnsupportedOperationException("Session configuration query not " +
                        "supported");
            } else if (e.errorCode == ICameraService.ERROR_ILLEGAL_ARGUMENT) {
                throw new IllegalArgumentException("Invalid session configuration");
            }

            throw e;
        } catch (Throwable t) {
            CameraManager.throwAsPublicException(t);
            throw new UnsupportedOperationException("Unexpected exception", t);
        }
    }

    public long flush() throws CameraAccessException {
        try {
            return mRemoteDevice.flush();
+7 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.camera2.impl.CaptureResultExtras;
import android.hardware.camera2.impl.PhysicalCaptureResultInfo;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.SessionConfiguration;
import android.hardware.camera2.utils.SubmitInfo;
import android.os.ConditionVariable;
import android.os.IBinder;
@@ -479,6 +480,12 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
        return mLegacyDevice.cancelRequest(requestId);
    }

    @Override
    public boolean isSessionConfigurationSupported(SessionConfiguration sessionConfig) {
        // TODO: Add support for this in legacy mode
        throw new UnsupportedOperationException("Session configuration query not supported!");
    }

    @Override
    public void beginConfigure() {
        if (DEBUG) {
Loading