gralloc: Add handling for custom content metadata
Update QtiGralloc to support getting and setting custom content metadata. Change-Id: I6f79eb0d39a82668ef7fb99e30669eb367ef00b1
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
da003a2f1e
commit
5b94666d26
@@ -30,6 +30,8 @@
|
||||
#include "QtiGralloc.h"
|
||||
|
||||
#include <log/log.h>
|
||||
#include "color_extensions.h"
|
||||
|
||||
namespace qtigralloc {
|
||||
|
||||
using android::hardware::graphics::mapper::V4_0::IMapper;
|
||||
@@ -216,6 +218,38 @@ Error encodeYUVPlaneInfoMetadata(qti_ycbcr *in, hidl_vec<uint8_t> *out) {
|
||||
return Error::NONE;
|
||||
}
|
||||
|
||||
Error decodeCustomContentMetadata(hidl_vec<uint8_t> &in, void *out) {
|
||||
static size_t target_size = sizeof(CustomContentMetadata);
|
||||
|
||||
if (in.size() != target_size || !out) {
|
||||
return Error::BAD_VALUE;
|
||||
}
|
||||
|
||||
CustomContentMetadata *c_md_in = reinterpret_cast<CustomContentMetadata *>(in.data());
|
||||
CustomContentMetadata *c_md_out = reinterpret_cast<CustomContentMetadata *>(out);
|
||||
|
||||
if (c_md_in->size > CUSTOM_METADATA_SIZE_BYTES) {
|
||||
return Error::BAD_VALUE;
|
||||
}
|
||||
|
||||
c_md_out->size = c_md_in->size;
|
||||
memcpy(c_md_out->metadataPayload, c_md_in->metadataPayload, c_md_in->size);
|
||||
return Error::NONE;
|
||||
}
|
||||
|
||||
Error encodeCustomContentMetadata(const void *in, hidl_vec<uint8_t> *out) {
|
||||
static size_t target_size = sizeof(CustomContentMetadata);
|
||||
|
||||
if (!in || !out) {
|
||||
return Error::BAD_VALUE;
|
||||
}
|
||||
|
||||
out->resize(target_size);
|
||||
|
||||
memcpy(out->data(), in, target_size);
|
||||
return Error::NONE;
|
||||
}
|
||||
|
||||
MetadataType getMetadataType(uint32_t in) {
|
||||
switch (in) {
|
||||
case QTI_VT_TIMESTAMP:
|
||||
@@ -272,6 +306,8 @@ MetadataType getMetadataType(uint32_t in) {
|
||||
return MetadataType_YuvPlaneInfo;
|
||||
case QTI_TIMED_RENDERING:
|
||||
return MetadataType_TimedRendering;
|
||||
case QTI_CUSTOM_CONTENT_METADATA:
|
||||
return MetadataType_CustomContentMetadata;
|
||||
default:
|
||||
return MetadataType_Invalid;
|
||||
}
|
||||
@@ -404,6 +440,9 @@ Error get(void *buffer, uint32_t type, void *param) {
|
||||
err = static_cast<Error>(android::gralloc4::decodeUint32(
|
||||
qtigralloc::MetadataType_TimedRendering, bytestream, reinterpret_cast<uint32_t *>(param)));
|
||||
break;
|
||||
case QTI_CUSTOM_CONTENT_METADATA:
|
||||
err = decodeCustomContentMetadata(bytestream, param);
|
||||
break;
|
||||
default:
|
||||
param = nullptr;
|
||||
return Error::UNSUPPORTED;
|
||||
@@ -484,6 +523,9 @@ Error set(void *buffer, uint32_t type, void *param) {
|
||||
android::gralloc4::encodeUint32(qtigralloc::MetadataType_TimedRendering,
|
||||
*reinterpret_cast<uint32_t *>(param), &bytestream));
|
||||
break;
|
||||
case QTI_CUSTOM_CONTENT_METADATA:
|
||||
err = encodeCustomContentMetadata(param, &bytestream);
|
||||
break;
|
||||
default:
|
||||
param = nullptr;
|
||||
return Error::UNSUPPORTED;
|
||||
|
||||
Reference in New Issue
Block a user