gralloc: Use only 'data' member in GraphicsMetadata
- In gralloc3, first member 'size' in GraphicsMetadata struct was never unused in call to GetGraphicsMetadata. Get() call always returned 'data' member in GraphicsMetadata structure. - Gralloc4 implementation introduced new encode/decode functions for GraphicsMetadata which are simultaneously used during set/get calls to encode/decode metadata for caller and during storing/ retrieving it from Metadata_t struct. Get() call returned GraphicsMetadata struct pointing to its first member 'size' instead of second member 'data'. - Implement function to encode/decode GraphicsMetadataRaw to translate the metadata before calling mapper set/get. - Update encodeGraphicsMetadata/decodeGraphicsMetadata functions to store/retrieve only 'data' member in GraphicsMetadata structure. CRs-fixed: 2682060 Change-Id: I60c3dd2029ba21aa481dad35f9b4738b2d78957a
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
65a9ce9dae
commit
c74a80eae0
@@ -55,20 +55,43 @@ Error encodeColorMetadata(ColorMetaData &in, hidl_vec<uint8_t> *out) {
|
|||||||
return Error::NONE;
|
return Error::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// decode the raw graphics metadata from bytestream and store it in 'data' member of
|
||||||
|
// GraphicsMetadata struct during mapper->set call, 'size' member is unused.
|
||||||
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out) {
|
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out) {
|
||||||
if (!in.size() || !out) {
|
if (!in.size() || !out) {
|
||||||
return Error::BAD_VALUE;
|
return Error::BAD_VALUE;
|
||||||
}
|
}
|
||||||
memcpy(out, in.data(), sizeof(GraphicsMetadata));
|
memcpy(&(out->data), in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
return Error::NONE;
|
return Error::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// encode only 'data' member of GraphicsMetadata struct for retrieval of
|
||||||
|
// graphics metadata during mapper->get call
|
||||||
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out) {
|
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out) {
|
||||||
if (!out) {
|
if (!out) {
|
||||||
return Error::BAD_VALUE;
|
return Error::BAD_VALUE;
|
||||||
}
|
}
|
||||||
out->resize(sizeof(GraphicsMetadata));
|
out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
memcpy(out->data(), &in, sizeof(GraphicsMetadata));
|
memcpy(out->data(), &(in.data), GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
|
return Error::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// decode the raw graphics metadata from bytestream before presenting it to caller
|
||||||
|
Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out) {
|
||||||
|
if (!in.size() || !out) {
|
||||||
|
return Error::BAD_VALUE;
|
||||||
|
}
|
||||||
|
memcpy(out, in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
|
return Error::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// encode the raw graphics metadata in bytestream before calling mapper->set
|
||||||
|
Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out) {
|
||||||
|
if (!in || !out) {
|
||||||
|
return Error::BAD_VALUE;
|
||||||
|
}
|
||||||
|
out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
|
memcpy(out->data(), in, GRAPHICS_METADATA_SIZE_IN_BYTES);
|
||||||
return Error::NONE;
|
return Error::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +234,7 @@ Error get(void *buffer, uint32_t type, void *param) {
|
|||||||
err = decodeColorMetadata(bytestream, (ColorMetaData *)param);
|
err = decodeColorMetadata(bytestream, (ColorMetaData *)param);
|
||||||
break;
|
break;
|
||||||
case QTI_GRAPHICS_METADATA:
|
case QTI_GRAPHICS_METADATA:
|
||||||
err = decodeGraphicsMetadata(bytestream, (GraphicsMetadata *)param);
|
err = decodeGraphicsMetadataRaw(bytestream, param);
|
||||||
break;
|
break;
|
||||||
case QTI_UBWC_CR_STATS_INFO:
|
case QTI_UBWC_CR_STATS_INFO:
|
||||||
err = decodeUBWCStats(bytestream, (UBWCStats *)param);
|
err = decodeUBWCStats(bytestream, (UBWCStats *)param);
|
||||||
@@ -289,7 +312,7 @@ Error set(void *buffer, uint32_t type, void *param) {
|
|||||||
err = encodeColorMetadata(*(ColorMetaData *)param, &bytestream);
|
err = encodeColorMetadata(*(ColorMetaData *)param, &bytestream);
|
||||||
break;
|
break;
|
||||||
case QTI_GRAPHICS_METADATA:
|
case QTI_GRAPHICS_METADATA:
|
||||||
err = encodeGraphicsMetadata(*(GraphicsMetadata *)param, &bytestream);
|
err = encodeGraphicsMetadataRaw(param, &bytestream);
|
||||||
break;
|
break;
|
||||||
case QTI_UBWC_CR_STATS_INFO:
|
case QTI_UBWC_CR_STATS_INFO:
|
||||||
err = encodeUBWCStats((UBWCStats *)param, &bytestream);
|
err = encodeUBWCStats((UBWCStats *)param, &bytestream);
|
||||||
|
|||||||
@@ -119,6 +119,8 @@ Error decodeColorMetadata(hidl_vec<uint8_t> &in, ColorMetaData *out);
|
|||||||
Error encodeColorMetadata(ColorMetaData &in, hidl_vec<uint8_t> *out);
|
Error encodeColorMetadata(ColorMetaData &in, hidl_vec<uint8_t> *out);
|
||||||
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out);
|
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out);
|
||||||
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out);
|
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out);
|
||||||
|
Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out);
|
||||||
|
Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out);
|
||||||
Error decodeUBWCStats(hidl_vec<uint8_t> &in, UBWCStats *out);
|
Error decodeUBWCStats(hidl_vec<uint8_t> &in, UBWCStats *out);
|
||||||
Error encodeUBWCStats(UBWCStats *in, hidl_vec<uint8_t> *out);
|
Error encodeUBWCStats(UBWCStats *in, hidl_vec<uint8_t> *out);
|
||||||
Error decodeCVPMetadata(hidl_vec<uint8_t> &in, CVPMetadata *out);
|
Error decodeCVPMetadata(hidl_vec<uint8_t> &in, CVPMetadata *out);
|
||||||
|
|||||||
@@ -64,9 +64,10 @@
|
|||||||
|
|
||||||
// GRAPHICS_METADATA
|
// GRAPHICS_METADATA
|
||||||
#define GRAPHICS_METADATA_SIZE 4096
|
#define GRAPHICS_METADATA_SIZE 4096
|
||||||
|
#define GRAPHICS_METADATA_SIZE_IN_BYTES (GRAPHICS_METADATA_SIZE * sizeof(uint32_t))
|
||||||
typedef struct GraphicsMetadata {
|
typedef struct GraphicsMetadata {
|
||||||
uint32_t size;
|
uint32_t size; //unused in Gralloc4, in Gralloc3 it was never returned on Get()
|
||||||
uint32_t data[GRAPHICS_METADATA_SIZE];
|
uint32_t data[GRAPHICS_METADATA_SIZE]; //Clients must set only raw data with Gralloc4
|
||||||
} GraphicsMetadata;
|
} GraphicsMetadata;
|
||||||
|
|
||||||
// UBWC_CR_STATS_INFO
|
// UBWC_CR_STATS_INFO
|
||||||
|
|||||||
Reference in New Issue
Block a user