| /* |
| // 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 OVERLAY_PLANE_BASE_H |
| #define OVERLAY_PLANE_BASE_H |
| |
| #include <utils/KeyedVector.h> |
| #include <hal_public.h> |
| #include <DisplayPlane.h> |
| #include <BufferMapper.h> |
| #include <common/Wsbm.h> |
| #include <common/OverlayHardware.h> |
| #include <common/VideoPayloadBuffer.h> |
| |
| namespace android { |
| namespace intel { |
| |
| typedef struct { |
| OverlayBackBufferBlk *buf; |
| uint32_t gttOffsetInPage; |
| void* bufObject; |
| } OverlayBackBuffer; |
| |
| class OverlayPlaneBase : public DisplayPlane { |
| public: |
| OverlayPlaneBase(int index, int disp); |
| virtual ~OverlayPlaneBase(); |
| |
| virtual void invalidateBufferCache(); |
| |
| virtual bool assignToDevice(int disp); |
| |
| virtual void setZOrderConfig(ZOrderConfig& config, void *nativeConfig); |
| |
| // plane operations |
| virtual bool flip(void *ctx) = 0; |
| virtual bool reset(); |
| virtual bool enable(); |
| virtual bool disable(); |
| virtual bool isDisabled(); |
| |
| virtual void* getContext() const = 0; |
| virtual bool initialize(uint32_t bufferCount); |
| virtual void deinitialize(); |
| |
| protected: |
| // generic overlay register flush |
| virtual bool flush(uint32_t flags) = 0; |
| virtual bool setDataBuffer(BufferMapper& mapper); |
| virtual bool bufferOffsetSetup(BufferMapper& mapper); |
| virtual uint32_t calculateSWidthSW(uint32_t offset, uint32_t width); |
| virtual bool coordinateSetup(BufferMapper& mapper); |
| virtual bool setCoeffRegs(double *coeff, int mantSize, |
| coeffPtr pCoeff, int pos); |
| virtual void updateCoeff(int taps, double fCutoff, |
| bool isHoriz, bool isY, |
| coeffPtr pCoeff); |
| virtual bool scalingSetup(BufferMapper& mapper); |
| virtual bool colorSetup(BufferMapper& mapper); |
| virtual void checkPosition(int& x, int& y, int& w, int& h); |
| virtual void checkCrop(int& x, int& y, int& w, int& h, int coded_width, int coded_height); |
| |
| |
| protected: |
| // back buffer operations |
| virtual OverlayBackBuffer* createBackBuffer(); |
| virtual void deleteBackBuffer(int buf); |
| virtual void resetBackBuffer(int buf); |
| |
| virtual BufferMapper* getTTMMapper(BufferMapper& grallocMapper, struct VideoPayloadBuffer *payload); |
| virtual void putTTMMapper(BufferMapper* mapper); |
| virtual bool rotatedBufferReady(BufferMapper& mapper, BufferMapper* &rotatedMapper); |
| virtual bool useOverlayRotation(BufferMapper& mapper); |
| virtual bool scaledBufferReady(BufferMapper& mapper, BufferMapper* &scaledMapper, VideoPayloadBuffer *payload); |
| |
| private: |
| inline bool isActiveTTMBuffer(BufferMapper *mapper); |
| void updateActiveTTMBuffers(BufferMapper *mapper); |
| void invalidateActiveTTMBuffers(); |
| void invalidateTTMBuffers(); |
| |
| protected: |
| // flush flags |
| enum { |
| PLANE_ENABLE = 0x00000001UL, |
| PLANE_DISABLE = 0x00000002UL, |
| UPDATE_COEF = 0x00000004UL, |
| }; |
| |
| enum { |
| OVERLAY_BACK_BUFFER_COUNT = 3, |
| MAX_ACTIVE_TTM_BUFFERS = 3, |
| OVERLAY_DATA_BUFFER_COUNT = 20, |
| }; |
| |
| // TTM data buffers |
| KeyedVector<buffer_handle_t, BufferMapper*> mTTMBuffers; |
| // latest TTM buffers |
| Vector<BufferMapper*> mActiveTTMBuffers; |
| |
| // overlay back buffer |
| OverlayBackBuffer *mBackBuffer[OVERLAY_BACK_BUFFER_COUNT]; |
| int mCurrent; |
| // wsbm |
| Wsbm *mWsbm; |
| // pipe config |
| uint32_t mPipeConfig; |
| |
| int mBobDeinterlace; |
| int mUseScaledBuffer; |
| }; |
| |
| } // namespace intel |
| } // namespace android |
| |
| #endif /* OVERLAY_PLANE_BASE_H */ |
| |