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

Commit 7f7e8589 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android (Google) Code Review
Browse files

Merge "SurfaceTexture: fix queues-to-composer"

parents 3113a73b 582270d6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -132,9 +132,10 @@ public:
    virtual status_t turnElectronBeamOff(int32_t mode) = 0;
    virtual status_t turnElectronBeamOn(int32_t mode) = 0;

    /* verify that an ISurface was created by SurfaceFlinger.
    /* verify that an ISurfaceTexture was created by SurfaceFlinger.
     */
    virtual bool authenticateSurface(const sp<ISurface>& surface) const = 0;
    virtual bool authenticateSurfaceTexture(
            const sp<ISurfaceTexture>& surface) const = 0;
};

// ----------------------------------------------------------------------------
+15 −11
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@

#include <ui/DisplayInfo.h>

#include <gui/ISurfaceTexture.h>

#include <utils/Log.h>

// ---------------------------------------------------------------------------
@@ -166,35 +168,36 @@ public:
        return reply.readInt32();
    }

    virtual bool authenticateSurface(const sp<ISurface>& surface) const
    virtual bool authenticateSurfaceTexture(
            const sp<ISurfaceTexture>& surfaceTexture) const
    {
        Parcel data, reply;
        int err = NO_ERROR;
        err = data.writeInterfaceToken(
                ISurfaceComposer::getInterfaceDescriptor());
        if (err != NO_ERROR) {
            LOGE("ISurfaceComposer::authenticateSurface: error writing "
            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
                    "interface descriptor: %s (%d)", strerror(-err), -err);
            return false;
        }
        err = data.writeStrongBinder(surface->asBinder());
        err = data.writeStrongBinder(surfaceTexture->asBinder());
        if (err != NO_ERROR) {
            LOGE("ISurfaceComposer::authenticateSurface: error writing strong "
                    "binder to parcel: %s (%d)", strerror(-err), -err);
            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error writing "
                    "strong binder to parcel: %s (%d)", strerror(-err), -err);
            return false;
        }
        err = remote()->transact(BnSurfaceComposer::AUTHENTICATE_SURFACE, data,
                &reply);
        if (err != NO_ERROR) {
            LOGE("ISurfaceComposer::authenticateSurface: error performing "
                    "transaction: %s (%d)", strerror(-err), -err);
            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
                    "performing transaction: %s (%d)", strerror(-err), -err);
            return false;
        }
        int32_t result = 0;
        err = reply.readInt32(&result);
        if (err != NO_ERROR) {
            LOGE("ISurfaceComposer::authenticateSurface: error retrieving "
                    "result: %s (%d)", strerror(-err), -err);
            LOGE("ISurfaceComposer::authenticateSurfaceTexture: error "
                    "retrieving result: %s (%d)", strerror(-err), -err);
            return false;
        }
        return result != 0;
@@ -291,8 +294,9 @@ status_t BnSurfaceComposer::onTransact(
        } break;
        case AUTHENTICATE_SURFACE: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<ISurface> surface = interface_cast<ISurface>(data.readStrongBinder());
            int32_t result = authenticateSurface(surface) ? 1 : 0;
            sp<ISurfaceTexture> surfaceTexture =
                    interface_cast<ISurfaceTexture>(data.readStrongBinder());
            int32_t result = authenticateSurfaceTexture(surfaceTexture) ? 1 : 0;
            reply->writeInt32(result);
        } break;
        default:
+0 −3
Original line number Diff line number Diff line
@@ -342,9 +342,6 @@ sp<IBinder> Surface::asBinder() const {

int Surface::query(int what, int* value) const {
    switch (what) {
    case NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER:
        *value = 1;
        return NO_ERROR;
    case NATIVE_WINDOW_CONCRETE_TYPE:
        *value = NATIVE_WINDOW_SURFACE;
        return NO_ERROR;
+11 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
//#define LOG_NDEBUG 0

#include <gui/SurfaceTextureClient.h>
#include <surfaceflinger/ISurfaceComposer.h>
#include <surfaceflinger/SurfaceComposerClient.h>

#include <utils/Log.h>

@@ -234,7 +236,15 @@ int SurfaceTextureClient::query(int what, int* value) const {
                }
                break;
            case NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER:
                {
                    sp<ISurfaceComposer> composer(
                            ComposerService::getComposerService());
                    if (composer->authenticateSurfaceTexture(mSurfaceTexture)) {
                        *value = 1;
                    } else {
                        *value = 0;
                    }
                }
                return NO_ERROR;
            case NATIVE_WINDOW_CONCRETE_TYPE:
                *value = NATIVE_WINDOW_SURFACE_TEXTURE_CLIENT;
+5 −0
Original line number Diff line number Diff line
@@ -133,6 +133,11 @@ sp<ISurface> Layer::createSurface()
    return sur;
}

wp<IBinder> Layer::getSurfaceTextureBinder() const
{
    return mSurfaceTexture->asBinder();
}

status_t Layer::setBuffers( uint32_t w, uint32_t h,
                            PixelFormat format, uint32_t flags)
{
Loading