display: Remove framebuffer HAL usage

This patch removes the usage of the framebuffer HAL which is
deprecated in JB MR1 onwards. The code is left for compatibility
such as conformance tests but it is unused for normal display
usage.

Change-Id: If98133bdaa759cdc41d4503ff695b225ee43cb6f

Conflicts:

	libhwcomposer/hwc_utils.cpp
This commit is contained in:
Jeykumar Sankaran
2013-02-20 18:32:01 -08:00
committed by Naseer Ahmed
parent 51e5ee4f11
commit c1f8682f7b
11 changed files with 98 additions and 185 deletions

View File

@@ -683,25 +683,6 @@ bool ExternalDisplay::writeHPDOption(int userOption) const
return ret; return ret;
} }
/*
* commits the changes to the external display
*/
bool ExternalDisplay::post()
{
if(mFd == -1)
return false;
struct mdp_display_commit ext_commit;
memset(&ext_commit, 0, sizeof(struct mdp_display_commit));
ext_commit.flags = MDP_DISPLAY_COMMIT_OVERLAY;
if (ioctl(mFd, MSMFB_DISPLAY_COMMIT, &ext_commit) == -1) {
ALOGE("%s: MSMFB_DISPLAY_COMMIT for external failed, str: %s",
__FUNCTION__, strerror(errno));
return false;
}
return true;
}
void ExternalDisplay::setDpyWfdAttr() { void ExternalDisplay::setDpyWfdAttr() {
if(mHwcContext) { if(mHwcContext) {
mHwcContext->dpyAttr[mExtDpyNum].xres = mVInfo.xres; mHwcContext->dpyAttr[mExtDpyNum].xres = mVInfo.xres;

View File

@@ -47,7 +47,6 @@ public:
void setExternalDisplay(bool connected, int extFbNum = 0); void setExternalDisplay(bool connected, int extFbNum = 0);
bool isExternalConnected() { return mConnected;}; bool isExternalConnected() { return mConnected;};
void setExtDpyNum(int extDpyNum) { mExtDpyNum = extDpyNum;}; void setExtDpyNum(int extDpyNum) { mExtDpyNum = extDpyNum;};
bool post();
void setHPD(uint32_t startEnd); void setHPD(uint32_t startEnd);
void setEDIDMode(int resMode); void setEDIDMode(int resMode);
void setActionSafeDimension(int w, int h); void setActionSafeDimension(int w, int h);

View File

@@ -52,13 +52,6 @@ struct private_module_t {
float fps; float fps;
uint32_t swapInterval; uint32_t swapInterval;
uint32_t currentOffset; uint32_t currentOffset;
bool fbPostDone;
pthread_mutex_t fbPostLock;
//Condition to inform HWC that fb_post called
pthread_cond_t fbPostCond;
bool fbPanDone;
pthread_mutex_t fbPanLock;
pthread_cond_t fbPanCond;
}; };

View File

@@ -54,7 +54,6 @@ static inline int max(int a, int b) {
enum { enum {
PAGE_FLIP = 0x00000001, PAGE_FLIP = 0x00000001,
LOCKED = 0x00000002
}; };
struct fb_context_t { struct fb_context_t {
@@ -88,8 +87,8 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
private_module_t* m = private_module_t* m =
reinterpret_cast<private_module_t*>(dev->common.module); reinterpret_cast<private_module_t*>(dev->common.module);
struct mdp_display_commit prim_commit; struct mdp_display_commit prim_commit;
prim_commit.wait_for_finish = 1;
memset(&prim_commit, 0, sizeof(struct mdp_display_commit)); memset(&prim_commit, 0, sizeof(struct mdp_display_commit));
prim_commit.flags = MDP_DISPLAY_COMMIT_OVERLAY;
if (ioctl(m->framebuffer->fd, MSMFB_DISPLAY_COMMIT, &prim_commit) == -1) { if (ioctl(m->framebuffer->fd, MSMFB_DISPLAY_COMMIT, &prim_commit) == -1) {
ALOGE("%s: MSMFB_DISPLAY_COMMIT for primary failed, str: %s", ALOGE("%s: MSMFB_DISPLAY_COMMIT for primary failed, str: %s",
__FUNCTION__, strerror(errno)); __FUNCTION__, strerror(errno));
@@ -326,12 +325,6 @@ int mapFrameBufferLocked(struct private_module_t* module)
module->framebuffer->base = intptr_t(vaddr); module->framebuffer->base = intptr_t(vaddr);
memset(vaddr, 0, fbSize); memset(vaddr, 0, fbSize);
module->currentOffset = 0; module->currentOffset = 0;
module->fbPostDone = false;
pthread_mutex_init(&(module->fbPostLock), NULL);
pthread_cond_init(&(module->fbPostCond), NULL);
module->fbPanDone = false;
pthread_mutex_init(&(module->fbPanLock), NULL);
pthread_cond_init(&(module->fbPanCond), NULL);
return 0; return 0;
} }

View File

@@ -52,77 +52,6 @@ gpu_context_t::gpu_context_t(const private_module_t* module,
} }
int gpu_context_t::gralloc_alloc_framebuffer_locked(size_t size, int usage,
buffer_handle_t* pHandle)
{
private_module_t* m = reinterpret_cast<private_module_t*>(common.module);
// we don't support framebuffer allocations with graphics heap flags
if (usage & GRALLOC_HEAP_MASK) {
return -EINVAL;
}
if (m->framebuffer == NULL) {
ALOGE("%s: Invalid framebuffer", __FUNCTION__);
return -EINVAL;
}
const uint32_t bufferMask = m->bufferMask;
const uint32_t numBuffers = m->numBuffers;
size_t bufferSize = m->finfo.line_length * m->info.yres;
//adreno needs FB size to be page aligned
bufferSize = roundUpToPageSize(bufferSize);
if (numBuffers == 1) {
// If we have only one buffer, we never use page-flipping. Instead,
// we return a regular buffer which will be memcpy'ed to the main
// screen when post is called.
int newUsage = (usage & ~GRALLOC_USAGE_HW_FB) | GRALLOC_USAGE_HW_2D;
return gralloc_alloc_buffer(bufferSize, newUsage, pHandle, BUFFER_TYPE_UI,
m->fbFormat, m->info.xres, m->info.yres);
}
if (bufferMask >= ((1LU<<numBuffers)-1)) {
// We ran out of buffers.
return -ENOMEM;
}
// create a "fake" handle for it
intptr_t vaddr = intptr_t(m->framebuffer->base);
private_handle_t* hnd = new private_handle_t(
dup(m->framebuffer->fd), bufferSize,
private_handle_t::PRIV_FLAGS_USES_ION |
private_handle_t::PRIV_FLAGS_FRAMEBUFFER,
BUFFER_TYPE_UI, m->fbFormat, m->info.xres,
m->info.yres);
// find a free slot
for (uint32_t i=0 ; i<numBuffers ; i++) {
if ((bufferMask & (1LU<<i)) == 0) {
m->bufferMask |= (1LU<<i);
break;
}
vaddr += bufferSize;
}
hnd->base = vaddr;
hnd->offset = vaddr - intptr_t(m->framebuffer->base);
*pHandle = hnd;
return 0;
}
int gpu_context_t::gralloc_alloc_framebuffer(size_t size, int usage,
buffer_handle_t* pHandle)
{
private_module_t* m = reinterpret_cast<private_module_t*>(common.module);
pthread_mutex_lock(&m->lock);
int err = gralloc_alloc_framebuffer_locked(size, usage, pHandle);
pthread_mutex_unlock(&m->lock);
return err;
}
int gpu_context_t::gralloc_alloc_buffer(size_t size, int usage, int gpu_context_t::gralloc_alloc_buffer(size_t size, int usage,
buffer_handle_t* pHandle, int bufferType, buffer_handle_t* pHandle, int bufferType,
int format, int width, int height) int format, int width, int height)
@@ -267,12 +196,7 @@ int gpu_context_t::alloc_impl(int w, int h, int format, int usage,
int gpu_context_t::free_impl(private_handle_t const* hnd) { int gpu_context_t::free_impl(private_handle_t const* hnd) {
private_module_t* m = reinterpret_cast<private_module_t*>(common.module); private_module_t* m = reinterpret_cast<private_module_t*>(common.module);
if (hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) {
// free this buffer
const size_t bufferSize = m->finfo.line_length * m->info.yres;
int index = (hnd->base - m->framebuffer->base) / bufferSize;
m->bufferMask &= ~(1<<index);
} else {
terminateBuffer(&m->base, const_cast<private_handle_t*>(hnd)); terminateBuffer(&m->base, const_cast<private_handle_t*>(hnd));
IMemAlloc* memalloc = mAllocCtrl->getAllocator(hnd->flags); IMemAlloc* memalloc = mAllocCtrl->getAllocator(hnd->flags);
int err = memalloc->free_buffer((void*)hnd->base, (size_t) hnd->size, int err = memalloc->free_buffer((void*)hnd->base, (size_t) hnd->size,
@@ -286,7 +210,6 @@ int gpu_context_t::free_impl(private_handle_t const* hnd) {
hnd->fd_metadata); hnd->fd_metadata);
if (err) if (err)
return err; return err;
}
delete hnd; delete hnd;
return 0; return 0;

View File

@@ -27,7 +27,7 @@
#include <cutils/ashmem.h> #include <cutils/ashmem.h>
#include "gralloc_priv.h" #include "gralloc_priv.h"
#include <fb_priv.h> #include "fb_priv.h"
namespace gralloc { namespace gralloc {
class IAllocController; class IAllocController;
@@ -36,12 +36,6 @@ class gpu_context_t : public alloc_device_t {
gpu_context_t(const private_module_t* module, gpu_context_t(const private_module_t* module,
IAllocController* alloc_ctrl); IAllocController* alloc_ctrl);
int gralloc_alloc_framebuffer_locked(size_t size, int usage,
buffer_handle_t* pHandle);
int gralloc_alloc_framebuffer(size_t size, int usage,
buffer_handle_t* pHandle);
int gralloc_alloc_buffer(size_t size, int usage, int gralloc_alloc_buffer(size_t size, int usage,
buffer_handle_t* pHandle, buffer_handle_t* pHandle,
int bufferType, int format, int bufferType, int format,

View File

@@ -25,10 +25,9 @@
#include <cutils/atomic.h> #include <cutils/atomic.h>
#include <EGL/egl.h> #include <EGL/egl.h>
#include <utils/Trace.h> #include <utils/Trace.h>
#include <sys/ioctl.h>
#include <overlay.h> #include <overlay.h>
#include <overlayRotator.h> #include <overlayRotator.h>
#include <fb_priv.h>
#include <mdp_version.h> #include <mdp_version.h>
#include "hwc_utils.h" #include "hwc_utils.h"
#include "hwc_video.h" #include "hwc_video.h"
@@ -122,6 +121,17 @@ static void reset_layer_prop(hwc_context_t* ctx, int dpy) {
} }
} }
static int display_commit(hwc_context_t *ctx, int dpy) {
struct mdp_display_commit commit_info;
memset(&commit_info, 0, sizeof(struct mdp_display_commit));
commit_info.flags = MDP_DISPLAY_COMMIT_OVERLAY;
if(ioctl(ctx->dpyAttr[dpy].fd, MSMFB_DISPLAY_COMMIT, &commit_info) == -1) {
ALOGE("%s: MSMFB_DISPLAY_COMMIT for primary failed", __FUNCTION__);
return -errno;
}
return 0;
}
static int hwc_prepare_primary(hwc_composer_device_1 *dev, static int hwc_prepare_primary(hwc_composer_device_1 *dev,
hwc_display_contents_1_t *list) { hwc_display_contents_1_t *list) {
hwc_context_t* ctx = (hwc_context_t*)(dev); hwc_context_t* ctx = (hwc_context_t*)(dev);
@@ -217,8 +227,6 @@ static int hwc_eventControl(struct hwc_composer_device_1* dev, int dpy,
{ {
int ret = 0; int ret = 0;
hwc_context_t* ctx = (hwc_context_t*)(dev); hwc_context_t* ctx = (hwc_context_t*)(dev);
private_module_t* m = reinterpret_cast<private_module_t*>(
ctx->mFbDev->common.module);
pthread_mutex_lock(&ctx->vstate.lock); pthread_mutex_lock(&ctx->vstate.lock);
switch(event) { switch(event) {
case HWC_EVENT_VSYNC: case HWC_EVENT_VSYNC:
@@ -243,8 +251,7 @@ static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)
{ {
ATRACE_CALL(); ATRACE_CALL();
hwc_context_t* ctx = (hwc_context_t*)(dev); hwc_context_t* ctx = (hwc_context_t*)(dev);
private_module_t* m = reinterpret_cast<private_module_t*>(
ctx->mFbDev->common.module);
Locker::Autolock _l(ctx->mBlankLock); Locker::Autolock _l(ctx->mBlankLock);
int ret = 0; int ret = 0;
ALOGD("%s: %s display: %d", __FUNCTION__, ALOGD("%s: %s display: %d", __FUNCTION__,
@@ -255,13 +262,13 @@ static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)
ctx->mOverlay->configBegin(); ctx->mOverlay->configBegin();
ctx->mOverlay->configDone(); ctx->mOverlay->configDone();
ctx->mRotMgr->clear(); ctx->mRotMgr->clear();
ret = ioctl(m->framebuffer->fd, FBIOBLANK, FB_BLANK_POWERDOWN); ret = ioctl(ctx->dpyAttr[dpy].fd, FBIOBLANK,FB_BLANK_POWERDOWN);
if(ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected == true) { if(ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected == true) {
// Surfaceflinger does not send Blank/unblank event to hwc // Surfaceflinger does not send Blank/unblank event to hwc
// for virtual display, handle it explicitly when blank for // for virtual display, handle it explicitly when blank for
// primary is invoked, so that any pipes unset get committed // primary is invoked, so that any pipes unset get committed
if (!ctx->mExtDisplay->post()) { if (display_commit(ctx, HWC_DISPLAY_VIRTUAL) < 0) {
ret = -1; ret = -1;
ALOGE("%s:post failed for virtual display !!", ALOGE("%s:post failed for virtual display !!",
__FUNCTION__); __FUNCTION__);
@@ -270,7 +277,7 @@ static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)
} }
} }
} else { } else {
ret = ioctl(m->framebuffer->fd, FBIOBLANK, FB_BLANK_UNBLANK); ret = ioctl(ctx->dpyAttr[dpy].fd, FBIOBLANK, FB_BLANK_UNBLANK);
if(ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected == true) { if(ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].connected == true) {
ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].isActive = !blank; ctx->dpyAttr[HWC_DISPLAY_VIRTUAL].isActive = !blank;
} }
@@ -278,12 +285,11 @@ static int hwc_blank(struct hwc_composer_device_1* dev, int dpy, int blank)
break; break;
case HWC_DISPLAY_EXTERNAL: case HWC_DISPLAY_EXTERNAL:
if(blank) { if(blank) {
// External post commits the changes to display // call external framebuffer commit on blank,
// Call this on blank, so that any pipe unsets gets committed // so that any pipe unsets gets committed
if (!ctx->mExtDisplay->post()) { if (display_commit(ctx, dpy) < 0) {
ret = -1; ret = -1;
ALOGE("%s:post failed for external display !! ", ALOGE("%s:post failed for external display !! ", __FUNCTION__);
__FUNCTION__);
} }
} else { } else {
} }
@@ -311,8 +317,6 @@ static int hwc_query(struct hwc_composer_device_1* dev,
int param, int* value) int param, int* value)
{ {
hwc_context_t* ctx = (hwc_context_t*)(dev); hwc_context_t* ctx = (hwc_context_t*)(dev);
private_module_t* m = reinterpret_cast<private_module_t*>(
ctx->mFbDev->common.module);
int supported = HWC_DISPLAY_PRIMARY_BIT; int supported = HWC_DISPLAY_PRIMARY_BIT;
switch (param) { switch (param) {
@@ -320,10 +324,6 @@ static int hwc_query(struct hwc_composer_device_1* dev,
// Not supported for now // Not supported for now
value[0] = 0; value[0] = 0;
break; break;
case HWC_VSYNC_PERIOD: //Not used for hwc > 1.1
value[0] = m->fps;
ALOGI("fps: %d", value[0]);
break;
case HWC_DISPLAY_TYPES_SUPPORTED: case HWC_DISPLAY_TYPES_SUPPORTED:
if(ctx->mMDP.hasOverlay) if(ctx->mMDP.hasOverlay)
supported |= HWC_DISPLAY_EXTERNAL_BIT; supported |= HWC_DISPLAY_EXTERNAL_BIT;
@@ -336,6 +336,7 @@ static int hwc_query(struct hwc_composer_device_1* dev,
} }
static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) { static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
ATRACE_CALL(); ATRACE_CALL();
int ret = 0; int ret = 0;
@@ -375,9 +376,10 @@ static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
} }
} }
} }
if (ctx->mFbDev->post(ctx->mFbDev, fbLayer->handle)) {
ALOGE("%s: ctx->mFbDev->post fail!", __FUNCTION__); if (display_commit(ctx, dpy) < 0) {
ret = -1; ALOGE("%s: display commit fail!", __FUNCTION__);
return -1;
} }
} }
@@ -425,9 +427,10 @@ static int hwc_set_external(hwc_context_t *ctx,
ret = -1; ret = -1;
} }
} }
if (!ctx->mExtDisplay->post()) {
ALOGE("%s: ctx->mExtDisplay->post fail!", __FUNCTION__); if (display_commit(ctx, dpy) < 0) {
ret = -1; ALOGE("%s: display commit fail!", __FUNCTION__);
return -1;
} }
} }

View File

@@ -20,7 +20,6 @@
#define DEBUG_FBUPDATE 0 #define DEBUG_FBUPDATE 0
#include <gralloc_priv.h> #include <gralloc_priv.h>
#include <fb_priv.h>
#include "hwc_fbupdate.h" #include "hwc_fbupdate.h"
namespace qhwc { namespace qhwc {

View File

@@ -23,7 +23,6 @@
#include <EGL/egl.h> #include <EGL/egl.h>
#include <cutils/properties.h> #include <cutils/properties.h>
#include <gralloc_priv.h> #include <gralloc_priv.h>
#include <fb_priv.h>
#include <overlay.h> #include <overlay.h>
#include <overlayRotator.h> #include <overlayRotator.h>
#include "hwc_utils.h" #include "hwc_utils.h"
@@ -46,25 +45,59 @@ namespace ovutils = overlay::utils;
namespace qhwc { namespace qhwc {
// Opens Framebuffer device static int openFramebufferDevice(hwc_context_t *ctx)
static void openFramebufferDevice(hwc_context_t *ctx)
{ {
hw_module_t const *module; struct fb_fix_screeninfo finfo;
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { struct fb_var_screeninfo info;
framebuffer_open(module, &(ctx->mFbDev));
private_module_t* m = reinterpret_cast<private_module_t*>( int fb_fd = openFb(HWC_DISPLAY_PRIMARY);
ctx->mFbDev->common.module);
//xres, yres may not be 32 aligned if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &info) == -1)
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].stride = m->finfo.line_length / return -errno;
(m->info.xres/8);
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres = m->info.xres; if (int(info.width) <= 0 || int(info.height) <= 0) {
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].yres = m->info.yres; // the driver doesn't return that information
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xdpi = ctx->mFbDev->xdpi; // default to 160 dpi
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].ydpi = ctx->mFbDev->ydpi; info.width = ((info.xres * 25.4f)/160.0f + 0.5f);
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period = info.height = ((info.yres * 25.4f)/160.0f + 0.5f);
1000000000l / ctx->mFbDev->fps;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = openFb(HWC_DISPLAY_PRIMARY);
} }
float xdpi = (info.xres * 25.4f) / info.width;
float ydpi = (info.yres * 25.4f) / info.height;
#ifdef MSMFB_METADATA_GET
struct msmfb_metadata metadata;
memset(&metadata, 0 , sizeof(metadata));
metadata.op = metadata_op_frame_rate;
if (ioctl(fb_fd, MSMFB_METADATA_GET, &metadata) == -1) {
ALOGE("Error retrieving panel frame rate");
return -errno;
}
float fps = metadata.data.panel_frame_rate;
#else
//XXX: Remove reserved field usage on all baselines
//The reserved[3] field is used to store FPS by the driver.
float fps = info.reserved[3] & 0xFF;
#endif
if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &finfo) == -1)
return -errno;
if (finfo.smem_len <= 0)
return -errno;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = fb_fd;
//xres, yres may not be 32 aligned
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].stride = finfo.line_length /(info.xres/8);
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres = info.xres;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].yres = info.yres;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xdpi = xdpi;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].ydpi = ydpi;
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period = 1000000000l / fps;
return 0;
} }
void initContext(hwc_context_t *ctx) void initContext(hwc_context_t *ctx)
@@ -143,9 +176,7 @@ void closeContext(hwc_context_t *ctx)
} }
} }
if(ctx->mFbDev) { if(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd) {
framebuffer_close(ctx->mFbDev);
ctx->mFbDev = NULL;
close(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd); close(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd);
ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = -1; ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = -1;
} }

