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

Commit e96a325a authored by Craig Donner's avatar Craig Donner
Browse files

Add methods for allocating and locking GraphicBuffers via gralloc1 flags

Bug: 34050596
Test: manual
Change-Id: I9515e60fe6b67d2c6f02b1bb78651669430f12ef
parent bd448543
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -35,8 +35,8 @@ public:
    virtual ~GraphicBufferAlloc();
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t width,
            uint32_t height, PixelFormat format, uint32_t layerCount,
            uint32_t usage, std::string requestorName,
            status_t* error) override;
            uint64_t producerUsage, uint64_t consumerUsage,
            std::string requestorName, status_t* error) override;
};


+19 −4
Original line number Diff line number Diff line
@@ -38,14 +38,29 @@ public:
    /* Create a new GraphicBuffer for the client to use.
     */
    virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t layerCount, uint32_t usage,
            std::string requestorName, status_t* error) = 0;
            PixelFormat format, uint32_t layerCount, uint64_t producerUsage,
            uint64_t consumerUsage, std::string requestorName,
            status_t* error) = 0;

    sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t layerCount, uint32_t usage,
            status_t* error) {
        return createGraphicBuffer(w, h, format, layerCount, usage, "<Unknown>",
                error);
        return createGraphicBuffer(w, h, format, layerCount, usage,
                usage, "<Unknown>", error);
    }

    sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t layerCount, uint32_t usage,
            std::string requestorName, status_t* error) {
        return createGraphicBuffer(w, h, format, layerCount, usage,
                usage, requestorName, error);
    }

    sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h,
            PixelFormat format, uint32_t layerCount, uint64_t producerUsage,
            uint64_t consumerUsage, status_t* error) {
        return createGraphicBuffer(w, h, format, layerCount, producerUsage,
                consumerUsage, "<Unknown>", error);
    }
};

+9 −1
Original line number Diff line number Diff line
@@ -81,6 +81,11 @@ public:
            uint32_t inLayerCount, uint32_t inUsage,
            std::string requestorName = "<Unknown>");

    // creates w * h buffer with a layer count using gralloc1
    GraphicBuffer(uint32_t inWidth, uint32_t inHeight, PixelFormat inFormat,
            uint32_t inLayerCount, uint64_t inProducerUsage,
            uint64_t inConsumerUsage, std::string requestorName = "<Unknown>");

    // create a buffer from an existing handle
    GraphicBuffer(uint32_t inWidth, uint32_t inHeight, PixelFormat inFormat,
            uint32_t inLayerCount, uint32_t inUsage, uint32_t inStride,
@@ -122,6 +127,8 @@ public:
    status_t lockAsync(uint32_t inUsage, void** vaddr, int fenceFd);
    status_t lockAsync(uint32_t inUsage, const Rect& rect, void** vaddr,
            int fenceFd);
    status_t lockAsync(uint64_t inProducerUsage, uint64_t inConsumerUsage,
            const Rect& rect, void** vaddr, int fenceFd);
    status_t lockAsyncYCbCr(uint32_t inUsage, android_ycbcr *ycbcr,
            int fenceFd);
    status_t lockAsyncYCbCr(uint32_t inUsage, const Rect& rect,
@@ -166,7 +173,8 @@ private:
    const GraphicBuffer& operator = (const GraphicBuffer& rhs) const;

    status_t initSize(uint32_t inWidth, uint32_t inHeight, PixelFormat inFormat,
            uint32_t inLayerCount, uint32_t inUsage, std::string requestorName);
            uint32_t inLayerCount, uint64_t inProducerUsage,
            uint64_t inConsumerUsage, std::string requestorName);

    void free_handle();

+4 −3
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ public:
    static inline GraphicBufferAllocator& get() { return getInstance(); }

    status_t allocate(uint32_t w, uint32_t h, PixelFormat format,
            uint32_t layerCount, uint32_t usage, buffer_handle_t* handle,
            uint32_t* stride, uint64_t graphicBufferId,
            uint32_t layerCount, uint64_t producerUsage, uint64_t consumerUsage,
            buffer_handle_t* handle, uint32_t* stride, uint64_t graphicBufferId,
            std::string requestorName);

    status_t free(buffer_handle_t handle);
@@ -81,7 +81,8 @@ private:
        uint32_t stride;
        PixelFormat format;
        uint32_t layerCount;
        uint32_t usage;
        uint64_t producerUsage;
        uint64_t consumerUsage;
        size_t size;
        std::string requestorName;
    };
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ public:
    status_t lockAsync(buffer_handle_t handle,
            uint32_t usage, const Rect& bounds, void** vaddr, int fenceFd);

    status_t lockAsync(buffer_handle_t handle,
            uint64_t producerUsage, uint64_t consumerUsage, const Rect& bounds,
            void** vaddr, int fenceFd);

    status_t lockAsyncYCbCr(buffer_handle_t handle,
            uint32_t usage, const Rect& bounds, android_ycbcr *ycbcr,
            int fenceFd);
Loading