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 "QtiGralloc.h"
|
||||||
|
|
||||||
#include <log/log.h>
|
#include <log/log.h>
|
||||||
|
#include "color_extensions.h"
|
||||||
|
|
||||||
namespace qtigralloc {
|
namespace qtigralloc {
|
||||||
|
|
||||||
using android::hardware::graphics::mapper::V4_0::IMapper;
|
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;
|
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) {
|
MetadataType getMetadataType(uint32_t in) {
|
||||||
switch (in) {
|
switch (in) {
|
||||||
case QTI_VT_TIMESTAMP:
|
case QTI_VT_TIMESTAMP:
|
||||||
@@ -272,6 +306,8 @@ MetadataType getMetadataType(uint32_t in) {
|
|||||||
return MetadataType_YuvPlaneInfo;
|
return MetadataType_YuvPlaneInfo;
|
||||||
case QTI_TIMED_RENDERING:
|
case QTI_TIMED_RENDERING:
|
||||||
return MetadataType_TimedRendering;
|
return MetadataType_TimedRendering;
|
||||||
|
case QTI_CUSTOM_CONTENT_METADATA:
|
||||||
|
return MetadataType_CustomContentMetadata;
|
||||||
default:
|
default:
|
||||||
return MetadataType_Invalid;
|
return MetadataType_Invalid;
|
||||||
}
|
}
|
||||||
@@ -404,6 +440,9 @@ Error get(void *buffer, uint32_t type, void *param) {
|
|||||||
err = static_cast<Error>(android::gralloc4::decodeUint32(
|
err = static_cast<Error>(android::gralloc4::decodeUint32(
|
||||||
qtigralloc::MetadataType_TimedRendering, bytestream, reinterpret_cast<uint32_t *>(param)));
|
qtigralloc::MetadataType_TimedRendering, bytestream, reinterpret_cast<uint32_t *>(param)));
|
||||||
break;
|
break;
|
||||||
|
case QTI_CUSTOM_CONTENT_METADATA:
|
||||||
|
err = decodeCustomContentMetadata(bytestream, param);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
param = nullptr;
|
param = nullptr;
|
||||||
return Error::UNSUPPORTED;
|
return Error::UNSUPPORTED;
|
||||||
@@ -484,6 +523,9 @@ Error set(void *buffer, uint32_t type, void *param) {
|
|||||||
android::gralloc4::encodeUint32(qtigralloc::MetadataType_TimedRendering,
|
android::gralloc4::encodeUint32(qtigralloc::MetadataType_TimedRendering,
|
||||||
*reinterpret_cast<uint32_t *>(param), &bytestream));
|
*reinterpret_cast<uint32_t *>(param), &bytestream));
|
||||||
break;
|
break;
|
||||||
|
case QTI_CUSTOM_CONTENT_METADATA:
|
||||||
|
err = encodeCustomContentMetadata(param, &bytestream);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
param = nullptr;
|
param = nullptr;
|
||||||
return Error::UNSUPPORTED;
|
return Error::UNSUPPORTED;
|
||||||
|
|||||||
Reference in New Issue
Block a user