Framebuffer: Support variable number of framebuffers in the UI
This change defines a macro NUM_FRAME_BUFFERS to set the desired number of framebuffers to be used by the UI, instead of hard-coding 2 framebuffers. Aditional logic has been added to handle the initialization and destruction of NUM_FRAME_BUFFERS buffers. Change-Id: I3a4bfec3e0f453432f2ffebf084c00f574d3be46 Signed-off-by: Rodrigo Obregon <robregon@ti.com>
This commit is contained in:
parent
0e97e9a239
commit
71484f2f76
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <ui/egl/android_natives.h>
|
||||
|
||||
#define NUM_FRAME_BUFFERS 2
|
||||
|
||||
extern "C" EGLNativeWindowType android_createDisplaySurface(void);
|
||||
|
||||
|
@ -69,7 +70,7 @@ private:
|
|||
framebuffer_device_t* fbDev;
|
||||
alloc_device_t* grDev;
|
||||
|
||||
sp<NativeBuffer> buffers[2];
|
||||
sp<NativeBuffer> buffers[NUM_FRAME_BUFFERS];
|
||||
sp<NativeBuffer> front;
|
||||
|
||||
mutable Mutex mutex;
|
||||
|
|
|
@ -82,6 +82,7 @@ FramebufferNativeWindow::FramebufferNativeWindow()
|
|||
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
|
||||
int stride;
|
||||
int err;
|
||||
int i;
|
||||
err = framebuffer_open(module, &fbDev);
|
||||
LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err));
|
||||
|
||||
|
@ -95,27 +96,33 @@ FramebufferNativeWindow::FramebufferNativeWindow()
|
|||
mUpdateOnDemand = (fbDev->setUpdateRect != 0);
|
||||
|
||||
// initialize the buffer FIFO
|
||||
mNumBuffers = 2;
|
||||
mNumFreeBuffers = 2;
|
||||
mNumBuffers = NUM_FRAME_BUFFERS;
|
||||
mNumFreeBuffers = NUM_FRAME_BUFFERS;
|
||||
mBufferHead = mNumBuffers-1;
|
||||
buffers[0] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
buffers[1] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[0]->handle, &buffers[0]->stride);
|
||||
|
||||
LOGE_IF(err, "fb buffer 0 allocation failed w=%d, h=%d, err=%s",
|
||||
fbDev->width, fbDev->height, strerror(-err));
|
||||
for (i = 0; i < mNumBuffers; i++)
|
||||
{
|
||||
buffers[i] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
}
|
||||
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[1]->handle, &buffers[1]->stride);
|
||||
for (i = 0; i < mNumBuffers; i++)
|
||||
{
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[i]->handle, &buffers[i]->stride);
|
||||
|
||||
LOGE_IF(err, "fb buffer 1 allocation failed w=%d, h=%d, err=%s",
|
||||
fbDev->width, fbDev->height, strerror(-err));
|
||||
LOGE_IF(err, "fb buffer %d allocation failed w=%d, h=%d, err=%s",
|
||||
i, fbDev->width, fbDev->height, strerror(-err));
|
||||
|
||||
if (err)
|
||||
{
|
||||
mNumBuffers = i;
|
||||
mNumFreeBuffers = i;
|
||||
mBufferHead = mNumBuffers-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const_cast<uint32_t&>(android_native_window_t::flags) = fbDev->flags;
|
||||
const_cast<float&>(android_native_window_t::xdpi) = fbDev->xdpi;
|
||||
|
|
Loading…
Reference in New Issue