Home | History | Annotate | Download | only in common
      1 /*
      2 // Copyright(c)2014 IntelCorporation
      3 //
      4 // LicensedundertheApacheLicense,Version2.0(the"License");
      5 // youmaynotusethisfileexceptincompliancewiththeLicense.
      6 // YoumayobtainacopyoftheLicenseat
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software
     11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS,
     12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
     13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand
     14 // limitationsundertheLicense.
     15 */
     16 #ifndef OVERLAY_PLANE_BASE_H
     17 #define OVERLAY_PLANE_BASE_H
     18 
     19 #include <utils/KeyedVector.h>
     20 #include <hal_public.h>
     21 #include <DisplayPlane.h>
     22 #include <BufferMapper.h>
     23 #include <common/Wsbm.h>
     24 #include <common/OverlayHardware.h>
     25 #include <common/VideoPayloadBuffer.h>
     26 
     27 namespace android {
     28 namespace intel {
     29 
     30 typedef struct {
     31     OverlayBackBufferBlk *buf;
     32     uint32_t gttOffsetInPage;
     33     void* bufObject;
     34 } OverlayBackBuffer;
     35 
     36 class OverlayPlaneBase : public DisplayPlane {
     37 public:
     38     OverlayPlaneBase(int index, int disp);
     39     virtual ~OverlayPlaneBase();
     40 
     41     virtual void invalidateBufferCache();
     42 
     43     virtual bool assignToDevice(int disp);
     44 
     45     virtual void setZOrderConfig(ZOrderConfig& config, void *nativeConfig);
     46 
     47     // plane operations
     48     virtual bool flip(void *ctx) = 0;
     49     virtual bool reset();
     50     virtual bool enable();
     51     virtual bool disable();
     52     virtual bool isDisabled();
     53 
     54     virtual void* getContext() const = 0;
     55     virtual bool initialize(uint32_t bufferCount);
     56     virtual void deinitialize();
     57 
     58 protected:
     59     // generic overlay register flush
     60     virtual bool flush(uint32_t flags) = 0;
     61     virtual bool setDataBuffer(BufferMapper& mapper);
     62     virtual bool bufferOffsetSetup(BufferMapper& mapper);
     63     virtual uint32_t calculateSWidthSW(uint32_t offset, uint32_t width);
     64     virtual bool coordinateSetup(BufferMapper& mapper);
     65     virtual bool setCoeffRegs(double *coeff, int mantSize,
     66                                  coeffPtr pCoeff, int pos);
     67     virtual void updateCoeff(int taps, double fCutoff,
     68                                 bool isHoriz, bool isY,
     69                                 coeffPtr pCoeff);
     70     virtual bool scalingSetup(BufferMapper& mapper);
     71     virtual bool colorSetup(BufferMapper& mapper);
     72     virtual void checkPosition(int& x, int& y, int& w, int& h);
     73     virtual void checkCrop(int& x, int& y, int& w, int& h, int coded_width, int coded_height);
     74 
     75 
     76 protected:
     77     // back buffer operations
     78     virtual OverlayBackBuffer* createBackBuffer();
     79     virtual void deleteBackBuffer(int buf);
     80     virtual void resetBackBuffer(int buf);
     81 
     82     virtual BufferMapper* getTTMMapper(BufferMapper& grallocMapper, struct VideoPayloadBuffer *payload);
     83     virtual void  putTTMMapper(BufferMapper* mapper);
     84     virtual bool rotatedBufferReady(BufferMapper& mapper, BufferMapper* &rotatedMapper);
     85     virtual bool useOverlayRotation(BufferMapper& mapper);
     86     virtual bool scaledBufferReady(BufferMapper& mapper, BufferMapper* &scaledMapper, VideoPayloadBuffer *payload);
     87 
     88 private:
     89     inline bool isActiveTTMBuffer(BufferMapper *mapper);
     90     void updateActiveTTMBuffers(BufferMapper *mapper);
     91     void invalidateActiveTTMBuffers();
     92     void invalidateTTMBuffers();
     93 
     94 protected:
     95     // flush flags
     96     enum {
     97         PLANE_ENABLE     = 0x00000001UL,
     98         PLANE_DISABLE    = 0x00000002UL,
     99         UPDATE_COEF      = 0x00000004UL,
    100     };
    101 
    102     enum {
    103         OVERLAY_BACK_BUFFER_COUNT = 3,
    104         MAX_ACTIVE_TTM_BUFFERS = 3,
    105         OVERLAY_DATA_BUFFER_COUNT = 20,
    106     };
    107 
    108     // TTM data buffers
    109     KeyedVector<buffer_handle_t, BufferMapper*> mTTMBuffers;
    110     // latest TTM buffers
    111     Vector<BufferMapper*> mActiveTTMBuffers;
    112 
    113     // overlay back buffer
    114     OverlayBackBuffer *mBackBuffer[OVERLAY_BACK_BUFFER_COUNT];
    115     int mCurrent;
    116     // wsbm
    117     Wsbm *mWsbm;
    118     // pipe config
    119     uint32_t mPipeConfig;
    120 
    121     int mBobDeinterlace;
    122     int mUseScaledBuffer;
    123 };
    124 
    125 } // namespace intel
    126 } // namespace android
    127 
    128 #endif /* OVERLAY_PLANE_BASE_H */
    129 
    130