1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright 2022 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker #pragma once 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #include <memory> 20*38e8c45fSAndroid Build Coastguard Worker 21*38e8c45fSAndroid Build Coastguard Worker #include <compositionengine/RenderSurface.h> 22*38e8c45fSAndroid Build Coastguard Worker #include <renderengine/impl/ExternalTexture.h> 23*38e8c45fSAndroid Build Coastguard Worker #include <ui/Fence.h> 24*38e8c45fSAndroid Build Coastguard Worker #include <ui/Size.h> 25*38e8c45fSAndroid Build Coastguard Worker 26*38e8c45fSAndroid Build Coastguard Worker namespace android { 27*38e8c45fSAndroid Build Coastguard Worker 28*38e8c45fSAndroid Build Coastguard Worker // ScreenCaptureRenderSurface is a RenderSurface that returns a preallocated buffer used by 29*38e8c45fSAndroid Build Coastguard Worker // ScreenCaptureOutput. 30*38e8c45fSAndroid Build Coastguard Worker class ScreenCaptureRenderSurface : public compositionengine::RenderSurface { 31*38e8c45fSAndroid Build Coastguard Worker public: ScreenCaptureRenderSurface(std::shared_ptr<renderengine::ExternalTexture> buffer)32*38e8c45fSAndroid Build Coastguard Worker ScreenCaptureRenderSurface(std::shared_ptr<renderengine::ExternalTexture> buffer) 33*38e8c45fSAndroid Build Coastguard Worker : mBuffer(std::move(buffer)){}; 34*38e8c45fSAndroid Build Coastguard Worker dequeueBuffer(base::unique_fd *)35*38e8c45fSAndroid Build Coastguard Worker std::shared_ptr<renderengine::ExternalTexture> dequeueBuffer( 36*38e8c45fSAndroid Build Coastguard Worker base::unique_fd* /* bufferFence */) override { 37*38e8c45fSAndroid Build Coastguard Worker return mBuffer; 38*38e8c45fSAndroid Build Coastguard Worker } 39*38e8c45fSAndroid Build Coastguard Worker queueBuffer(base::unique_fd readyFence,float)40*38e8c45fSAndroid Build Coastguard Worker void queueBuffer(base::unique_fd readyFence, float) override { 41*38e8c45fSAndroid Build Coastguard Worker mRenderFence = sp<Fence>::make(readyFence.release()); 42*38e8c45fSAndroid Build Coastguard Worker } 43*38e8c45fSAndroid Build Coastguard Worker getClientTargetAcquireFence()44*38e8c45fSAndroid Build Coastguard Worker const sp<Fence>& getClientTargetAcquireFence() const override { return mRenderFence; } 45*38e8c45fSAndroid Build Coastguard Worker supportsCompositionStrategyPrediction()46*38e8c45fSAndroid Build Coastguard Worker bool supportsCompositionStrategyPrediction() const override { return false; } 47*38e8c45fSAndroid Build Coastguard Worker isValid()48*38e8c45fSAndroid Build Coastguard Worker bool isValid() const override { return true; } 49*38e8c45fSAndroid Build Coastguard Worker initialize()50*38e8c45fSAndroid Build Coastguard Worker void initialize() override {} 51*38e8c45fSAndroid Build Coastguard Worker getSize()52*38e8c45fSAndroid Build Coastguard Worker const ui::Size& getSize() const override { return mSize; } 53*38e8c45fSAndroid Build Coastguard Worker isProtected()54*38e8c45fSAndroid Build Coastguard Worker bool isProtected() const override { return mBuffer->getUsage() & GRALLOC_USAGE_PROTECTED; } 55*38e8c45fSAndroid Build Coastguard Worker setDisplaySize(const ui::Size &)56*38e8c45fSAndroid Build Coastguard Worker void setDisplaySize(const ui::Size&) override {} 57*38e8c45fSAndroid Build Coastguard Worker setBufferDataspace(ui::Dataspace)58*38e8c45fSAndroid Build Coastguard Worker void setBufferDataspace(ui::Dataspace) override {} 59*38e8c45fSAndroid Build Coastguard Worker setBufferPixelFormat(ui::PixelFormat)60*38e8c45fSAndroid Build Coastguard Worker void setBufferPixelFormat(ui::PixelFormat) override {} 61*38e8c45fSAndroid Build Coastguard Worker setProtected(bool)62*38e8c45fSAndroid Build Coastguard Worker void setProtected(bool /* useProtected */) override {} 63*38e8c45fSAndroid Build Coastguard Worker beginFrame(bool)64*38e8c45fSAndroid Build Coastguard Worker status_t beginFrame(bool /* mustRecompose */) override { return OK; } 65*38e8c45fSAndroid Build Coastguard Worker prepareFrame(bool,bool)66*38e8c45fSAndroid Build Coastguard Worker void prepareFrame(bool /* usesClientComposition */, bool /* usesDeviceComposition */) override { 67*38e8c45fSAndroid Build Coastguard Worker } 68*38e8c45fSAndroid Build Coastguard Worker onPresentDisplayCompleted()69*38e8c45fSAndroid Build Coastguard Worker void onPresentDisplayCompleted() override {} 70*38e8c45fSAndroid Build Coastguard Worker dump(std::string &)71*38e8c45fSAndroid Build Coastguard Worker void dump(std::string& /* result */) const override {} 72*38e8c45fSAndroid Build Coastguard Worker 73*38e8c45fSAndroid Build Coastguard Worker private: 74*38e8c45fSAndroid Build Coastguard Worker std::shared_ptr<renderengine::ExternalTexture> mBuffer; 75*38e8c45fSAndroid Build Coastguard Worker 76*38e8c45fSAndroid Build Coastguard Worker sp<Fence> mRenderFence = Fence::NO_FENCE; 77*38e8c45fSAndroid Build Coastguard Worker 78*38e8c45fSAndroid Build Coastguard Worker ui::Size mSize; 79*38e8c45fSAndroid Build Coastguard Worker }; 80*38e8c45fSAndroid Build Coastguard Worker 81*38e8c45fSAndroid Build Coastguard Worker } // namespace android 82