@@ -82,6 +82,7 @@ FramebufferNativeWindow::FramebufferNativeWindow()
8282 if (hw_get_module (GRALLOC_HARDWARE_MODULE_ID, &module ) == 0 ) {
8383 int stride;
8484 int err;
85+ int i;
8586 err = framebuffer_open (module , &fbDev);
8687 LOGE_IF (err, " couldn't open framebuffer HAL (%s)" , strerror (-err));
8788
@@ -95,27 +96,33 @@ FramebufferNativeWindow::FramebufferNativeWindow()
9596 mUpdateOnDemand = (fbDev->setUpdateRect != 0 );
9697
9798 // initialize the buffer FIFO
98- mNumBuffers = 2 ;
99- mNumFreeBuffers = 2 ;
99+ mNumBuffers = NUM_FRAME_BUFFERS ;
100+ mNumFreeBuffers = NUM_FRAME_BUFFERS ;
100101 mBufferHead = mNumBuffers -1 ;
101- buffers[0 ] = new NativeBuffer (
102- fbDev->width , fbDev->height , fbDev->format , GRALLOC_USAGE_HW_FB);
103- buffers[1 ] = new NativeBuffer (
104- fbDev->width , fbDev->height , fbDev->format , GRALLOC_USAGE_HW_FB);
105-
106- err = grDev->alloc (grDev,
107- fbDev->width , fbDev->height , fbDev->format ,
108- GRALLOC_USAGE_HW_FB, &buffers[0 ]->handle , &buffers[0 ]->stride );
109-
110- LOGE_IF (err, " fb buffer 0 allocation failed w=%d, h=%d, err=%s" ,
111- fbDev->width , fbDev->height , strerror (-err));
112-
113- err = grDev->alloc (grDev,
114- fbDev->width , fbDev->height , fbDev->format ,
115- GRALLOC_USAGE_HW_FB, &buffers[1 ]->handle , &buffers[1 ]->stride );
116102
117- LOGE_IF (err, " fb buffer 1 allocation failed w=%d, h=%d, err=%s" ,
118- fbDev->width , fbDev->height , strerror (-err));
103+ for (i = 0 ; i < mNumBuffers ; i++)
104+ {
105+ buffers[i] = new NativeBuffer (
106+ fbDev->width , fbDev->height , fbDev->format , GRALLOC_USAGE_HW_FB);
107+ }
108+
109+ for (i = 0 ; i < mNumBuffers ; i++)
110+ {
111+ err = grDev->alloc (grDev,
112+ fbDev->width , fbDev->height , fbDev->format ,
113+ GRALLOC_USAGE_HW_FB, &buffers[i]->handle , &buffers[i]->stride );
114+
115+ LOGE_IF (err, " fb buffer %d allocation failed w=%d, h=%d, err=%s" ,
116+ i, fbDev->width , fbDev->height , strerror (-err));
117+
118+ if (err)
119+ {
120+ mNumBuffers = i;
121+ mNumFreeBuffers = i;
122+ mBufferHead = mNumBuffers -1 ;
123+ break ;
124+ }
125+ }
119126
120127 const_cast <uint32_t &>(android_native_window_t ::flags) = fbDev->flags ;
121128 const_cast <float &>(android_native_window_t ::xdpi) = fbDev->xdpi ;
0 commit comments