| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright (C) 2016 The Android Open Source Project | 
 | 3 |  * | 
 | 4 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 | 5 |  * you may not use this file except in compliance with the License. | 
 | 6 |  * You may obtain a copy of the License at | 
 | 7 |  * | 
 | 8 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 | 9 |  * | 
 | 10 |  * Unless required by applicable law or agreed to in writing, software | 
 | 11 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 | 12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | 13 |  * See the License for the specific language governing permissions and | 
 | 14 |  * limitations under the License. | 
 | 15 |  */ | 
 | 16 |  | 
 | 17 | #pragma once | 
 | 18 |  | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 19 | #include "Matrix.h" | 
| John Reck | 9580146 | 2016-09-01 09:44:09 -0700 | [diff] [blame] | 20 | #include "Rect.h" | 
| John Reck | 1bcacfd | 2017-11-03 10:12:19 -0700 | [diff] [blame] | 21 | #include "renderthread/RenderThread.h" | 
| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 22 |  | 
 | 23 | #include <SkBitmap.h> | 
| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 24 |  | 
 | 25 | namespace android { | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 26 | class Bitmap; | 
| sergeyv | 59eecb52 | 2016-11-17 17:54:57 -0800 | [diff] [blame] | 27 | class GraphicBuffer; | 
| Mathias Agopian | 3d7d5f9 | 2017-05-01 15:13:20 -0700 | [diff] [blame] | 28 | class Surface; | 
| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 29 | namespace uirenderer { | 
 | 30 |  | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 31 | class DeferredLayerUpdater; | 
 | 32 | class Layer; | 
 | 33 |  | 
| John Reck | e94cbc7 | 2016-04-25 13:03:44 -0700 | [diff] [blame] | 34 | // Keep in sync with PixelCopy.java codes | 
 | 35 | enum class CopyResult { | 
 | 36 |     Success = 0, | 
 | 37 |     UnknownError = 1, | 
 | 38 |     Timeout = 2, | 
 | 39 |     SourceEmpty = 3, | 
 | 40 |     SourceInvalid = 4, | 
 | 41 |     DestinationInvalid = 5, | 
 | 42 | }; | 
 | 43 |  | 
| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 44 | class Readback { | 
 | 45 | public: | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 46 |     explicit Readback(renderthread::RenderThread& thread) : mRenderThread(thread) {} | 
| Chris Craik | 764045d | 2016-07-06 17:14:05 -0700 | [diff] [blame] | 47 |     /** | 
 | 48 |      * Copies the surface's most recently queued buffer into the provided bitmap. | 
 | 49 |      */ | 
| Alec Mouri | 8a82b14 | 2019-12-17 09:41:48 -0800 | [diff] [blame] | 50 |     CopyResult copySurfaceInto(ANativeWindow* window, const Rect& srcRect, SkBitmap* bitmap); | 
| Chris Craik | 764045d | 2016-07-06 17:14:05 -0700 | [diff] [blame] | 51 |  | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 52 |     CopyResult copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap); | 
| John Reck | 7600518 | 2021-06-09 22:43:05 -0400 | [diff] [blame] | 53 |     CopyResult copyImageInto(const sk_sp<SkImage>& image, SkBitmap* bitmap); | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 54 |  | 
 | 55 |     CopyResult copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap); | 
 | 56 |  | 
 | 57 | private: | 
| John Reck | 2abc549 | 2021-05-18 00:34:26 -0400 | [diff] [blame] | 58 |     CopyResult copySurfaceIntoLegacy(ANativeWindow* window, const Rect& srcRect, SkBitmap* bitmap); | 
| ramindani | 3952ed6 | 2021-08-12 15:55:12 +0000 | [diff] [blame] | 59 |     CopyResult copyImageInto(const sk_sp<SkImage>& image, const Rect& srcRect, SkBitmap* bitmap); | 
| Stan Iliev | 1a025a7 | 2018-09-05 16:35:11 -0400 | [diff] [blame] | 60 |  | 
 | 61 |     bool copyLayerInto(Layer* layer, const SkRect* srcRect, const SkRect* dstRect, | 
 | 62 |                        SkBitmap* bitmap); | 
| Derek Sollenberger | c4fbada | 2016-11-07 16:05:41 -0500 | [diff] [blame] | 63 |  | 
 | 64 |     renderthread::RenderThread& mRenderThread; | 
| John Reck | 10dd058 | 2016-03-31 16:36:16 -0700 | [diff] [blame] | 65 | }; | 
 | 66 |  | 
| John Reck | 1bcacfd | 2017-11-03 10:12:19 -0700 | [diff] [blame] | 67 | }  // namespace uirenderer | 
 | 68 | }  // namespace android |