| /* |
| // 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 */ |