DisplayPlane.h revision e6ecdadd57e79c2218b3e6ae407f12599f33bd22
16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/*
26a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Copyright © 2012 Intel Corporation
36a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * All rights reserved.
46a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *
56a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Permission is hereby granted, free of charge, to any person obtaining a
66a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * copy of this software and associated documentation files (the "Software"),
76a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * to deal in the Software without restriction, including without limitation
86a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
96a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * and/or sell copies of the Software, and to permit persons to whom the
106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software is furnished to do so, subject to the following conditions:
116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *
126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * The above copyright notice and this permission notice (including the next
136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * paragraph) shall be included in all copies or substantial portions of the
146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software.
156a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *
166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IN THE SOFTWARE.
236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *
246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Authors:
256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *    Jackie Li <yaodong.li@intel.com>
266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu *
276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu */
286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef DISPLAYPLANE_H_
296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DISPLAYPLANE_H_
306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
31e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <utils/KeyedVector.h>
32e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <BufferMapper.h>
336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android {
356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel {
366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct {
38e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    // align with android, using 'int' here
396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int x;
406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int y;
416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int w;
426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int h;
436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} PlanePosition;
446a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuenum {
466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // support up to 4 overlays
476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    MAX_OVERLAY_COUNT = 4,
486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu};
496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct {
516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int layerCount;
526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int planeCount;
536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int overlayCount;
546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int overlayIndexes[MAX_OVERLAY_COUNT];
556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int primaryIndex;
566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} ZOrderConfig;
576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayPlane {
596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // transform
616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    enum {
626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_TRANSFORM_0 = 0,
636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_TRANSFORM_90 = HWC_TRANSFORM_ROT_90,
646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_TRANSFORM_180 = HWC_TRANSFORM_ROT_180,
656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_TRANSFORM_270 = HWC_TRANSFORM_ROT_270,
666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    };
676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // blending
696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    enum {
706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_BLENDING_NONE = HWC_BLENDING_NONE,
716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_BLENDING_PREMULT = HWC_BLENDING_PREMULT,
726a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    };
736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // plane type
756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    enum {
766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_SPRITE = 1,
776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_OVERLAY,
786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_PRIMARY,
796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        PLANE_MAX,
806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    };
81e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    // align with android's back buffer count
82e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    static const uint32_t defaultDataBufferCount = 3;
836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    DisplayPlane(int index, int type, int disp);
856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual ~DisplayPlane();
866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual int getIndex() const { return mIndex; }
886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual int getType() const { return mType; }
896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool initCheck() const { return mInitialized; }
906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // data destination
926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void setPosition(int x, int y, int w, int h);
936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void setSourceCrop(int x, int y, int w, int h);
946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void setTransform(int transform);
956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // data source
976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool setDataBuffer(uint32_t handle);
986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void invalidateBufferCache();
996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // display device
1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool assignToDevice(int disp);
1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1036a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // hardware operations
1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool reset() = 0;
1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool flip() = 0;
1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool enable() = 0;
1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool disable() = 0;
1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // set z order config
1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void setZOrderConfig(ZOrderConfig& config) = 0;
1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void* getContext() const = 0;
1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
114e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    virtual bool initialize(uint32_t bufferCount);
115e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Liprotected:
116e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    virtual void deinitialize();
1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected:
1186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool setDataBuffer(BufferMapper& mapper) = 0;
1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected:
1206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mIndex;
1216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mType;
1226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mDevice;
1236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    bool mInitialized;
124e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    KeyedVector<uint64_t, BufferMapper*> mDataBuffers;
1256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    PlanePosition mPosition;
1266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    crop_t mSrcCrop;
1276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mTransform;
1286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu};
1296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel
1316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android
1326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DISPLAYPLANE_H_ */
134