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

Commit 866f67dc authored by Leon Scroggins's avatar Leon Scroggins Committed by Android (Google) Code Review
Browse files

Merge "Propagate HDR information to screenshot animation." into tm-dev

parents 3c7d69d9 3d03ed36
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -785,12 +785,14 @@ public final class SurfaceControl implements Parcelable {
        private final HardwareBuffer mHardwareBuffer;
        private final HardwareBuffer mHardwareBuffer;
        private final ColorSpace mColorSpace;
        private final ColorSpace mColorSpace;
        private final boolean mContainsSecureLayers;
        private final boolean mContainsSecureLayers;
        private final boolean mContainsHdrLayers;


        public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace,
        public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace,
                boolean containsSecureLayers) {
                boolean containsSecureLayers, boolean containsHdrLayers) {
            mHardwareBuffer = hardwareBuffer;
            mHardwareBuffer = hardwareBuffer;
            mColorSpace = colorSpace;
            mColorSpace = colorSpace;
            mContainsSecureLayers = containsSecureLayers;
            mContainsSecureLayers = containsSecureLayers;
            mContainsHdrLayers = containsHdrLayers;
        }
        }


       /**
       /**
@@ -798,13 +800,15 @@ public final class SurfaceControl implements Parcelable {
        * @param hardwareBuffer The existing HardwareBuffer object
        * @param hardwareBuffer The existing HardwareBuffer object
        * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named}
        * @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named}
        * @param containsSecureLayers Indicates whether this graphic buffer contains captured
        * @param containsSecureLayers Indicates whether this graphic buffer contains captured
        *                             contents
        *                             contents of secure layers, in which case the screenshot
        *        of secure layers, in which case the screenshot should not be persisted.
        *                             should not be persisted.
        * @param containsHdrLayers Indicates whether this graphic buffer contains HDR content.
        */
        */
        private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer,
        private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer,
                int namedColorSpace, boolean containsSecureLayers) {
                int namedColorSpace, boolean containsSecureLayers, boolean containsHdrLayers) {
            ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]);
            ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]);
            return new ScreenshotHardwareBuffer(hardwareBuffer, colorSpace, containsSecureLayers);
            return new ScreenshotHardwareBuffer(
                    hardwareBuffer, colorSpace, containsSecureLayers, containsHdrLayers);
        }
        }


        public ColorSpace getColorSpace() {
        public ColorSpace getColorSpace() {
@@ -818,6 +822,14 @@ public final class SurfaceControl implements Parcelable {
        public boolean containsSecureLayers() {
        public boolean containsSecureLayers() {
            return mContainsSecureLayers;
            return mContainsSecureLayers;
        }
        }
        /**
         * Returns whether the screenshot contains at least one HDR layer.
         * This information may be useful for informing the display whether this screenshot
         * is allowed to be dimmed to SDR white.
         */
        public boolean containsHdrLayers() {
            return mContainsHdrLayers;
        }


        /**
        /**
         * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it.
         * Copy content of ScreenshotHardwareBuffer into a hardware bitmap and return it.
+3 −2
Original line number Original line Diff line number Diff line
@@ -322,7 +322,8 @@ public:
                env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz,
                env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz,
                                            gScreenshotHardwareBufferClassInfo.builder,
                                            gScreenshotHardwareBufferClassInfo.builder,
                                            jhardwareBuffer, namedColorSpace,
                                            jhardwareBuffer, namedColorSpace,
                                            captureResults.capturedSecureLayers);
                                            captureResults.capturedSecureLayers,
                                            captureResults.capturedHdrLayers);
        env->CallVoidMethod(screenCaptureListenerObject,
        env->CallVoidMethod(screenCaptureListenerObject,
                            gScreenCaptureListenerClassInfo.onScreenCaptureComplete,
                            gScreenCaptureListenerClassInfo.onScreenCaptureComplete,
                            screenshotHardwareBuffer);
                            screenshotHardwareBuffer);
@@ -2399,7 +2400,7 @@ int register_android_view_SurfaceControl(JNIEnv* env)
            MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz);
            MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz);
    gScreenshotHardwareBufferClassInfo.builder =
    gScreenshotHardwareBufferClassInfo.builder =
            GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative",
            GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative",
                                   "(Landroid/hardware/HardwareBuffer;IZ)Landroid/view/"
                                   "(Landroid/hardware/HardwareBuffer;IZZ)Landroid/view/"
                                   "SurfaceControl$ScreenshotHardwareBuffer;");
                                   "SurfaceControl$ScreenshotHardwareBuffer;");


    jclass displayedContentSampleClazz = FindClassOrDie(env,
    jclass displayedContentSampleClazz = FindClassOrDie(env,
+5 −2
Original line number Original line Diff line number Diff line
@@ -454,8 +454,11 @@ public class BubbleExpandedView extends LinearLayout {
                    p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight()));
                    p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight()));
            p.endRecording();
            p.endRecording();
            Bitmap snapshot = Bitmap.createBitmap(p);
            Bitmap snapshot = Bitmap.createBitmap(p);
            return new SurfaceControl.ScreenshotHardwareBuffer(snapshot.getHardwareBuffer(),
            return new SurfaceControl.ScreenshotHardwareBuffer(
                    snapshot.getColorSpace(), false /* containsSecureLayers */);
                    snapshot.getHardwareBuffer(),
                    snapshot.getColorSpace(),
                    false /* containsSecureLayers */,
                    false /* containsHdrLayers */);
        }
        }
        if (mTaskView == null || mTaskView.getSurfaceControl() == null) {
        if (mTaskView == null || mTaskView.getSurfaceControl() == null) {
            return null;
            return null;
+1 −1
Original line number Original line Diff line number Diff line
@@ -219,7 +219,7 @@ class ScreenRotationAnimation {
            // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of
            // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of
            // rotation animation is an sdr image containing tone-mapping hdr content, then
            // rotation animation is an sdr image containing tone-mapping hdr content, then
            // disable dimming effect to get avoid of hdr content being dimmed during animation.
            // disable dimming effect to get avoid of hdr content being dimmed during animation.
            t.setDimmingEnabled(mScreenshotLayer, false);
            t.setDimmingEnabled(mScreenshotLayer, !screenshotBuffer.containsHdrLayers());
            t.setLayer(mBackColorSurface, -1);
            t.setLayer(mBackColorSurface, -1);
            t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma});
            t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma});
            t.setAlpha(mBackColorSurface, 1);
            t.setAlpha(mBackColorSurface, 1);