unsigned int * getBufferMemPointer(int index) { sp<IAndroidShm> shm = getAndroidShmService(); if (shm == NULL) { printf("The EneaBufferServer is not published\n"); return (unsigned int *)-1; /* return an errorcode... */ } else { receiverMemBase = shm->getBuffer(index); if(receiverMemBase != NULL) return (unsigned int *) receiverMemBase->getBase(); else return (unsigned int*)-1; } }
MemoryHeapPmem::MemoryHeapPmem(const sp<MemoryHeapBase>& pmemHeap, uint32_t flags) : MemoryHeapBase() { char const * const device = pmemHeap->getDevice(); #ifdef HAVE_ANDROID_OS if (device) { int fd = open(device, O_RDWR | (flags & NO_CACHING ? O_SYNC : 0)); ALOGE_IF(fd<0, "couldn't open %s (%s)", device, strerror(errno)); if (fd >= 0) { int err = ioctl(fd, PMEM_CONNECT, pmemHeap->heapID()); if (err < 0) { ALOGE("PMEM_CONNECT failed (%s), mFD=%d, sub-fd=%d", strerror(errno), fd, pmemHeap->heapID()); close(fd); } else { // everything went well... mParentHeap = pmemHeap; MemoryHeapBase::init(fd, pmemHeap->getBase(), pmemHeap->getSize(), pmemHeap->getFlags() | flags, device); } } } #else mParentHeap = pmemHeap; MemoryHeapBase::init( dup(pmemHeap->heapID()), pmemHeap->getBase(), pmemHeap->getSize(), pmemHeap->getFlags() | flags, device); #endif }
extern "C" void const * screencap_getdata() { if (!update(&width, &height, &format, req_width, req_height)) return heap->getBase(); return 0; }