58 Commits

Author SHA1 Message Date
Marin Shalamanov
463ad8ee22 Introduce DynamicDisplayInfo
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
2021-02-18 18:54:41 +01:00
chaviw
bc10049654 Send ScreenCaptureListener to native screen capture requests.
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
2020-09-14 11:22:07 -07:00
Chavi Weingarten
797bdc9929 Revert "Send ScreenCaptureListener to native screen capture requ..."
Revert "Update screen capture functions to accept a ScreenCaptur..."

Revert submission 12404049-async_screencapture

Reason for revert: 168149157, 168154840
Reverted Changes:
I54c34003c:Send ScreenCaptureListener to native screen captur...
I9cbc833f8:Update screen capture functions to accept a Screen...

Change-Id: Ibd2b1e6588aa45fe228ea7c4c43dbf7a5402aaa5
Bug: 168154840
Bug: 168149157
2020-09-10 23:03:53 +00:00
chaviw
3510924a6d Send ScreenCaptureListener to native screen capture requests.
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
2020-09-08 09:59:50 -07:00
Marin Shalamanov
11599eeaee Use type safe display IDs.
Bug: 160679868
Test: m && flash device
Test: take screnshot on device
Change-Id: Id0cd5859b76fc29911d07119d54f329805425b7e
2020-08-04 11:38:05 +02:00
chaviw
bc27bc7189 Updated display capture and screencap to match native functions
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
2020-07-31 10:56:04 -07:00
TreeHugger Robot
8e24941b9f Merge "Fixed a typo" 2020-04-20 18:38:16 +00:00
Dichen Zhang
e361a26afa Fixed a typo
"am broadcast -a" rather than "am broadcast am"
Bug: 123230379
Test: commands #4 and #5 in bug report

Change-Id: I5c23cd86b4da1e03b65c9a68a3a9044466012e89
2020-04-17 10:05:49 -07:00
Derek Sollenberger
a3ef09430f Use public APIs for decoding images for screencap
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
2020-04-09 13:34:14 +00:00
George Burgess IV
5c46fb6486 screencap: fix a memory leak
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
2020-03-16 12:08:51 -07:00
Dichen Zhang
d31f219f2d Fix command injection on screencap
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
2020-03-12 12:25:09 -07:00
chaviw
a69a1b8d70 Use new captureScreen method with displayId or layerStack
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
2019-05-08 09:16:39 -07:00
Dominik Laskowski
3316a0a08e Generalize physical display management
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
2019-02-04 10:06:15 -08:00
Brian Osman
be8fac26d7 Switch to skcms-based factories and getters in SkColorSpace
Test: Mechanical substitution, still builds.
Change-Id: I877e4edd61e81279830ffbbcfea18d721abf6943
2019-01-15 03:17:09 +00:00
Peiyong Lin
10a34d1074 [Screenshot] Accept data space and pixel format for screenshot.
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
2018-10-24 11:34:08 -07:00
Chavi Weingarten
3623c39cd3 Merge "Remove minLayer and maxLayer from display screenshot." 2018-09-20 19:03:42 +00:00
chaviw
08520a05af Remove minLayer and maxLayer from display screenshot.
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
2018-09-19 10:11:53 -07:00
chaviw
7f4dc7e3ce Check return value in screencap in case of failure.
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
2018-09-12 16:35:23 -07:00
Steven Moreland
a89ae86745 screencap: return instead of _exit.
_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
2018-05-25 00:55:51 +00:00
Chavi Weingarten
d7ec64ccd0 Revert "Revert "Updated screenshot code to reflect native changes.""
This reverts commit ea2eb5a14447869325ced829910f072c81913ef3.

Reason for revert: Ready to test out changes with SystemUI update

Change-Id: I9c8d5672a530334300bc1ea454a7fd7900296c7c
2017-11-29 17:54:23 -08:00
Chavi Weingarten
ea2eb5a144 Revert "Updated screenshot code to reflect native changes."
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
2017-11-29 21:38:57 +00:00
chaviw
689e091c7f Updated screenshot code to reflect native changes.
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
2017-11-28 15:16:10 -08:00
Steven Moreland
32bdb1e9b0 Merge "Remove unused variable from screencap."
am: 376234fc74

Change-Id: I5afb38c24ab6924925ab2852c5fe0ef29a91a2ff
2017-09-19 03:22:42 +00:00
Steven Moreland
8b3ed84fc3 Remove unused variable from screencap.
Noticed while working on b/65206688.

Test: links
Change-Id: Ia4d67022eb5c500372090c0e025e340989c41643
2017-08-30 17:03:53 -07:00
Martijn Coenen
48b7408201 screencap: always exit with _exit().
Delay starting the threadpool until necessary,
and once started, always exit with _exit().

Bug: 36066697
Bug: 62956201
Test: mma, screencap -p
Merged-In: I0b9ab542f6434f57b498cd7dc41219ef57e36721
Change-Id: I0b9ab542f6434f57b498cd7dc41219ef57e36721

(cherry picked from commit 4d125c1df6b7e4dbc3a788ecce5434970e676b06)

Change-Id: Ie79ead94c62df0c4057d7fc6735abe9dcd1e940f
2017-08-04 07:31:09 +00:00
Narayan Kamath
bc8c0e9c1d Merge "_exit(0) on clean shutdown, not _exit(1)" into oc-dev
am: 31cf02742e

