blob: 4e5a0ccfd21b6760dfe94e8384de21ccb20a63a2 [file] [log] [blame]
Patrick Williams7584c6a2022-10-29 02:10:58 +00001/*
2 * Copyright 2022 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
19#include <compositionengine/DisplayColorProfile.h>
20#include <compositionengine/RenderSurface.h>
21#include <compositionengine/impl/Output.h>
22#include <ui/Rect.h>
23
24#include "RenderArea.h"
25
26namespace android {
27
28struct ScreenCaptureOutputArgs {
29 const compositionengine::CompositionEngine& compositionEngine;
30 const compositionengine::Output::ColorProfile& colorProfile;
31 const RenderArea& renderArea;
32 ui::LayerStack layerStack;
33 std::shared_ptr<renderengine::ExternalTexture> buffer;
34 float sdrWhitePointNits;
35 float displayBrightnessNits;
Patrick Williams7584c6a2022-10-29 02:10:58 +000036 bool regionSampling;
37};
38
39// ScreenCaptureOutput is used to compose a set of layers into a preallocated buffer.
40//
41// SurfaceFlinger passes instances of ScreenCaptureOutput to CompositionEngine in calls to
42// SurfaceFlinger::captureLayers and SurfaceFlinger::captureDisplay.
43class ScreenCaptureOutput : public compositionengine::impl::Output {
44public:
Patrick Williams01c31162022-11-14 17:45:19 +000045 ScreenCaptureOutput(const RenderArea& renderArea,
Patrick Williams01c31162022-11-14 17:45:19 +000046 const compositionengine::Output::ColorProfile& colorProfile,
47 bool regionSampling);
Patrick Williams7584c6a2022-10-29 02:10:58 +000048
49 void updateColorProfile(const compositionengine::CompositionRefreshArgs&) override;
50
51 std::vector<compositionengine::LayerFE::LayerSettings> generateClientCompositionRequests(
52 bool supportsProtectedContent, ui::Dataspace outputDataspace,
53 std::vector<compositionengine::LayerFE*>& outLayerFEs) override;
54
Patrick Williams7584c6a2022-10-29 02:10:58 +000055protected:
56 bool getSkipColorTransform() const override { return false; }
57 renderengine::DisplaySettings generateClientCompositionDisplaySettings() const override;
58
59private:
60 const RenderArea& mRenderArea;
Patrick Williams7584c6a2022-10-29 02:10:58 +000061 const compositionengine::Output::ColorProfile& mColorProfile;
62 const bool mRegionSampling;
63};
64
Patrick Williams01c31162022-11-14 17:45:19 +000065std::shared_ptr<ScreenCaptureOutput> createScreenCaptureOutput(ScreenCaptureOutputArgs);
Patrick Williams7584c6a2022-10-29 02:10:58 +000066
67} // namespace android