зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
ed5bc6f861
Коммит
0ae1cd5f57
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче