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

Commit 50a87aa8 authored by Emilian Peev's avatar Emilian Peev Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add support for client requests&results for advanced extensions" into tm-dev

parents 43759074 d6b3ab77
Loading
Loading
Loading
Loading
+33 −18
Original line number Original line Diff line number Diff line
@@ -824,21 +824,31 @@ public final class CameraExtensionCharacteristics {
            if (!isExtensionSupported(mCameraId, extension, mChars)) {
            if (!isExtensionSupported(mCameraId, extension, mChars)) {
                throw new IllegalArgumentException("Unsupported extension");
                throw new IllegalArgumentException("Unsupported extension");
            }
            }

            CameraMetadataNative captureRequestMeta = null;
            if (areAdvancedExtensionsSupported()) {
                IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
                extender.init(mCameraId);
                captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId);
            } else {
                Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
                Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
                        initializeExtension(extension);
                        initializeExtension(extension);
                extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
                extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
                extenders.second.init(mCameraId, mChars.getNativeMetadata());
                extenders.second.init(mCameraId, mChars.getNativeMetadata());
            CameraMetadataNative captureRequestMeta =
                captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys();
                    extenders.second.getAvailableCaptureRequestKeys();
                extenders.second.onDeInit();
            }


            if (captureRequestMeta != null) {
            if (captureRequestMeta != null) {
                int[] requestKeys = captureRequestMeta.get(
                int[] requestKeys = captureRequestMeta.get(
                        CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS);
                        CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS);
                if (requestKeys == null) {
                if (requestKeys == null) {
                    throw new AssertionError("android.request.availableRequestKeys must be non-null"
                    throw new AssertionError(
                            "android.request.availableRequestKeys must be non-null"
                                    + " in the characteristics");
                                    + " in the characteristics");
                }
                }
                CameraCharacteristics requestChars = new CameraCharacteristics(captureRequestMeta);
                CameraCharacteristics requestChars = new CameraCharacteristics(
                        captureRequestMeta);


                Object crKey = CaptureRequest.Key.class;
                Object crKey = CaptureRequest.Key.class;
                Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey;
                Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey;
@@ -854,7 +864,6 @@ public final class CameraExtensionCharacteristics {
            if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) {
            if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) {
                ret.add(CaptureRequest.JPEG_ORIENTATION);
                ret.add(CaptureRequest.JPEG_ORIENTATION);
            }
            }
            extenders.second.onDeInit();
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw new IllegalStateException("Failed to query the available capture request keys!");
            throw new IllegalStateException("Failed to query the available capture request keys!");
        } finally {
        } finally {
@@ -894,12 +903,19 @@ public final class CameraExtensionCharacteristics {
                throw new IllegalArgumentException("Unsupported extension");
                throw new IllegalArgumentException("Unsupported extension");
            }
            }


            CameraMetadataNative captureResultMeta = null;
            if (areAdvancedExtensionsSupported()) {
                IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
                extender.init(mCameraId);
                captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId);
            } else {
                Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
                Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
                        initializeExtension(extension);
                        initializeExtension(extension);
                extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
                extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
                extenders.second.init(mCameraId, mChars.getNativeMetadata());
                extenders.second.init(mCameraId, mChars.getNativeMetadata());
            CameraMetadataNative captureResultMeta =
                captureResultMeta = extenders.second.getAvailableCaptureResultKeys();
                    extenders.second.getAvailableCaptureResultKeys();
                extenders.second.onDeInit();
            }


            if (captureResultMeta != null) {
            if (captureResultMeta != null) {
                int[] resultKeys = captureResultMeta.get(
                int[] resultKeys = captureResultMeta.get(
@@ -926,7 +942,6 @@ public final class CameraExtensionCharacteristics {
                    ret.add(CaptureResult.SENSOR_TIMESTAMP);
                    ret.add(CaptureResult.SENSOR_TIMESTAMP);
                }
                }
            }
            }
            extenders.second.onDeInit();
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw new IllegalStateException("Failed to query the available capture result keys!");
            throw new IllegalStateException("Failed to query the available capture result keys!");
        } finally {
        } finally {
+11 −4
Original line number Original line Diff line number Diff line
@@ -265,8 +265,8 @@ public abstract class CameraExtensionSession implements AutoCloseable {
     * from the camera device, to produce a single high-quality output result.
     * from the camera device, to produce a single high-quality output result.
     *
     *
     * <p>Note that single capture requests currently do not support
     * <p>Note that single capture requests currently do not support
     * client parameters except for {@link CaptureRequest#JPEG_ORIENTATION orientation} and
     * client parameters except for controls advertised in
     * {@link CaptureRequest#JPEG_QUALITY quality} in case of ImageFormat.JPEG output target.
     * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}.
     * The rest of the settings included in the request will be entirely overridden by
     * The rest of the settings included in the request will be entirely overridden by
     * the device-specific extension. </p>
     * the device-specific extension. </p>
     *
     *
@@ -275,6 +275,11 @@ public abstract class CameraExtensionSession implements AutoCloseable {
     * arguments that include further targets will cause
     * arguments that include further targets will cause
     * IllegalArgumentException to be thrown. </p>
     * IllegalArgumentException to be thrown. </p>
     *
     *
     * <p>Starting with Android {@link android.os.Build.VERSION_CODES#TIRAMISU} single capture
     * requests will also support the preview {@link android.graphics.ImageFormat#PRIVATE} target
     * surface. These can typically be used for enabling AF/AE triggers. Do note, that single
     * capture requests referencing both output surfaces remain unsupported.</p>
     *
     * <p>Each request will produce one new frame for one target Surface, set
     * <p>Each request will produce one new frame for one target Surface, set
     * with the CaptureRequest builder's
     * with the CaptureRequest builder's
     * {@link CaptureRequest.Builder#addTarget} method.</p>
     * {@link CaptureRequest.Builder#addTarget} method.</p>
@@ -319,8 +324,10 @@ public abstract class CameraExtensionSession implements AutoCloseable {
     * rate possible.</p>
     * rate possible.</p>
     *
     *
     * <p>Note that repeating capture requests currently do not support
     * <p>Note that repeating capture requests currently do not support
     * client parameters. Settings included in the request will
     * client parameters except for controls advertised in
     * be completely overridden by the device-specific extension.</p>
     * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}.
     * The rest of the settings included in the request will be entirely overridden by
     * the device-specific extension. </p>
     *
     *
     * <p>The {@link CaptureRequest.Builder#addTarget} supports only one
     * <p>The {@link CaptureRequest.Builder#addTarget} supports only one
     * target surface. {@link CaptureRequest} arguments that include further
     * target surface. {@link CaptureRequest} arguments that include further
+3 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ import android.hardware.camera2.extension.ISessionProcessorImpl;
import android.hardware.camera2.extension.LatencyRange;
import android.hardware.camera2.extension.LatencyRange;
import android.hardware.camera2.extension.Size;
import android.hardware.camera2.extension.Size;
import android.hardware.camera2.extension.SizeList;
import android.hardware.camera2.extension.SizeList;
import android.hardware.camera2.impl.CameraMetadataNative;


/** @hide */
/** @hide */
interface IAdvancedExtenderImpl
interface IAdvancedExtenderImpl
@@ -30,4 +31,6 @@ interface IAdvancedExtenderImpl
    @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId);
    @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId);
    @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId);
    @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId);
    ISessionProcessorImpl getSessionProcessor();
    ISessionProcessorImpl getSessionProcessor();
    CameraMetadataNative getAvailableCaptureRequestKeys(in String cameraId);
    CameraMetadataNative getAvailableCaptureResultKeys(in String cameraId);
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@
package android.hardware.camera2.extension;
package android.hardware.camera2.extension;


import android.hardware.camera2.extension.Request;
import android.hardware.camera2.extension.Request;
import android.hardware.camera2.impl.CameraMetadataNative;


/** @hide */
/** @hide */
interface ICaptureCallback
interface ICaptureCallback
@@ -25,4 +26,5 @@ interface ICaptureCallback
    void onCaptureFailed(int captureSequenceId);
    void onCaptureFailed(int captureSequenceId);
    void onCaptureSequenceCompleted(int captureSequenceId);
    void onCaptureSequenceCompleted(int captureSequenceId);
    void onCaptureSequenceAborted(int captureSequenceId);
    void onCaptureSequenceAborted(int captureSequenceId);
    void onCaptureCompleted(long shutterTimestamp, int requestId, in CameraMetadataNative results);
}
}
+4 −1
Original line number Original line Diff line number Diff line
@@ -15,6 +15,7 @@
 */
 */
package android.hardware.camera2.extension;
package android.hardware.camera2.extension;


import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.extension.CameraSessionConfig;
import android.hardware.camera2.extension.CameraSessionConfig;
import android.hardware.camera2.extension.ICaptureCallback;
import android.hardware.camera2.extension.ICaptureCallback;
import android.hardware.camera2.extension.IRequestProcessorImpl;
import android.hardware.camera2.extension.IRequestProcessorImpl;
@@ -30,5 +31,7 @@ interface ISessionProcessorImpl
    void onCaptureSessionEnd();
    void onCaptureSessionEnd();
    int startRepeating(in ICaptureCallback callback);
    int startRepeating(in ICaptureCallback callback);
    void stopRepeating();
    void stopRepeating();
    int startCapture(in ICaptureCallback callback, int jpegRotation, int jpegQuality);
    int startCapture(in ICaptureCallback callback);
    void setParameters(in CaptureRequest captureRequest);
    int startTrigger(in CaptureRequest captureRequest, in ICaptureCallback callback);
}
}
Loading