diff options
author | Peter Collingbourne <pcc@google.com> | 2019-10-23 15:22:57 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-23 15:22:57 -0700 |
commit | ae5e519fd99106268a3ca88d567be5f79f42cb5d (patch) | |
tree | 182b164a161ba3163b48c2774d5f5bea1afc29e1 | |
parent | ea65e73e17e0cb6785e5381184c280d8e5aeab77 (diff) | |
parent | 1e249a076910f7f5f30f4ef6a116e4152cd8f878 (diff) | |
download | libhardware-b_141248619.tar.gz |
Merge "gralloc: Configure framebuffer mode according to requested image format."b_141248619
am: 1e249a0769
Change-Id: Ib69d0e28acbb25ef561406c1011aebcac6bb4f5b
-rw-r--r-- | modules/gralloc/framebuffer.cpp | 19 | ||||
-rw-r--r-- | modules/gralloc/gr.h | 2 | ||||
-rw-r--r-- | modules/gralloc/gralloc.cpp | 10 |
3 files changed, 23 insertions, 8 deletions
diff --git a/modules/gralloc/framebuffer.cpp b/modules/gralloc/framebuffer.cpp index c1717115..b2ec3e44 100644 --- a/modules/gralloc/framebuffer.cpp +++ b/modules/gralloc/framebuffer.cpp @@ -117,7 +117,7 @@ static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer) /*****************************************************************************/ -int mapFrameBufferLocked(struct private_module_t* module) +int mapFrameBufferLocked(struct private_module_t* module, int format) { // already initialized... if (module->framebuffer) { @@ -161,6 +161,20 @@ int mapFrameBufferLocked(struct private_module_t* module) */ info.yres_virtual = info.yres * NUM_BUFFERS; + switch (format) { + case HAL_PIXEL_FORMAT_RGBA_8888: + info.bits_per_pixel = 32; + info.red.offset = 0; + info.red.length = 8; + info.green.offset = 8; + info.green.length = 8; + info.blue.offset = 16; + info.blue.length = 8; + break; + default: + ALOGW("unknown format: %d", format); + break; + } uint32_t flags = PAGE_FLIP; #if USE_PAN_DISPLAY @@ -280,7 +294,8 @@ int mapFrameBufferLocked(struct private_module_t* module) static int mapFrameBuffer(struct private_module_t* module) { pthread_mutex_lock(&module->lock); - int err = mapFrameBufferLocked(module); + // Request RGBA8888 because the platform assumes support for RGBA8888. + int err = mapFrameBufferLocked(module, HAL_PIXEL_FORMAT_RGBA_8888); pthread_mutex_unlock(&module->lock); return err; } diff --git a/modules/gralloc/gr.h b/modules/gralloc/gr.h index ac7e9670..14fe6a05 100644 --- a/modules/gralloc/gr.h +++ b/modules/gralloc/gr.h @@ -36,7 +36,7 @@ inline size_t roundUpToPageSize(size_t x) { return (x + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1); } -int mapFrameBufferLocked(struct private_module_t* module); +int mapFrameBufferLocked(struct private_module_t* module, int format); int terminateBuffer(gralloc_module_t const* module, private_handle_t* hnd); int mapBuffer(gralloc_module_t const* module, private_handle_t* hnd); diff --git a/modules/gralloc/gralloc.cpp b/modules/gralloc/gralloc.cpp index 07bbfbac..87bda975 100644 --- a/modules/gralloc/gralloc.cpp +++ b/modules/gralloc/gralloc.cpp @@ -101,7 +101,7 @@ struct private_module_t HAL_MODULE_INFO_SYM = { /*****************************************************************************/ static int gralloc_alloc_framebuffer_locked(alloc_device_t* dev, - size_t size, int usage, buffer_handle_t* pHandle) + size_t size, int format, int usage, buffer_handle_t* pHandle) { private_module_t* m = reinterpret_cast<private_module_t*>( dev->common.module); @@ -110,7 +110,7 @@ static int gralloc_alloc_framebuffer_locked(alloc_device_t* dev, if (m->framebuffer == NULL) { // initialize the framebuffer, the framebuffer is mapped once // and forever. - int err = mapFrameBufferLocked(m); + int err = mapFrameBufferLocked(m, format); if (err < 0) { return err; } @@ -154,12 +154,12 @@ static int gralloc_alloc_framebuffer_locked(alloc_device_t* dev, } static int gralloc_alloc_framebuffer(alloc_device_t* dev, - size_t size, int usage, buffer_handle_t* pHandle) + size_t size, int format, int usage, buffer_handle_t* pHandle) { private_module_t* m = reinterpret_cast<private_module_t*>( dev->common.module); pthread_mutex_lock(&m->lock); - int err = gralloc_alloc_framebuffer_locked(dev, size, usage, pHandle); + int err = gralloc_alloc_framebuffer_locked(dev, size, format, usage, pHandle); pthread_mutex_unlock(&m->lock); return err; } @@ -236,7 +236,7 @@ static int gralloc_alloc(alloc_device_t* dev, int err; if (usage & GRALLOC_USAGE_HW_FB) { - err = gralloc_alloc_framebuffer(dev, size, usage, pHandle); + err = gralloc_alloc_framebuffer(dev, size, format, usage, pHandle); } else { err = gralloc_alloc_buffer(dev, size, usage, pHandle); } |