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 <DisplayPlane.h>
     21 #include <BufferMapper.h>
     22 #include <ips/common/Wsbm.h>
     23 #include <ips/common/OverlayHardware.h>
     24 #include <ips/common/VideoPayloadBuffer.h>
     25 
     26 namespace android {
     27 namespace intel {
     28 
     29 typedef struct {
     30     OverlayBackBufferBlk *buf;
     31     uint32_t gttOffsetInPage;
     32     uint32_t bufObject;
     33 } OverlayBackBuffer;
     34 
     35 class OverlayPlaneBase : public DisplayPlane {
     36 public:
     37     OverlayPlaneBase(int index, int disp);
     38     virtual ~OverlayPlaneBase();
     39 
     40     virtual void invalidateBufferCache();
     41 
     42     virtual bool assignToDevice(int disp);
     43 
     44     virtual void setZOrderConfig(ZOrderConfig& config, void *nativeConfig);
     45 
     46     // plane operations
     47     virtual bool flip(void *ctx) = 0;
     48     virtual bool reset();
     49     virtual bool enable();
     50     virtual bool disable();
     51     virtual bool isDisabled();
     52 
     53     virtual void* getContext() const = 0;
     54     virtual bool initialize(uint32_t bufferCount);
     55     virtual void deinitialize();
     56 
     57 protected:
     58     // generic overlay register flush
     59     virtual bool flush(uint32_t flags) = 0;
     60     virtual bool setDataBuffer(BufferMapper& mapper);
     61     virtual bool bufferOffsetSetup(BufferMapper& mapper);
     62     virtual uint32_t calculateSWidthSW(uint32_t offset, uint32_t width);
     63     virtual bool coordinateSetup(BufferMapper& mapper);
     64     virtual bool setCoeffRegs(double *coeff, int mantSize,
     65                                  coeffPtr pCoeff, int pos);
     66     virtual void updateCoeff(int taps, double fCutoff,
     67                                 bool isHoriz, bool isY,
     68                                 coeffPtr pCoeff);
     69     virtual bool scalingSetup(BufferMapper& mapper);
     70     virtual void checkPosition(int& x, int& y, int& w, int& h);
     71     virtual void checkCrop(int& x, int& y, int& w, int& h, int coded_width, int coded_height);
     72 
     73 
     74 protected:
     75     // back buffer operations
     76     virtual OverlayBackBuffer* createBackBuffer();
     77     virtual void deleteBackBuffer(int buf);
     78     virtual void resetBackBuffer(int buf);
     79 
     80     virtual BufferMapper* getTTMMapper(BufferMapper& grallocMapper, struct VideoPayloadBuffer *payload);
     81     virtual void  putTTMMapper(BufferMapper* mapper);
     82     virtual bool rotatedBufferReady(BufferMapper& mapper, BufferMapper* &rotatedMapper);
     83     virtual bool useOverlayRotation(BufferMapper& mapper);
     84 
     85 private:
     86     inline bool isActiveTTMBuffer(BufferMapper *mapper);
     87     void updateActiveTTMBuffers(BufferMapper *mapper);
     88     void invalidateActiveTTMBuffers();
     89     void invalidateTTMBuffers();
     90 
     91 protected:
     92     // flush flags
     93     enum {
     94         PLANE_ENABLE     = 0x00000001UL,
     95         PLANE_DISABLE    = 0x00000002UL,
     96         UPDATE_COEF      = 0x00000004UL,
     97     };
     98 
     99     enum {
    100         OVERLAY_BACK_BUFFER_COUNT = 3,
    101         MAX_ACTIVE_TTM_BUFFERS = 3,
    102         OVERLAY_DATA_BUFFER_COUNT = 20,
    103     };
    104 
    105     // TTM data buffers
    106     KeyedVector<uint64_t, BufferMapper*> mTTMBuffers;
    107     // latest TTM buffers
    108     Vector<BufferMapper*> mActiveTTMBuffers;
    109 
    110     // overlay back buffer
    111     OverlayBackBuffer *mBackBuffer[OVERLAY_BACK_BUFFER_COUNT];
    112     int mCurrent;
    113     // wsbm
    114     Wsbm *mWsbm;
    115     // pipe config
    116     uint32_t mPipeConfig;
    117 
    118     int mBobDeinterlace;
    119 };
    120 
    121 } // namespace intel
    122 } // namespace android
    123 
    124 #endif /* OVERLAY_PLANE_BASE_H */
    125 
    126