diff --git a/liboverlay/overlayMem.h b/liboverlay/overlayMem.h index f8109d1..caf0437 100644 --- a/liboverlay/overlayMem.h +++ b/liboverlay/overlayMem.h @@ -139,11 +139,21 @@ inline bool OvMem::open(uint32_t numbufs, data.uncached = true; err = mAlloc->allocate(data, allocFlags, 0); - if (err != 0) { - ALOGE("OvMem: error allocating memory"); + //see if we can fallback to other heap + //we can try MM_HEAP once if it's not secure playback + if (err != 0 && !isSecure) { + allocFlags |= GRALLOC_USAGE_PRIVATE_MM_HEAP; + err = mAlloc->allocate(data, allocFlags, 0); + if (err != 0) { + ALOGE(" could not allocate from fallback heap"); + return false; + } + } else if (err != 0) { + ALOGE("OvMem: error allocating memory can not fall back"); return false; } + mFd = data.fd; mBaseAddr = data.base; mAllocType = data.allocType;