diff --git a/gralloc_priv.h b/gralloc_priv.h index c573941..fdf5d5e 100644 --- a/gralloc_priv.h +++ b/gralloc_priv.h @@ -51,6 +51,10 @@ enum { HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO = 0x10A, HAL_PIXEL_FORMAT_YCrCb_422_SP = 0x10B, HAL_PIXEL_FORMAT_YCrCb_420_SP_INTERLACE = 0x10C, + HAL_PIXEL_FORMAT_R_8 = 0x10D, + HAL_PIXEL_FORMAT_RG_88 = 0x10E, + HAL_PIXEL_FORMAT_INTERLACE = 0x180, + }; /*****************************************************************************/ @@ -96,6 +100,7 @@ struct private_handle_t { PRIV_FLAGS_USES_PMEM = 0x00000002, PRIV_FLAGS_USES_PMEM_ADSP = 0x00000004, PRIV_FLAGS_NEEDS_FLUSH = 0x00000008, + PRIV_FLAGS_USES_ASHMEM = 0x00000010, }; enum { diff --git a/mapper.cpp b/mapper.cpp index 26fadbc..61243eb 100644 --- a/mapper.cpp +++ b/mapper.cpp @@ -279,12 +279,15 @@ int gralloc_unlock(gralloc_module_t const* module, int32_t current_value, new_value; if (hnd->flags & private_handle_t::PRIV_FLAGS_NEEDS_FLUSH) { - struct pmem_region region; int err; + if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_PMEM) { + struct pmem_addr pmem_addr; + pmem_addr.vaddr = hnd->base; + pmem_addr.offset = hnd->offset; + pmem_addr.length = hnd->size; + err = ioctl( hnd->fd, PMEM_CLEAN_CACHES, &pmem_addr); + } - region.offset = hnd->offset; - region.len = hnd->size; - err = ioctl(hnd->fd, PMEM_CACHE_FLUSH, ®ion); LOGE_IF(err < 0, "cannot flush handle %p (offs=%x len=%x)\n", hnd, hnd->offset, hnd->size); hnd->flags &= ~private_handle_t::PRIV_FLAGS_NEEDS_FLUSH;