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