Merge "Propagate HDR information to screenshot animation." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
866f67dc94
@@ -785,12 +785,14 @@ public final class SurfaceControl implements Parcelable {
|
||||
private final HardwareBuffer mHardwareBuffer;
|
||||
private final ColorSpace mColorSpace;
|
||||
private final boolean mContainsSecureLayers;
|
||||
private final boolean mContainsHdrLayers;
|
||||
|
||||
public ScreenshotHardwareBuffer(HardwareBuffer hardwareBuffer, ColorSpace colorSpace,
|
||||
boolean containsSecureLayers) {
|
||||
boolean containsSecureLayers, boolean containsHdrLayers) {
|
||||
mHardwareBuffer = hardwareBuffer;
|
||||
mColorSpace = colorSpace;
|
||||
mContainsSecureLayers = containsSecureLayers;
|
||||
mContainsHdrLayers = containsHdrLayers;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -798,13 +800,15 @@ public final class SurfaceControl implements Parcelable {
|
||||
* @param hardwareBuffer The existing HardwareBuffer object
|
||||
* @param namedColorSpace Integer value of a named color space {@link ColorSpace.Named}
|
||||
* @param containsSecureLayers Indicates whether this graphic buffer contains captured
|
||||
* contents
|
||||
* of secure layers, in which case the screenshot should not be persisted.
|
||||
* contents of secure layers, in which case the screenshot
|
||||
* should not be persisted.
|
||||
* @param containsHdrLayers Indicates whether this graphic buffer contains HDR content.
|
||||
*/
|
||||
private static ScreenshotHardwareBuffer createFromNative(HardwareBuffer hardwareBuffer,
|
||||
int namedColorSpace, boolean containsSecureLayers) {
|
||||
int namedColorSpace, boolean containsSecureLayers, boolean containsHdrLayers) {
|
||||
ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.values()[namedColorSpace]);
|
||||
return new ScreenshotHardwareBuffer(hardwareBuffer, colorSpace, containsSecureLayers);
|
||||
return new ScreenshotHardwareBuffer(
|
||||
hardwareBuffer, colorSpace, containsSecureLayers, containsHdrLayers);
|
||||
}
|
||||
|
||||
public ColorSpace getColorSpace() {
|
||||
@@ -818,6 +822,14 @@ public final class SurfaceControl implements Parcelable {
|
||||
public boolean containsSecureLayers() {
|
||||
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.
|
||||
|
||||
@@ -322,7 +322,8 @@ public:
|
||||
env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz,
|
||||
gScreenshotHardwareBufferClassInfo.builder,
|
||||
jhardwareBuffer, namedColorSpace,
|
||||
captureResults.capturedSecureLayers);
|
||||
captureResults.capturedSecureLayers,
|
||||
captureResults.capturedHdrLayers);
|
||||
env->CallVoidMethod(screenCaptureListenerObject,
|
||||
gScreenCaptureListenerClassInfo.onScreenCaptureComplete,
|
||||
screenshotHardwareBuffer);
|
||||
@@ -2399,7 +2400,7 @@ int register_android_view_SurfaceControl(JNIEnv* env)
|
||||
MakeGlobalRefOrDie(env, screenshotGraphicsBufferClazz);
|
||||
gScreenshotHardwareBufferClassInfo.builder =
|
||||
GetStaticMethodIDOrDie(env, screenshotGraphicsBufferClazz, "createFromNative",
|
||||
"(Landroid/hardware/HardwareBuffer;IZ)Landroid/view/"
|
||||
"(Landroid/hardware/HardwareBuffer;IZZ)Landroid/view/"
|
||||
"SurfaceControl$ScreenshotHardwareBuffer;");
|
||||
|
||||
jclass displayedContentSampleClazz = FindClassOrDie(env,
|
||||
|
||||
@@ -454,8 +454,11 @@ public class BubbleExpandedView extends LinearLayout {
|
||||
p.beginRecording(mOverflowView.getWidth(), mOverflowView.getHeight()));
|
||||
p.endRecording();
|
||||
Bitmap snapshot = Bitmap.createBitmap(p);
|
||||
return new SurfaceControl.ScreenshotHardwareBuffer(snapshot.getHardwareBuffer(),
|
||||
snapshot.getColorSpace(), false /* containsSecureLayers */);
|
||||
return new SurfaceControl.ScreenshotHardwareBuffer(
|
||||
snapshot.getHardwareBuffer(),
|
||||
snapshot.getColorSpace(),
|
||||
false /* containsSecureLayers */,
|
||||
false /* containsHdrLayers */);
|
||||
}
|
||||
if (mTaskView == null || mTaskView.getSurfaceControl() == null) {
|
||||
return null;
|
||||
|
||||
@@ -219,7 +219,7 @@ class ScreenRotationAnimation {
|
||||
// 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
|
||||
// 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.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma});
|
||||
t.setAlpha(mBackColorSurface, 1);
|
||||
|
||||
Reference in New Issue
Block a user