Merge "Propagate HDR information to screenshot animation." into tm-dev am: 866f67dc94
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17992944 Change-Id: I44edaa03cbdda374a9ca5c8d29d39bd8ae4161e2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user