/* // Copyright (c) 2014 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #ifndef HWC_LAYER_H #define HWC_LAYER_H #include <hardware/hwcomposer.h> #include <DisplayPlane.h> #include <utils/Vector.h> //#define HWC_TRACE_FPS namespace android { namespace intel { enum { LAYER_STATIC_THRESHOLD = 10, }; class HwcLayer { public: enum { // LAYER_FB layers are marked as HWC_FRAMEBUFFER. // And a LAYER_FB can become HWC_OVERLAY layers during // revisiting layer list. LAYER_FB = 0, // LAYER_FORCE_FB layers are marked as HWC_FRAMEBUFFER. // And a LAYER_FORCE_FB can never become HWC_OVERLAY layers during // revisiting layer list. LAYER_FORCE_FB, // LAYER_OVERLAY layers are marked as HWC_OVERLAY LAYER_OVERLAY, // LAYER_SKIPPED layers are marked as HWC_OVERLAY with no plane attached LAYER_SKIPPED, // LAYER_FRAMEBUFFER_TARGET layers are marked as HWC_FRAMEBUFFER_TARGET LAYER_FRAMEBUFFER_TARGET, // LAYER_SIDEBAND layers have alternate path bypassing HWC after setup LAYER_SIDEBAND, // LAYER_CURSOR_OVERLAY layers support hardware cursor planes LAYER_CURSOR_OVERLAY, }; enum { LAYER_PRIORITY_OVERLAY = 0x60000000UL, LAYER_PRIORITY_PROTECTED = 0x70000000UL, LAYER_PRIORITY_SIZE_OFFSET = 4, }; public: HwcLayer(int index, hwc_layer_1_t *layer); virtual ~HwcLayer(); // plane operations bool attachPlane(DisplayPlane *plane, int device); DisplayPlane* detachPlane(); void setType(uint32_t type); uint32_t getType() const; int32_t getCompositionType() const; void setCompositionType(int32_t type); int getIndex() const; int getZOrder() const; uint32_t getFormat() const; uint32_t getBufferWidth() const; uint32_t getBufferHeight() const; const stride_t& getBufferStride() const; uint32_t getUsage() const; buffer_handle_t getHandle() const; uint32_t getTransform() const; bool isProtected() const; hwc_layer_1_t* getLayer() const; DisplayPlane* getPlane() const; void setPriority(uint32_t priority); uint32_t getPriority() const; bool update(hwc_layer_1_t *layer); void postFlip(); bool isUpdated(); uint32_t getStaticCount(); public: // temporary solution for plane assignment bool mPlaneCandidate; private: void setupAttributes(); private: const int mIndex; int mZOrder; int mDevice; hwc_layer_1_t *mLayer; DisplayPlane *mPlane; uint32_t mFormat; uint32_t mWidth; uint32_t mHeight; stride_t mStride; uint32_t mUsage; buffer_handle_t mHandle; bool mIsProtected; uint32_t mType; uint32_t mPriority; uint32_t mTransform; // for smart composition hwc_frect_t mSourceCropf; hwc_rect_t mDisplayFrame; uint32_t mStaticCount; bool mUpdated; #ifdef HWC_TRACE_FPS // for frame per second trace bool mTraceFps; buffer_handle_t mLastHandle; Vector<uint64_t> mFrames; #endif }; } // namespace intel } // namespace android #endif /* HWC_LAYER_H */