hwc/overlay: Video on 4k2k external, 4k2k rotation.

-Add support for Video via overlay on 4k2k external panel.
-Add support for rotating videos on 4k2k panels. We use
pre-rotation in hwc to rotate a video into a single buffer,
irrespective of panel size. Then this buffer is fed to MDP.
Rotator objects are managed by the new RotMgr.
-Cleaup mdpcomp and overlay.

Change-Id: Ifb08534747e8e18b6c58dd8a3e1a9947409100f1
diff --git a/libhwcomposer/hwc_video.h b/libhwcomposer/hwc_video.h
index 93cdaa5..4acde9d 100644
--- a/libhwcomposer/hwc_video.h
+++ b/libhwcomposer/hwc_video.h
@@ -23,38 +23,80 @@
 #define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
 #define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
 
+namespace overlay {
+    class Rotator;
+}
+
 namespace qhwc {
 namespace ovutils = overlay::utils;
 
-//Feature for using overlay to display videos.
-class VideoOverlay {
+class IVideoOverlay {
 public:
-    //Sets up members and prepares overlay if conditions are met
-    static bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list,
-            int dpy);
-    //Draws layer if this feature is on
-    static bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list,
-            int dpy);
-    //resets values
-    static void reset();
-private:
-    //Configures overlay for video prim and ext
-    static bool configure(hwc_context_t *ctx, int dpy,
-            hwc_layer_1_t *yuvlayer);
-
-    //Marks layer flags if this feature is used
-    static void markFlags(hwc_layer_1_t *yuvLayer);
-    //Flags if this feature is on.
-    static bool sIsModeOn[MAX_DISPLAYS];
-    static ovutils::eDest sDest[MAX_DISPLAYS];
+    explicit IVideoOverlay(const int& dpy) : mDpy(dpy), mModeOn(false),
+            mRot(NULL) {}
+    virtual ~IVideoOverlay() {};
+    virtual bool prepare(hwc_context_t *ctx,
+            hwc_display_contents_1_t *list) = 0;
+    virtual bool draw(hwc_context_t *ctx,
+            hwc_display_contents_1_t *list) = 0;
+    virtual void reset() = 0;
+    //Factory method that returns a low-res or high-res version
+    static IVideoOverlay *getObject(const int& width, const int& dpy);
+protected:
+    const int mDpy; // display to update
+    bool mModeOn; // if prepare happened
+    overlay::Rotator *mRot;
 };
 
-inline void VideoOverlay::reset() {
-    for(uint32_t i = 0; i < MAX_DISPLAYS; i++) {
-        sIsModeOn[i] = false;
-        sDest[i] = ovutils::OV_INVALID;
-    }
+class VideoOverlayLowRes : public IVideoOverlay {
+public:
+    explicit VideoOverlayLowRes(const int& dpy);
+    virtual ~VideoOverlayLowRes() {};
+    bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list);
+    bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
+    void reset();
+private:
+    //Configures overlay for video prim and ext
+    bool configure(hwc_context_t *ctx, hwc_layer_1_t *yuvlayer);
+    //Marks layer flags if this feature is used
+    void markFlags(hwc_layer_1_t *yuvLayer);
+    //Flags if this feature is on.
+    bool mModeOn;
+    ovutils::eDest mDest;
+};
+
+class VideoOverlayHighRes : public IVideoOverlay {
+public:
+    explicit VideoOverlayHighRes(const int& dpy);
+    virtual ~VideoOverlayHighRes() {};
+    bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list);
+    bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
+    void reset();
+private:
+    //Configures overlay for video prim and ext
+    bool configure(hwc_context_t *ctx, hwc_layer_1_t *yuvlayer);
+    //Marks layer flags if this feature is used
+    void markFlags(hwc_layer_1_t *yuvLayer);
+    //Flags if this feature is on.
+    bool mModeOn;
+    ovutils::eDest mDestL;
+    ovutils::eDest mDestR;
+};
+
+//=================Inlines======================
+inline void VideoOverlayLowRes::reset() {
+    mModeOn = false;
+    mDest = ovutils::OV_INVALID;
+    mRot = NULL;
 }
+
+inline void VideoOverlayHighRes::reset() {
+    mModeOn = false;
+    mDestL = ovutils::OV_INVALID;
+    mDestR = ovutils::OV_INVALID;
+    mRot = NULL;
+}
+
 }; //namespace qhwc
 
 #endif //HWC_VIDEO_H