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

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

Add private consumer and producer flags to AHardwareBuffer.

This also generalizes and simplifies the flag conversion,
making it more bulletproof in the future.  To add more flags,
just add new entries into the mapping arrays.

Bug: 34050596
Bug: 35765937
Test: cts-tradefed run cts -m CtsNativeHardwareTestCases
Also added new cc_test libs/nativewindow/tests to test gralloc flag conversion

Change-Id: Ib96b277e837f2ab8c332f14df60e88580e3d868d
parent ff192d37
Loading
Loading
Loading
Loading
+119 −53
Original line number Original line Diff line number Diff line
@@ -57,7 +57,8 @@ int AHardwareBuffer_allocate(const AHardwareBuffer_Desc* desc, AHardwareBuffer**


    uint64_t producerUsage = 0;
    uint64_t producerUsage = 0;
    uint64_t consumerUsage = 0;
    uint64_t consumerUsage = 0;
    AHardwareBuffer_convertToGrallocUsageBits(desc->usage0, &producerUsage, &consumerUsage);
    AHardwareBuffer_convertToGrallocUsageBits(&producerUsage, &consumerUsage, desc->usage0,
            desc->usage1);


    sp<GraphicBuffer> gbuffer(new GraphicBuffer(
    sp<GraphicBuffer> gbuffer(new GraphicBuffer(
            desc->width, desc->height, format, desc->layers, producerUsage, consumerUsage,
            desc->width, desc->height, format, desc->layers, producerUsage, consumerUsage,
@@ -97,9 +98,8 @@ void AHardwareBuffer_describe(const AHardwareBuffer* buffer,
    outDesc->width = gbuffer->getWidth();
    outDesc->width = gbuffer->getWidth();
    outDesc->height = gbuffer->getHeight();
    outDesc->height = gbuffer->getHeight();
    outDesc->layers = gbuffer->getLayerCount();
    outDesc->layers = gbuffer->getLayerCount();
    outDesc->usage0 = AHardwareBuffer_convertFromGrallocUsageBits(
    AHardwareBuffer_convertFromGrallocUsageBits(&outDesc->usage0, &outDesc->usage1,
            gbuffer->getUsage(), gbuffer->getUsage());
            gbuffer->getUsage(), gbuffer->getUsage());
    outDesc->usage1 = 0;
    outDesc->format = AHardwareBuffer_convertFromPixelFormat(
    outDesc->format = AHardwareBuffer_convertFromPixelFormat(
            static_cast<uint32_t>(gbuffer->getPixelFormat()));
            static_cast<uint32_t>(gbuffer->getPixelFormat()));
}
}
@@ -117,7 +117,7 @@ int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage0,


    uint64_t producerUsage = 0;
    uint64_t producerUsage = 0;
    uint64_t consumerUsage = 0;
    uint64_t consumerUsage = 0;
    AHardwareBuffer_convertToGrallocUsageBits(usage0, &producerUsage, &consumerUsage);
    AHardwareBuffer_convertToGrallocUsageBits(&producerUsage, &consumerUsage, usage0, 0);
    GraphicBuffer* gBuffer = AHardwareBuffer_to_GraphicBuffer(buffer);
    GraphicBuffer* gBuffer = AHardwareBuffer_to_GraphicBuffer(buffer);
    Rect bounds;
    Rect bounds;
    if (!rect) {
    if (!rect) {
@@ -268,8 +268,76 @@ const struct native_handle* AHardwareBuffer_getNativeHandle(


namespace android {
namespace android {


// A 1:1 mapping of AHardwaqreBuffer bitmasks to gralloc1 bitmasks.
struct UsageMaskMapping {
    uint64_t hardwareBufferMask;
    uint64_t grallocMask;
};

static constexpr UsageMaskMapping kUsage0ProducerMapping[] = {
    { AHARDWAREBUFFER_USAGE0_CPU_WRITE, GRALLOC1_PRODUCER_USAGE_CPU_WRITE },
    { AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN, GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN },
    { AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT, GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET },
    { AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT, GRALLOC1_PRODUCER_USAGE_PROTECTED },
    { AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA, GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA },
};

static constexpr UsageMaskMapping kUsage1ProducerMapping[] = {
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_0, GRALLOC1_PRODUCER_USAGE_PRIVATE_0 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_1, GRALLOC1_PRODUCER_USAGE_PRIVATE_1 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_2, GRALLOC1_PRODUCER_USAGE_PRIVATE_2 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_3, GRALLOC1_PRODUCER_USAGE_PRIVATE_3 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_4, GRALLOC1_PRODUCER_USAGE_PRIVATE_4 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_5, GRALLOC1_PRODUCER_USAGE_PRIVATE_5 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_6, GRALLOC1_PRODUCER_USAGE_PRIVATE_6 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_7, GRALLOC1_PRODUCER_USAGE_PRIVATE_7 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_8, GRALLOC1_PRODUCER_USAGE_PRIVATE_8 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_9, GRALLOC1_PRODUCER_USAGE_PRIVATE_9 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_10, GRALLOC1_PRODUCER_USAGE_PRIVATE_10 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_11, GRALLOC1_PRODUCER_USAGE_PRIVATE_11 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_12, GRALLOC1_PRODUCER_USAGE_PRIVATE_12 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_13, GRALLOC1_PRODUCER_USAGE_PRIVATE_13 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_14, GRALLOC1_PRODUCER_USAGE_PRIVATE_14 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_15, GRALLOC1_PRODUCER_USAGE_PRIVATE_15 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_16, GRALLOC1_PRODUCER_USAGE_PRIVATE_16 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_17, GRALLOC1_PRODUCER_USAGE_PRIVATE_17 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_18, GRALLOC1_PRODUCER_USAGE_PRIVATE_18 },
    { AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_19, GRALLOC1_PRODUCER_USAGE_PRIVATE_19 },
};

static constexpr UsageMaskMapping kUsage0ConsumerMapping[] = {
    { AHARDWAREBUFFER_USAGE0_CPU_READ, GRALLOC1_CONSUMER_USAGE_CPU_READ },
    { AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN, GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN },
    { AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE, GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE },
    { AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER, GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER },
    { AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE, GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER },
};

static constexpr UsageMaskMapping kUsage1ConsumerMapping[] = {
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_0, GRALLOC1_CONSUMER_USAGE_PRIVATE_0 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_1, GRALLOC1_CONSUMER_USAGE_PRIVATE_1 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_2, GRALLOC1_CONSUMER_USAGE_PRIVATE_2 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_3, GRALLOC1_CONSUMER_USAGE_PRIVATE_3 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_4, GRALLOC1_CONSUMER_USAGE_PRIVATE_4 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_5, GRALLOC1_CONSUMER_USAGE_PRIVATE_5 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_6, GRALLOC1_CONSUMER_USAGE_PRIVATE_6 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_7, GRALLOC1_CONSUMER_USAGE_PRIVATE_7 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_8, GRALLOC1_CONSUMER_USAGE_PRIVATE_8 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_9, GRALLOC1_CONSUMER_USAGE_PRIVATE_9 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_10, GRALLOC1_CONSUMER_USAGE_PRIVATE_10 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_11, GRALLOC1_CONSUMER_USAGE_PRIVATE_11 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_12, GRALLOC1_CONSUMER_USAGE_PRIVATE_12 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_13, GRALLOC1_CONSUMER_USAGE_PRIVATE_13 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_14, GRALLOC1_CONSUMER_USAGE_PRIVATE_14 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_15, GRALLOC1_CONSUMER_USAGE_PRIVATE_15 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_16, GRALLOC1_CONSUMER_USAGE_PRIVATE_16 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17, GRALLOC1_CONSUMER_USAGE_PRIVATE_17 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_18, GRALLOC1_CONSUMER_USAGE_PRIVATE_18 },
    { AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_19, GRALLOC1_CONSUMER_USAGE_PRIVATE_19 },
};

static inline bool containsBits(uint64_t mask, uint64_t bitsToCheck) {
static inline bool containsBits(uint64_t mask, uint64_t bitsToCheck) {
    return (mask & bitsToCheck) == bitsToCheck;
    return (mask & bitsToCheck) == bitsToCheck && bitsToCheck;
}
}


uint32_t AHardwareBuffer_convertFromPixelFormat(uint32_t format) {
uint32_t AHardwareBuffer_convertFromPixelFormat(uint32_t format) {
@@ -300,58 +368,56 @@ uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format) {
    }
    }
}
}


void AHardwareBuffer_convertToGrallocUsageBits(uint64_t usage, uint64_t* outProducerUsage,
void AHardwareBuffer_convertToGrallocUsageBits(uint64_t* outProducerUsage,
        uint64_t* outConsumerUsage) {
    uint64_t* outConsumerUsage, uint64_t usage0, uint64_t usage1) {
    *outProducerUsage = 0;
    *outProducerUsage = 0;
    *outConsumerUsage = 0;
    *outConsumerUsage = 0;
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_CPU_READ))
    for (const UsageMaskMapping& mapping : kUsage0ProducerMapping) {
        *outConsumerUsage |= GRALLOC1_CONSUMER_USAGE_CPU_READ;
        if (containsBits(usage0, mapping.hardwareBufferMask)) {
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN))
            *outProducerUsage |= mapping.grallocMask;
        *outConsumerUsage |= GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN;
        }
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_CPU_WRITE))
    }
        *outProducerUsage |= GRALLOC1_PRODUCER_USAGE_CPU_WRITE;
    for (const UsageMaskMapping& mapping : kUsage1ProducerMapping) {
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN))
        if (containsBits(usage1, mapping.hardwareBufferMask)) {
        *outProducerUsage |= GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN;
            *outProducerUsage |= mapping.grallocMask;
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE))
        }
        *outConsumerUsage |= GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE;
    }
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT))
    for (const UsageMaskMapping& mapping : kUsage0ConsumerMapping) {
        *outProducerUsage |= GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET;
        if (containsBits(usage0, mapping.hardwareBufferMask)) {
    // Not sure what this should be.
            *outConsumerUsage |= mapping.grallocMask;
    //if (containsBits(usage0, AHARDWAREBUFFER_USAGE0_GPU_CUBEMAP)) bits |= 0;
        }
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER))
    }
        *outConsumerUsage |= GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER;
    for (const UsageMaskMapping& mapping : kUsage1ConsumerMapping) {
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE))
        if (containsBits(usage1, mapping.hardwareBufferMask)) {
        *outConsumerUsage |= GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER;
            *outConsumerUsage |= mapping.grallocMask;
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT))
        }
        *outProducerUsage |= GRALLOC1_PRODUCER_USAGE_PROTECTED;
    }
    if (containsBits(usage, AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA))
}
        *outProducerUsage |= GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA;

}
void AHardwareBuffer_convertFromGrallocUsageBits(uint64_t* outUsage0, uint64_t* outUsage1,

        uint64_t producerUsage, uint64_t consumerUsage) {
uint64_t AHardwareBuffer_convertFromGrallocUsageBits(uint64_t producerUsage, uint64_t consumerUsage) {
    *outUsage0 = 0;
    uint64_t bits = 0;
    *outUsage1 = 0;
    if (containsBits(consumerUsage, GRALLOC1_CONSUMER_USAGE_CPU_READ))
    for (const UsageMaskMapping& mapping : kUsage0ProducerMapping) {
        bits |= AHARDWAREBUFFER_USAGE0_CPU_READ;
        if (containsBits(producerUsage, mapping.grallocMask)) {
    if (containsBits(consumerUsage, GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN))
            *outUsage0 |= mapping.hardwareBufferMask;
        bits |= AHARDWAREBUFFER_USAGE0_CPU_READ_OFTEN;
        }
    if (containsBits(producerUsage, GRALLOC1_PRODUCER_USAGE_CPU_WRITE))
    }
        bits |= AHARDWAREBUFFER_USAGE0_CPU_WRITE;
    for (const UsageMaskMapping& mapping : kUsage1ProducerMapping) {
    if (containsBits(producerUsage, GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN))
        if (containsBits(producerUsage, mapping.grallocMask)) {
        bits |= AHARDWAREBUFFER_USAGE0_CPU_WRITE_OFTEN;
            *outUsage1 |= mapping.hardwareBufferMask;
    if (containsBits(consumerUsage, GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE))
        }
        bits |= AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE;
    }
    if (containsBits(producerUsage, GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET))
    for (const UsageMaskMapping& mapping : kUsage0ConsumerMapping) {
        bits |= AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT;
        if (containsBits(consumerUsage, mapping.grallocMask)) {
    if (containsBits(consumerUsage, GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER))
            *outUsage0 |= mapping.hardwareBufferMask;
        bits |= AHARDWAREBUFFER_USAGE0_GPU_DATA_BUFFER;
        }
    if (containsBits(consumerUsage, GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER))
    }
        bits |= AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE;
    for (const UsageMaskMapping& mapping : kUsage1ConsumerMapping) {
    if (containsBits(producerUsage, GRALLOC1_PRODUCER_USAGE_PROTECTED))
        if (containsBits(consumerUsage, mapping.grallocMask)) {
        bits |= AHARDWAREBUFFER_USAGE0_PROTECTED_CONTENT;
            *outUsage1 |= mapping.hardwareBufferMask;
    if (containsBits(producerUsage, GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA))
        }
        bits |= AHARDWAREBUFFER_USAGE0_SENSOR_DIRECT_DATA;
    }

    return bits;
}
}


