Example #1
0
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;
}