In this CL we introduce SurfaceContorl.getDynamicDisplayInfo
which replaces the current seprate calls for supported and
active display mode, supproted and active color modes and
HDR capabilities.
This way display capabilities can be queried atomically.
Additionally this CL pipes an DisplayMode IDs from
SurfaceFlinger and updates LocalDislayAdapter to use
IDs instead of array indices.
Test: presubmit
Bug: 159590486
Bug: 175678215
Change-Id: I169e3055d07905e2330e11f158b61ffd366f97e6
Allow for asynchronous screenshot by sending a ScreenCaptureListener to
handle screenshot callbacks. All existing calls are still synchronous
since the SurfaceControl method will block the caller until the results
from SurfaceFlinger are ready.
Test: power + volume down
Test: adb shell screencap
Bug: 162367424
Change-Id: I6cb5641dc19f32f262e3120949fc30ea104cff89
Allow for asynchronous screenshot by sending a ScreenCaptureListener to
handle screenshot callbacks. All existing calls are still synchronous
since the SurfaceControl method will block the caller until the results
from SurfaceFlinger are ready.
Test: power + volume down
Test: adb shell screencap
Bug: 162367424
Change-Id: I54c34003c0786b585dd20530a06dbd4b266e178c
Modified Java and JNI display capture functions to match the new
function in SurfaceComposerClient. The Java method will send an args
object instead of individual arguments to SurfaceComposerClient
Test: display screenshots working
Test: adb shell screencap
Bug: 162367424
Change-Id: Ic8d9cbc626e9ef73300304ce155a50f76f017dfc
"am broadcast -a" rather than "am broadcast am"
Bug: 123230379
Test: commands #4 and #5 in bug report
Change-Id: I5c23cd86b4da1e03b65c9a68a3a9044466012e89
HWUI is restricting access to only a set of stable C APIs. Callers like
boot animation are being converted to either the stable C or NDK APIs.
Test: build and verify screencap cmd line for launcher
Bug: 150782769
Change-Id: I87e1752409ccfeef22a082c389902b0883ad2bee
If fork fails, we'll leak this strdup. The strdup here seems
unnecessary; just use a pointer to the string itself instead.
Caught by the static analyzer:
frameworks/base/cmds/screencap/screencap.cpp:119:8: warning: Potential
leak of memory pointed to by 'fp_arg' [clang-analyzer-unix.Malloc]
Bug: None
Test: TreeHugger
Change-Id: Id7c738ed5c090bcb5b13a6258e91f027ff2b778c
There is a potential injection by using screencap in case of user handled parameters.
"dumpstate" command launches "screencap", when "-p" is argument is set. At that moment, content of "-o" parameter generates a path with ".png" extension to define "screencap" argument.
"dumpstate" is often run as a service with "root" privileged such as defined in "dumpstate.rc". For instance "bugreportz" call "ctl.start" property with "dumpstatez".
Launching "dumpstate" with "-p" option and a user input as "-o" would result in a root command execution. SE Linux might protect part of this attack.
Bug: 123230379
Test: please see commands #4 and #5
Change-Id: Icd88cdf4af153e07addb4449cdb117b1a3c881d3
Modified screencap code to use the new captureScreen method that accepts either
the layerStack or displayId. This removes the need to get the displayInfo from
SurfaceFlinger explicitely. The captureScreen function in SurfaceFlinger will
handle getting the correct display information to take the screenshot.
Test: adb shell screencap -d <layerStack for virt display>
Fixes: 130974213
Change-Id: I644bff547bed7d24284b8a6e7899a567d1f4cddf
This CL enables the framework to manage an arbitrary number of physical
displays. It also surfaces physical display IDs, which are stable across
reboots and encode (model, port) information that will be propagated
further up in a follow-up CL.
Bug: 116025192
Test: Boot with more than two displays
Test: Hotplug works with any number of displays
Test: Verify stable display IDs with "dumpsys display"
Change-Id: Idb2eaff66b2e0873be6ad27d337ff18b730d1331
Previously we always take screenshot in SRGB data space. It's been working well
since the screen only has sRGB color. However, since we are moving towards
wider color, we can't make this assumption any more. Thus we need to pass the
data space and pixel format of the screenshot buffer into SurfaceFlinger and
render screenshot in the desired data space and pixel format.
BUG: 111436479
BUG: 116112787
Test: Build, flash, boot and take screenshot, observe there's no color shift.
Test: Take screenshot, verified the color profile is correct of the png.
Change-Id: I9b1a1c878f8099715c2a2c296aaf3419ca6e9bd5
When taking a full display screenshot, there's no longer a need for min
and max layer. Instead, the entire display will be screenshotted. If
only some layers should be screenshotted, then use the captureLayers method
instead.
Also, condensed the methods so there is only one screenshot method for
displays that returns a GraphicBuffer. SurfaceControl can then convert
it to the desired format, like Bitmap or Surface.
Test: Rotation, adb shell screencap, power + volume down, bugreport.
Change-Id: Ia5a293e89d2cf3811fd06ffcbafeee389a32840e
Check the results for an error when generating a screencap so invalid
data is not returned as the captured image.
Test: screencap works
Change-Id: I377c11c1e07cd04a6b3882ac20d7be9d6ddb25c5
Fixes: 80106675
_exit was being used instead of return in order to
work around a static destructor issue that has been
fixed.
Bug: 77934844
Test: screencap (and it doesn't crash)
Change-Id: I5dc25b0af5099993a94705ac9c7b439e68432824
This reverts commit ea2eb5a14447869325ced829910f072c81913ef3.
Reason for revert: Ready to test out changes with SystemUI update
Change-Id: I9c8d5672a530334300bc1ea454a7fd7900296c7c
This reverts commit 689e091c7faa30f005b9adc0b7b3d2066c62be84.
Reason for revert: SystemUI and some other places need to be updated as well. Will resubmit with the other necessary changes
Change-Id: I8d1955b289d91a89c4d3f117c0ba0c3119ff51fc
Bug: 69898957
The changes in native code removed using a GraphicBufferProducer and
instead use only a GraphicBuffer to generate screenshots. Updated JNI
code so it calls the screensot function that returns a GraphicBuffer
and handle returning either a Surface, GraphicBuffer, or Bitmap.
Also updated screencap shell code so it uses the new GraphicBuffer
screenshot code.
Test: Recents, screenshot from SystemUi, screenshot from shell.
Change-Id: I6cb4f619e59461790a2a8f0cd2ea1192d9ae66b6
When wide color gamut rendering is requested, hwui will now
use an rgba16f scRGB-nl surface for rendering. This change
also fixes the way screenshots are handled in the platform
to behave properly with wide gamut rendering.
This change does not affect hardware layers. They also
need to use rgba16f scRGB-nl; this will be addressed in
another CL.
Bug: 29940137
Test: CtsUiRenderingTestCases, CtsGraphicsTestCases
Change-Id: I68fd96c451652136c566ec48fb0e97c2a7a257c5
To work around race conditions in libbinder when
spawning new threads while being shut down.
Bug: 36066697
Test: screencap still works
Change-Id: I774d3dc2491bb578a12dede90cc7fcded976f13f
Skia would like to remove SkAutoTUnref and replace it with sk_sp.
This also removes the last SkAutoTDelete straggler.
Change-Id: Idd46fcbbffe7fc1edb243b82b1c2f5425ccd60b6
screencap command had a fallback path that tried to read the framebuffer
directly. This is no longer supported (and is blocked by selinux
policy), so delete said path.
BUG:27598623
Change-Id: I1b002d4a68ad93f75b150029d01b5f0c500be56c
Changes screencap to read the display rotation and use it when
capturing the screenshot so that the output image is oriented
correctly.
Bug: 8433742
Change-Id: I0f7db422399985a1ff17da3faa946ff0943e58f7
With https://codereview.chromium.org/849103004/, SkStream is no longer
ref counted. Change callers that currently unref() SkStreams to one of
either:
- delete the stream
- pass ownership of the stream
screencap.cpp:
Call EncodeData directly, bypassing SkDynamicMemoryWStream and SkBitmap.
Utils.cpp:
Write directly to an SkData, and then use that to construct a new
SkStream.
Cherry-pick of a change that originally landed in master-skia and is
dependent on a skia merge (ag/655422).
Change-Id: Idc99ad7d5a70c893dc012d59915216f301ab3c9d
PS2: Fix for spaces in file names
After doing screencap /sdcard/test.png in shell the screenshot is captured
but the gallery is not updated.
So we should broadcast the intent android.intent.action.MEDIA_SCANNER_SCAN_FILE
for the image to show up in gallery.
Change-Id: I8e384865082c717842d70d376d5828d74a2ad780
Signed-off-by: Umair Khan <omerjerk@gmail.com>
Adds a sourceCrop Rect parameter to screenshot commands, which allows
clients to capture only a portion of the screen instead of the whole
screen.
Bug: 15137922
Change-Id: I629447573cd34ffb96334cde7ba02490b9ea06d8
Add the ability to ignore layers' transformation matrices during
screenshot capture, which will allow the window manager to capture
unrotated images for recents during the device rotation animation.
Bug: 11805195
Change-Id: I96e65506b198d34724eb3aa84815aae6f6de4935
adb assumes the stride is always equal to the width, so
we make sure it's actually the case (screenshot don't
always have this guarantee).
Change-Id: I643b909f6542b7493a611afc6e3c86955b984352