const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer) {
const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer) {
+3 −1
Original line number Original line Diff line number Diff line
@@ -13,7 +13,7 @@
// limitations under the License.
// limitations under the License.


ndk_headers {
ndk_headers {
    name: "libnativewindwow_headers",
    name: "libnativewindow_headers",
    from: "include/android",
    from: "include/android",
    to: "android",
    to: "android",
    srcs: ["include/android/*.h"],
    srcs: ["include/android/*.h"],
@@ -48,3 +48,5 @@ cc_library {
        "libarect",
        "libarect",
    ],
    ],
}
}

subdirs = ["tests"]
+45 −5
Original line number Original line Diff line number Diff line
@@ -97,10 +97,6 @@ enum {
    AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE      = 1ULL << 10,
    AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE      = 1ULL << 10,
    /* The buffer will be written to by the GPU */
    /* The buffer will be written to by the GPU */
    AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT       = 1ULL << 11,
    AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT       = 1ULL << 11,
    /* The buffer will be read from and written to by the GPU */
    AHARDWAREBUFFER_USAGE0_GPU_STORAGE_IMAGE      =
            AHARDWAREBUFFER_USAGE0_GPU_SAMPLED_IMAGE |
            AHARDWAREBUFFER_USAGE0_GPU_COLOR_OUTPUT,
    /* The buffer will be used as a cubemap texture */
    /* The buffer will be used as a cubemap texture */
    AHARDWAREBUFFER_USAGE0_GPU_CUBEMAP            = 1ULL << 13,
    AHARDWAREBUFFER_USAGE0_GPU_CUBEMAP            = 1ULL << 13,
    /* The buffer will be used as a shader storage or uniform buffer object*/
    /* The buffer will be used as a shader storage or uniform buffer object*/
@@ -113,13 +109,57 @@ enum {
    AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE           = 1ULL << 21,
    AHARDWAREBUFFER_USAGE0_VIDEO_ENCODE           = 1ULL << 21,
};
};


