Merge "display: Remove VPU related code"
diff --git a/common.mk b/common.mk
index d8ea260..64f60e4 100644
--- a/common.mk
+++ b/common.mk
@@ -33,11 +33,6 @@
     common_flags += -DMDSS_TARGET
 endif
 
-ifeq ($(call is-board-platform-in-list, mpq8092), true)
-    common_flags += -DVPU_TARGET
-endif
-
-
 common_deps  :=
 kernel_includes :=
 
diff --git a/libhwcomposer/Android.mk b/libhwcomposer/Android.mk
index 9749c69..68da8a0 100644
--- a/libhwcomposer/Android.mk
+++ b/libhwcomposer/Android.mk
@@ -25,8 +25,4 @@
                                  hwc_dump_layers.cpp \
                                  hwc_ad.cpp \
                                  hwc_virtual.cpp
-ifeq ($(call is-board-platform-in-list, mpq8092), true)
-    LOCAL_SRC_FILES += hwc_vpuclient.cpp
-endif
-
 include $(BUILD_SHARED_LIBRARY)
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index 7539a1c..893fee0 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -38,7 +38,6 @@
 #include "hwc_copybit.h"
 #include "hwc_ad.h"
 #include "profiler.h"
-#include "hwc_vpuclient.h"
 #include "hwc_virtual.h"
 
 using namespace qhwc;
@@ -202,12 +201,7 @@
         reset_layer_prop(ctx, dpy, list->numHwLayers - 1);
         setListStats(ctx, list, dpy);
 
-        if (ctx->mVPUClient == NULL)
-            fbComp = (ctx->mMDPComp[dpy]->prepare(ctx, list) < 0);
-#ifdef VPU_TARGET
-        else
-            fbComp = (ctx->mVPUClient->prepare(ctx, dpy, list) < 0);
-#endif
+        fbComp = (ctx->mMDPComp[dpy]->prepare(ctx, list) < 0);
 
         if (fbComp) {
             const int fbZ = 0;
@@ -514,12 +508,7 @@
         if(ctx->mHwcDebug[dpy])
             ctx->mHwcDebug[dpy]->dumpLayers(list);
 
-        if (ctx->mVPUClient != NULL) {
-#ifdef VPU_TARGET
-            ctx->mVPUClient->predraw(ctx, dpy, list);
-#endif
-        }
-        else if (!ctx->mMDPComp[dpy]->draw(ctx, list)) {
+        if (!ctx->mMDPComp[dpy]->draw(ctx, list)) {
             ALOGE("%s: MDPComp draw failed", __FUNCTION__);
             ret = -1;
         }
@@ -544,10 +533,6 @@
             ret = -1;
         }
 
-#ifdef VPU_TARGET
-        if (ctx->mVPUClient != NULL)
-            ctx->mVPUClient->draw(ctx, dpy, list);
-#endif
     }
 
     closeAcquireFds(list);
diff --git a/libhwcomposer/hwc_qclient.cpp b/libhwcomposer/hwc_qclient.cpp
index 2320bc0..5313795 100644
--- a/libhwcomposer/hwc_qclient.cpp
+++ b/libhwcomposer/hwc_qclient.cpp
@@ -30,7 +30,6 @@
 #include <hwc_qclient.h>
 #include <IQService.h>
 #include <hwc_utils.h>
-#include <hwc_vpuclient.h>
 #include <mdp_version.h>
 
 #define QCLIENT_DEBUG 0
@@ -95,20 +94,6 @@
     return result;
 }
 
-#ifdef VPU_TARGET
-static android::status_t vpuCommand(hwc_context_t *ctx,
-        uint32_t command,
-        const Parcel* inParcel,
-        Parcel* outParcel) {
-    status_t result = NO_INIT;
-#ifdef QCOM_BSP
-    if(qdutils::MDPVersion::getInstance().is8092())
-        result = ctx->mVPUClient->processCommand(command, inParcel, outParcel);
-#endif
-    return result;
-}
-#endif
-
 static void setExtOrientation(hwc_context_t *ctx, uint32_t orientation) {
     ctx->mExtOrientation = orientation;
 }
@@ -186,12 +171,6 @@
         Parcel* outParcel) {
     status_t ret = NO_ERROR;
 
-#ifdef VPU_TARGET
-    if (command > IQService::VPU_COMMAND_LIST_START &&
-        command < IQService::VPU_COMMAND_LIST_END) {
-        return vpuCommand(mHwcContext, command, inParcel, outParcel);
-    }
-#endif
     switch(command) {
         case IQService::SECURING:
             securing(mHwcContext, inParcel->readInt32());
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 5c36304..751aef3 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -37,7 +37,6 @@
 #include "mdp_version.h"
 #include "hwc_copybit.h"
 #include "hwc_dump_layers.h"
-#include "hwc_vpuclient.h"
 #include "external.h"
 #include "virtual.h"
 #include "hwc_qclient.h"
@@ -237,7 +236,6 @@
     // Initialize device orientation to its default orientation
     ctx->deviceOrientation = 0;
     ctx->mBufferMirrorMode = false;
-    ctx->mVPUClient = NULL;
 
     // Read the system property to determine if downscale feature is enabled.
     ctx->mMDPDownscaleEnabled = false;
@@ -247,11 +245,6 @@
         ctx->mMDPDownscaleEnabled = true;
     }
 
-#ifdef VPU_TARGET
-    if(qdutils::MDPVersion::getInstance().is8092())
-        ctx->mVPUClient = new VPUClient(ctx);
-#endif
-
     ALOGI("Initializing Qualcomm Hardware Composer");
     ALOGI("MDP version: %d", ctx->mMDP.version);
 }
@@ -285,11 +278,6 @@
         ctx->mExtDisplay = NULL;
     }
 