Change-Id: Ie0d68df7a51c10bc82974680bdd16f1eab48e9fa
2017-06-22 17:34:12 +00:00
Brian Carlstrom
9377ce67a8 _exit(0) on clean shutdown, not _exit(1)
Test: m -j32 checkbuild
Bug: 36066697
Change-Id: Iaed45a86f9603badf26041212dfc5e9399bc0a0c
2017-06-21 22:15:10 -07:00
Josh Gao
17d3fc2e68 Merge "Hack around b/36066697." into oc-dev
am: e139434e3a

Change-Id: I422d2b73fc854047d1293919c25f0656df0842c9
2017-06-20 04:30:07 +00:00
Josh Gao
909825886c Hack around b/36066697.
Avoid calling libbinder's static destructors by calling _exit instead
of returning in main.

Bug: http://b/36066697
Test: treehugger
Change-Id: I81dd50453f1ea64d97ec97d207fff732b3c62512
2017-06-19 14:10:45 -07:00
Romain Guy
26a2b97dbe Enable wide color gamut rendering
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
2017-06-02 11:02:13 -07:00
Martijn Coenen
3b53fc5a84 Only spawn one binder thread for screencap.
To work around race conditions in libbinder when
spawning new threads while being shut down.

Bug: 36066697
Test: screencap still works
Change-Id: I774d3dc2491bb578a12dede90cc7fcded976f13f
2017-05-11 17:44:45 +00:00
Robert Carr
db7ecbe699 Correct Screencap utility code.
Screenshot interface now takes signed parameters.

Bug: 34758075
Test: None
Change-Id: I884456ce7f22a9e57990371ad66f6bb55d09e999
2017-01-31 11:02:58 -08:00
Hal Canary
10219fb261 SkImageEncoder->SkEncodeImage
Test: none
Change-Id: I15630d2852d12840329181f135852e28d287bbcf
(cherry picked from commit 8c6bac4c77caeefb667bec90d16b5384fd2b2b31)
2016-12-07 13:29:42 +00:00
Ben Wagner
18bd88534a Replace SkAutoTUnref with sk_sp.
Skia would like to remove SkAutoTUnref and replace it with sk_sp.
This also removes the last SkAutoTDelete straggler.

Change-Id: Idd46fcbbffe7fc1edb243b82b1c2f5425ccd60b6
2016-11-02 16:30:50 +00:00
Prathmesh Prabhu
bf89ae53c3 screencap: Nix deprecated direct read of framebuffer.
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
2016-03-10 15:23:34 -08:00
Dan Stoza
cf70d71781 screencap: Rotate images when display is rotated
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
2015-06-09 16:53:11 -07:00
Leon Scroggins III
3449789b9c SkStream is no longer a ref counted object.
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
2015-03-12 19:51:57 +00:00
Andreas Gampe
cfedceb8c1 Frameworks/base: Turn on -Wall -Werror in cmds
Fix small warnings, turn on -Wall -Werror.

Change-Id: Iab1f01a7c7ebd6ba832b75067c5e395f380a1b8b
2014-11-07 14:33:51 -08:00
Marco Nelissen
f8820f3f53 am c840e31d: am fa436298: Merge "Broadcast an intent to mediascanner after executing screencap"
* commit 'c840e31d0ee772373b1be7469b7bfbe28715d52e':
  Broadcast an intent to mediascanner after executing screencap
2014-09-22 14:56:30 +00:00
Mike Reed
b933055cf3 stop using (deprecated) SkBitmap::Config
Change-Id: Ic75b5fc6996578e9d95bd3a220439ec1541d7c3b
2014-06-20 10:28:37 -04:00
Umair Khan
cfed2326c7 Broadcast an intent to mediascanner after executing screencap
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>
2014-06-12 17:44:12 +05:30
Dan Stoza
9890e341bf SurfaceFlinger: Add sourceCrop to screenshot
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
2014-05-23 09:19:02 -07:00
Dan Stoza
16ec12ae77 Allow disabling layer rotation during screenshots
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
2014-02-14 23:10:29 +00:00
Mathias Agopian
b251f3d0c6 get rid of HAL pixelformats 5551 and 4444
Change-Id: I6a6c4c656d80280eb85f90f99f35721ffca285df
2013-07-26 14:58:00 -07:00
Mathias Agopian
6f7b589171 get rid of PIXEL_FORMAT_A_8
Change-Id: Ia750811f08ddebdd5818da211fd03d61b75f8e97
2013-07-25 17:25:02 -07:00
Mathias Agopian
a79fd4ca31 use the bitmap stride when encoding a screenshot as PNG
Bug: 8444808
Change-Id: I47b74c22c940b40bd02634e9cd9dbff39b29a99f
2013-03-21 21:44:49 -07:00
Mathias Agopian
0137fb8937 make sure screencap's data stream matches what adb expects
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
2013-03-20 15:40:45 -07:00
Mathias Agopian
0678a8c250 make sure to start the binder thread pool
Change-Id: I5c125a001936797489ebdcd0d4ccbde23adba282
2013-03-19 20:56:00 -07:00
Mike Lockwood
c59b2f9a77 More changes to fix PDK build:
move screencap back to frameworks/base
move libdiskusage to frameworks/native

Change-Id: I8abe425c4bbf305bbe8650094c40c16df8c6d5e4
2012-10-24 12:31:10 -07:00
Mike Lockwood
6931061de6 Move non-Java commands to frameworks/native
Change-Id: Id77c2cecb27cec500dfe066e4430f9e67802a433
Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-10-24 10:43:42 -07:00