commonsys-intf: display: add CVP metadata support
Add set and get CVP (Computer Vision Program) metadata
interface for producer (camera) to set and consumer
(video) to get it.
Change-Id: Ib3c5b3a9bcf8a6a56ec265d6ccbee2fd4b28aca8
diff --git a/libqdmetadata/qdMetaData.cpp b/libqdmetadata/qdMetaData.cpp
index 4635540..3cbafb7 100644
--- a/libqdmetadata/qdMetaData.cpp
+++ b/libqdmetadata/qdMetaData.cpp
@@ -140,6 +140,20 @@
sizeof(data->graphics_metadata.data));
break;
}
+ case SET_CVP_METADATA: {
+ struct CVPMetadata *cvpMetadata = (struct CVPMetadata *)param;
+ if (cvpMetadata->size < CVP_METADATA_SIZE) {
+ data->cvpMetadata.size = cvpMetadata->size;
+ memcpy(data->cvpMetadata.payload, cvpMetadata->payload,
+ cvpMetadata->size);
+ } else {
+ data->operation &= ~(paramType);
+ ALOGE("%s: cvp metadata length %d is more than max size %d",
+ __func__, cvpMetadata->size, CVP_METADATA_SIZE);
+ return -EINVAL;
+ }
+ break;
+ }
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -167,6 +181,9 @@
case SET_VIDEO_PERF_MODE:
data->isVideoPerfMode = 0;
break;
+ case SET_CVP_METADATA:
+ data->cvpMetadata.size = 0;
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -287,6 +304,18 @@
ret = 0;
}
break;
+ case GET_CVP_METADATA:
+ if (data->operation & SET_CVP_METADATA) {
+ struct CVPMetadata *cvpMetadata = (struct CVPMetadata *)param;
+ cvpMetadata->size = 0;
+ if (data->cvpMetadata.size < CVP_METADATA_SIZE) {
+ cvpMetadata->size = data->cvpMetadata.size;
+ memcpy(cvpMetadata->payload, data->cvpMetadata.payload,
+ data->cvpMetadata.size);
+ ret = 0;
+ }
+ }
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
diff --git a/libqdmetadata/qdMetaData.h b/libqdmetadata/qdMetaData.h
index ad2a2a9..b98384f 100644
--- a/libqdmetadata/qdMetaData.h
+++ b/libqdmetadata/qdMetaData.h
@@ -38,6 +38,7 @@
#define MAX_UBWC_STATS_LENGTH 32
#define GRAPHICS_METADATA_SIZE 4096
+#define CVP_METADATA_SIZE 1024
enum ColorSpace_t{
ITU_R_601,
@@ -105,6 +106,11 @@
uint32_t data[GRAPHICS_METADATA_SIZE];
} GraphicsMetadata;
+typedef struct CVPMetadata {
+ uint32_t size; /* payload size in bytes */
+ uint8_t payload[CVP_METADATA_SIZE];
+} CVPMetadata;
+
struct MetaData_t {
int32_t operation;
int32_t interlaced;
@@ -148,6 +154,11 @@
/* Populated and used by adreno during buffer size calculation.
* Set only for RGB formats. */
GraphicsMetadata graphics_metadata;
+ /*
+ * Producer (camera) will set cvp metadata and consumer (video) will
+ * use it. The format of metadata is known to producer and consumer.
+ */
+ CVPMetadata cvpMetadata;
};
enum DispParamType {
@@ -167,6 +178,7 @@
SET_IGC = 0x2000,
SET_SINGLE_BUFFER_MODE = 0x4000,
SET_S3D_COMP = 0x8000,
+ SET_CVP_METADATA = 0x00010000,
};
enum DispFetchParamType {
@@ -186,6 +198,7 @@
GET_IGC = 0x2000,
GET_SINGLE_BUFFER_MODE = 0x4000,
GET_S3D_COMP = 0x8000,
+ GET_CVP_METADATA = 0x00010000,
};
struct private_handle_t;