Bug 1100727 - Port LL FrameBufferSurface to gonk. r=mwu

Use the new API, BufferQueue::createBufferQueue() to new the consumer
and the producer on LL.
This commit is contained in:
Boris Chiou 2014-11-19 23:03:00 +01:00
Родитель ed5bc6f861
Коммит 0ae1cd5f57
3 изменённых файлов: 38 добавлений и 18 удалений

Просмотреть файл

@ -49,17 +49,20 @@ namespace android {
* This implements the (main) framebuffer management. This class
* was adapted from the version in SurfaceFlinger
*/
FramebufferSurface::FramebufferSurface(int disp, uint32_t width, uint32_t height, uint32_t format,
sp<BufferQueue>& bq) :
FramebufferSurface::FramebufferSurface(int disp,
uint32_t width,
uint32_t height,
uint32_t format,
const sp<StreamConsumer>& sc)
#if ANDROID_VERSION >= 19
ConsumerBase(bq, true),
: ConsumerBase(sc, true)
#else
ConsumerBase(bq),
: ConsumerBase(sc)
#endif
mDisplayType(disp),
mCurrentBufferSlot(-1),
mCurrentBuffer(0),
lastHandle(0)
, mDisplayType(disp)
, mCurrentBufferSlot(-1)
, mCurrentBuffer(0)
, lastHandle(0)
{
mName = "FramebufferSurface";
@ -113,7 +116,7 @@ status_t FramebufferSurface::nextBuffer(sp<GraphicBuffer>& outBuffer, sp<Fence>&
err = releaseBufferLocked(mCurrentBufferSlot, EGL_NO_DISPLAY,
EGL_NO_SYNC_KHR);
#endif
if (err != NO_ERROR && err != BufferQueue::STALE_BUFFER_SLOT) {
if (err != NO_ERROR && err != StreamConsumer::STALE_BUFFER_SLOT) {
ALOGE("error releasing buffer: %s (%d)", strerror(-err), err);
return err;
}

Просмотреть файл

@ -30,11 +30,17 @@ class Rect;
class String8;
class HWComposer;
#if ANDROID_VERSION >= 21
typedef IGraphicBufferConsumer StreamConsumer;
#else
typedef BufferQueue StreamConsumer;
#endif
// ---------------------------------------------------------------------------
class FramebufferSurface : public ConsumerBase {
public:
FramebufferSurface(int disp, uint32_t width, uint32_t height, uint32_t format, sp<BufferQueue>& bq);
FramebufferSurface(int disp, uint32_t width, uint32_t height, uint32_t format, const sp<StreamConsumer>& sc);
bool isUpdateOnDemand() const { return false; }
status_t setUpdateRectangle(const Rect& updateRect);

Просмотреть файл

@ -106,22 +106,33 @@ GonkDisplayJB::GonkDisplayJB()
mAlloc = new GraphicBufferAlloc();
status_t error;
#if ANDROID_VERSION >= 19
sp<BufferQueue> bq = new BufferQueue(mAlloc);
#if ANDROID_VERSION >= 21
sp<IGraphicBufferProducer> producer;
sp<IGraphicBufferConsumer> consumer;
BufferQueue::createBufferQueue(&producer, &consumer, mAlloc);
#elif ANDROID_VERSION >= 19
sp<BufferQueue> consumer = new BufferQueue(mAlloc);
sp<IGraphicBufferProducer> producer = consumer;
#elif ANDROID_VERSION >= 18
sp<BufferQueue> consumer = new BufferQueue(true, mAlloc);
sp<IGraphicBufferProducer> producer = consumer;
#else
sp<BufferQueue> bq = new BufferQueue(true, mAlloc);
sp<BufferQueue> consumer = new BufferQueue(true, mAlloc);
#endif
mFBSurface = new FramebufferSurface(0, mWidth, mHeight, surfaceformat, bq);
mFBSurface = new FramebufferSurface(0, mWidth, mHeight, surfaceformat, consumer);
#if ANDROID_VERSION == 17
sp<SurfaceTextureClient> stc = new SurfaceTextureClient(static_cast<sp<ISurfaceTexture> >(mFBSurface->getBufferQueue()));
sp<SurfaceTextureClient> stc = new SurfaceTextureClient(
static_cast<sp<ISurfaceTexture> >(mFBSurface->getBufferQueue()));
#else
sp<Surface> stc = new Surface(static_cast<sp<IGraphicBufferProducer> >(bq));
sp<Surface> stc = new Surface(producer);
#endif
mSTClient = stc;
mSTClient->perform(mSTClient.get(), NATIVE_WINDOW_SET_BUFFER_COUNT, 2);
mSTClient->perform(mSTClient.get(), NATIVE_WINDOW_SET_USAGE, GRALLOC_USAGE_HW_FB | GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_COMPOSER);
mSTClient->perform(mSTClient.get(), NATIVE_WINDOW_SET_USAGE,
GRALLOC_USAGE_HW_FB |
GRALLOC_USAGE_HW_RENDER |
GRALLOC_USAGE_HW_COMPOSER);
mList = (hwc_display_contents_1_t *)malloc(sizeof(*mList) + (sizeof(hwc_layer_1_t)*2));
if (mHwc)