View File

@@ -29,6 +29,7 @@
#include <utils/String8.h> #include <utils/String8.h>
#include "qdMetaData.h" #include "qdMetaData.h"
#include <overlayUtils.h> #include <overlayUtils.h>
#include <linux/fb.h>
#define ALIGN_TO(x, align) (((x) + ((align)-1)) & ~((align)-1)) #define ALIGN_TO(x, align) (((x) + ((align)-1)) & ~((align)-1))
#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) #define LIKELY( exp ) (__builtin_expect( (exp) != 0, true ))
@@ -44,7 +45,6 @@
//Fwrd decls //Fwrd decls
struct hwc_context_t; struct hwc_context_t;
struct framebuffer_device_t;
namespace ovutils = overlay::utils; namespace ovutils = overlay::utils;
@@ -262,8 +262,6 @@ struct vsync_state {
struct hwc_context_t { struct hwc_context_t {
hwc_composer_device_1_t device; hwc_composer_device_1_t device;
const hwc_procs_t* proc; const hwc_procs_t* proc;
//Framebuffer device
framebuffer_device_t *mFbDev;
//CopyBit objects //CopyBit objects
qhwc::CopyBit *mCopyBit[MAX_DISPLAYS]; qhwc::CopyBit *mCopyBit[MAX_DISPLAYS];

View File

@@ -32,7 +32,6 @@
#include <linux/msm_mdp.h> #include <linux/msm_mdp.h>
#include <cutils/properties.h> #include <cutils/properties.h>
#include "gralloc_priv.h" #include "gralloc_priv.h"
#include "fb_priv.h"
#include "overlayUtils.h" #include "overlayUtils.h"
#include "mdpWrapper.h" #include "mdpWrapper.h"
#include "mdp_version.h" #include "mdp_version.h"