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

Commit 306f18c5 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "rework screenshot API and implementation" into jb-mr2-dev

parents eabe3140 2a9fc493
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -103,7 +103,6 @@ public:
            uint32_t reqWidth, uint32_t reqHeight,
            uint32_t reqWidth, uint32_t reqHeight,
            uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
            uint32_t minLayerZ, uint32_t maxLayerZ) = 0;



    /* triggers screen off and waits for it to complete */
    /* triggers screen off and waits for it to complete */
    virtual void blank(const sp<IBinder>& display) = 0;
    virtual void blank(const sp<IBinder>& display) = 0;


@@ -113,6 +112,11 @@ public:
    /* returns information about a display
    /* returns information about a display
     * intended to be used to get information about built-in displays */
     * intended to be used to get information about built-in displays */
    virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0;
    virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0;

    virtual status_t captureScreen(const sp<IBinder>& display,
            const sp<IGraphicBufferProducer>& producer,
            uint32_t reqWidth, uint32_t reqHeight,
            uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
};
};


// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
@@ -130,11 +134,12 @@ public:
        GET_BUILT_IN_DISPLAY,
        GET_BUILT_IN_DISPLAY,
        SET_TRANSACTION_STATE,
        SET_TRANSACTION_STATE,
        AUTHENTICATE_SURFACE,
        AUTHENTICATE_SURFACE,
        CAPTURE_SCREEN,
        CAPTURE_SCREEN_DEPRECATED,
        BLANK,
        BLANK,
        UNBLANK,
        UNBLANK,
        GET_DISPLAY_INFO,
        GET_DISPLAY_INFO,
        CONNECT_DISPLAY,
        CONNECT_DISPLAY,
        CAPTURE_SCREEN,
    };
    };


    virtual status_t onTransact(uint32_t code, const Parcel& data,
    virtual status_t onTransact(uint32_t code, const Parcel& data,
+9 −0
Original line number Original line Diff line number Diff line
@@ -156,10 +156,19 @@ private:


class ScreenshotClient
class ScreenshotClient
{
{
public:
    static status_t capture(
            const sp<IBinder>& display,
            const sp<IGraphicBufferProducer>& producer,
            uint32_t reqWidth, uint32_t reqHeight,
            uint32_t minLayerZ, uint32_t maxLayerZ);

private:
    sp<IMemoryHeap> mHeap;
    sp<IMemoryHeap> mHeap;
    uint32_t mWidth;
    uint32_t mWidth;
    uint32_t mHeight;
    uint32_t mHeight;
    PixelFormat mFormat;
    PixelFormat mFormat;

public:
public:
    ScreenshotClient();
    ScreenshotClient();


+32 −2
Original line number Original line Diff line number Diff line
@@ -115,7 +115,7 @@ public:
        data.writeInt32(reqHeight);
        data.writeInt32(reqHeight);
        data.writeInt32(minLayerZ);
        data.writeInt32(minLayerZ);
        data.writeInt32(maxLayerZ);
        data.writeInt32(maxLayerZ);
        remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN, data, &reply);
        remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN_DEPRECATED, data, &reply);
        *heap = interface_cast<IMemoryHeap>(reply.readStrongBinder());
        *heap = interface_cast<IMemoryHeap>(reply.readStrongBinder());
        *width = reply.readInt32();
        *width = reply.readInt32();
        *height = reply.readInt32();
        *height = reply.readInt32();
@@ -123,6 +123,23 @@ public:
        return reply.readInt32();
        return reply.readInt32();
    }
    }


    virtual status_t captureScreen(const sp<IBinder>& display,
            const sp<IGraphicBufferProducer>& producer,
            uint32_t reqWidth, uint32_t reqHeight,
            uint32_t minLayerZ, uint32_t maxLayerZ)
    {
        Parcel data, reply;
        data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
        data.writeStrongBinder(display);
        data.writeStrongBinder(producer->asBinder());
        data.writeInt32(reqWidth);
        data.writeInt32(reqHeight);
        data.writeInt32(minLayerZ);
        data.writeInt32(maxLayerZ);
        remote()->transact(BnSurfaceComposer::CAPTURE_SCREEN, data, &reply);
        return reply.readInt32();
    }

    virtual bool authenticateSurfaceTexture(
    virtual bool authenticateSurfaceTexture(
            const sp<IGraphicBufferProducer>& bufferProducer) const
            const sp<IGraphicBufferProducer>& bufferProducer) const
    {
    {
@@ -268,7 +285,7 @@ status_t BnSurfaceComposer::onTransact(
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            bootFinished();
            bootFinished();
        } break;
        } break;
        case CAPTURE_SCREEN: {
        case CAPTURE_SCREEN_DEPRECATED: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IBinder> display = data.readStrongBinder();
            sp<IBinder> display = data.readStrongBinder();
            uint32_t reqWidth = data.readInt32();
            uint32_t reqWidth = data.readInt32();
@@ -286,6 +303,19 @@ status_t BnSurfaceComposer::onTransact(
            reply->writeInt32(f);
            reply->writeInt32(f);
            reply->writeInt32(res);
            reply->writeInt32(res);
        } break;
        } break;
        case CAPTURE_SCREEN: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IBinder> display = data.readStrongBinder();
            sp<IGraphicBufferProducer> producer =
                    interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
            uint32_t reqWidth = data.readInt32();
            uint32_t reqHeight = data.readInt32();
            uint32_t minLayerZ = data.readInt32();
            uint32_t maxLayerZ = data.readInt32();
            status_t res = captureScreen(display, producer,
                    reqWidth, reqHeight, minLayerZ, maxLayerZ);
            reply->writeInt32(res);
        } break;
        case AUTHENTICATE_SURFACE: {
        case AUTHENTICATE_SURFACE: {
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            CHECK_INTERFACE(ISurfaceComposer, data, reply);
            sp<IGraphicBufferProducer> bufferProducer =
            sp<IGraphicBufferProducer> bufferProducer =
+11 −0
Original line number Original line Diff line number Diff line
@@ -606,6 +606,17 @@ void SurfaceComposerClient::unblankDisplay(const sp<IBinder>& token) {


// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------


status_t ScreenshotClient::capture(
        const sp<IBinder>& display,
        const sp<IGraphicBufferProducer>& producer,
        uint32_t reqWidth, uint32_t reqHeight,
        uint32_t minLayerZ, uint32_t maxLayerZ) {
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    if (s == NULL) return NO_INIT;
    return s->captureScreen(display, producer,
            reqWidth, reqHeight, minLayerZ, maxLayerZ);
}

ScreenshotClient::ScreenshotClient()
ScreenshotClient::ScreenshotClient()
    : mWidth(0), mHeight(0), mFormat(PIXEL_FORMAT_NONE) {
    : mWidth(0), mHeight(0), mFormat(PIXEL_FORMAT_NONE) {
}
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -112,6 +112,10 @@ protected:
    virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const;
    virtual void dumpStats(String8& result, char* buffer, size_t SIZE) const;
    virtual void clearStats();
    virtual void clearStats();


    sp<SurfaceFlingerConsumer> getConsumer() const {
        return mSurfaceFlingerConsumer;
    }

private:
private:
    // Creates an instance of ISurface for this Layer.
    // Creates an instance of ISurface for this Layer.
    virtual sp<ISurface> createSurface();
    virtual sp<ISurface> createSurface();
Loading