diff --git a/liboverlay/Android.mk b/liboverlay/Android.mk index f34fb2f..62c302f 100755 --- a/liboverlay/Android.mk +++ b/liboverlay/Android.mk @@ -18,7 +18,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_PRELINK_MODULE := false LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES) -LOCAL_SHARED_LIBRARIES := liblog libcutils libutils +LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libmemalloc LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr LOCAL_C_INCLUDES += hardware/qcom/display/libgralloc @@ -27,11 +27,6 @@ LOCAL_SRC_FILES := \ overlayLibUI.cpp \ LOCAL_CFLAGS:= -DLOG_TAG=\"OverlayLib\" -ifeq ($(TARGET_USES_ION),true) - LOCAL_CFLAGS += -DUSE_ION - LOCAL_SHARED_LIBRARIES += libmemalloc -endif - ifeq ($(TARGET_USE_HDMI_AS_PRIMARY),true) LOCAL_CFLAGS += -DHDMI_AS_PRIMARY endif diff --git a/liboverlay/overlayLib.cpp b/liboverlay/overlayLib.cpp index 0535448..c468c4e 100755 --- a/liboverlay/overlayLib.cpp +++ b/liboverlay/overlayLib.cpp @@ -1395,9 +1395,10 @@ bool OverlayControlChannel::getSize(int& size) const { OverlayDataChannel::OverlayDataChannel() : mNoRot(false), mFD(-1), mRotFD(-1), mPmemFD(-1), mPmemAddr(0), mUpdateDataChannel(0) { -#ifdef USE_ION - mAlloc = gralloc::IAllocController::getInstance(); -#endif + //XXX: getInstance(false) implies that it should only + // use the kernel allocator. Change it to something + // more descriptive later. + mAlloc = gralloc::IAllocController::getInstance(false); } OverlayDataChannel::~OverlayDataChannel() { @@ -1453,7 +1454,6 @@ bool OverlayDataChannel::mapRotatorMemory(int num_buffers, bool uiChannel, int r { mPmemAddr = MAP_FAILED; -#ifdef USE_ION alloc_data data; data.base = 0; data.fd = -1; @@ -1462,10 +1462,13 @@ bool OverlayDataChannel::mapRotatorMemory(int num_buffers, bool uiChannel, int r data.align = getpagesize(); data.uncached = true; - int err = mAlloc->allocate(data, GRALLOC_USAGE_PRIVATE_ADSP_HEAP| - GRALLOC_USAGE_PRIVATE_SMI_HEAP, 0); + int allocFlags = GRALLOC_USAGE_PRIVATE_ADSP_HEAP; + if((requestType == NEW_REQUEST) && !uiChannel) + allocFlags |= GRALLOC_USAGE_PRIVATE_SMI_HEAP; + + int err = mAlloc->allocate(data, allocFlags, 0); if(err) { - reportError("Cant allocate from ION"); + reportError("Cant allocate rotatory memory"); close(mFD); mFD = -1; close(mRotFD); @@ -1475,40 +1478,7 @@ bool OverlayDataChannel::mapRotatorMemory(int num_buffers, bool uiChannel, int r mPmemFD = data.fd; mPmemAddr = data.base; mBufferType = data.allocType; -#else - if((requestType == NEW_REQUEST) && !uiChannel) { - mPmemFD = open("/dev/pmem_smipool", O_RDWR | O_SYNC); - if(mPmemFD >= 0) - mPmemAddr = (void *) mmap(NULL, mPmemOffset * num_buffers, PROT_READ | PROT_WRITE, - MAP_SHARED, mPmemFD, 0); - } - - if (mPmemAddr == MAP_FAILED) { - mPmemFD = open("/dev/pmem_adsp", O_RDWR | O_SYNC); - if (mPmemFD < 0) { - reportError("Cant open pmem_adsp "); - close(mFD); - mFD = -1; - close(mRotFD); - mRotFD = -1; - return false; - } else { - mPmemAddr = (void *) mmap(NULL, mPmemOffset * num_buffers, PROT_READ | PROT_WRITE, - MAP_SHARED, mPmemFD, 0); - if (mPmemAddr == MAP_FAILED) { - reportError("Cant map pmem_adsp "); - close(mFD); - mFD = -1; - close(mPmemFD); - mPmemFD = -1; - close(mRotFD); - mRotFD = -1; - return false; - } - } - } -#endif // Set this flag if source memory is fb if(uiChannel) mRotData.src.flags |= MDP_MEMORY_ID_TYPE_FB; @@ -1553,13 +1523,8 @@ bool OverlayDataChannel::closeDataChannel() { return true; if (!mNoRot && mRotFD > 0) { -#ifdef USE_ION sp memalloc = mAlloc->getAllocator(mBufferType); memalloc->free_buffer(mPmemAddr, mPmemOffset * mNumBuffers, 0, mPmemFD); -#else - munmap(mPmemAddr, mPmemOffset * mNumBuffers); - close(mPmemFD); -#endif close(mPmemFD); mPmemFD = -1; close(mRotFD); @@ -1612,14 +1577,8 @@ bool OverlayDataChannel::queueBuffer(uint32_t offset) { // Unmap the old PMEM memory after the queueBuffer has returned if (oldPmemFD != -1 && oldPmemAddr != MAP_FAILED) { -#ifdef USE_ION sp memalloc = mAlloc->getAllocator(mBufferType); memalloc->free_buffer(oldPmemAddr, oldPmemOffset * mNumBuffers, 0, oldPmemFD); -#else - munmap(oldPmemAddr, oldPmemOffset * mNumBuffers); - close(oldPmemFD); -#endif - oldPmemFD = -1; } return result; diff --git a/liboverlay/overlayLibUI.cpp b/liboverlay/overlayLibUI.cpp index 5d59c1e..bda540c 100755 --- a/liboverlay/overlayLibUI.cpp +++ b/liboverlay/overlayLibUI.cpp @@ -302,6 +302,16 @@ status_t OVHelper::getOVInfo(mdp_overlay& ovInfo) { return NO_ERROR; } +Rotator::Rotator() : mFD(NO_INIT), mSessionID(NO_INIT), mPmemFD(-1) +{ + mAlloc = gralloc::IAllocController::getInstance(false); +} + +Rotator::~Rotator() +{ + closeRotSession(); +} + status_t Rotator::startRotSession(msm_rotator_img_info& rotInfo, int size, int numBuffers) { status_t ret = ALREADY_EXISTS; @@ -319,7 +329,7 @@ status_t Rotator::startRotSession(msm_rotator_img_info& rotInfo, return NO_INIT; } -#ifdef USE_ION + mSessionID = rotInfo.session_id; alloc_data data; data.base = 0; data.fd = -1; @@ -328,33 +338,16 @@ status_t Rotator::startRotSession(msm_rotator_img_info& rotInfo, data.align = getpagesize(); data.uncached = true; - int err = mAlloc->allocate(data, GRALLOC_USAGE_PRIVATE_ADSP_HEAP| - GRALLOC_USAGE_PRIVATE_SMI_HEAP, 0); + int err = mAlloc->allocate(data, GRALLOC_USAGE_PRIVATE_SMI_HEAP, 0); if(err) { - LOGE("Cant allocate from ION"); + LOGE("%s: Can't allocate rotator memory", __func__); closeRotSession(); return NO_INIT; } mPmemFD = data.fd; mPmemAddr = data.base; mBufferType = data.allocType; -#else - mSessionID = rotInfo.session_id; - mPmemFD = open("/dev/pmem_adsp", O_RDWR | O_SYNC); - if (mPmemFD < 0) { - closeRotSession(); - return NO_INIT; - } - - mSize = size; - mPmemAddr = (void *) mmap(NULL, mSize* mNumBuffers, PROT_READ | PROT_WRITE, - MAP_SHARED, mPmemFD, 0); - if (mPmemAddr == MAP_FAILED) { - closeRotSession(); - return NO_INIT; - } -#endif mCurrentItem = 0; for (int i = 0; i < mNumBuffers; i++) @@ -369,13 +362,8 @@ status_t Rotator::closeRotSession() { if (mSessionID != NO_INIT && mFD != NO_INIT) { ioctl(mFD, MSM_ROTATOR_IOCTL_FINISH, &mSessionID); close(mFD); -#ifdef USE_ION sp memalloc = mAlloc->getAllocator(mBufferType); memalloc->free_buffer(mPmemAddr, mSize * mNumBuffers, 0, mPmemFD); -#else - munmap(mPmemAddr, mSize * mNumBuffers); - close(mPmemFD); -#endif close(mPmemFD); } diff --git a/liboverlay/overlayLibUI.h b/liboverlay/overlayLibUI.h index 2cb1ffe..4600a94 100644 --- a/liboverlay/overlayLibUI.h +++ b/liboverlay/overlayLibUI.h @@ -107,13 +107,8 @@ class Rotator { Rotator& operator=(const Rotator& objRotator); public: - explicit Rotator() : mFD(NO_INIT), mSessionID(NO_INIT), mPmemFD(-1) - { -#ifdef USE_ION - mAlloc = gralloc::IAllocController::getInstance(); -#endif - } - ~Rotator() { closeRotSession(); } + explicit Rotator(); + ~Rotator(); status_t startRotSession(msm_rotator_img_info& rotInfo, int size, int numBuffers = max_num_buffers); status_t closeRotSession();