/* These flags are intended only for use by device-specific graphics drivers. */
enum {
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_19 = 1ULL << 24,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_19 = 1ULL << 25,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_18 = 1ULL << 26,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_18 = 1ULL << 27,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_17 = 1ULL << 28,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_17 = 1ULL << 29,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_16 = 1ULL << 30,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_16 = 1ULL << 31,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_15 = 1ULL << 32,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_15 = 1ULL << 33,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_14 = 1ULL << 34,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_14 = 1ULL << 35,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_13 = 1ULL << 36,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_13 = 1ULL << 37,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_12 = 1ULL << 38,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_12 = 1ULL << 39,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_11 = 1ULL << 40,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_11 = 1ULL << 41,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_10 = 1ULL << 42,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_10 = 1ULL << 43,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_9 = 1ULL << 44,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_9 = 1ULL << 45,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_8 = 1ULL << 46,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_8 = 1ULL << 47,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_7 = 1ULL << 48,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_7 = 1ULL << 49,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_6 = 1ULL << 50,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_6 = 1ULL << 51,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_5 = 1ULL << 52,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_5 = 1ULL << 53,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_4 = 1ULL << 54,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_4 = 1ULL << 55,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_3 = 1ULL << 56,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_3 = 1ULL << 57,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_2 = 1ULL << 58,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_2 = 1ULL << 59,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_1 = 1ULL << 60,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_1 = 1ULL << 61,
    AHARDWAREBUFFER_USAGE1_CONSUMER_PRIVATE_0 = 1ULL << 62,
    AHARDWAREBUFFER_USAGE1_PRODUCER_PRIVATE_0 = 1ULL << 63,
};

