Merge "qdmetadata: Add support for video histogram stats"

This commit is contained in:
qctecmdr
2019-04-22 02:13:11 -07:00
committed by Gerrit - the friendly Code Review server
2 changed files with 58 additions and 1 deletions

View File

@@ -161,7 +161,26 @@ int setMetaDataVa(MetaData_t *data, DispParamType paramType,
}
break;
}
default:
case SET_VIDEO_HISTOGRAM_STATS: {
struct VideoHistogramMetadata *vidstats = (struct VideoHistogramMetadata *)param;
if (vidstats->stat_len <= VIDEO_HISTOGRAM_STATS_SIZE) {
memcpy(data->video_histogram_stats.stats_info,
vidstats->stats_info, VIDEO_HISTOGRAM_STATS_SIZE);
data->video_histogram_stats.stat_len = vidstats->stat_len;
data->video_histogram_stats.frame_type = vidstats->frame_type;
data->video_histogram_stats.display_width = vidstats->display_width;
data->video_histogram_stats.display_height = vidstats->display_height;
data->video_histogram_stats.decode_width = vidstats->decode_width;
data->video_histogram_stats.decode_height = vidstats->decode_height;
} else {
data->operation &= ~(paramType);
ALOGE("%s: video stats length %u is more than max size %u",
__func__, vidstats->stat_len, VIDEO_HISTOGRAM_STATS_SIZE);
return -EINVAL;
}
break;
}
default:
ALOGE("Unknown paramType %d", paramType);
break;
}
@@ -191,6 +210,9 @@ int clearMetaDataVa(MetaData_t *data, DispParamType paramType) {
case SET_CVP_METADATA:
data->cvpMetadata.size = 0;
break;
case SET_VIDEO_HISTOGRAM_STATS:
data->video_histogram_stats.stat_len = 0;
break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -323,6 +345,23 @@ int getMetaDataVa(MetaData_t *data, DispFetchParamType paramType,
}
}
break;
case GET_VIDEO_HISTOGRAM_STATS:
if (data->operation & SET_VIDEO_HISTOGRAM_STATS) {
struct VideoHistogramMetadata *vidstats = (struct VideoHistogramMetadata *)param;
vidstats->stat_len = 0;
if (data->video_histogram_stats.stat_len <= VIDEO_HISTOGRAM_STATS_SIZE) {
memcpy(vidstats->stats_info,
data->video_histogram_stats.stats_info, VIDEO_HISTOGRAM_STATS_SIZE);
vidstats->stat_len = data->video_histogram_stats.stat_len;
vidstats->frame_type = data->video_histogram_stats.frame_type;
vidstats->display_width = data->video_histogram_stats.display_width;
vidstats->display_height = data->video_histogram_stats.display_height;
vidstats->decode_width = data->video_histogram_stats.decode_width;
vidstats->decode_height = data->video_histogram_stats.decode_height;
ret = 0;
}
}
break;
default:
ALOGE("Unknown paramType %d", paramType);
break;

View File

@@ -106,6 +106,20 @@ typedef struct GraphicsMetadata {
uint32_t data[GRAPHICS_METADATA_SIZE];
} GraphicsMetadata;
#define VIDEO_HISTOGRAM_STATS_SIZE (4 * 1024)
/* Frame type bit mask */
#define QD_SYNC_FRAME (0x1 << 0)
struct VideoHistogramMetadata {
uint32_t stats_info[1024]; /* video stats payload */
uint32_t stat_len; /* Payload size in bytes */
uint32_t frame_type; /* bit mask to indicate frame type */
uint32_t display_width;
uint32_t display_height;
uint32_t decode_width;
uint32_t decode_height;
uint32_t reserved[12];
};
typedef struct CVPMetadata {
uint32_t size; /* payload size in bytes */
uint8_t payload[CVP_METADATA_SIZE];
@@ -154,6 +168,8 @@ struct MetaData_t {
/* Populated and used by adreno during buffer size calculation.
* Set only for RGB formats. */
GraphicsMetadata graphics_metadata;
/* Video hisogram stats populated by video decoder */
struct VideoHistogramMetadata video_histogram_stats;
/*
* Producer (camera) will set cvp metadata and consumer (video) will
* use it. The format of metadata is known to producer and consumer.
@@ -179,6 +195,7 @@ enum DispParamType {
SET_SINGLE_BUFFER_MODE = 0x4000,
SET_S3D_COMP = 0x8000,
SET_CVP_METADATA = 0x00010000,
SET_VIDEO_HISTOGRAM_STATS = 0x00020000
};
enum DispFetchParamType {
@@ -199,6 +216,7 @@ enum DispFetchParamType {
GET_SINGLE_BUFFER_MODE = 0x4000,
GET_S3D_COMP = 0x8000,
GET_CVP_METADATA = 0x00010000,
GET_VIDEO_HISTOGRAM_STATS = 0x00020000
};
struct private_handle_t;