-#ifdef VPU_TARGET
-    if(ctx->mVPUClient != NULL)
-        delete ctx->mVPUClient;
-#endif
-
     for(int i = 0; i < HWC_NUM_DISPLAY_TYPES; i++) {
         if(ctx->mFBUpdate[i]) {
             delete ctx->mFBUpdate[i];
@@ -1329,10 +1317,8 @@
                 // Release all the app layer fds immediately,
                 // if animation is in progress.
                 list->hwLayers[i].releaseFenceFd = -1;
-            } else if(list->hwLayers[i].releaseFenceFd < 0 &&
-                    !(layerProp[i].mFlags & HWC_VPUCOMP)) {
+            } else if(list->hwLayers[i].releaseFenceFd < 0 ) {
                 //If rotator has not already populated this field
-                // & if it's a not VPU layer
                 if(list->hwLayers[i].compositionType == HWC_BLIT) {
                     //For Blit, the app layers should be released when the Blit is
                     //complete. This fd was passed from copybit->draw
@@ -1376,19 +1362,13 @@
                 ovutils::OV_MDP_BLEND_FG_PREMULT);
     }
 
-    if (layer->flags & HWC_VPU_PIPE) {
-        ovutils::setMdpFlags(mdpFlags, ovutils::OV_MDP_VPU_PIPE);
-    }
-
     if(isYuvBuffer(hnd)) {
         if(isSecureBuffer(hnd)) {
             ovutils::setMdpFlags(mdpFlags,
                     ovutils::OV_MDP_SECURE_OVERLAY_SESSION);
         }
-        // in mpq, deinterlacing is done in vpu
         if(metadata && (metadata->operation & PP_PARAM_INTERLACED) &&
-                metadata->interlaced &&
-                (!qdutils::MDPVersion::getInstance().is8092())) {
+                metadata->interlaced) {
             ovutils::setMdpFlags(mdpFlags,
                     ovutils::OV_MDP_DEINTERLACE);
         }
@@ -1576,16 +1556,6 @@
     uint32_t format = ovutils::getMdpFormat(hnd->format, isTileRendered(hnd));
     Whf whf(getWidth(hnd), getHeight(hnd), format, hnd->size);
 
-#ifdef VPU_TARGET
-    if(ctx->mVPUClient != NULL &&
-            ctx->mVPUClient->supportedVPULayer(dpy, layer)) {
-        whf.format = getMdpFormat(
-                ctx->mVPUClient->getLayerFormat(dpy, layer));
-        whf.w = ctx->mVPUClient->getWidth(dpy, layer);
-        whf.h = ctx->mVPUClient->getHeight(dpy, layer);
-    }
-#endif
-
     // Handle R/B swap
     if (layer->flags & HWC_FORMAT_RB_SWAP) {
         if (hnd->format == HAL_PIXEL_FORMAT_RGBA_8888)
@@ -1693,16 +1663,6 @@
     uint32_t format = ovutils::getMdpFormat(hnd->format, isTileRendered(hnd));
     Whf whf(getWidth(hnd), getHeight(hnd), format, hnd->size);
 
-#ifdef VPU_TARGET
-    if(ctx->mVPUClient != NULL &&
-            ctx->mVPUClient->supportedVPULayer(dpy, layer)) {
-        whf.format = getMdpFormat(
-                ctx->mVPUClient->getLayerFormat(dpy, layer));
-        whf.w = ctx->mVPUClient->getWidth(dpy, layer);
-        whf.h = ctx->mVPUClient->getHeight(dpy, layer);
-    }
-#endif
-
     // Handle R/B swap
     if (layer->flags & HWC_FORMAT_RB_SWAP) {
         if (hnd->format == HAL_PIXEL_FORMAT_RGBA_8888)
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 4aa6410..b4b5232 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -60,7 +60,6 @@
 class CopyBit;
 class HwcDebug;
 class AssertiveDisplay;
-class VPUClient;
 class HWCVirtualBase;
 
 
@@ -145,14 +144,12 @@
 enum {
     HWC_MDPCOMP = 0x00000001,
     HWC_COPYBIT = 0x00000002,
-    HWC_VPUCOMP = 0x00000004,
 };
 
 // HAL specific features
 enum {
     HWC_COLOR_FILL = 0x00000008,
     HWC_FORMAT_RB_SWAP = 0x00000040,
-    HWC_VPU_PIPE = 0x00000200,
 };
 
 class LayerRotMap {
@@ -471,7 +468,6 @@
     qhwc::HwcDebug *mHwcDebug[HWC_NUM_DISPLAY_TYPES];
     hwc_rect_t mViewFrame[HWC_NUM_DISPLAY_TYPES];
     qhwc::AssertiveDisplay *mAD;
-    qhwc::VPUClient *mVPUClient;
     eAnimationState mAnimationState[HWC_NUM_DISPLAY_TYPES];
     qhwc::HWCVirtualBase *mHWCVirtual;
 
diff --git a/libhwcomposer/hwc_vpuclient.cpp b/libhwcomposer/hwc_vpuclient.cpp
deleted file mode 100644
index 6904efc..0000000
--- a/libhwcomposer/hwc_vpuclient.cpp
+++ /dev/null
@@ -1,964 +0,0 @@
-/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *    * Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials provided
- *      with the distribution.
- *    * Neither the name of The Linux Foundation. nor the names of its
- *      contributors may be used to endorse or promote products derived
- *      from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED.  INNO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <dlfcn.h>
-#include "hwc_vpuclient.h"
-#include <binder/Parcel.h>
-#include "hwc_fbupdate.h"
-#include <vpu/vpu.h>
-
-using namespace vpu;
-using namespace android;
-using namespace overlay::utils;
-namespace ovutils = overlay::utils;
-
-namespace qhwc {
-
-VPUClient::VPUClient(hwc_context_t *ctx)
-{
-    mVPULib = dlopen("libvpu.so", RTLD_NOW);
-    VPU* (*getObject)();
-
-    mVPU = NULL;
-    if (mVPULib == NULL) {
-        ALOGE("%s: Cannot open libvpu.so object", __FUNCTION__);
-        return;
-    }
-
-    *(void **) &getObject =  dlsym(mVPULib, "getObject");
-    if (getObject) {
-        mVPU = getObject();
-        ALOGI("Initializing VPU client..");
-
-       // calling vpu init
-        if (mVPU->init() == NO_ERROR) {
-            // passing display attributes to libvpu
-            ALOGD_IF(isDebug(), "%s: VFM init successful!", __FUNCTION__);
-
-            DispAttr_t attr;
-            attr.width = ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres;
-            attr.height = ctx->dpyAttr[HWC_DISPLAY_PRIMARY].yres;
-            attr.fp100s = (ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period) ?
-              1000000000/(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period/100):0;
-            mVPU->setDisplayAttr((DISPLAY_ID)HWC_DISPLAY_PRIMARY, attr);
-
-            ALOGD_IF(isDebug(),"%s: Display attr: width:%d height:%d fp100s:%d",
-                    __FUNCTION__, attr.width, attr.height, attr.fp100s);
-
-            // memsetting the pipe structure to 0
-            memset(mProp, 0, sizeof(mProp));
-
-            mDebugLogs = 0;
-            // enable logs
-            char property[PROPERTY_VALUE_MAX];
-            if ( property_get("debug.vpuclient.logs", property, NULL) > 0 )
-                mDebugLogs = atoi(property);
-
-            // allocating memory for LayerList
-            for (int i = 0; i < HWC_NUM_DISPLAY_TYPES; ++i)
-                vList[i] = (LayerList*) malloc(sizeof(LayerList));
-        }
-        else {
-            ALOGE("Error: VPU init failed!");
-            mVPU = NULL;
-        }
-    }
-}
-
-VPUClient::~VPUClient()
-{
-    // freeing LayerList
-    for (int i = 0; i < HWC_NUM_DISPLAY_TYPES; ++i) {
-        if (vList[i])
-            free(vList[i]);
-    }
-
-    void (*destroy) (VPU*);
-    *(void **) &destroy = dlsym(mVPULib, "deleteObject");
-    dlclose(mVPULib);
-}
-
-void setLayer(hwc_layer_1_t *layer, Layer *vLayer)
-{
-    // setting handle info in vLayer
-    vLayer->handle = (private_handle_t *)(layer->handle);
-
-    if (vLayer->handle) {
-        vLayer->srcStride.width = getWidth(vLayer->handle);
-        vLayer->srcStride.height = getHeight(vLayer->handle);
-    }
-
-    // setting source crop
-    hwc_rect_t sourceRect = integerizeSourceCrop(layer->sourceCropf);
-    vLayer->srcRect.left = sourceRect.left;
-    vLayer->srcRect.top  = sourceRect.top;
-    vLayer->srcRect.right = sourceRect.right;
-    vLayer->srcRect.bottom = sourceRect.bottom;
-
-    // setting destination crop
-    vLayer->tgtRect.left = layer->displayFrame.left;
-    vLayer->tgtRect.top = layer->displayFrame.top;
-    vLayer->tgtRect.right = layer->displayFrame.right;
-    vLayer->tgtRect.bottom = layer->displayFrame.bottom;
-
-    if (layer->flags & HWC_GEOMETRY_CHANGED)
-        vLayer->inFlags |= GEOMETRY_CHANGED;
-
-    vLayer->acquireFenceFd = layer->acquireFenceFd;
-
-    if (layer->compositionType == HWC_FRAMEBUFFER_TARGET || isSkipLayer(layer))
-        vLayer->inFlags |= SKIP_LAYER;
-}
-
-int VPUClient::setupVpuSession(hwc_context_t *ctx, int display,
-                                            hwc_display_contents_1_t* list)
-{
-    memset(vList[display], 0, sizeof(LayerList));
-    memset(mProp, 0, sizeof(mProp));
-    mNumVpuLayers = 0;
-
-    // setting up the layer
-    LayerList *vpuList = vList[display];
-    vpuList->numLayers = list->numHwLayers;
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        hwc_layer_1_t *layer = &list->hwLayers[i];
-        Layer *vLayer = &vpuList->layers[i];
-        VpuLayerProp* prop = &mProp[display][i];
-
-        // Storing the sourceCropf, as it's going to be changed for overlay Set
-        // will be restored after overlay set in prepare.
-        prop->sourceCropf = layer->sourceCropf;
-
-        // filling up the vpu list
-        setLayer(layer, vLayer);
-        ALOGD_IF(isDebug2(), "%s:Done setting lyr:%d for VFM", __FUNCTION__, i);
-    }
-
-    if (mVPU->setupVpuSession((DISPLAY_ID)display, vpuList) != NO_ERROR) {
-        //error in vpu prepare
-        ALOGE("%s: ERROR in VPU::setupVpuSession", __FUNCTION__);
-        return -1;
-    }
-    ALOGD_IF(isDebug2(), "%s: Done VFM: setupVpuSession", __FUNCTION__);
-
-    mGpuFallback = true;
-    LayerProp *layerProp = ctx->layerProp[display];
-    // check if the pipeID is already set for this layer, then will need to
-    // ensure that it is reserved in overlay
-    for (unsigned int i=0; i<(vpuList->numLayers); ++i) {
-        hwc_layer_1_t *layer = &list->hwLayers[i];
-        Layer *vLayer = &vpuList->layers[i];
-        VpuLayerProp* prop = &mProp[display][i];
-
-        if (vLayer->outFlags & VPU_LAYER) {
-            ALOGD_IF(isDebug(), "%s: VPU supported layer:%d", __FUNCTION__, i);
-
-            mNumVpuLayers++;
-            mGpuFallback = false;
-            // Reserving the pipe used in last iteration for the same layer
-            if ((vLayer->outFlags & RESERVE_PREV_PIPES) &&
-                                            vLayer->sDestPipes.numPipes > 0) {
-                prop->pipeCount = vLayer->sDestPipes.numPipes;
-                if (prop->pipeCount == 1) {
-                    setPipeId(prop, vLayer->sDestPipes.pipe[0]);
-                    ALOGD_IF(isDebug(), "%s: VPU: Reserved pipe:%d",
-                            __FUNCTION__, prop->pipeID[0]);
-                }
-                else if (prop->pipeCount == 2) {
-                    setPipeId(prop, vLayer->sDestPipes.pipe[0],
-                                                    vLayer->sDestPipes.pipe[1]);
-                    ALOGD_IF(isDebug(), "%s: VPU: Reserved lpipe:%d, rpipe:%d",
-                            __FUNCTION__, prop->pipeID[0], prop->pipeID[1]);
-                }
-                else {
-                    ALOGE("%s: Invalid pipeCount for resevation", __FUNCTION__);
-                }
-            }
-            else {
-                ALOGD_IF(isDebug(), "%s: 1st vid frame for VPU", __FUNCTION__);
-                prop->firstBuffer = true;
-            }
-
-            // marking the layer pipes for vpu.
-            prop->vpuLayer = true;
-            prop->layer = layer;
-            layer->flags |= HWC_VPU_PIPE;
-
-            // getting image width and height
-            prop->width = layer->displayFrame.right - layer->displayFrame.left;
-            prop->height = layer->displayFrame.bottom - layer->displayFrame.top;
-
-            //setting source crop = dest crop (only for layers drawn by vpu,
-            // since we know it will be scaled up/down by vpu)
-            layer->sourceCropf.left = 0.0;
-            layer->sourceCropf.top = 0.0;
-            layer->sourceCropf.right = (float) prop->width;
-            layer->sourceCropf.bottom = (float) prop->height;
-
-            // setting the flag so that mdpComp wont recognize it as the MDPCOMP
-            layerProp[i].mFlags |= HWC_VPUCOMP;
-
-            // TODO: need to get the proper solution for color fill
-
-            // storing locally the vpu supported format from VFM
-            prop->format = vLayer->vpuOutPixFmt;
-            ALOGD_IF(isDebug(), "%s: MDP: sourceCropf: w:%d h:%d format:%d",
-                    __FUNCTION__, prop->width, prop->height, prop->format);
-        }
-    }
-    return 0;
-}
-
-bool VPUClient::allocResLayerPipes(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    overlay::Overlay& ov = *ctx->mOverlay;
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        int pipeid = -1;
-        VpuLayerProp* prop = &mProp[dpy][i];
-
-        // checking if there is already a reserved pipe for this layer
-        // then use the same allocated pipe for this layer
-        getPipeId(prop, pipeid);
-
-        if (pipeid != -1) {
-            // there is a reserved pipe for this layer.
-            ovutils::eDest dest = ov.reservePipe(pipeid);
-            if (dest == ovutils::OV_INVALID) {
-                ALOGE("%s: Unable to get reserved pipe: layer#%d",
-                        __FUNCTION__, i);
-                return false;
-            }
-
-            // setting dest locally
-            setDest(prop, dest);
-            ALOGD_IF(isDebug(), "%s: Reserving pipe:%d, dest:%d ", __FUNCTION__,
-                    pipeid, dest);
-        }
-        else {
-            ALOGD_IF(isDebug2(), "%s: No reserved pipe for layer:%d",
-                    __FUNCTION__, i);
-        }
-    }
-    return true;
-}
-
-bool VPUClient::allocLayerPipes(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    // checking if the pipes are reserved for any layer,
-    // if yes, then updating the index of the pipes
-    if (!allocResLayerPipes(ctx, dpy, list)) {
-        ALOGE("%s: Reserved pipe alloc failed", __FUNCTION__);
-        return false;
-    }
-
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        hwc_layer_1_t* layer = &list->hwLayers[i];
-        private_handle_t *hnd = (private_handle_t *)layer->handle;
-        VpuLayerProp* prop = &mProp[dpy][i];
-        int pipe = -1;
-        overlay::Overlay& ov = *ctx->mOverlay;
-
-        // only care about the layers supported by VPU
-        if (!prop->vpuLayer)
-            continue;
-
-        // continue if this layer has reserved pipe
-        getPipeId(prop, pipe);
-        if (pipe != -1)
-            continue;
-
-        ovutils::eDest dest = ov.nextPipe(ovutils::OV_MDP_PIPE_VG, dpy,
-                overlay::Overlay::MIXER_DEFAULT);
-        if (dest == ovutils::OV_INVALID) {
-            ALOGE("%s: Unable to allocate pipe for layer#%d", __FUNCTION__, i);
-            return false;
-        }
-
-        // setting dest locally
-        setDest(prop, dest);
-        ALOGD_IF(isDebug(), "%s: Newly allocated pipe_dest:%d", __FUNCTION__,
-                dest);
-    }
-    return true;
-}
-
-bool VPUClient::allocResLayerPipesSplit(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    overlay::Overlay& ov = *ctx->mOverlay;
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        int lpipeid = -1;
-        int rpipeid = -1;
-        VpuLayerProp* prop = &mProp[dpy][i];
-
-        // checking if there is already a reserved pipe for this layer
-        // then use the same allocated pipe for this layer
-        getPipeId(prop, lpipeid, rpipeid);
-
-        if (lpipeid != -1 && rpipeid != -1) {
-            ovutils::eDest ldest = ov.reservePipe(lpipeid);
-            if (ldest == ovutils::OV_INVALID) {
-                ALOGD_IF(isDebug(), "%s: Unable to get reserved pipe-lsplit: "
-                         "layer#%d", __FUNCTION__, i);
-                return false;
-            }
-
-            ovutils::eDest rdest = ov.reservePipe(rpipeid);
-            if (rdest == ovutils::OV_INVALID) {
-                ALOGD_IF(isDebug(), "%s: Unable to get reserved pipe-rsplit: "
-                         "layer#%d", __FUNCTION__, i);
-                return false;
-            }
-
-            setDest(prop, ldest, rdest);
-            ALOGD_IF(isDebug(), "%s: Reserve lpipe:%d, ldest:%d, rpipe:%d, "
-                    "rdest:%d", __FUNCTION__, lpipeid, ldest, rpipeid, rdest);
-        }
-        else if (lpipeid != -1 || rpipeid != -1) {
-            ALOGE("%s: Bug: only one pipe reserved!", __FUNCTION__);
-            return false;
-        }
-    }
-    return true;
-}
-
-bool VPUClient::allocLayerPipesSplit(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    // checking if the pipes are reserved for any layer,
-    // if yes, then updating the index of the pipes
-    if (!allocResLayerPipesSplit(ctx, dpy, list)) {
-        ALOGE("%s: Reserved pipe alloc failed", __FUNCTION__);
-        return false;
-    }
-
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        hwc_layer_1_t* layer = &list->hwLayers[i];
-        private_handle_t *hnd = (private_handle_t *)layer->handle;
-        VpuLayerProp* prop = &mProp[dpy][i];
-        int lpipe, rpipe;
-        overlay::Overlay& ov = *ctx->mOverlay;
-
-        // only care about the layers supported by VPU
-        if (!prop->vpuLayer)
-            continue;
-
-        // only care about the layers supported by VPU
-        getPipeId(prop, lpipe, rpipe);
-        if (lpipe != -1 && rpipe != -1)
-            continue;
-
-        ovutils::eDest ldest = ov.nextPipe(ovutils::OV_MDP_PIPE_VG, dpy,
-                overlay::Overlay::MIXER_LEFT);
-        if (ldest == ovutils::OV_INVALID) {
-            ALOGE("%s: Unable to allocate pipe for layer#%d", __FUNCTION__, i);
-            return false;
-        }
-
-        ovutils::eDest rdest = ov.nextPipe(ovutils::OV_MDP_PIPE_VG, dpy,
-                overlay::Overlay::MIXER_RIGHT);
-        if (rdest == ovutils::OV_INVALID) {
-            ALOGE("%s: Unable to allocate pipe for layer#%d", __FUNCTION__, i);
-            return false;
-        }
-
-        // setting dests locally
-        setDest(prop, ldest, rdest);
-        ALOGD_IF(isDebug(), "%s: Newly allocated ldest:%d rdest:%d",
-                __FUNCTION__, ldest, rdest);
-    }
-    return true;
-}
-
-bool VPUClient::configureLayers(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        VpuLayerProp* prop = &mProp[dpy][i];
-        hwc_layer_1_t* layer = &list->hwLayers[i];
-
-        if (!prop->vpuLayer)
-            continue;
-
-        eMdpFlags mdpFlags = OV_MDP_BACKEND_COMPOSITION;
-        eZorder zOrder = static_cast<eZorder>(i);
-        eIsFg isFg = IS_FG_OFF;
-        setPipeCount(prop, 1);
-        eDest dest = (eDest) getDest(prop, 0);
-
-        ALOGD_IF(isDebug(),"%s: configuring: layer:%p z_order:%d dest_pipe:%d",
-                __FUNCTION__, layer, zOrder, dest);
-
-        if (configureNonSplit(ctx, layer, dpy, mdpFlags, zOrder, isFg,
-                            dest, NULL)) {
-            ALOGE("%s: Failed to configure overlay for layer %d",
-                    __FUNCTION__, i);
-            return false;
-        }
-        ALOGD_IF(isDebug2(), "%s: layer:%d configured!", __FUNCTION__, i);
-
-        // Pipe is successfully allocated for this layer; retrieving it from
-        // overlay
-        int pipeId = ctx->mOverlay->getPipeId((eDest) getDest(prop, 0));
-        setPipeId(prop, pipeId);
-
-        ALOGD_IF(isDebug(), "%s: allocated pipe:%d layer:%d", __FUNCTION__,
-                    pipeId, i);
-    }
-    return true;
-}
-
-bool VPUClient::configureLayersSplit(hwc_context_t* ctx, int dpy,
-                                         hwc_display_contents_1_t* list)
-{
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        VpuLayerProp* prop = &mProp[dpy][i];
-        hwc_layer_1_t* layer = &list->hwLayers[i];
-
-        if (!prop->vpuLayer)
-            continue;
-
-        eMdpFlags mdpFlags = OV_MDP_BACKEND_COMPOSITION;
-        eZorder zOrder = static_cast<eZorder>(i);
-        eIsFg isFg = IS_FG_OFF;
-        setPipeCount(prop, 2);
-        eDest ldest = (eDest) getDest(prop, 0);
-        eDest rdest = (eDest) getDest(prop, 1);
-
-        ALOGD_IF(isDebug(),"%s: configuring: layer:%p z_order:%d dest_pipeL:%d"
-                "dest_pipeR:%d",__FUNCTION__, layer, zOrder, ldest, rdest);
-
-        if (configureSplit(ctx, layer, dpy, mdpFlags, zOrder, isFg, ldest,
-                            rdest, NULL)) {
-            ALOGE("%s: Failed to configure overlay for layer %d",
-                    __FUNCTION__, i);
-            return false;
-        }
-        ALOGD_IF(isDebug2(), "%s: layer:%d configured!", __FUNCTION__, i);
-
-        // Pipe is successfully allocated for this layer; retrieving it from
-        // overlay
-        int lpipeId = ctx->mOverlay->getPipeId((eDest) getDest(prop, 0));
-        int rpipeId = ctx->mOverlay->getPipeId((eDest) getDest(prop, 1));
-        setPipeId(prop, lpipeId, rpipeId);
-
-        ALOGD_IF(isDebug(), "%s: allocated l-pipe:%d - r-pipe:%d for layer:%d",
-                __FUNCTION__, lpipeId, rpipeId, i);
-    }
-    return true;
-}
-
-void VPUClient::setMDPCompLayerFlags(hwc_context_t *ctx, int dpy,
-                                   hwc_display_contents_1_t* list)
-{
-    LayerProp *layerProp = ctx->layerProp[dpy];
-
-    // disableGpu only disables gpu for video layer. The expected behavior is to
-    // show a blank screen in case VPU doesnt support a video layer, and gpu
-    // fallback is disabled by the user.
-    bool disableGpu = false;
-    char property[PROPERTY_VALUE_MAX];
-    if ((property_get("persist.hwc.noGpuFallback", property, NULL) > 0) &&
-        (!strncmp(property, "1", PROPERTY_VALUE_MAX ) ||
-            (!strncasecmp(property,"true", PROPERTY_VALUE_MAX )))) {
-        ALOGD_IF(isDebug(), "%s: GPU fallback is disabled through prop",
-                __FUNCTION__);
-        disableGpu = true;
-    }
-
-    // no layers are supported by vpu
-    if (mGpuFallback && !disableGpu) {
-        ALOGD_IF(isDebug(), "%s: No VPU supported layers - Falling back to GPU",
-                __FUNCTION__);
-        return;
-    }
-
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        hwc_layer_1_t* layer = &(list->hwLayers[i]);
-        VpuLayerProp* prop = &mProp[dpy][i];
-        private_handle_t *hnd = (private_handle_t *)layer->handle;
-
-        // mark vpu layers as HWC_OVERLAY, and those video layers that
-        // are not supported by vpu and gpu fallback is disabled by the
-        // user.
-        if (prop->vpuLayer || (isYuvBuffer(hnd) && disableGpu)) {
-            layer->compositionType = HWC_OVERLAY;
-            layer->hints |= HWC_HINT_CLEAR_FB;
-            ALOGD_IF(isDebug(), "%s: Marking layer:%d as overlay",
-                    __FUNCTION__, i);
-        }
-    }
-}
-
-int VPUClient::prepare(hwc_context_t *ctx, int display,
-            hwc_display_contents_1_t* list)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    const int numLayers = ctx->listStats[display].numAppLayers;
-    //number of app layers exceeds MAX_NUM_APP_LAYERS fall back to GPU
-    //do not cache the information for next draw cycle.
-    if (numLayers > MAX_NUM_APP_LAYERS) {
-        ALOGE("%s: Number of App layers exceeded the limit ",__FUNCTION__);
-        return -1;
-    }
-
-    if (setupVpuSession(ctx, display, list)) {
-        ALOGD_IF(isDebug(), "%s: Vpu session setup failed! ",__FUNCTION__);
-        return -1;
-    }
-
-    LayerProp *layerProp = ctx->layerProp[display];
-    bool isSplit = isDisplaySplit(ctx, display);
-    ALOGD_IF(isDebug2(), "%s: Split Pipe:%d ", __FUNCTION__,
-            isSplit ? 1 : 0);
-
-    // setting up the layer
-    LayerList *vpuList = vList[display];
-    vpuList->numLayers = list->numHwLayers;
-
-    // Prepare FB Update at z-0
-    if (numLayers > mNumVpuLayers) {
-        if (!ctx->mFBUpdate[display]->prepare(ctx, list, mNumVpuLayers)) {
-            ALOGD_IF(isDebug(), "%s configure framebuffer failed",
-                    __FUNCTION__);
-            return -1;
-        }
-    }
-
-    // Allocate pipe for layers
-    if (!isSplit ? !allocLayerPipes(ctx, display, list) :
-                 !allocLayerPipesSplit(ctx, display, list)) {
-        ALOGD_IF(isDebug(), "%s: Unable to allocate MDP pipes", __FUNCTION__);
-        return -1;
-    }
-
-    // Configure layers
-    if (!isSplit ? !configureLayers(ctx, display, list) :
-                 !configureLayersSplit(ctx, display, list)) {
-        ALOGD_IF(isDebug(), "%s: Unable to configure MDP pipes", __FUNCTION__);
-        return -1;
-    }
-
-    // Set layer flags for MDP/VPU composition
-    setMDPCompLayerFlags(ctx, display, list);
-
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        VpuLayerProp* prop = &mProp[display][i];
-
-        if (!prop->vpuLayer)
-            continue;
-
-        hwc_layer_1_t *layer = &list->hwLayers[i];
-        Layer *vLayer = &vpuList->layers[i];
-
-        // re-storing the sourceCropf, as it was changed in setVpuSession for
-        // overlay set
-        layer->sourceCropf = prop->sourceCropf;
-
-        // updating the pipe info inside vfm list
-        if ( prop->pipeCount > 0  && prop->pipeCount <= MAX_PIPES_PER_LAYER ) {
-            vLayer->sDestPipes.numPipes = prop->pipeCount;
-
-            for (int j=0; j < prop->pipeCount; ++j) {
-                // Setting pipe for VPU
-                vLayer->sDestPipes.pipe[j] = prop->pipeID[j];
-            }
-        }
-    }
-
-    if (mVPU->prepare((DISPLAY_ID)display, vpuList) != NO_ERROR) {
-        //error in vpu prepare
-        ALOGE("%s: ERROR in VPU::prepare", __func__);
-        return -1;
-    }
-    return 0;
-}
-
-bool VPUClient::queueHandle(hwc_context_t* ctx, VpuLayerProp* prop,
-        private_handle_t* hnd)
-{
-    overlay::Overlay& ov = *ctx->mOverlay;
-    ovutils::eDest dest = (eDest) getDest(prop, 0);
-
-    int fd = hnd->fd;
-    uint32_t offset = hnd->offset;
-
-    if (dest != ovutils::OV_INVALID) {
-        if (!ov.queueBuffer(fd, offset, dest)) {
-            ALOGE("%s: queueBuffer failed", __FUNCTION__);
-            return false;
-        }
-        else {
-            ALOGD_IF(isDebug(), "%s: Queue handle successful: hnd:0x%x "
-                    "dest:%d", __FUNCTION__, (unsigned int) hnd, dest);
-        }
-    }
-    else {
-        ALOGE("%s: Invalid Dest: dest:%d", __FUNCTION__, dest);
-        return false;
-    }
-    return true;
-}
-
-bool VPUClient::queueHandleSplit(hwc_context_t* ctx, VpuLayerProp* prop,
-        private_handle_t* hnd)
-{
-    overlay::Overlay& ov = *ctx->mOverlay;
-    ovutils::eDest ldest = (eDest) getDest(prop, 0);
-    ovutils::eDest rdest = (eDest) getDest(prop, 1);
-
-    int fd = hnd->fd;
-    uint32_t offset = hnd->offset;
-
-    // play left mixer
-    if (ldest != ovutils::OV_INVALID) {
-        ALOGD_IF(isDebug(), "%s: Queuing left mixer", __FUNCTION__);
-        if (!ov.queueBuffer(fd, offset, ldest)) {
-            ALOGE("%s: queueBuffer failed for left mixer ", __FUNCTION__);
-            return false;
-        }
-        else {
-            ALOGD_IF(isDebug(), "%s: Queue left-handle successful: hnd:0x%x "
-                    "ldest:%d", __FUNCTION__, (unsigned int) hnd, ldest);
-        }
-    }
-    else {
-        ALOGE("%s: Invalid l-Split Dest", __FUNCTION__);
-        return false;
-    }
-
-    // play right mixer
-    if (rdest != ovutils::OV_INVALID) {
-        ALOGD_IF(isDebug(), "%s: Queuing right mixer", __FUNCTION__);
-        if (!ov.queueBuffer(fd, offset, rdest)) {
-            ALOGE("%s: queueBuffer failed for right mixer ", __FUNCTION__);
-            return false;
-        }
-        else {
-            ALOGD_IF(isDebug(), "%s: Queue right-handle successful: hnd:0x%x "
-                    "rdest:%d", __FUNCTION__, (unsigned int) hnd, rdest);
-        }
-    }
-    else {
-        ALOGE("%s: Invalid r-Split Dest", __FUNCTION__);
-        return false;
-    }
-    return true;
-}
-
-bool VPUClient::drawDummyLayers(hwc_context_t* ctx, int dpy,
-                    hwc_display_contents_1_t* list)
-{
-    int err = 0;
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        VpuLayerProp* prop = &mProp[dpy][i];
-
-        if (!prop->vpuLayer)
-            continue;
-
-        // displaying blank screen for the first frame
-        if (prop->firstBuffer) {
-            ALOGD_IF(isDebug(), "%s: Displaying first (blank) frame",
-                    __FUNCTION__);
-            prop->firstBuffer = false;
-
-            if (mHnd[dpy][i] != NULL)
-                free_buffer(mHnd[dpy][i]);
-
-            // TO-FIX: out dummy buffer is currently allocated based on
-            // RGB888 format
-            err = alloc_buffer(&mHnd[dpy][i], prop->width, prop->height,
-                HAL_PIXEL_FORMAT_RGB_888, GRALLOC_USAGE_PRIVATE_IOMMU_HEAP);
-            if (err == -1) {
-                ALOGE("%s: Dummy buffer allocation failed!", __FUNCTION__);
-                return false;
-            }
-
-            private_handle_t* hnd = mHnd[dpy][i];
-            if (prop->format == HAL_PIXEL_FORMAT_RGB_888) {
-                ALOGD_IF(isDebug(), "%s: Format: RGB888", __FUNCTION__);
-                memset((void*)hnd->base, 0x0, hnd->size);
-            }
-            else if (prop->format ==
-                    HAL_PIXEL_FORMAT_YCbCr_422_I_10BIT_COMPRESSED) {
-                ALOGD_IF(isDebug(), "%s: Format: 10BIT_BWC", __FUNCTION__);
-                memset((void*)hnd->base, 0xaa, hnd->size);
-            }
-            else {
-                ALOGE("%s: Error! Wrong VPU out format - layer:%d",
-                        __FUNCTION__, i);
-                return false;
-            }
-
-            bool isSplit = isDisplaySplit(ctx, dpy);
-            if (!isSplit ? !queueHandle(ctx, prop, hnd) :
-                        !queueHandleSplit(ctx, prop, hnd)) {
-                ALOGD_IF(isDebug(), "%s: Error in queue handle: layer:%d",
-                        __FUNCTION__, i);
-                return false;
-            }
-            else {
-                ALOGD_IF(isDebug(), "%s: queue handle successful: hnd:0x%x "
-                        "layer:%d", __FUNCTION__, (unsigned int) hnd, i);
-            }
-        }
-    }
-    return true;
-}
-
-int VPUClient::predraw(hwc_context_t *ctx, int display,
-                                        hwc_display_contents_1_t* list)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    if (!ctx || !list) {
-        ALOGE("%s: invalid contxt or list",__FUNCTION__);
-        return -1;
-    }
-
-    if (ctx->listStats[display].numAppLayers > MAX_NUM_APP_LAYERS) {
-        ALOGE("%s: Exceeding max layer count", __FUNCTION__);
-        return -1;
-    }
-
-    // Although all the video layers are composed through VPU, but still need to
-    // queue the first buffer (blank screen) to mdp in order to initialize the
-    // settings
-    if (!drawDummyLayers(ctx, display, list)) {
-        ALOGE("%s: Failed to draw the first layer through overlay",
-                __FUNCTION__);
-        return -1;
-    }
-    return 0;
-}
-
-int VPUClient::draw(hwc_context_t *ctx, int display,
-                                        hwc_display_contents_1_t* list)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    LayerList *vpuList = vList[display];
-    vpuList->numLayers = list->numHwLayers;
-
-    for (unsigned int i=0; i<(list->numHwLayers); ++i) {
-        hwc_layer_1_t *layer = &list->hwLayers[i];
-        Layer *vLayer = &vpuList->layers[i];
-
-        // setting layer info again for the update content.
-        setLayer(layer, vLayer);
-    }
-
-    // queuing the buffer to VPU
-    if (mVPU->draw((DISPLAY_ID)display, vpuList) != NO_ERROR) {
-        //error in vpu draw
-        ALOGE("%s: ERROR in VPU::draw", __func__);
-        return -1;
-    }
-
-    ALOGD_IF(isDebug2(), "%s: Done VFM draw", __FUNCTION__);
-
-    LayerProp *layerProp = ctx->layerProp[display];
-    // setting releaseFenceFd for the vpu layer
-    for (unsigned int i=0; i<(vpuList->numLayers); ++i) {
-
-        VpuLayerProp* prop = &mProp[display][i];
-        if (!prop->vpuLayer)
-            continue;
-
-        hwc_layer_1_t *layer = &list->hwLayers[i];
-        Layer *vLayer = &vpuList->layers[i];
-
-        // TODO: Fix properly once the releaseFenceFd is implemented
-        layer->releaseFenceFd = vLayer->releaseFenceFd;
-        ALOGD_IF(isDebug(), "%s: releaseFd:%d for layer:%d", __FUNCTION__,
-                layer->releaseFenceFd, i);
-    }
-    return 0;
-}
-
-int VPUClient::getLayerIdx(int dpy, hwc_layer_1_t *layer)
-{
-    for (int i=0; i < MAX_NUM_APP_LAYERS; ++i) {
-        VpuLayerProp* prop = &mProp[dpy][i];
-
-        if (!prop->vpuLayer)
-            continue;
-
-        if (prop->layer == layer) {
-            ALOGD_IF(isDebug2(), "%s: OUT - dpy:%d", __FUNCTION__, dpy);
-            return i;
-        }
-    }
-    return -1;
-}
-
-int VPUClient::getLayerFormat(int dpy, hwc_layer_1_t *layer)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    int idx = -1;
-    if ((idx = getLayerIdx(dpy, layer)) == -1) {
-        ALOGE("%s: Layer not found!", __FUNCTION__);
-        return -1;
-    }
-
-    VpuLayerProp* prop = &mProp[dpy][idx];
-    ALOGD_IF(isDebug(), "%s: layer:%d format:0x%x", __FUNCTION__, idx,
-            (unsigned int) prop->format);
-
-    return prop->format;
-}
-
-int VPUClient::getWidth(int dpy, hwc_layer_1_t *layer)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    int idx = -1;
-    if ((idx = getLayerIdx(dpy, layer)) == -1) {
-        ALOGE("%s: Layer not found!", __FUNCTION__);
-        return -1;
-    }
-
-    VpuLayerProp* prop = &mProp[dpy][idx];
-    ALOGD_IF(isDebug(), "%s: layer:%d width:%d", __FUNCTION__, idx,
-            prop->width);
-
-    return prop->width;
-}
-
-int VPUClient::getHeight(int dpy, hwc_layer_1_t *layer)
-{
-    if (!mVPU) {
-        return -1;
-    }
-
-    int idx = -1;
-    if ((idx = getLayerIdx(dpy, layer)) == -1) {
-        ALOGE("%s: Layer not found!", __FUNCTION__);
-        return -1;
-    }
-
-    VpuLayerProp* prop = &mProp[dpy][idx];
-    ALOGD_IF(isDebug(), "%s: layer:%d height:%d", __FUNCTION__, idx,
-            prop->height);
-
-    return prop->height;
-}
-
-// TODO: getter function has side-effect. Need to cleanup
-void VPUClient::getPipeId(VpuLayerProp* prop, int &pipe)
-{
-    pipe = (prop->pipeCount == 1) ? (prop->pipeID[0]) : -1;
-}
-
-void VPUClient::getPipeId(VpuLayerProp* prop, int &lPipe, int &rPipe)
-{
-    lPipe = (prop->pipeCount == 2) ? (prop->pipeID[0]) : -1;
-    rPipe = (prop->pipeCount == 2) ? (prop->pipeID[1]) : -1;
-}
-
-int VPUClient::getDest(VpuLayerProp* prop, int pipenum)
-{
-    return (prop->pipeCount > 0) ? (prop->dest[pipenum]) : -1;
-}
-
-void VPUClient::setPipeCount(VpuLayerProp* prop, int count)
-{
-    prop->pipeCount = count;
-}
-
-void VPUClient::setPipeId(VpuLayerProp* prop, int lPipeId, int rPipeId)
-{
-    prop->pipeCount = 2;
-    prop->pipeID[0] = lPipeId;
-    prop->pipeID[1] = rPipeId;
-}
-
-void VPUClient::setPipeId(VpuLayerProp* prop, int pipeId)
-{
-    prop->pipeCount = 1;
-    prop->pipeID[0] = pipeId;
-}
-
-void VPUClient::setDest(VpuLayerProp* prop, int lDest, int rDest)
-{
-    prop->dest[0] = lDest;
-    prop->dest[1] = rDest;
-}
-
-void VPUClient::setDest(VpuLayerProp* prop, int dest)
-{
-    prop->dest[0] = dest;
-}
-
-bool VPUClient::supportedVPULayer(VpuLayerProp* prop)
-{
-    if (!prop->vpuLayer)
-        return false;
-
-    return true;
-}
-
-bool VPUClient::supportedVPULayer(int dpy, hwc_layer_1_t *layer)
-{
-    if (!mVPU) {
-        return false;
-    }
-
-    int idx = -1;
-    if ((idx = getLayerIdx(dpy, layer)) == -1) {
-        ALOGD_IF(isDebug(), "%s: Layer not found!", __FUNCTION__);
-        return false;
-    }
-    return true;
-}
-
-int VPUClient::processCommand(uint32_t command,
-                              const Parcel* inParcel, Parcel* outParcel)
-{
-    if (!mVPU)
-        return 0;
-
-    return mVPU->processCommand(command, inParcel, outParcel);
-}
-
-}; // namespace qhwc
diff --git a/libhwcomposer/hwc_vpuclient.h b/libhwcomposer/hwc_vpuclient.h
deleted file mode 100644
index bb2a4b6..0000000
--- a/libhwcomposer/hwc_vpuclient.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-* Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are
-* met:
-*    * Redistributions of source code must retain the above copyright
-*      notice, this list of conditions and the following disclaimer.
-*    * Redistributions in binary form must reproduce the above
-*      copyright notice, this list of conditions and the following
-*      disclaimer in the documentation and/or other materials provided
-*      with the distribution.
-*    * Neither the name of The Linux Foundation. nor the names of its
-*      contributors may be used to endorse or promote products derived
-*      from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef HWC_VPU_H
-#define HWC_VPU_H
-
-#include <sys/types.h>
-#include "hwc_utils.h"
-
-#define MAX_PIPES_PER_LAYER 2
-
-//Forward declarations
-struct hwc_display_contents_1;
-typedef struct hwc_display_contents_1 hwc_display_contents_1_t;
-struct hwc_layer_1;
-typedef struct hwc_layer_1 hwc_layer_1_t;
-struct hwc_context_t;
-
-namespace vpu {
-class VPU;
-struct LayerList;
-};
-namespace android {
-class Parcel;
-};
-
-namespace qhwc {
-
-class VPUClient {
-public:
-    VPUClient(hwc_context_t *ctx);
-
-    ~VPUClient();
-
-    int setupVpuSession(hwc_context_t *ctx, int display,
-                            hwc_display_contents_1_t* list);
-    int prepare(hwc_context_t *ctx, int display,
-                            hwc_display_contents_1_t* list);
-    int predraw(hwc_context_t *ctx, int display,
-                            hwc_display_contents_1_t* list);
-    int draw(hwc_context_t *ctx, int display,
-                            hwc_display_contents_1_t* list);
-    int processCommand(uint32_t command,
-        const android::Parcel* inParcel, android::Parcel* outParcel);
-    int getLayerFormat(int dpy, hwc_layer_1_t *layer);
-    int getWidth(int dpy, hwc_layer_1_t *layer);
-    int getHeight(int dpy, hwc_layer_1_t *layer);
-    bool supportedVPULayer(int dpy, hwc_layer_1_t *layer);
-
-private:
-    vpu::VPU *mVPU;
-    void* mVPULib;
-
-    /* VpuLayerProp struct:
-     *  This struct corresponds to only one layer
-     *  pipeCount: number of pipes required for a layer
-     *  pipeID[]: pipe ids corresponding to the layer
-     */
-    struct VpuLayerProp {
-        int format;
-        int width;
-        int height;
-        int pipeCount;
-        bool vpuLayer;
-        bool firstBuffer;
-        hwc_frect_t sourceCropf;
-        hwc_layer_1_t *layer;
-        int pipeID[MAX_PIPES_PER_LAYER];
-        int dest[MAX_PIPES_PER_LAYER];
-    };
-    int mNumVpuLayers;  /* total num of vpu supported layers */
-    int mGpuFallback;   /* all layers are not supported by vpu */
-
-    VpuLayerProp mProp[HWC_NUM_DISPLAY_TYPES][MAX_NUM_APP_LAYERS];
-    int mDebugLogs;
-    private_handle_t *mHnd[HWC_NUM_DISPLAY_TYPES][MAX_NUM_APP_LAYERS];
-    vpu::LayerList *vList[HWC_NUM_DISPLAY_TYPES];
-
-    /* Private debug functions */
-    int32_t isDebug() { return (mDebugLogs >= 1); }
-    int32_t isDebug2() { return (mDebugLogs >= 2); }
-
-    /* Private Get/Set functions */
-    int getLayerIdx(int dpy, hwc_layer_1_t *layer);
-    void getPipeId(VpuLayerProp* prop, int &pipe);
-    void getPipeId(VpuLayerProp* prop, int &lPipe, int &rPipe);
-    int getDest(VpuLayerProp* prop, int pipenum);
-    void setPipeCount(VpuLayerProp* prop, int count);
-    void setPipeId(VpuLayerProp* prop, int lPipeId, int rPipeId);
-    void setPipeId(VpuLayerProp* prop, int pipeId);
-    void setDest(VpuLayerProp* prop, int lDest, int rDest);
-    void setDest(VpuLayerProp* prop, int dest);
-
-    /* Private implementations */
-    bool supportedVPULayer(VpuLayerProp* prop);
-    bool allocResLayerPipes(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool allocLayerPipes(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool allocResLayerPipesSplit(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool allocLayerPipesSplit(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool configureLayers(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool configureLayersSplit(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    void setMDPCompLayerFlags(hwc_context_t *ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool drawDummyLayers(hwc_context_t* ctx, int dpy,
-                            hwc_display_contents_1_t* list);
-    bool queueHandle(hwc_context_t* ctx, VpuLayerProp* prop,
-                            private_handle_t* hnd);
-    bool queueHandleSplit(hwc_context_t* ctx, VpuLayerProp* prop,
-                            private_handle_t* hnd);
-}; // class VPU
-}; // namespace qhwc
-#endif /* end of include guard: HWC_VPU_H */
diff --git a/liboverlay/overlayUtils.h b/liboverlay/overlayUtils.h
index c0066f3..c2649f3 100644
--- a/liboverlay/overlayUtils.h
+++ b/liboverlay/overlayUtils.h
@@ -272,7 +272,6 @@
     OV_MDSS_MDP_BWC_EN = MDP_BWC_EN,
     OV_MDSS_MDP_DUAL_PIPE = MDSS_MDP_DUAL_PIPE,
     OV_MDP_SOLID_FILL = MDP_SOLID_FILL,
-    OV_MDP_VPU_PIPE = MDP_VPU_PIPE,
 };
 
 enum eZorder {
diff --git a/libqdutils/qdMetaData.cpp b/libqdutils/qdMetaData.cpp
index b736478..0390599 100644
--- a/libqdutils/qdMetaData.cpp
+++ b/libqdutils/qdMetaData.cpp
@@ -82,26 +82,6 @@
             break;
         case UPDATE_BUFFER_GEOMETRY:
             memcpy((void *)&data->bufferDim, param, sizeof(BufferDim_t));
-            break;
-        case PP_PARAM_VFM_DATA:
-        {
-            int32_t     indx = 0;
-            VfmData_t*  pVfmData = reinterpret_cast <VfmData_t *>(param);
-            int32_t     dataType = pVfmData->dataType;
-
-            if(dataType > 0){
-                indx = getVfmDataIdx(dataType);
-                if(indx < MAX_VFM_DATA_COUNT){
-                    data->vfmDataBitMap |= dataType;
-                    memcpy((void *)&data->vfmData[indx], param,
-                        sizeof(VfmData_t));
-                }else{
-                    ALOGE("unknown dataType %d", dataType);
-                }
-            }else{
-                ALOGE("invalid dataType in PP_PARAM_VFM_DATA %d", dataType);
-            }
-        }
         break;
         case UPDATE_COLOR_SPACE:
             data->colorSpace = *((ColorSpace_t *)param);
diff --git a/libqdutils/qdMetaData.h b/libqdutils/qdMetaData.h
index 3a0e615..3ebe782 100644
--- a/libqdutils/qdMetaData.h
+++ b/libqdutils/qdMetaData.h
@@ -35,19 +35,6 @@
 #endif
 
 #define MAX_IGC_LUT_ENTRIES 256
-#define MAX_VFM_DATA_SIZE   64 //bytes per data buffer
-#define MAX_VFM_DATA_COUNT  16 //number of data buffers
-
-/* This macro finds the index corresponding to a type */
-/* This is equivalent to indx = LOG_2(type) */
-inline int32_t getVfmDataIdx(int32_t type){
-    int32_t indx = 0, x = type;
-    while( x >> 1) {
-        x = (x >> 1);
-        indx++;
-    }
-    return indx;
-}
 
 enum ColorSpace_t{
     ITU_R_601,
@@ -80,11 +67,6 @@
     int32_t sliceHeight;
 };
 
-struct VfmData_t {
-    int32_t dataType;
-    char    data[MAX_VFM_DATA_SIZE];
-};
-
 struct MetaData_t {
     int32_t operation;
     int32_t interlaced;
@@ -95,8 +77,6 @@
     struct IGCData_t igcData;
     struct Sharp2Data_t Sharp2Data;
     int64_t timestamp;
-    int32_t vfmDataBitMap;
-    struct VfmData_t vfmData[MAX_VFM_DATA_COUNT];
     enum ColorSpace_t colorSpace;
 };
 
@@ -109,7 +89,6 @@
     PP_PARAM_SHARP2     = 0x0020,
     PP_PARAM_TIMESTAMP  = 0x0040,
     UPDATE_BUFFER_GEOMETRY = 0x0080,
-    PP_PARAM_VFM_DATA   = 0x0100,
     UPDATE_COLOR_SPACE = 0x0200,
 };
 
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index 33c3ca0..6c1bba6 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -50,8 +50,6 @@
         SET_HSIC_DATA,           // Set HSIC on dspp
         GET_DISPLAY_VISIBLE_REGION,  // Get the visibleRegion for dpy
         PAUSE_WFD,               // Pause/Resume WFD
-        VPU_COMMAND_LIST_START = 100, //Reserved block for VPU commands
-        VPU_COMMAND_LIST_END   = 200,
         COMMAND_LIST_END = 400,
     };