Merge "qdmetadata: Add support for video histogram stats"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
e47f03afc9
@@ -161,7 +161,26 @@ int setMetaDataVa(MetaData_t *data, DispParamType paramType,
|
|||||||
}
|
}
|
||||||
break;
|
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);
|
ALOGE("Unknown paramType %d", paramType);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -191,6 +210,9 @@ int clearMetaDataVa(MetaData_t *data, DispParamType paramType) {
|
|||||||
case SET_CVP_METADATA:
|
case SET_CVP_METADATA:
|
||||||
data->cvpMetadata.size = 0;
|
data->cvpMetadata.size = 0;
|
||||||
break;
|
break;
|
||||||
|
case SET_VIDEO_HISTOGRAM_STATS:
|
||||||
|
data->video_histogram_stats.stat_len = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ALOGE("Unknown paramType %d", paramType);
|
ALOGE("Unknown paramType %d", paramType);
|
||||||
break;
|
break;
|
||||||
@@ -323,6 +345,23 @@ int getMetaDataVa(MetaData_t *data, DispFetchParamType paramType,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
ALOGE("Unknown paramType %d", paramType);
|
ALOGE("Unknown paramType %d", paramType);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -106,6 +106,20 @@ typedef struct GraphicsMetadata {
|
|||||||
uint32_t data[GRAPHICS_METADATA_SIZE];
|
uint32_t data[GRAPHICS_METADATA_SIZE];
|
||||||
} GraphicsMetadata;
|
} 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 {
|
typedef struct CVPMetadata {
|
||||||
uint32_t size; /* payload size in bytes */
|
uint32_t size; /* payload size in bytes */
|
||||||
uint8_t payload[CVP_METADATA_SIZE];
|
uint8_t payload[CVP_METADATA_SIZE];
|
||||||
@@ -154,6 +168,8 @@ struct MetaData_t {
|
|||||||
/* Populated and used by adreno during buffer size calculation.
|
/* Populated and used by adreno during buffer size calculation.
|
||||||
* Set only for RGB formats. */
|
* Set only for RGB formats. */
|
||||||
GraphicsMetadata graphics_metadata;
|
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
|
* Producer (camera) will set cvp metadata and consumer (video) will
|
||||||
* use it. The format of metadata is known to producer and consumer.
|
* use it. The format of metadata is known to producer and consumer.
|
||||||
@@ -179,6 +195,7 @@ enum DispParamType {
|
|||||||
SET_SINGLE_BUFFER_MODE = 0x4000,
|
SET_SINGLE_BUFFER_MODE = 0x4000,
|
||||||
SET_S3D_COMP = 0x8000,
|
SET_S3D_COMP = 0x8000,
|
||||||
SET_CVP_METADATA = 0x00010000,
|
SET_CVP_METADATA = 0x00010000,
|
||||||
|
SET_VIDEO_HISTOGRAM_STATS = 0x00020000
|
||||||
};
|
};
|
||||||
|
|
||||||
enum DispFetchParamType {
|
enum DispFetchParamType {
|
||||||
@@ -199,6 +216,7 @@ enum DispFetchParamType {
|
|||||||
GET_SINGLE_BUFFER_MODE = 0x4000,
|
GET_SINGLE_BUFFER_MODE = 0x4000,
|
||||||
GET_S3D_COMP = 0x8000,
|
GET_S3D_COMP = 0x8000,
|
||||||
GET_CVP_METADATA = 0x00010000,
|
GET_CVP_METADATA = 0x00010000,
|
||||||
|
GET_VIDEO_HISTOGRAM_STATS = 0x00020000
|
||||||
};
|
};
|
||||||
|
|
||||||
struct private_handle_t;
|
struct private_handle_t;
|
||||||
|
|||||||
Reference in New Issue
Block a user