typedef struct AHardwareBuffer_Desc {
typedef struct AHardwareBuffer_Desc {
    uint32_t    width;
    uint32_t    width;
    uint32_t    height;
    uint32_t    height;
    uint32_t    layers;
    uint32_t    layers;
    uint32_t    format;     // One of AHARDWAREBUFFER_FORMAT_*
    uint64_t    usage0;     // Combination of AHARDWAREBUFFER_USAGE0_*
    uint64_t    usage0;     // Combination of AHARDWAREBUFFER_USAGE0_*
    uint64_t    usage1;     // Initialize to zero, reserved for future use
    uint64_t    usage1;     // Initialize to zero, reserved for future use
    uint32_t    format;     // One of AHARDWAREBUFFER_FORMAT_*
} AHardwareBuffer_Desc;
} AHardwareBuffer_Desc;


typedef struct AHardwareBuffer AHardwareBuffer;
typedef struct AHardwareBuffer AHardwareBuffer;
+8 −9
Original line number Original line Diff line number Diff line
@@ -18,11 +18,11 @@
#define ANDROID_PRIVATE_NATIVE_AHARDWARE_BUFFER_HELPERS_H
#define ANDROID_PRIVATE_NATIVE_AHARDWARE_BUFFER_HELPERS_H


/*
/*
 * This file contains utility functions related to AHardwareBuffer, mostly to convert
 * This file contains utility functions related to AHardwareBuffer, mostly to
 * to/from HAL formats.
 * convert to/from HAL formats.
 *
 *
 * These are PRIVATE methods, so this file can NEVER appear in a public NDK header.
 * These are PRIVATE methods, so this file can NEVER appear in a public NDK
 * They are used by higher level libraries such as core/jni.
 * header. They are used by higher level libraries such as core/jni.
 */
 */


#include <stdint.h>
#include <stdint.h>
@@ -35,13 +35,12 @@ uint32_t AHardwareBuffer_convertFromPixelFormat(uint32_t format);


uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format);
uint32_t AHardwareBuffer_convertToPixelFormat(uint32_t format);


void AHardwareBuffer_convertToGrallocUsageBits(uint64_t usage,
void AHardwareBuffer_convertToGrallocUsageBits(uint64_t* outProducerUsage,
        uint64_t* outProducerUsage, uint64_t* outConsumerUsage);
    uint64_t* outConsumerUsage, uint64_t usage0, uint64_t usage1);


uint64_t AHardwareBuffer_convertFromGrallocUsageBits(
void AHardwareBuffer_convertFromGrallocUsageBits(uint64_t* outUsage0, uint64_t* outUsage1,
    uint64_t producerUsage, uint64_t consumerUsage);
    uint64_t producerUsage, uint64_t consumerUsage);



class GraphicBuffer;
class GraphicBuffer;
const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer);
const GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(const AHardwareBuffer* buffer);
GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(AHardwareBuffer* buffer);
GraphicBuffer* AHardwareBuffer_to_GraphicBuffer(AHardwareBuffer* buffer);
+186 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading