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

Commit d7a3ebe0 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android Git Automerger
Browse files

am ecb4b3f0: Merge "Pass the IGraphicBufferAlloc to SurfaceTextureClient." into honeycomb

* commit 'ecb4b3f02340e21eefabbea78559e85ec7ee0089':
  Pass the IGraphicBufferAlloc to SurfaceTextureClient.
parents e733ccfe 1472b3a8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -72,6 +72,12 @@ public:

    virtual status_t setCrop(const Rect& reg) = 0;
    virtual status_t setTransform(uint32_t transform) = 0;

    // getAllocator retrieves the binder object that must be referenced as long
    // as the GraphicBuffers dequeued from this ISurfaceTexture are referenced.
    // Holding this binder reference prevents SurfaceFlinger from freeing the
    // buffers before the client is done with them.
    virtual sp<IBinder> getAllocator() = 0;
};

// ----------------------------------------------------------------------------
+6 −0
Original line number Diff line number Diff line
@@ -101,6 +101,12 @@ public:
    // when a new frame becomes available.
    void setFrameAvailableListener(const sp<FrameAvailableListener>& l);

    // getAllocator retrieves the binder object that must be referenced as long
    // as the GraphicBuffers dequeued from this SurfaceTexture are referenced.
    // Holding this binder reference prevents SurfaceFlinger from freeing the
    // buffers before the client is done with them.
    sp<IBinder> getAllocator();

private:

    // freeAllBuffers frees the resources (both GraphicBuffer and EGLImage) for
+4 −0
Original line number Diff line number Diff line
@@ -83,6 +83,10 @@ private:
    // interactions with the server using this interface.
    sp<ISurfaceTexture> mSurfaceTexture;

    // mAllocator is the binder object that is referenced to prevent the
    // dequeued buffers from being freed prematurely.
    sp<IBinder> mAllocator;

    // mSlots stores the buffers that have been allocated for each buffer slot.
    // It is initialized to null pointers, and gets filled in with the result of
    // ISurfaceTexture::requestBuffer when the client dequeues a buffer from a
+14 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ enum {
    CANCEL_BUFFER,
    SET_CROP,
    SET_TRANSFORM,
    GET_ALLOCATOR,
};


@@ -123,6 +124,13 @@ public:
        status_t result = reply.readInt32();
        return result;
    }

    virtual sp<IBinder> getAllocator() {
        Parcel data, reply;
        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
        remote()->transact(GET_ALLOCATOR, data, &reply);
        return reply.readStrongBinder();
    }
};

IMPLEMENT_META_INTERFACE(SurfaceTexture, "android.gui.SurfaceTexture");
@@ -195,6 +203,12 @@ status_t BnSurfaceTexture::onTransact(
            reply->writeInt32(result);
            return NO_ERROR;
        } break;
        case GET_ALLOCATOR: {
            CHECK_INTERFACE(ISurfaceTexture, data, reply);
            sp<IBinder> result = getAllocator();
            reply->writeStrongBinder(result);
            return NO_ERROR;
        } break;
    }
    return BBinder::onTransact(code, data, reply, flags);
}
+5 −0
Original line number Diff line number Diff line
@@ -304,6 +304,11 @@ void SurfaceTexture::setFrameAvailableListener(
    mFrameAvailableListener = l;
}

sp<IBinder> SurfaceTexture::getAllocator() {
    LOGV("SurfaceTexture::getAllocator");
    return mGraphicBufferAlloc->asBinder();
}

void SurfaceTexture::freeAllBuffers() {
    for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
        mSlots[i].mGraphicBuffer = 0;
Loading