Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6e47994 authored by Jim Shargo's avatar Jim Shargo
Browse files

cmds: ConsumerBase-based classes now create their own BufferQueues

Using ConsumerBase-based classes is now the recommended way to create
BufferQueues.

This is an important step for go/warren-buffers, because it consolidates
usages of BufferQueues to supported APIs and reduces the libgui API
surface that exposes IGBP/IGBC.

BYPASS_IGBP_IGBC_API_REASON: this CL is part of the migration.

Bug: 340933754
Flag: com.android.graphics.libgui.flags.wb_consumer_base_owns_bq
Test: atest, presubmit, compiles
Change-Id: I2d7cdfe18a96f78b2e4c8ec982d3b1c083e370e3
parent fe67019d
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -15,11 +15,14 @@
 */

#define LOG_TAG "ScreenRecord"

//#define LOG_NDEBUG 0
#include <utils/Log.h>

#include <com_android_graphics_libgui_flags.h>
#include <gui/Surface.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <utils/Log.h>

#include "FrameOutput.h"

@@ -67,11 +70,17 @@ status_t FrameOutput::createInputSurface(int width, int height,
        return UNKNOWN_ERROR;
    }

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
    mGlConsumer = new GLConsumer(mExtTextureName, GL_TEXTURE_EXTERNAL_OES, /*useFenceSync=*/true,
                                 /*isControlledByApp=*/false);
    auto producer = mGlConsumer->getSurface()->getIGraphicBufferProducer();
#else
    sp<IGraphicBufferProducer> producer;
    sp<IGraphicBufferConsumer> consumer;
    BufferQueue::createBufferQueue(&producer, &consumer);
    mGlConsumer = new GLConsumer(consumer, mExtTextureName,
                GL_TEXTURE_EXTERNAL_OES, true, false);
#endif  // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
    mGlConsumer->setName(String8("virtual display"));
    mGlConsumer->setDefaultBufferSize(width, height);
    producer->setMaxDequeuedBufferCount(4);
+6 −0
Original line number Diff line number Diff line
@@ -172,10 +172,16 @@ status_t Overlay::setup_l() {
        return UNKNOWN_ERROR;
    }

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
    mGlConsumer = new GLConsumer(mExtTextureName, GL_TEXTURE_EXTERNAL_OES, /*useFenceSync=*/true,
                                 /*isControlledByApp=*/false);
    mProducer = mGlConsumer->getSurface()->getIGraphicBufferProducer();
#else
    sp<IGraphicBufferConsumer> consumer;
    BufferQueue::createBufferQueue(&mProducer, &consumer);
    mGlConsumer = new GLConsumer(consumer, mExtTextureName,
                GL_TEXTURE_EXTERNAL_OES, true, false);
#endif  // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
    mGlConsumer->setName(String8("virtual display"));
    mGlConsumer->setDefaultBufferSize(width, height);
    mProducer->setMaxDequeuedBufferCount(4);
+8 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@

#include <private/media/VideoFrame.h>

#include <com_android_graphics_libgui_flags.h>
#include <gui/GLConsumer.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
@@ -1133,7 +1134,12 @@ int main(int argc, char **argv) {
            CHECK(gSurface != NULL);
        } else {
            CHECK(useSurfaceTexAlloc);

#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
            sp<GLConsumer> texture =
                    new GLConsumer(0 /* tex */, GLConsumer::TEXTURE_EXTERNAL,
                                   true /* useFenceSync */, false /* isControlledByApp */);
            gSurface = texture->getSurface();
#else
            sp<IGraphicBufferProducer> producer;
            sp<IGraphicBufferConsumer> consumer;
            BufferQueue::createBufferQueue(&producer, &consumer);
@@ -1141,6 +1147,7 @@ int main(int argc, char **argv) {
                    GLConsumer::TEXTURE_EXTERNAL, true /* useFenceSync */,
                    false /* isControlledByApp */);
            gSurface = new Surface(producer);
#endif  // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
        }
    }